Add the Rippr Flutter port: source, history bundle, and installable APK

The port runs on Android and iOS and is feature-complete; the native Android app
is superseded but kept, since it is still the only version that has recorded real
rides.

rippr-flutter-1.0-debug.apk is package com.rippr.port, deliberately different
from the native com.rippr so both install side by side. Recording the same ride
on both at once is the strongest available check that the port is faithful.

Added INSTALL.md covering both platforms. Android is a one-line adb install; iOS
has no APK equivalent and must be built and signed through Xcode with a free
Apple ID, which gives a 7-day profile.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-15 22:37:45 -05:00
parent 64f5dff30b
commit 0bc42b2e5a
98 changed files with 8417 additions and 24 deletions

View File

@@ -1,54 +1,83 @@
# Rippr — copies held here
Rippr is a native Android GPS ride recorder for motorcycles. Its canonical repo is
`~/dojo/rippr`, which **has no git remote** — it exists only on that machine, so the
bundle below is the only off-machine copy of its history.
Rippr is a GPS ride recorder for motorcycles. There are now **two** codebases, and
neither has a git remote — they exist only on that machine, so the bundles below are the
only off-machine copies of their history.
**Snapshot taken at:** `d418920` — "v3: add waypoint route planning; record that handlebar mounting changes the premise" (21 commits)
| Repo | What it is |
|---|---|
| `~/dojo/rippr` | The original **native Android** app (Kotlin, v1 → v2.0.1). **Superseded**, but still the only version that has recorded real rides. |
| `~/dojo/rippr-flutter` | The **Flutter port** — Android *and* iOS. Feature-complete, better tested, never yet ridden. |
**Snapshots taken at:** native `ba57a92`, Flutter `fc6d8f9`.
## What is here
| File | Purpose |
|---|---|
| `rippr-src/` | Browsable source, exported with `git archive HEAD`. No history; will drift. |
| `rippr-full-history.bundle` | Full git history. The actual backup. |
| `rippr-2.0.1-debug.apk` | Latest installable build (debug-signed) |
| `rippr-2.0-debug.apk`, `rippr-1.0-debug.apk` | Previous builds |
| `rippr-flutter-src/` | Flutter port, browsable source (`git archive HEAD`) |
| `rippr-flutter-history.bundle` | Flutter port, full git history — the actual backup |
| `rippr-flutter-1.0-debug.apk` | **Installable Flutter build** (`com.rippr.port`) |
| `rippr-src/` | Native app, browsable source |
| `rippr-full-history.bundle` | Native app, full git history |
| `rippr-2.0.1-debug.apk` | Native app, latest installable build (`com.rippr`) |
| `rippr-2.0-debug.apk`, `rippr-1.0-debug.apk` | Older native builds |
`rippr-src/` contains tracked files only — no build outputs, no `local.properties`, no
nested `.git`.
**The two APKs use different application ids on purpose** (`com.rippr` vs
`com.rippr.port`), so both install side by side. That is not an accident — validating the
port depends on recording the same ride on both at once.
## Restoring the full repo
## Installing
See **[INSTALL.md](INSTALL.md)** for Android and iOS, including the sideloading route for
iPhone (which needs a Mac and takes about ten minutes).
## Restoring either repo
```bash
git clone rippr-flutter-history.bundle rippr-flutter
cd rippr-flutter && flutter pub get && dart run build_runner build
flutter test
# or the native app
git clone rippr-full-history.bundle rippr
cd rippr
echo "sdk.dir=$HOME/Library/Android/sdk" > local.properties
cd rippr && echo "sdk.dir=$HOME/Library/Android/sdk" > local.properties
./gradlew assembleDebug
```
Needs **JDK 17–21** — AGP does not support 25 — and the Android SDK with platform 35 and
build-tools 35.
Both need **JDK 17–21** for Android — AGP does not support 25.
## Where to start reading
Inside `rippr-src/`:
Inside `rippr-flutter-src/`:
- `README.md` — what the app is and its current state
- `docs/ARCHITECTURE.md` — the design decisions and why
- `docs/v3/BACKLOG.md` — known gaps, deferred work, what must not regress
- `docs/TESTING.md` — especially "What the emulator cannot verify"
- `docs/v2/PROGRESS.md` — every bug found during v2 development
- `README.md` — status, and the two bugs the port found in the native app
- `docs/port/PARITY-AUDIT.md` — feature by feature, with the evidence behind each claim
- `docs/port/REAL-RIDE-CHECKLIST.md` — **the outstanding work**
- `docs/ARCHITECTURE.md` — why it is built this way
- `docs/port/PROGRESS.md` — everything that went wrong during the port
Inside `rippr-src/` (native): `docs/v2/PROGRESS.md` and `docs/TESTING.md` remain the
record of how the app got here.
## Keeping these current
```bash
cd ~/dojo/samplez
rm -rf rippr-flutter-src && mkdir rippr-flutter-src
git -C ~/dojo/rippr-flutter archive HEAD | tar -x -C rippr-flutter-src
(cd ~/dojo/rippr-flutter && git bundle create /tmp/fb.bundle --all) \
&& mv /tmp/fb.bundle rippr-flutter-history.bundle
rm -rf rippr-src && mkdir rippr-src
git -C ~/dojo/rippr archive HEAD | tar -x -C rippr-src
(cd ~/dojo/rippr && git bundle create /tmp/rb.bundle --all) && mv /tmp/rb.bundle rippr-full-history.bundle
(cd ~/dojo/rippr && git bundle create /tmp/rb.bundle --all) \
&& mv /tmp/rb.bundle rippr-full-history.bundle
git bundle verify rippr-flutter-history.bundle
git bundle verify rippr-full-history.bundle
```
Note the export wipes `rippr-src/` wholesale, which is why this file lives at the repo
root rather than inside it.
The exports wipe those directories wholesale, which is why this file and `INSTALL.md`
live at the repo root rather than inside them.