Add spec.md: goal, limits and rules for working on the project

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
XoséandClaude Opus 5.5 committed 2026-10-25 09:05:36 +01:00
1 parent 4044303764
commit b2ca212c45
1 file changed
+52
+52
View File
@@ -0,0 +1,52 @@
# Podlite (Android) — spec
The short contract for working on this app. `README.md` is the user guide; this file says what the app is
for, what limits it lives within, and what must not break.
## Goal
A small Audiobookshelf podcast client for the Samsung Galaxy Mini whose progress stays in sync with the
server and other apps.
## Target and hard limits
- Samsung Galaxy Mini GT-S5570 and other Android 2.2+ phones (API 8), 240×320 ldpi.
- Native Java, no libraries beyond the bundled TLS stack. All sizes in `res/values/dimens.xml`.
- Galician interface; warm dark colours with an amber accent (from the radio icon).
## Current scope (1.11)
- Login with user/password (refreshes 2.26+ short-lived tokens; older servers' long-lived token) or an API key.
- HTTP on the LAN; bundled TLS 1.2 for `https://` (Mozilla roots); other certificates shown by fingerprint,
trusted once (trusting the issuing CA so renewals work), forgettable in Settings.
- Loopback stream proxy for HTTPS, forwarding seeks with a fresh token per request.
- Tabs: Latest (continue listening + newest), Shows, Saved (SD-card downloads, Wi-Fi only by default).
- Player: skip back/forward (amounts in Settings), seek, show notes, sleep timer, mark played, close.
- Progress sync every 15 s and on pause; offline positions sent later.
- Headset buttons; pauses for calls and unplugging.
## Out of scope
- Audiobooks, playback speed (Android 2.x can't), HLS/transcoded streams (so no Opus).
## Must not break
- An episode only counts as played within a minute of its real end; drop-outs and cut files are retried or
reported, never marked played. A stall of 12 s is reported.
- Package `com.miniabs` and `miniabs.keystore` (password `miniabs`): updates install over MiniABS.
- `src/com/miniabs/net/` is a copy of `tlskit`: change it in `../tlskit` and reinstall.
- Installs to internal storage.
## Code map
`Api` · `PlayerService` · `StreamProxy` · `DownloadService` / `Downloads` · `Trust` / `TrustPrompt` · `Prefs` ·
activities Home, Podcast, Player, Login, Settings · `net/` tlskit · `tools/make_icons.py`, `translate_gl.py`.
## Build, test, release
- `ANDROID_JAR=/path/to/android-8/android.jar ./build.sh` (JDK, aapt, dx, zipalign, apksigner, `BC_SRC`).
- `JSON_JAR=… test/run_tests.sh`: API, JSON, progress, HTTPS trust and proxy against `test/mock_abs.py`,
with good, expired, wrong-host, forged and self-signed certificates (`test/make_pki.sh`).
- Release: raise `versionCode`/`versionName`, build, add `changes` in `../tenda-lite/repo/apps.json`, commit
and push, `../tenda-lite/repo/publish.sh`.
- Siblings: `podlite-ios`, `podlite-mac`; behaviour fixes are backported between them.