Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
177 commits
Select commit Hold shift + click to select a range
59d3bd0
Add drugs.com mirror site (port 40015)
boyugou May 13, 2026
61bc7c2
Auto-login as alice; make login/register always succeed
boyugou May 13, 2026
122054a
Redesign all templates to match real drugs.com UI/layout
boyugou May 13, 2026
cb9ce4a
Fix my_med_list toggle form POST, conditions 0-9 duplicate, med list …
boyugou May 13, 2026
64f27c2
Massively expand drugs.com mirror: 212 drugs, 64 news, new pages and …
boyugou May 13, 2026
b600cce
Fix seed_database idempotency for byte-identical /reset
boyugou May 13, 2026
470cf67
Add drug dosage/side-effects pages, improve class/condition/drug deta…
boyugou May 13, 2026
169056d
Add drug pregnancy/interactions pages, improve homepage with health t…
boyugou May 13, 2026
4709544
Add drug reviews page, account subscriptions, improve account settings
boyugou May 13, 2026
50af02e
drugs_com: text formatting, dark mode, news search, UI improvements
boyugou May 13, 2026
672a07d
drugs_com: fix tab switching, compare drugs, sidebar bugs, drug_az route
boyugou May 13, 2026
3a38fb2
drugs_com: drug images, helpful votes, search improvements, side effe…
boyugou May 13, 2026
6206f96
drugs_com: prices, related drugs, pill identifier, warnings, news art…
boyugou May 13, 2026
c747821
drugs_com: autocomplete, utility bar, recently viewed, homepage impro…
boyugou May 13, 2026
1dec011
drugs_com: symptom checker, drug class sorting, pregnancy/dosage impr…
boyugou May 13, 2026
d7acebb
drugs_com: FAQ accordion, login/register polish, account settings, Do…
boyugou May 13, 2026
4aa4020
drugs_com: pro calculators, FDA alerts sidebar, related news, symptom…
boyugou May 13, 2026
8e39fea
drugs_com: condition route alias, review delete, med list notes editing
boyugou May 13, 2026
4f7c9d6
drugs_com: star ratings display, prominent med list CTA, Rx/OTC badge…
boyugou May 13, 2026
dcd35e2
drugs_com: drug class descriptions, conditions grouped A-Z, A-Z lette…
boyugou May 13, 2026
4ccfb72
drugs_com: homepage browse tabs, search related suggestions, class de…
boyugou May 13, 2026
c2890d9
drugs_com: what-to-avoid section, before-taking improvements, avoid_i…
boyugou May 13, 2026
d5838fc
drugs_com: add 16 more news articles (FDA alerts, approvals, trials, …
boyugou May 13, 2026
b13386d
drugs_com: drug images page, interaction checker empty state, two-ton…
boyugou May 13, 2026
733d66c
drugs_com: print CSS, Web Share API, speech synthesis pronunciation
boyugou May 13, 2026
a644523
drugs_com: prices with quantity tiers, GoodRx coupon UI, account impr…
boyugou May 13, 2026
b33b3f1
drugs_com: drug A-Z sidebar, sitemap columns, contact form, newslette…
boyugou May 13, 2026
064fa2b
drugs_com: pro edition content, drug classes with descriptions and to…
boyugou May 13, 2026
501d5e5
drugs_com: 10-star review selector, review card improvements, char co…
boyugou May 13, 2026
6e20362
drugs_com: filter chemistry boilerplate from FDA label text, pill ide…
boyugou May 13, 2026
2ab67ab
drugs_com: per-drug interactions page, condition standard treatments …
boyugou May 13, 2026
d14d51c
drugs_com: drug header SVG, similar drugs cards, status sidebar fixes
boyugou May 13, 2026
2d7777f
drugs_com: continuous scroll drug detail, A-Z sources sections, homep…
boyugou May 13, 2026
bcfb246
drugs_com: interaction checker GET support, compare drugs detailed view
boyugou May 13, 2026
c532c0c
drugs_com: reviews page rating bars + sidebar, drug images pill ident…
boyugou May 13, 2026
5726edf
drugs_com: fix reviews page rating bar rendering
boyugou May 13, 2026
1d4c5a6
drugs_com: condition page drug-class filter, CSS polish, dark mode ad…
boyugou May 13, 2026
60e39c9
drugs_com: photorealistic pill SVGs, real NIH images, homepage health…
boyugou May 13, 2026
01c8581
drugs_com: symptom checker results, search tabs, drug detail callouts…
boyugou May 13, 2026
216825e
drugs_com: conditions filter search, drug classes popular section, do…
boyugou May 13, 2026
ad5a96b
drugs_com: fix metformin seed content, larger pill thumbnail, brand c…
boyugou May 13, 2026
a10a091
drugs_com: account page, alice med list, news badge colors, drug A-Z …
boyugou May 13, 2026
4739c90
drugs_com: fix letter-btn dark background in light mode, use flex wra…
boyugou May 13, 2026
a48abb7
drugs_com: reviewer variety, expanded news articles, drug class table…
boyugou May 13, 2026
1267c62
drugs_com: content quality, clean_desc filter, websyn 16-site fix
boyugou May 13, 2026
cd3dddc
drugs_com: pill identifier fix, CSS polish, condition descriptions
boyugou May 13, 2026
c5fff3d
drugs_com: add URL aliases, empty-stomach FAQ, pill form pre-population
boyugou May 13, 2026
4c0bfde
drugs_com: major search, UI, and layout improvements
boyugou May 13, 2026
ff79145
drugs_com: improve UI for pill identifier, compare, class, med list, …
boyugou May 13, 2026
6e49017
drugs_com: migrate all inline styles from templates to main.css
boyugou May 13, 2026
93c4967
drugs_com: remove accidentally committed runtime/scratch files
boyugou May 13, 2026
e171218
drugs_com: add pro monograph route, comma-separated interaction param…
boyugou May 13, 2026
1de7a67
drugs_com: improve news thumbnails, drug detail sidebar badges, relat…
boyugou May 14, 2026
a1495a2
drugs_com: remove runtime/scratch files from index again
boyugou May 14, 2026
cecc1d6
gitignore: add ralph-loop, site .claude/, download_pill_images.py
boyugou May 14, 2026
bc58344
drugs_com: improve content quality - before_taking overrides, dosage …
boyugou May 14, 2026
fb53ef7
drugs_com: remove runtime files from index
boyugou May 14, 2026
88b7d76
gitignore: explicitly exclude drugs_com instance/ and scraped_data/
boyugou May 14, 2026
c544204
drugs_com: fix alcohol as lifestyle substance in interaction checker
boyugou May 14, 2026
2a72dc5
drugs_com: improve nav dropdown, interaction results, conditions side…
boyugou May 14, 2026
c75c0a7
drugs_com: improve search aliases, drug detail sidebar, pro edition page
boyugou May 14, 2026
69c819f
drugs_com: richer black-box warnings, symptom checker CSS, search ali…
boyugou May 14, 2026
af47246
drugs_com: fix pill identifier GET param handling and form action URL
boyugou May 14, 2026
bb2119a
drugs_com: FDA pregnancy categories, detailed side-effects, quick-fac…
boyugou May 14, 2026
e6afe61
drugs_com: add /news/category/<category> route alias
boyugou May 14, 2026
65ab65a
drugs_com: compare page similarities/differences, popular pairs update
boyugou May 14, 2026
6b78a26
drugs_com: drug detail enhancements - pricing CTA, interaction widget…
boyugou May 14, 2026
9a22a8a
drugs_com: richer drug class pages, hero autocomplete, dosage tabs
boyugou May 14, 2026
a753c17
drugs_com: write-review page, reviews condition filter, warnings callout
boyugou May 14, 2026
b83a2c8
drugs_com: fix inline styles, update breadcrumb to 'Dosage Guide'
boyugou May 14, 2026
9406f8d
drugs_com: add 4 more ACE inhibitors to seed data (216 drugs total)
boyugou May 14, 2026
d9d039c
drugs_com: add 18 more drugs to fill sparse classes (234 drugs total)
boyugou May 14, 2026
1f78e4c
drugs_com: conditions callout chip block at top of drug detail Uses s…
boyugou May 14, 2026
64e4b8a
drugs_com: pill identifier shape/color pickers, search results improv…
boyugou May 14, 2026
36074cc
Improve drug class pages, fix ciprofloxacin content, add runtime cont…
boyugou May 14, 2026
9e3c98c
Add before_taking content overrides for 12 additional drugs
boyugou May 14, 2026
b2e331e
Add supplemental conditions and drug-condition links via seed_supplem…
boyugou May 14, 2026
6ff3478
Improve search ranking: exact and partial generic name matches boosted
boyugou May 14, 2026
273b9e3
Add extended drug class descriptions for 5 more classes
boyugou May 14, 2026
12207ba
Fix duplicate reviews and raw condition slug display in review bodies
boyugou May 14, 2026
ba78f51
Add accurate pregnancy risk categories for 60+ drugs
boyugou May 14, 2026
d6bc55e
Add rich content overrides for 7 more commonly searched drugs
boyugou May 14, 2026
94288ce
Add content overrides for 5 more commonly accessed drugs
boyugou May 14, 2026
6003296
Add content overrides for 10 more commonly accessed drugs
boyugou May 14, 2026
a37d57a
Fix pregnancy category badge to display correctly for full-text risk …
boyugou May 14, 2026
54e2f06
Add content overrides for 8 more high-traffic drugs
boyugou May 14, 2026
63b9624
Fix duplicate news category tabs on news_category pages
boyugou May 14, 2026
321206b
Add content overrides for fluoxetine, gabapentin, pregabalin, warfari…
boyugou May 14, 2026
b7c31be
Add content overrides for levofloxacin, levothyroxine, alprazolam, ox…
boyugou May 14, 2026
0651084
Add content overrides for 20 more high-traffic drugs
boyugou May 14, 2026
3dd3f8a
Add content overrides for 35 more drugs
boyugou May 14, 2026
e366c28
Add content overrides for 12 more drugs
boyugou May 14, 2026
3443f74
Add content overrides for 15 more high-traffic drugs
boyugou May 14, 2026
abbb65f
Add content overrides for 9 more drugs
boyugou May 14, 2026
1c7c837
Add content overrides for 13 more drugs
boyugou May 14, 2026
f97cdd6
Add content overrides for 10 more drugs
boyugou May 14, 2026
ee29242
Add content overrides for 11 more drugs
boyugou May 14, 2026
595e8e4
Add content overrides for 11 more drugs
boyugou May 14, 2026
e4514d4
Add content overrides for methadone, bisoprolol, chlorthalidone, inda…
boyugou May 14, 2026
2f6c4f2
Fix seed_extra_reviews gate to prevent post-reset byte-identity breakage
boyugou May 14, 2026
9205639
Fix dosage forms display for injectable, inhaled, and topical drugs
boyugou May 14, 2026
6833b52
Fix dosage forms in compare_drugs route for injectable/inhaled drugs
boyugou May 14, 2026
996a2b0
Add content overrides for 57 more drugs
boyugou May 14, 2026
0f3d938
Apply DRUG_CONTENT_OVERRIDES to dosage, side-effects, warnings sub-pages
boyugou May 14, 2026
fb518d6
Fix DRUG_CONTENT_OVERRIDES lookup for hyphenated keys; add drug-speci…
boyugou May 14, 2026
f9b83cb
Add drug-specific dosage table rows from override content
boyugou May 14, 2026
ce4ea99
Fix all 21 benchmark tasks: lisinopril Category D, amoxicillin 250 mg…
boyugou May 14, 2026
4946c2e
Remove duplicate DRUG_CONTENT_OVERRIDES keys that overrode richer ent…
boyugou May 14, 2026
c04bba2
Fix several display issues on drugs_com mirror site
boyugou May 14, 2026
adfd692
Fix FDA label artifacts in drug interactions text and clean up compar…
boyugou May 14, 2026
2425196
Fix content quality and interaction checker UX
boyugou May 14, 2026
3589de1
Suppress raw FDA structured table text from interactions section
boyugou May 14, 2026
9ab7e7c
Add ratings for all drugs, fix "drugs drugs" label, expand review see…
boyugou May 14, 2026
84c4f1c
Fix byte-identity invariant: gate supplemental seed functions
boyugou May 14, 2026
151188d
Fix I-2 pill shape to Oval and deduplicate dosage strengths list
boyugou May 14, 2026
57b17f8
Improve UI fidelity: fix interaction FAQ byline, section tabs, news p…
boyugou May 14, 2026
32826a4
Expand homepage: 11-tile feature carousel, richer right-rail, top-100…
boyugou May 14, 2026
4b32349
Fix dead placeholder links in pill identifier sidebar and register page
boyugou May 14, 2026
c28cd63
Fix form routing bugs, dosage display, and med-list fetch error handling
boyugou May 14, 2026
f38f5f8
Fix interaction checker sidebar dead links
boyugou May 14, 2026
ad15fc8
Improve UI fidelity: 3-col homepage, condition-grouped compare, simpl…
boyugou May 14, 2026
79bc998
Fix Compare Drugs nav link to use url_for
boyugou May 14, 2026
8e56283
Improve search, drug A-Z, and content quality
boyugou May 14, 2026
93b9e08
drugs_com: visual audit fixes — remove fabricated sections, align wit…
boyugou May 14, 2026
894acc2
drugs_com: simplify reviews block, remove duplicate med-list CTA
boyugou May 14, 2026
b39af9a
drugs_com: fix Jinja2 slice-after-filter syntax error in drug_detail
boyugou May 14, 2026
8f98259
drugs_com: show all FAQ items with answers, not truncated links
boyugou May 14, 2026
99b67cc
drugs_com: add J/U/X/Y drugs, fix pill shapes, tabs, trending, FAQs
boyugou May 14, 2026
e8729d4
drugs_com: style drug A-Z search form to match rest of site
boyugou May 14, 2026
3c7d0d0
drugs_com: remove duplicate popular-searches block, fix sidebar grid,…
boyugou May 14, 2026
c32cd27
drugs_com: fix page-with-sidebar layout, add /compare-drugs route alias
boyugou May 14, 2026
ecc0de0
drugs_com: add /drug-classes/<slug> route alias for drug class pages
boyugou May 14, 2026
27bf65f
drugs_com: use minmax() in detail-grid to prevent sidebar clipping
boyugou May 14, 2026
a60fa95
drugs_com: normalize hyphen/underscore slugs for condition and drug c…
boyugou May 14, 2026
abcf9cb
drugs_com: redirect brand name URLs to generic drug page
boyugou May 14, 2026
26c7cfd
drugs_com: fix ezetimibe drug class (Statins → Cholesterol absorption…
boyugou May 14, 2026
a86e579
drugs_com: optimize brand name redirect to use DB LIKE search instead…
boyugou May 14, 2026
6901a79
drugs_com: update seed DB (ezetimibe drug class fix)
boyugou May 14, 2026
6796edd
drugs_com: add section tabs to sub-pages, fix news article key takeaways
boyugou May 14, 2026
4aeeea3
drugs_com: add /<slug>/drug-interactions route alias
boyugou May 14, 2026
30b82be
drugs_com: add /pro/<slug> route alias for drug professional monograph
boyugou May 14, 2026
aafd068
feat(drugs_com): convert FAQ section to collapsible accordion
boyugou May 14, 2026
4da4791
feat(drugs_com): fix warnings page for single-paragraph boxed warning…
boyugou May 14, 2026
17ee62a
fix: FAQ answers truncated mid-sentence
boyugou May 14, 2026
75cf8fe
feat: add 5 missing drugs referenced on homepage
boyugou May 14, 2026
410e2da
fix: add .html aliases for /terms and /privacy routes
boyugou May 14, 2026
0da8a7f
Add .html URL aliases and news shortcut routes
boyugou May 14, 2026
a203b55
Add more URL aliases and fix drug detail nav tabs
boyugou May 14, 2026
e310884
Add /advertise alias and minor route completeness
boyugou May 14, 2026
656a7a4
drugs_com: add lecanemab/conditions, fix carousel overflow clipping
boyugou May 14, 2026
d57e64e
drugs_com: add write-review URL aliases
boyugou May 14, 2026
92c4f3f
drugs_com: fix password autocomplete attributes
boyugou May 14, 2026
3c4e4c0
gitignore: exclude .claude/ralph-loop.local.md from tracking
boyugou May 14, 2026
667fb64
drugs_com: add /<slug>/monograph route aliases
boyugou May 14, 2026
6d5cee9
expand seed_extra_reviews: more drugs, raise gate, recompute ratings
boyugou May 14, 2026
7b73a51
stop tracking instance_seed/drugs_com.db (goes to HuggingFace)
boyugou May 14, 2026
567568e
add more drugs to review seed list, fix tirzepatide/sumatriptan/diphe…
boyugou May 14, 2026
bf30924
fix: compare drugs autocomplete and med list Rx/OTC counts
boyugou May 14, 2026
48cd177
fix: replace datalist with JS autocomplete on interaction checker input
boyugou May 14, 2026
9ee154b
fix: deduplicate seed reviews and make seed_extra_reviews idempotent
boyugou May 14, 2026
086fb7f
fix: replace hardcoded pink SVG with render_pill macro in Drug Images…
boyugou May 14, 2026
5e59256
fix: correct canonical URLs for drug_az, pill_identifier, interaction…
boyugou May 14, 2026
8495b61
fix: correct more canonical URLs and fix More... dropdown links
boyugou May 14, 2026
70692c4
fix: add price-guide URL alias and case-insensitive news category filter
boyugou May 14, 2026
306e386
fix: prevent duplicate drug entries in interaction checker
boyugou May 14, 2026
2c21c2a
feat: comprehensive UI/UX polish and functionality additions
boyugou May 15, 2026
f753902
docs(drugs_com): add CLAUDE.md with architecture and dev guide
boyugou May 15, 2026
daad795
Merge upstream/main; reconcile 16th-site collision (drugs_com -> 40016)
boyugou Jun 25, 2026
399cb3c
fix(drugs_com): clean asset packing, task-10 FAQ, prune unused dep
boyugou Jun 25, 2026
0d2e343
chore: exclude .venv from image context; clarify drugs_com asset docs
boyugou Jun 25, 2026
d67e810
fix(drugs_com): remove answer-leak from search results
boyugou Jul 9, 2026
08f8b23
fix(drugs_com): real auth, CSRF protection, seed data-quality fixes
boyugou Jul 9, 2026
3c9d0f8
fix(drugs_com): findings from independent Codex review pass
boyugou Jul 9, 2026
965e516
fix(drugs_com): findings from 4 parallel Codex reviews (leaks, data i…
boyugou Jul 9, 2026
b2fccfa
docs(drugs_com): document current PR/asset status, auth/CSRF/leak-gua…
boyugou Jul 9, 2026
d1f096f
feat(drugs_com): add drugs.com mirror site
boyugou Jul 10, 2026
588cbab
fix(drugs_com): remove orphaned share-btn handler, document rating-ro…
boyugou Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .assets-revision
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,12 @@
# fetch_assets.sh uses the `hf download` CLI. The pin below
# is a git revision (branch name like `main`, a tag, or a specific commit
# sha). Override at runtime with the ASSETS_REVISION env var.
#
# TEMPORARY: pinned to the resolved commit from refs/pr/39 (the drugs_com.tar.gz PR discussion at
# https://huggingface.co/datasets/ChilleD/WebHarbor/discussions/39) because
# drugs_com's assets aren't on `main` yet. refs/pr/39 is a superset of
# `main` (all 16 existing tarballs, unchanged, plus drugs_com.tar.gz) so this
# is safe for every other site. Once PR 39 merges, re-pin to `main` (or the
# resulting merge commit SHA) and drop this note.
repo: ChilleD/WebHarbor
revision: 54882a6a66a17a3e43455057e7c9e0d103cd8b81
revision: 1e4ccf0f8110c783f826b38f47c0066a5def822b
4 changes: 3 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ sites/*/instance/
# Don't ship — runtime doesn't need scrape intermediate (data is in instance_seed/*.db).
sites/*/scraped_data/

# Don't ship — bytecode / venvs.
# Don't ship — bytecode / venvs. `uv` creates `.venv`, so cover both names.
sites/*/__pycache__/
**/__pycache__/
sites/*/venv/
sites/*/.venv/
**/.venv/
sites/*/*.pyc

# Don't ship — HF asset tarballs are build-time inputs (fetched/extracted by
Expand Down
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -94,4 +94,9 @@ secrets.json
# ============================================================
# Agent demo results
# =============================================================
agent_demo/runs/
agent_demo/runs/.claude/ralph-loop.local.md
.claude/ralph-loop.local.md
sites/*/.claude/
sites/*/download_pill_images.py
sites/drugs_com/instance/
sites/drugs_com/scraped_data/
12 changes: 6 additions & 6 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ A coding agent (Claude Code, Cursor, Aider, Codex, ...) is reading this. Read on

## What it is

15 Flask mirror websites (Amazon, GitHub, BBC News, ...) packaged into one Docker image, plus a control plane on `:8101` for resetting per-site state. Used as a deterministic offline environment for web-agent benchmarks. ~3 GB image.
17 Flask mirror websites (Amazon, GitHub, BBC News, ...) packaged into one Docker image, plus a control plane on `:8101` for resetting per-site state. Used as a deterministic offline environment for web-agent benchmarks. ~6 GB image.

Two repos:
- **code** (this one) — Flask apps, control plane, scripts.
Expand Down Expand Up @@ -48,17 +48,17 @@ Inside the image, sites live at `/opt/WebSyn/<site>/`. The path predates the ren
# fresh clone
./scripts/fetch_assets.sh # pulls assets from HF
./scripts/build.sh # docker build -t webharbor:dev .
docker run -d -p 8101:8101 -p 40000-40014:40000-40014 webharbor:dev
docker run -d -p 8101:8101 -p 40000-40016:40000-40016 webharbor:dev
```

Or use the published image directly:

```bash
docker run -d -p 8101:8101 -p 40000-40014:40000-40014 \
docker run -d -p 8101:8101 -p 40000-40016:40000-40016 \
battalion7244/webharbor:latest
```

Sites are on `40000`-`40014` in the order declared by `SITES=( ... )` in `websyn_start.sh`. Control plane:
Sites are on `40000`-`40016` in the order declared by `SITES=( ... )` in `websyn_start.sh`. Control plane:

| Method | Path | Purpose |
|--------|---------------------|-------------------------------------------|
Expand Down Expand Up @@ -136,13 +136,13 @@ python3 -m py_compile sites/<site>/app.py

# 3. run on alt ports (don't collide with anything you already have running)
docker run -d --rm --name wh-test \
-p 8201:8101 -p 41000-41014:40000-40014 webharbor:dev
-p 8201:8101 -p 41000-41016:40000-40016 webharbor:dev

# 4. control plane healthy, all sites alive
curl -s http://localhost:8201/health | python3 -m json.tool | head

# 5. every site renders 200
for p in $(seq 41000 41014); do
for p in $(seq 41000 41016); do
curl -so /dev/null -w "$p:%{http_code}\n" http://localhost:$p/
done

Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ The full agent guide is loaded above via `@AGENTS.md`. The notes below apply onl

## Existing containers

If a container is already running on `:8101` / `:40000-40014`, treat it as the user's working environment — don't `docker stop` or `docker rm` it without explicit confirmation. Spin up your test container under a different name on alt ports (`:8201`, `:41000-41014`).
If a container is already running on `:8101` / `:40000-40016`, treat it as the user's working environment — don't `docker stop` or `docker rm` it without explicit confirmation. Spin up your test container under a different name on alt ports (`:8201`, `:41000-41016`).
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ git clone https://github.com/<you>/webharbor && cd webharbor
./scripts/fetch_assets.sh # pull current assets
./scripts/new_site.py mywebsite # OR edit an existing site
./scripts/build.sh && docker run -d --rm \
-p 8101:8101 -p 40000-40014:40000-40014 webharbor:dev
-p 8101:8101 -p 40000-40016:40000-40016 webharbor:dev
# iterate locally...

./scripts/extract_assets.sh ../webharbor-static-pr/ # split assets out
Expand Down Expand Up @@ -277,4 +277,4 @@ Sites must not import from one another. The image launches each as an independen

### Don't hard-code secrets

Each site sets `SECRET_KEY` to a deterministic dev value. Acceptable for a benchmark image (resets blow away sessions anyway). If a contrib ever needs real secrets, raise it in an issue first.
Each site sets `SECRET_KEY` to a deterministic dev value. Acceptable for a benchmark image (resets blow away sessions anyway). If a contrib ever needs real secrets, raise it in an issue first.
7 changes: 4 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# WebHarbor — slim, self-contained image.
# 16 Flask mirror sites + control plane on :8101.
# 17 Flask mirror sites + control plane on :8101.

FROM python:3.12-slim-bookworm

Expand All @@ -19,7 +19,8 @@ RUN pip3 install --no-cache-dir \
SQLAlchemy==2.0.36 \
WTForms==3.2.1 \
email-validator==2.2.0 \
Pillow==11.0.0
Pillow==11.0.0 \
requests==2.32.3

WORKDIR /opt/WebSyn

Expand All @@ -33,6 +34,6 @@ COPY control_server.py /opt/control_server.py
COPY site_runner.py /opt/site_runner.py
RUN chmod +x /opt/websyn_start.sh

EXPOSE 8101 40000-40015
EXPOSE 8101 40000-40016

CMD ["/opt/websyn_start.sh"]
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,17 @@ WebHarbor takes a different approach. We leverage coding agent (e.g., Claude Cod
- **Deep features unlocked** — carts, checkouts, accounts, all fully testable
- **Evolving** — harder tasks drive richer mirrors; the environment grows with agents
- **RL-ready** — sub-second database resets between rollouts
- **Community-driven** — 15 sites today, scaling to 100+ together
- **Community-driven** — 17 sites today, scaling to 100+ together

## 🚀 Quickstart

One command to run all web environments:

```bash
docker run -p 8101:8101 -p 40000-40014:40000-40014 battalion7244/webharbor:latest
docker run -p 8101:8101 -p 40000-40016:40000-40016 battalion7244/webharbor:latest
```

Then point your agent at `http://localhost:40000` through `http://localhost:40014` to explore 15 local mirrors of webvoyager sites: `Allrecipes, Amazon, Apple, ArXiv, BBC News, Booking, GitHub, Google Flights, Google Maps, Google Search, Hugging Face, Wolfram Alpha, Cambridge Dictionary, Coursera, and ESPN`.
Then point your agent at `http://localhost:40000` through `http://localhost:40016` to explore 17 local mirrors: `Allrecipes, Amazon, Apple, ArXiv, BBC News, Booking, GitHub, Google Flights, Google Maps, Google Search, Hugging Face, Wolfram Alpha, Cambridge Dictionary, Coursera, ESPN, Merriam-Webster, and Drugs.com`.

For sub-second reset between rollouts, expose the control plane and call `/reset/<site>`:

Expand All @@ -65,7 +65,7 @@ git clone https://github.com/aiming-lab/WebHarbor && cd WebHarbor

## 🤝 Contribute

We have built 15 high-quality mirrors covering the [WebVoyager](https://github.com/MinorJerry/WebVoyager) benchmark. The next goal is **100+ sites**, covering everything in [Online-Mind2Web](https://huggingface.co/datasets/osunlp/Online-Mind2Web). We are inviting the community to build this together.
We have built 17 high-quality mirrors, including the original [WebVoyager](https://github.com/MinorJerry/WebVoyager) coverage. The next goal is **100+ sites**, covering everything in [Online-Mind2Web](https://huggingface.co/datasets/osunlp/Online-Mind2Web). We are inviting the community to build this together.

There are two ways to join the author list:

Expand Down Expand Up @@ -111,4 +111,4 @@ WebHarbor is initiated by UNC-Chapel Hill and Microsoft, with contributions from
url = {https://aiming-lab.github.io/webharbor.github.io},
note = {Project website.}
}
```
```
2 changes: 1 addition & 1 deletion control_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
'allrecipes', 'amazon', 'apple', 'arxiv', 'bbc_news', 'booking',
'github', 'google_flights', 'google_map', 'google_search',
'huggingface', 'wolfram_alpha', 'cambridge_dictionary',
'coursera', 'espn', 'merriam_webster',
'coursera', 'espn', 'merriam_webster', 'drugs_com',
]
BASE_PORT = 40000
WEBSYN_DIR = '/opt/WebSyn'
Expand Down
10 changes: 9 additions & 1 deletion scripts/extract_assets.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,15 @@ for site_dir in sites/*/; do
fi

out="$TARGET/$site.tar.gz"
tar -czf "$out" -C sites "${members[@]}"
# Drop any macOS junk already on disk, then pack with COPYFILE_DISABLE=1 so
# Apple's bsdtar does not synthesize ._* AppleDouble sidecars from extended
# attributes (e.g. com.apple.provenance on Sonoma+). GNU tar ignores the env
# var, so this stays correct on Linux. Keeps every <site>.tar.gz free of
# ._* / .DS_Store cruft regardless of which machine packs it.
for m in "${members[@]}"; do
find "sites/$m" \( -name '._*' -o -name '.DS_Store' \) -delete 2>/dev/null || true
done
COPYFILE_DISABLE=1 tar -czf "$out" -C sites "${members[@]}"
sz=$(du -sh "$out" 2>/dev/null | cut -f1)
printf " %-22s -> %-30s %s\n" "$site" "$site.tar.gz" "$sz"
count=$((count + 1))
Expand Down
Loading