Skip to content

HAN-10: Stashtag theme tokens, Home screen, pin app icon - #2

Open
StashtagAI wants to merge 3 commits into
han-5-expo-scaffoldfrom
han-10-theme-home
Open

StashtagAI wants to merge 3 commits into
han-5-expo-scaffoldfrom
han-10-theme-home

Conversation

@StashtagAI

Copy link
Copy Markdown
Owner

This PR is stacked on #1 (HAN-5). Merge #1 first, then retarget this PR to main.

What changed

  • Theme (src/constants/theme.ts, palette.ts): adds light and dark colour sets from Color theme.pdf, and the app follows the system appearance. Each kind has a KindColors entry with color, onColor, chip and onChip:
    • Light: Ink text on Mint and Aqua. White text only on Cobalt (4.6:1) and Indigo (5.0:1).
    • Dark: white fails against all four lighter kind colours (about 1.5 to 2.9:1), so dark mode uses Night text on every kind colour. The primary button uses Night text too.
    • theme.test.ts checks every pairing meets WCAG AA (4.5:1) and that no tile puts white text on Mint or Aqua.
    • The brief has no dark muted-text colour. I added #93A6BF, which is 6.5:1 on Surface.
  • Home (src/app/(app)/index.tsx) follows the mockup:
    • "Your stash" header and a search field. Search matches item names, or an item's own tag when the query is a single word.
    • A 2×2 grid of Eats, Trips, Recipes and Do tiles.
    • A "Recently stashed" list of real items rows. Each row has a kind-coloured thumbnail, "Kind · from Instagram/TikTok" and a #tag chip.
    • The chip shows the item's tag, falling back to the list's tag and then the source link's. HAN-6 currently saves tags on links.
    • Links still being processed appear at the top as "Sorting your link…".
    • Loading, empty and error states are handled, and the list refreshes when you come back to Home.
    • The "+ Stash a link" button stays at the bottom and opens the HAN-5 intake as a form sheet.
  • Navigation: the tab bar is gone (the mockup has none). It's now one stack: Home → Kind (categories and their lists) → List (items), with Stash a link as a sheet. I removed the sample library, so every screen shows real data only.
  • Logo, concept B (pin):
    • src/constants/brand.ts holds the mark, the only place it's defined.
    • <PinMark> draws it in the app (using react-native-svg) and can be reused for map pins later.
    • npm run icons regenerates the iOS light, dark and tinted icons, the light and dark splash screens, the Android adaptive icon layers and the favicon.
    • The old Expo .icon bundle is removed. I checked that expo prebuild -p ios produces the AppIcon set with dark and tinted variants and the dark splash colour.
  • Shared: controlled by Features.shared, which is off.

Screenshots

I couldn't run the iOS simulator here. This runner is Linux with no Supabase anon key or test user. These screenshots come from the web build in a headless browser at iPhone 15 Pro size (393×852, @3x), with Supabase responses stubbed to match the mockup. The text is rendered in a Linux font rather than SF Pro.

Light Dark Empty (light) Empty (dark)

App icon (light, dark, tinted, then 120/80/60/40), the light and dark splash, the Android monochrome icon and the favicon:

Checks

npm run typecheck, npm run lint and npm test (40 tests) all pass, and expo-doctor passes 20/20 checks.

Not verified yet

  • On-device rendering: SF Symbols, the form-sheet detents and the system font.
  • Real rows from Supabase.

Both need a dev build or TestFlight run.

🤖 Generated with Claude Code

StashtagAI and others added 3 commits November 6, 2026 17:01
… (HAN-10)

- Light/dark theme from Color theme.pdf, following the system appearance.
  KindColors per kind with onColor/chip/onChip; Ink on Mint/Aqua, white only
  on light Cobalt/Indigo, Night on all dark kind colours. WCAG AA unit-tested.
- Home to match the mockup: "Your stash" + search, 2x2 Eats/Trips/Recipes/Do
  tiles, "Recently stashed" rows (kind thumbnail, "Kind · from Instagram",
  #tag chip) on real Supabase items, pending links, loading/empty/error
  states, pinned "+ Stash a link" opening the intake sheet.
- Tabs replaced by one stack: Home, Stash a link (form sheet), Kind > Category
  > List, List > Items. Sample library removed; screens use real data only.
- Logo concept B (pin with #) in src/constants/brand.ts; <PinMark> for in-app
  and later map pins; `npm run icons` generates iOS light/dark/tinted icons,
  light/dark splash, Android adaptive layers and favicon from it.
- Shared toggle behind Features.shared (off; Premium, later).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Rebuild the pin mark in src/constants/brand.ts on the geometry of the board's
pin-icon-*.svg files (120 artboard, path, # lines, tile layout, stroke widths
that grow as the icon shrinks). The originals live in assets/brand/ and a test
checks the generator reproduces the primary, dark, mono and favicon SVGs.
Regenerate the iOS, splash, Android and favicon PNGs from it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Supabase magic-link email carries no code unless the template is
edited, so the board could not finish signing in on the iOS build.
Password sign-in/sign-up is now the default; the magic link stays as
an alternative.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant