Skip to content

feat: add Rotten Tomatoes mirror site - #26

Open
derenlei wants to merge 2 commits into
aiming-lab:mainfrom
derenlei:dev
Open

feat: add Rotten Tomatoes mirror site#26
derenlei wants to merge 2 commits into
aiming-lab:mainfrom
derenlei:dev

Conversation

@derenlei

Copy link
Copy Markdown

Add Rotten Tomatoes mirror site

Mirror URL: https://www.rottentomatoes.com/
Port: 40015

Overview

A faithful Rotten Tomatoes clone with real movie data scraped from RT. Supports browsing, searching, movie detail pages, celebrity pages, user authentication, watchlists, ratings, and reviews.

Data Summary

Table Rows
Movies 147
Persons 895
Movie Cast 909
Genres 18
Movie-Genre links 335
Critic Reviews 258
Audience Reviews 28
Users 4
Watchlist Items 16
User Ratings 12

Assets: 147 real movie posters + 777 actor headshots (906/909 cast members have photos)

Features

  • Browse — filter by genre, certified fresh, and streaming platform (At Home)
  • Search — title-based movie search
  • Movie detail — Tomatometer, Audience Score, cast, synopsis, critics consensus, Movie Info (director, producer, screenwriter, studio, release date, box office, runtime, rating)
  • Celebrity pages — bio, filmography
  • Auth — register, login/logout
  • Watchlist — add/remove movies
  • Ratings — rate movies 0.5–5.0 stars
  • Reviews — write and delete reviews
  • Account — profile page, edit name/email

Benchmark Users

Username Email Password
alice_j alice.j@test.com TestPass123!
bob_c bob.c@test.com TestPass123!
carol_d carol.d@test.com TestPass123!
david_k david.k@test.com TestPass123!

Tasks

20 benchmark tasks covering: browse + filter, search, movie info lookups, authentication, watchlist CRUD, ratings, and review operations.

Screenshots

image image image image

Verification

Health check: {"movies": 147, "ok": true, "persons": 895, "site": "rotten_tomatoes"}
Reset: {"pid": ..., "ready": true, "site": "rotten_tomatoes"}

HuggingFace Assets

rotten_tomatoes.tar.gz uploaded to ChilleD/WebHarbor dataset (commit 7583bbd)

hqhq1025 pushed a commit to hqhq1025/WebHarbor that referenced this pull request May 26, 2026
Conflicts resolved:
- websyn_start.sh / control_server.py: append rotten_tomatoes after drugs_com.
- Dockerfile EXPOSE 40000-40017 → 40000-40018.

Fixes on top of PR:
- sites/rotten_tomatoes/seed_data.py: pin bcrypt hash for 'TestPass123!'
  to preserve byte-identical reset (PR used bcrypt.generate_password_hash
  inline at seed time, which randomizes the salt every run).

Known gap (not blocking merge):
- sites/rotten_tomatoes/static/images/{posters,people}/ is empty in this
  PR. The download_posters.py / download_people.py scripts require a
  scraped_data/movies.json file that was not committed. Templates fall
  back to /static/icons/placeholder.png. Real posters/headshots need a
  follow-up HF asset PR or local re-scrape.
@MufanQiu

MufanQiu commented Jul 1, 2026

Copy link
Copy Markdown

Review — rotten_tomatoes (PR #26)

Verdict: REQUEST CHANGES.

We deployed the environment locally and ran the full review checklist; every finding below was independently reproduced, and fidelity was checked against the real upstream site.

Issues (summary)

  • BLOCKER: .assets-revision pinned to 'main' — new-site tarball not on main, CI fail-closed
  • BLOCKER: Port-slot collision with merriam_webster (port 40015) — branch is stale vs main
  • MAJOR: T18 infeasible via UI — producer not searchable, no producer route
  • MAJOR: T3 ill-posed/non-deterministic — two shared producers, two different 'third movies'
  • MAJOR: seed_data.py cannot reproduce shipped DB (producer/screenwriter never seeded)
  • MINOR: Answer-leak via browse count label for count tasks (T4, T6)

Mechanical checks: FAIL

  • Byte-identity: PASS. After boot + serving routes, md5(instance/rotten_tomatoes.db) == md5(instance_seed/rotten_tomatoes.db) (5a5af6e6…). seed_all is gated by a single whole-function early-return, so /reset is byte-stable.

Visual fidelity: PASS

Convincing RT look: dark header, "Movies & TV Shows" hero, New & Upcoming / Popular Streaming / Certified Fresh / Top Box Office sections, dual Tomatometer/Audience badges with real posters.

Functional depth: PASS

All flows driven via Playwright and persisted to DB: login (all 4 benchmark bcrypt hashes validate TestPass123!), register, watchlist add/remove, rating, review, account edit. Form validation enforced server-side (Email, review Length min=10, NumberRange 0.5–5.0); CSRF on all POSTs.

Task quality: FAIL

20 tasks with broad coverage and good distractor density; ~13 are solid. But multiple have answer-leaks, ill-posedness, or UI-infeasibility that disqualify them for autonomous grading.

Required fixes before approval

  1. (BLOCKER) Rebase onto origin/main and resolve the merge conflict / port collision: move rotten_tomatoes to index 16 / port 40016 in BOTH websyn_start.sh SITES and control_server.py SITES, bump Dockerfile EXPOSE to 8101 40000-40016, and update tasks.jsonl web to http://localhost:40016/ on all 20 tasks.
  2. (MAJOR) Pin .assets-revision to a merged HF dataset SHA on ChilleD/WebHarbor that contains rotten_tomatoes.tar.gz (neither main nor 54882a6a was updated by this PR to include the new site).
  3. (MAJOR) Kill the browse count-label leak for T4/T6: remove {{ movies|length }} movies found from browse.html, or re-scope these to a non-count answer that requires a detail page.
  4. (MAJOR) Disambiguate T6 platform semantics: make the filter "available on" (substring/relationship) or normalize compound platforms, and set the answer key accordingly, so 8/12 vs 16/18 is unambiguous.
  5. (MAJOR) Fix T18 solvability: add a producer browse/filter route, index producer in search, or make producer names clickable; otherwise rewrite so the filmography is discoverable through the UI.

@jackjin1997

Copy link
Copy Markdown
Contributor

I’m taking over the review and remediation of this Rotten Tomatoes contribution. I’ll build a separate Review: PR on top of @derenlei’s original commits, preserve the original authorship, and link the reviewer PR here.

The review will cover current-main integration and pinned assets, browser/UI fidelity, task solvability, and deterministic verifiers backed by recorded executions and positive/negative tests. The existing review findings will be rechecked against the frozen candidate. Maintainers will retain final approval and merge responsibility.

@jackjin1997

Copy link
Copy Markdown
Contributor

The reviewer continuation is now available as Draft #87: #87.

It preserves @derenlei's original commits and movie identities, with source-data and functional repairs, responsive UI comparisons, and seven proposed grading contracts. The companion immutable asset candidate is HF PR #55.

This remains a draft: full-image verification is blocked by local Docker storage recovery, and revised-task runs, human visual acceptance, and independent review are still outstanding. The linked report distinguishes completed offline tests from those uncompleted checks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants