Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
96 changes: 96 additions & 0 deletions .agents/.impeccable.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
## Design Context

### Users

Trakt users are entertainment enthusiasts who track movies, TV shows, and
their viewing habits across devices. The Android footprint covers:

- **Phone / tablet (`app`)** — the daily-driver surface. Quick logging
while watching, glancing at calendars, exploring recommendations,
managing watchlists. Adaptive layouts honour window size classes.
- **Android TV (`tv`)** — the lean-back surface. Browsing trending
content, episode details, and 10-foot summaries with remote control
navigation. Fully Compose-based (no Leanback fragments).
- **Widgets, notifications** — at-a-glance progress and "next episode"
prompts through standard Android widget surfaces.

The job to be done mirrors the web and iOS apps: stay organised, discover
content, and feel on top of one's entertainment life. Android platforms
add the expectation that the experience is **natively Material 3 + adaptive
Compose** — gestures, ripples, motion, and adaptive layouts should feel
correct on the platform.

### Brand Personality

**Clean, confident, modern.** Trakt is a polished, well-built tool that
feels premium without being flashy. Purple is the brand anchor. The
Android surfaces honour Material 3 conventions while expressing the Trakt
identity through `TraktTheme` design tokens.

### Emotional Goals

- **Delight & discovery** — browsing surfaces new shows, trending
content, and unexpected recommendations. Cards and posters should
spark curiosity.
- **Control & clarity** — progress tracking, watchlists, and stats give a
sense of mastery. A glance at the calendar should answer "what should
I watch tonight?".
- **Speed** — interactions feel instant. Optimistic mutations, cached
reads through Flow, and short transitions matter more than animation
polish.

### Aesthetic Direction

- **Visual tone**: clean and confident. Strong hierarchy, generous
whitespace, purposeful colour accents. Content (posters, artwork) is
the visual star — UI chrome stays out of the way.
- **Theme**: full light/dark support. Subtle purple tinting in dark mode.
Seasonal overrides (Halloween → orange, Christmas → red) flow through
Firebase Remote Config + `CustomThemeUseCase`; they apply through
`TraktTheme` tokens, never via raw `Color(0xFF…)` at call sites.
- **Anti-references**: avoid cluttered dashboards, gamified UI, or
anything that feels like a spreadsheet. Avoid generic streaming-app
aesthetics. Avoid playful/childish — Trakt is a confident, modern tool.
- **TV specifically**: 10-foot legibility. Honour Compose `tv-material`
focus styles. Don't fight the D-pad gesture vocabulary.

### Design Principles

1. **Content is king** — posters, artwork, and media metadata are the
visual centrepiece. UI chrome recedes and lets content breathe.
2. **Purposeful colour** — purple is the brand anchor. Red / blue /
green / orange serve specific semantic roles (actions, trends,
status). Never use colour purely for decoration.
3. **Consistent rhythm** — use `TraktTheme.spacing` and `TraktTheme.size`
tokens religiously. Adaptive tokens vary with window size class for
correct phone/tablet/TV behaviour.
4. **Respect the user** — Material 3 dynamic colour where appropriate,
`Modifier.semantics` for accessibility, reduced motion / animations
honour system preferences, WCAG AA contrast.
5. **Themed by design** — every colour choice works across light, dark,
and seasonal themes. Use semantic tokens
(`TraktTheme.colors.textPrimary`), never raw `Color(0xFF…)` in
feature code.
6. **Native feel** — use Material 3 components, system fonts, platform
haptics, and Compose's built-in motion. Custom flourish is welcome
but never at the cost of feeling un-Android.

### Technical Design Constraints

- **UI framework**: Jetpack Compose for **all** new code. XML layouts
are not present in the codebase and should not be introduced.
- **Components**: design-system primitives in `common/.../ui/` exposed
through `TraktTheme`. Variants surfaced through enum-typed parameters
+ dedicated `Modifier` extensions.
- **Tokens**: all visual values via `TraktTheme.{colors,typography,
spacing,size}`. No raw hex / `Color(0xFF…)` / magic-number paddings in
feature code.
- **Responsive**: phone / tablet / foldable adaptive layouts via window
size classes (`androidx.compose.material3.adaptive`). TV uses
focus-driven layout.
- **Typography**: Material 3 typography overridden through
`TraktTheme.typography`; semantic styles (`title`, `body`, `label`,
`tag`) keep parity with iOS and web.
- **Accessibility**: WCAG AA contrast. Animations respect
`LocalAccessibilityManager` reduced-motion preferences. Dynamic
font scale honoured wherever practical.
Loading