Revise project status and add incompleteness note

Updated README to reflect the current status of the project and added a note about its incompleteness.
This commit is contained in:
Boof2015
2026-06-15 09:33:03 -04:00
committed by GitHub
parent be740c2d60
commit e504aca2a4
+2 -39
View File
@@ -1,42 +1,5 @@
# Astra Mobile # Astra Mobile
A standalone, Android-first audiophile music player — the mobile counterpart to desktop [Astra](../astra), built as its own independent app (no pairing, no desktop dependency). See [DESIGN.md](DESIGN.md) for the full direction and roadmap. A standalone, Android-first audiophile music player — the mobile counterpart to desktop [Astra](../astra), built as its own independent app.
## Status: M0 — Skeleton ✅ This software is incomplete, and not ready for use
The foundational app runs end-to-end on Android:
- **Design system** ported from desktop Astra — black base, cyan accent (`#38bdf8`), Inter + JetBrains Mono, the `ASTRA` wordmark, and `FLAC`/`24-bit`/`48.0 kHz` format badges (`src/theme`, `src/components`).
- **Navigation shell** — bottom tabs (Home / Library / EQ) with a persistent **mini-player** glued above the bar, plus a swipe-up **now-playing** modal (`src/app`).
- **Playback** via [`react-native-track-player`](https://rntp.dev) (Media3/ExoPlayer) — verified playing on an emulator with a live MediaSession (lock-screen / notification / Bluetooth / Android Auto controls), background playback, and live progress (`src/audio`).
- **State** — Zustand stores mirroring desktop shapes (`src/stores`), typed with ported core models (`src/types`).
Library scanning, scopes, EQ DSP, remote sources, and Last.fm are later milestones (M1M7 in DESIGN.md).
## Stack
Expo SDK 56 · React Native 0.85 (New Architecture / bridgeless) · expo-router · TypeScript · Zustand · react-native-track-player · react-native-svg.
## Prerequisites
- Node 20.19+/22.13+/24.3+ (Node 23 works but emits engine warnings)
- JDK 17, Android SDK + an emulator/device (`ANDROID_HOME` exported)
## Run
```bash
npm install # also applies patches (see below) via postinstall
npm run android # = expo run:android — builds a dev client, installs, launches
```
The first native build downloads Gradle + the NDK/CMake and takes several minutes; subsequent builds are seconds. `npm run typecheck` runs `tsc --noEmit`.
## Patches — RNTP on the New Architecture
`react-native-track-player@4.1.2` predates RN 0.85's bridgeless-only requirement, so it needs three source fixes, captured in `patches/react-native-track-player+4.1.2.patch` and applied automatically by `patch-package` on install:
1. **Compile**`Arguments.fromBundle()` now requires a non-null `Bundle` → null-safe calls.
2. **TurboModule registration**`@ReactMethod` functions written as `= scope.launch { … }` return `Job`, which the new-arch interop rejects (non-void ⇒ treated as synchronous) → converted to block bodies returning `Unit`.
3. **Event emit (bridgeless)**`MusicService.emit/emitList` used the legacy `reactNativeHost.reactInstanceManager`, which throws under the New Architecture → switched to `reactHost.currentReactContext`.
Additionally, player setup is deferred to the first play action (a foreground gesture) rather than app launch, because RNTP starts a foreground MediaSession service on setup and Android only permits that while the app is foregrounded (`src/audio/playbackController.ts`).