Skip to content

feat(apps): render /apps as an Android home-screen launcher on phones#6

Merged
MichaelTaylor3d merged 1 commit into
mainfrom
feat/apps-android-launcher-51
Jul 5, 2026
Merged

feat(apps): render /apps as an Android home-screen launcher on phones#6
MichaelTaylor3d merged 1 commit into
mainfrom
feat/apps-android-launcher-51

Conversation

@MichaelTaylor3d

Copy link
Copy Markdown
Contributor

Apps → Android home-screen launcher (#51, extension popup #59)

The mobile Apps view now reads as a genuine Android launcher, and on phones it is the default landing — a phone visitor to explore.dig.net lands on the launcher (the "just like the home screen on your phone" promise), not the store.

What changed

  • Clear 600px breakpoint. At or below 600px, /apps (and the phone landing /) render as a real home screen: a full-bleed, fixed violet→magenta ambient wallpaper, four even full-width columns of big rounded squircle icons floating with soft drop shadows, labels beneath, the grid flowing from the top, and a decorative bottom home-indicator pill. Above 600px the tidy centered desktop icon grid stands unchanged — the switch is crisp, not a gradual reflow.
  • Width-aware landing. / on a phone (≤600px) defaults to the launcher; on desktop it defaults to the curated store. ?view=store|apps and a filter query (?q=/?category=) override the default, so both surfaces stay deep-linkable and the Store pill stays reachable from the launcher on a phone. /apps is always the launcher; /app/<slug> + not-found are unaffected. (Body is client-rendered → correct surface paints on first render, no flash.)
  • AppIcon untouched. AppIcon is CRITICAL/reused across the store cards, featured carousel, and detail page — the launcher re-skins it via CSS only (never its API), per §2.0.
  • New useLauncherViewport hook (mirrors useReducedMotion); ViewTabs gains a storeHref prop; wallpaper + home-indicator are decorative (aria-hidden).

Breakpoint

600px — ≤600 = phone launcher, >600 = desktop store/grid.

Blast radius (gitnexus, upstream)

  • AppTile — LOW, 0 upstream callers (only AppsHomeScreen).
  • AppsHomeScreen — LOW, 0 upstream (only the /apps+/ routes).
  • AppIconCRITICAL, reused by AppCard/FeaturedSlide/AppDetailPage/AppTile across 7 flows → not modified; re-skinned via CSS descendant selectors only.
  • App — routing gained the width-aware home surface; store view preserved. Change scoped to these.

Verification (this session)

  • Unit + coverage: 199 tests pass, coverage 99.66% lines / 91.96% branches (gate ≥80%).
  • a11y e2e: 70 Playwright tests pass@axe-core/playwright WCAG 2.2 AA 0 violations on /apps in dark AND light, desktop AND mobile; launcher stays keyboard-operable + SR-sane; prefers-reduced-motion respected.
  • typecheck clean, lint 0 errors, build OK.
  • Visually inspected the launcher at 360 / 390 / 414 (dark + light) + desktop — unmistakably an Android launcher below the breakpoint, tidy store/grid above.
  • i18n: no new user-facing copy (decorative chrome only) → all 14 locales stay complete (completeness test green).

Screenshots (mobile launcher)

390px dark 390px light
390 dark 390 light
360px dark 414px dark phone root / → launcher
360 dark 414 dark root 390

Desktop stays the store/grid above the breakpoint: /apps desktop · / desktop → store

Version

minor 0.3.1 → 0.4.0 — notable additive visual/UX capability (new launcher presentation + width-aware landing), no breaking change.

Refs #51. Extension popup embed: #59.

Below a clear 600px breakpoint the Apps view becomes a genuine Android
launcher: a full-bleed, fixed violet→magenta ambient wallpaper, four
even full-width columns of big rounded (squircle) app icons floating
with soft drop shadows, labels beneath, the grid flowing from the top,
and a decorative bottom home-indicator pill. Above the breakpoint the
tidy centered desktop icon grid stands unchanged — the switch is crisp.

Landing is now width-aware: a phone visitor to `/` lands ON the launcher
(the "just like your home screen" promise), a desktop visitor on the
curated store. `?view=store|apps` and a filter query (`?q=`/`?category=`)
override the default so both surfaces stay deep-linkable and the Store
pill stays reachable from the launcher. `/apps` is always the launcher;
`/app/<slug>` and not-found are unaffected.

AppIcon (CRITICAL/reused across store + detail) is untouched — the
launcher re-skins it via CSS only. The wallpaper + home-indicator are
decorative (aria-hidden); labels keep WCAG AA contrast in dark + light.

This is what the dig-chrome-extension Apps tab embeds in its popup (#59):
the popup renders as a phone launcher at ~360–414px.

Refs #51.
@MichaelTaylor3d MichaelTaylor3d merged commit 4a88838 into main Jul 5, 2026
6 checks passed
@MichaelTaylor3d MichaelTaylor3d deleted the feat/apps-android-launcher-51 branch July 5, 2026 06:14
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