Add phet_simulations mirror site (port 40015)#29
Draft
ZhongyangLi0124 wants to merge 2 commits into
Draft
Conversation
Adds Flask app, templates, and seed DB for PhET Interactive Simulations (https://phet.colorado.edu/), claiming port slot 40015. Catalog: 98 simulations across 5 subjects (physics, chemistry, math, biology, earth-science), 4 grade levels (elementary, middle, high, university), and 28 languages (incl. 3 RTL scripts). Every primary filter bucket clears the >=20-record threshold. Models: User, Subject, GradeLevel, Language, Simulation, Activity, SavedSimulation. Routes: 17 public + 2 JSON APIs + /_health, all reachable from /. Auth via Flask-Login + bcrypt; saves via CSRF-protected JSON endpoints. Idempotency: every seed_* helper early-returns when its table is populated; verified byte-identical (md5 e094a2ee...) across the control_server reset cycle (rm -rf instance; cp -a instance_seed instance; re-import app). Tested under the exact Dockerfile pin set (Flask 3.1.0, SQLAlchemy 2.0.36, Werkzeug 3.1.3). Per the port-slot convention, also: - websyn_start.sh: append to SITES, bump 15 -> 16 in startup messages - control_server.py: append 'phet_simulations' to SITES list - Dockerfile: EXPOSE 40000-40014 -> 40000-40015 Seed DB (instance_seed/phet_simulations.db, 143KB) packs into a 17KB phet_simulations.tar.gz via scripts/extract_assets.sh and ships separately via the Hugging Face dataset. .assets-revision will need a bump after the HF PR merges. tasks.jsonl: 43 benchmark prompts covering catalog browse, subject filters, simulation detail extraction, search, translations, teacher activities, and the account save flow.
Replace placeholder UI with a high-fidelity mirror of the real
PhET Interactive Simulations site.
Visual:
- Real PhET yellow trademark logo + CU Boulder logo in white header bar
- Right-aligned nav (Simulations / Studio / Teaching / Research / Initiatives)
with hover dropdowns; collapsing search icon + profile icon
- Dismissible pink educator banner
- Photo-backed top hero ("Interactive Simulations for Science and Math")
- 5 pastel subject squares in PhET's canonical order (Physics, Math &
Statistics, Chemistry, Earth & Space, Biology) with their SVG icons
- Photo-backed Teaching Resources callout
- "Interact. Discover. Learn." stats section with real iconography
- Secondary STEM hero photo + centered "Supported in part by" + Donate CTA
- Real footer: social row, 4-column links, language selector, app-store
badges, sponsor logos strip (Moore, Hewlett, NSF, Mastercard, Yidan)
Simulations browse page:
- Underwater illustration banner + Browse / Filter / Customize sub-tabs
- Filter view is the default; left sidebar with collapsible subject tree,
grade level, compatibility, release type, inclusive features, locale,
apply / clear, active-filter chips, sort dropdown, results count
- Browse view groups sims by subject with "View all »" links
Simulation detail page:
- Large screenshot with hover "Play" overlay
- Tabbed sections (About / Teaching Resources / Activities /
Translations / Credits) plus topics, learning goals, related sims
- "Supported by" sidebar, share row, pink Explore More + Donate CTA
Backend wiring:
- Index route adds total_activities for the stats section
- Simulations route exposes view tab and per-subject buckets
- App.py exposes available_thumbnails so cards fall back gracefully
when a slug has no screenshot
Assets ship via the paired HF dataset tarball (not committed):
- 98 sim screenshots (49 from PhET CDN, 49 generated placeholders)
- PhET + CU Boulder logos, subject icons, sponsor logos, hero photos,
app-store badges, underwater simulations banner
Seed DB unchanged, /reset/phet_simulations remains byte-identical
(md5 e094a2ee23369d3b60232f49f4ac691c).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a 16th mirror site to WebHarbor: PhET Interactive Simulations
(https://phet.colorado.edu/). Bound to port 40015.
Real site: University of Colorado Boulder's CC-BY-licensed catalog of
free interactive math and science simulations. Selected for its clean
taxonomy (subjects × grade bands × languages), stable academic content,
and no commercial anti-bot defenses.
Seeded catalog
Visual fidelity
Mirror is reskinned to closely match the real PhET site:
(Simulations / Studio / Teaching / Research / Initiatives)
photo-backed Teaching Resources callout, Interact/Discover/Learn stats,
second STEM hero, sponsor footer (Moore / NSF / Hewlett / Mastercard / Yidan)
/simulationsBrowse / Filter / Customize tabs with underwater banner;Filter view has left-sidebar with collapsible subject tree, grade level,
compatibility, locale, active-filter chips, sort
Credits), large screenshot, supported-by sidebar, Donate CTA
Assets ship via the paired HF dataset PR (see below). 98 sim screenshots
(49 from PhET CDN, 49 styled placeholders for slugs not in HTML5 lib),
plus logos, sponsor logos, hero photos, subject icons, app-store badges,
underwater banner. ~5 MB tarball total.
Paired HF dataset PR
https://huggingface.co/datasets/ChilleD/WebHarbor/discussions/19
This PR is in Draft status until the HF PR merges. Once merged,
.assets-revisionwill be bumped to the merge commit SHA and thedraft will be marked ready for review.
Test plan
python3 -m py_compile sites/phet_simulations/app.py./scripts/build.shsucceeds (3.07 GB image)docker run -d --rm -p 8101:8101 -p 40000-40015:40000-40015 webharbor:devphet_simulationsalive on port 40015/,/simulations,/simulations?view=browse,/simulations?view=filter&subject=physics,/simulation/build-an-atom,/simulation/algebra-tiles,/teachers,/translations,/about,/accessibility)POST /reset/phet_simulationsreturns"ready": trueinstance/phet_simulations.dband
instance_seed/phet_simulations.dbboth equale094a2ee23369d3b60232f49f4ac691cpost-reset and afterdocker restartReset evidence