Spaces:
Sleeping
Sleeping
File size: 31,760 Bytes
8af1084 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 | # 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.
|