Spaces:
Sleeping
Sleeping
| # ReelShield β Wireframes & Design Documentation | |
| > **High-fidelity mockups:** every numbered screen below has a matching | |
| > standalone HTML render under [`mockups/`](mockups/) β open any of | |
| > those files in a browser for a production-quality view of the same | |
| > screen described here. The ASCII below conveys structural intent; | |
| > the HTML conveys finished fidelity. | |
| ## Screen 1: Home / Search | |
| > **Mockup:** [`mockups/01-home.html`](mockups/01-home.html) | |
| ``` | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β [Skip to content] β | |
| β β | |
| β π¬ ReelShield β | |
| β AI-powered analysis β Gemini + TMDB [β] β | |
| β β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β β Search for a movie β β | |
| β β ββββββββββββββββββββββββββββββββββββββββββββ β β | |
| β β β e.g. Interstellar, The Dark Knight... β β β | |
| β β ββββββββββββββββββββββββββββββββββββββββββββ β β | |
| β β 3 results found β β | |
| β β ββββββββ ββββββββ ββββββββ β β | |
| β β βposterβ βposterβ βposterβ β β | |
| β β β β β β β β β β | |
| β β βTitle β βTitle β βTitle β β β | |
| β β β 1997 β β 2023 β β 2018 β β β | |
| β β ββββββββ ββββββββ ββββββββ β β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β β | |
| β β Generating content warnings... β | |
| β β | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ``` | |
| **Design decisions:** | |
| - Search is full-width and immediately visible β primary action | |
| - Poster grid for results: visual recognition faster than text lists | |
| - Spinner with status messages prevents perceived abandonment during AI call | |
| - β button top-right: discoverable but not distracting for primary users | |
| --- | |
| ## Screen 2: Movie Loaded (Desktop β 2-column) | |
| > **Mockup:** [`mockups/02-movie-loaded.html`](mockups/02-movie-loaded.html) | |
| ``` | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β β οΈ PHOTOSENSITIVE EPILEPSY WARNING β | |
| β This film contains flashing lights... [specific notes] β | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββ | |
| β π« Content Warnings β β π¬ Ask Questions β | |
| β β β β | |
| β Titanic (1997) β β ββββββββββββββββββββββββββββ β | |
| β [PG-13] [β οΈ Predicts β β β Ask me anything about β β | |
| β R/NC-17 Β· 87%] β β β this film. β β | |
| β [194 min] [Drama] β β β β | |
| β β β [You: Who is Rose?] β β | |
| β Our ML classifier β β β β | |
| β estimates this film's β β [AI: Rose is a young...] β β | |
| β profile better matches β β β β | |
| β R/NC-17 than its PG-13 β ββββββββββββββββββββββββββββ β | |
| β rating. β β β β | |
| β ββββββββββββββββββββββββ β β ββββββββββββββββββββ [Send] β β | |
| β β Overview blurb text β β β ββββββββββββββββββββ β β | |
| β β from TMDB... β β ββββββββββββββββββββββββββββββββββ | |
| β ββββββββββββββββββββββββ β | |
| β β | |
| β Spoiler mode: Off [β] β | |
| β β | |
| β β οΈ Flashing Lights Mild β | |
| β β Confirmed β | |
| β Brief flashing... β | |
| β β | |
| β Violence & Gore Moderateβ | |
| β β Confirmed β | |
| β Drowning, injuries... β | |
| β β | |
| β Sexual Content Moderate β | |
| β β Confirmed β | |
| β β | |
| β Language Mild β | |
| β β Confirmed β | |
| β β | |
| β Self-Harm None β | |
| β β Confirmed absent β | |
| β β | |
| β π¬ Content twins β | |
| β (Adult drama cluster) β | |
| β ββββββ ββββββ ββββββ β | |
| β β B β β C β β D β β | |
| β βΞ.42β βΞ.51β βΞ.63β β | |
| β ββββββ ββββββ ββββββ β | |
| ββββββββββββββββββββββββββββ | |
| ``` | |
| **Design decisions:** | |
| - Epilepsy banner always renders above everything else β critical safety info | |
| - 2-column layout: warnings left, chat right β parallel use without scrolling | |
| - Warnings sorted by severity descending (most severe first) | |
| - Color-coded left border: red=severe, orange=moderate, green=mild, grey=none | |
| - β Confirmed in green builds trust; ~% in grey signals uncertainty | |
| - Spoiler toggle above warnings: visible but default off | |
| - MPA-disagreement badge sits next to the TMDB cert badge in amber when the LR classifier disagrees β₯70% confident; rendered in the same row as the cert so the comparison is the headline, not a footnote | |
| - Content twins (K-Means neighbors) render below warnings as a small grid; Ξ = Euclidean distance in 9-dim severity space, so smaller Ξ = closer content-profile match | |
| --- | |
| ## Screen 3: Mobile (Single Column) | |
| ``` | |
| βββββββββββββββββββββββββββ | |
| β π¬ ReelShield β | |
| β [β]β | |
| βββββββββββββββββββββββββββ€ | |
| β β οΈ EPILEPSY WARNING β | |
| β Brief flashing lights β | |
| β during sinking sequence β | |
| βββββββββββββββββββββββββββ€ | |
| β Search for a movie β | |
| β βββββββββββββββββββββββ β | |
| β β e.g. Titanic... β β | |
| β βββββββββββββββββββββββ β | |
| βββββββββββββββββββββββββββ€ | |
| β π« Content Warnings β | |
| β Titanic (1997) β | |
| β [PG-13][194 min][Drama] β | |
| β Overview blurb... β | |
| β β | |
| β β οΈ Flashing Lights Mild β | |
| β β Confirmed β | |
| β β | |
| β Violence & Gore Moderateβ | |
| β β Confirmed β | |
| β ... β | |
| βββββββββββββββββββββββββββ€ | |
| β π¬ Ask Questions β | |
| β βββββββββββββββββββββββ β | |
| β β Chat history... β β | |
| β βββββββββββββββββββββββ β | |
| β ββββββββββββββββ[Send] β β | |
| β ββββββββββββββββ β β | |
| βββββββββββββββββββββββββββ | |
| ``` | |
| **Responsive behavior:** At <768px, columns stack. Epilepsy banner stays pinned to top. Chat moves below warnings. | |
| --- | |
| ## Screen 4: Prompt Editor Modal | |
| ``` | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β βοΈ Edit AI Prompt β | |
| β β | |
| β Customize how Gemini generates content warnings. β | |
| β Required placeholders: {title} {year} {rating} β | |
| β {genres} {overview} {keywords} β | |
| β β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β β You are a film content expert... β β | |
| β β β β | |
| β β Movie: "{title}" ({year}) β β | |
| β β MPA Rating: {rating} β β | |
| β β ... β β | |
| β β Return ONLY valid JSON... β β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β β | |
| β [Save Prompt] [Reset to Default] [Cancel] β | |
| β β | |
| β β Prompt updated. New searches will use this. β | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ``` | |
| --- | |
| ## Screen 5: Find Movies (Discover) | |
| > **Mockup:** [`mockups/03-discover.html`](mockups/03-discover.html) | |
| ``` | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β Find Movies β | |
| β Choose your mood and the warnings you want to avoid β we'll find β | |
| β the best matches from our movie cache. β | |
| β β | |
| β ββββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββ β | |
| β β How are you feeling? (optional) β β Warnings to avoid β β | |
| β ββββββββββββββββββββββββββββββββββββ€ β (pick up to 3) β β | |
| β β [ Light and easy ] β ββββββββββββββββββββββββββ€ β | |
| β β [ Some emotion, nothing heavy] β β β Violence & Gore β β | |
| β β [ Can handle intense ] β β β Self-Harm & Suicide β β | |
| β β [ Feel something deep ] β β β Miscarriage β β | |
| β β [ Comfort and familiarity ] β β β Sexual Content β β | |
| β β (one selected = highlighted; β β β Animal Abuse β β | |
| β β click again to deselect) β β β Substance Use β β | |
| β ββββββββββββββββββββββββββββββββββββ β β Language β β | |
| β β β Horror / Intensity β β | |
| β ββββββββββββββββββββββββββββββββββββ β β Flashing Lights β β | |
| β β π You're feeling X β we'll β β β "Pick up to 3" β β | |
| β β look for Y β ββββββββββββββββββββββββββ β | |
| β β Tones that fit: [whimsical]β¦ β β | |
| β β Tones to skip: [grim]β¦ β β | |
| β ββββββββββββββββββββββββββββββββββββ β | |
| β β | |
| β [ Find Movies ] β | |
| β β | |
| β ββββββββ ββββββββ ββββββββ ββββββββ ββββββββ β | |
| β β Safe β β Safe β β Safe β β Safe β β Safe β β color-coded badge β | |
| β β 100 β β 92 β β 88 β β 80 β β 72 β per match quality β | |
| β βposterβ βposterβ βposterβ βposterβ βposterβ β | |
| β βTitle β βTitle β βTitle β βTitle β βTitle β β | |
| β β Mood β β Mood β β Mood β β Mood β β Mood β β mood fit % β | |
| β β β¦ β β β¦ β β β¦ β β β¦ β β β¦ β β | |
| β ββββββββ ββββββββ ββββββββ ββββββββ ββββββββ β | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ``` | |
| **Design decisions:** | |
| - Two-column layout puts emotional state and content rules side-by-side β neither is more important | |
| - Mood is optional; warnings-to-avoid is the load-bearing filter | |
| - Cap of 3 avoid categories is a soft constraint announced via `aria-live`, not a disabled checkbox β keeps the UI accessible | |
| - Live mood-profile box updates as the user picks moods, so they understand what's about to be searched | |
| - Results are scored 0β100 (safer = higher) with mood-fit shown separately | |
| --- | |
| ## Screen 6: Group Watch Finder | |
| > **Mockup:** [`mockups/04-group-watch.html`](mockups/04-group-watch.html) | |
| ``` | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β π₯ Group Watch Finder β | |
| β Add everyone in your group, merge their sensitivities, and find β | |
| β movies safe for all. β | |
| β β | |
| β βββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ β | |
| β β Group Members β β Group Profile β β | |
| β βββββββββββββββββββββββββββββββββββ€ βββββββββββββββββββββββββββββββ€ β | |
| β β β’ Sarah β β β This group needs movies β β | |
| β β Violence, Animal abuse β β free of violence, animal β β | |
| β β β’ Leo β β β abuse, and miscarriage. β β | |
| β β Miscarriage, Self-harm β β β β | |
| β β β β All sensitivities: β β | |
| β β βββββββββββββββββββββββββββββ β β [Violence] [Animal abuse] β β | |
| β β β Member nameβ¦ β β β [Miscarriage] [Self-harm] β β | |
| β β βββββββββββββββββββββββββββββ β β β β | |
| β β Their sensitivities: β β Avoid genres: β β | |
| β β β Violence β Self-Harm β β [Horror] [War] β β | |
| β β β Animal β Sexual β β β β | |
| β β β Substance β Language β β Suggested genres: β β | |
| β β β Horror β Flashing β β [Family] [Comedy] [Animation] β | |
| β β β Miscarriage β βββββββββββββββββββββββββββββββ β | |
| β β [+ Add Member] β β | |
| β β β Find Movies β | |
| β β [β Merge Profiles] β Mood: [Any mood βΌ] β | |
| β βββββββββββββββββββββββββββββββββββ Platform (optional): [____] β | |
| β β | |
| β [ Find Movies ] β | |
| β β | |
| β 3 movie(s) safe for everyone in the group: β | |
| β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β | |
| β β 100/100 β β 95/100 β β 88/100 β β | |
| β β poster β β poster β β poster β β | |
| β β Title β β Title β β Title β β | |
| β β Why safeβ¦ β β Why safeβ¦ β β Why safeβ¦ β β | |
| β β One concern β β One concern β β One concern β β | |
| β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ``` | |
| **Design decisions:** | |
| - Member-builder on the left, profile-and-results on the right β read left-to-right | |
| - Merge button stays disabled until β₯1 member is added (prevents empty-state confusion) | |
| - Privacy: rejection messages refer to "the group", never name the individual member who triggered them | |
| - Each result card includes both `why_safe` and `one_concern` so the group can debate trade-offs | |
| --- | |
| ## Screen 7: My Watchlist | |
| > **Mockup:** [`mockups/05-watchlist.html`](mockups/05-watchlist.html) | |
| ``` | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β π My Watchlist β | |
| β Movies are ranked safest-to-most-triggering based on your β | |
| β sensitivity profile. β | |
| β β | |
| β [ β Rank by My Sensitivities ] β | |
| β β | |
| β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β | |
| β β β β β β β‘ β β β β’ β β β β£ β β β | |
| β β poster β β poster β β poster β β poster β β | |
| β β Title β β Title β β Title β β Title β β | |
| β β 1997 β β 2019 β β 2023 β β 2017 β β | |
| β β π’ Safe β βπ‘ Mild β βπ‘ Mild β βπ΄ Strong β β | |
| β β No trigβ¦ β βBriefβ¦ β βSomeβ¦ β βHeavyβ¦ β β | |
| β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β | |
| β β | |
| β (Rank β in top-left, β in top-right to remove) β | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ``` | |
| **Design decisions:** | |
| - Rank badge (top-left) is the headline β at a glance the user sees what's safest tonight | |
| - Color-coded watchlist badge (π’ / π‘ / π΄) mirrors the severity scale used on the warning cards | |
| - Remove (β) is one click but lives in the top-right corner so it isn't fat-fingered while scanning | |
| - Re-ranking is explicit, not automatic β running Gemini on the whole list is costly, so the user opts in | |
| --- | |
| ## Screen 8: Reviews & Ratings (inline on movie page) | |
| ``` | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β β Reviews & Ratings β | |
| β β | |
| β From critics & aggregators: β | |
| β ββββββββββ βββββββββββββββ ββββββββββββββ β | |
| β β IMDb β β Rotten β β Metacritic β β | |
| β β 7.8/10 β β Tomatoes 89%β β 74/100 β β | |
| β ββββββββββ βββββββββββββββ ββββββββββββββ β | |
| β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β β | |
| β Critic Reviews β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β β A. Critic β "An absorbing, careful filmβ¦" β β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β β | |
| β User Reviews β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β β Your rating β β | |
| β β β β β β β β β | |
| β β Your review β β | |
| β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β | |
| β β β Share your thoughts... β β β | |
| β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β | |
| β β [ Post Review ] β β | |
| β β (or: "Log in to post a review." if not authenticated) β β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β β @maria Β· β β β β β Β· 2 days ago β β | |
| β β Watched with my kids and felt prepared for every sceneβ¦ β β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| β β @jordan Β· β β β ββ Β· 1 week ago β β | |
| β β Flashing-lights warning was spot-on, missed a couple of cutsβ¦ β β | |
| β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ``` | |
| **Design decisions:** | |
| - Three trust layers stacked: external aggregators β critic reviews β user reviews β heaviest signal at top | |
| - Star widget is keyboard-accessible (each star is a button with `aria-label`) | |
| - Login gate is in-place: an inline note replaces the form, so the user isn't surprised by a redirect | |
| - User reviews show username + star rating + relative timestamp β matches conventions users already know | |
| --- | |
| ## Screen 9: Sensitivity Profile Editor (Modal) | |
| ``` | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β π‘οΈ My Sensitivity Profile β | |
| β β | |
| β Select the content categories you want to be warned β | |
| β about. This personalizes your watchlist ranking β | |
| β and badges. β | |
| β β | |
| β βββββββββββββββββββββββ βββββββββββββββββββββββ β | |
| β β β Violence & Gore β β β Substance Use β β | |
| β β β Self-Harm/Suicide β β β Language β β | |
| β β β Miscarriage β β β Horror / Intensityβ β | |
| β β β Sexual Content β β β Flashing Lights β β | |
| β β β Animal Abuse β β β β | |
| β βββββββββββββββββββββββ βββββββββββββββββββββββ β | |
| β β | |
| β [ Save Profile ] [ Cancel ] β | |
| β β | |
| β β Profile saved. β | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ``` | |
| **Design decisions:** | |
| - Modal carries `role="dialog"` and `aria-modal="true"` β screen readers announce it as an interrupting layer | |
| - Two-column grid keeps all 9 categories on one screen without scrolling on desktop | |
| - "Save" is the primary button (filled), "Cancel" is the ghost button β visual weight matches intent | |
| - Saved state announced via `aria-live="polite"` so assistive tech users get confirmation without focus shift | |
| --- | |
| ## Style Guide | |
| ### Colors | |
| | Token | Hex | Usage | | |
| |-------|-----|-------| | |
| | `--bg` | `#0f1117` | Page background | | |
| | `--surf` | `#1a1d27` | Card/panel surface | | |
| | `--surf2` | `#242736` | Input fields, nested surfaces | | |
| | `--bdr` | `#2e3347` | Borders | | |
| | `--text` | `#e8eaf0` | Primary text | | |
| | `--muted` | `#8891a8` | Secondary text, labels | | |
| | `--accent` | `#6c8eff` | Primary interactive elements | | |
| | `--mild` | `#4caf50` | Mild severity, confirmed absent | | |
| | `--moderate` | `#ff9800` | Moderate severity | | |
| | `--severe` | `#f44336` | Severe severity | | |
| | `--epi-bdr` | `#ff2222` | Epilepsy banner border | | |
| ### Typography | |
| - Font: `'Segoe UI', system-ui, sans-serif` | |
| - Heading: 800 weight | |
| - Body: 400 weight, 1.6 line-height | |
| - Code/prompt: `'Courier New', monospace` | |
| ### Spacing | |
| - Base unit: 8px | |
| - Card padding: 24px | |
| - Gap between cards: 20px | |
| - Border radius: 8-12px | |
| ### Accessibility Rationale | |
| - Dark theme chosen: reduces eye strain for photosensitive users (Persona 2) | |
| - 3px focus outlines: clearly visible on dark backgrounds | |
| - `aria-live="polite"` on search results and warnings: non-disruptive announcements | |
| - `role="alert"` on epilepsy banner: immediate announcement, highest priority | |
| - Color contrast targets WCAG AA (4.5:1 normal text, 3:1 UI components) | |
| ### Audit evidence | |
| A Lighthouse accessibility audit run against the live container on | |
| 2026-05-15 scores **100 / 100** β all 26 audits pass, zero element | |
| findings. The full report (raw JSON + HTML + a remediation-history | |
| README documenting the four fixes that took the page from an initial | |
| 89/100 to 100/100) is committed under [`accessibility/`](accessibility/) | |
| so the run is reproducible. | |