Mobile: redesign, onboarding, QR codes, logo, Spotify setup

- Redesign matching the web: album-art backdrops, Reanimated equalizer,
  spinning live ring, drifting ambient background, gradient buttons with
  spring press feedback and haptics, Space Grotesk headings, animated feed
  (enter + layout transitions); fix invisible tab labels
- Four-step onboarding for new accounts: which app you listen with (sets
  where songs open), the matching share setup, find friends (search,
  scan, invite), and a featured song. Skippable; stored server-side
- QR codes: My code (share link) and an in-app scanner (camera only, no
  microphone permission)
- Spotify setup via Last.fm or ListenBrainz with guided linking; Android
  shares Spotify automatically through the phone reader
- New logo as app icon, adaptive/monochrome icon and splash
- app.config.ts allows cleartext only for local http:// test builds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzFywujuH9TiuXbr9vjoX8
This commit is contained in:
2026-10-05 19:16:40 -04:00
co-authored by Claude Opus 5.5
parent 17ae36064c
commit 3568b71e90
44 changed files with 1481 additions and 358 deletions
+20
View File
@@ -0,0 +1,20 @@
import type { ConfigContext, ExpoConfig } from 'expo/config';
/**
* app.json holds the real config; this only adds build-time switches.
*
* Local test builds point at a dev server over plain http://, which Android
* blocks by default in release builds. Allow cleartext only when the API URL
* itself is http://, so store builds (https) stay locked down.
*/
export default ({ config }: ConfigContext): ExpoConfig => {
const apiUrl = process.env.EXPO_PUBLIC_API_URL ?? '';
const localHttp = apiUrl.startsWith('http://');
return {
...(config as ExpoConfig),
plugins: [
...(config.plugins ?? []),
['expo-build-properties', { android: { usesCleartextTraffic: localHttp } }],
],
};
};