Spend by user ·
Grouped from raw usage logs. “GritLift-paid” is what your pool key absorbed; BYOK is informational (the user paid it).
| User | Calls | GritLift-paid | BYOK | Features |
|---|
Spend by feature ·
| Feature | Calls | GritLift-paid | BYOK |
|---|
Most recent 200 calls. Failed calls never log — treat these totals as a floor and reconcile the pool key against the OpenRouter dashboard.
| When | User | Feature | Model | Tokens in/out | Cost | Key |
|---|
Every account holding the tester flag rides the pool key for free — the flag never expires on its own. opened within 3 days, within 14, gone quiet. “Last opened” needs an app build from 18 Jul or later; older installs show “—”.
| Who | Last opened | App | Workouts 30d | Last workout | Subs | Pool spend | Sub UI |
|---|
Sent from the app’s Send Feedback screen, newest first. “Actioned” = fixed in the product; “Duplicate” = closed without action (already reported); “Replied” = the person was told. “Reply” pre-targets the Messages composer at that person — your reply lands as a push + in-app banner.
| When | Who | Message | App | Status |
|---|
Live from the main site — the release script updates it on every build and OTA. Open full page
Writes a broadcast the app shows as a Home banner on next open (no push yet — that needs a binary with FCM). Targeting is client-side: never put secrets in one.
| Sent | Title | Target | Status |
|---|
Rollup ledger check ·
The app's own per-user monthly rollup (users/{uid}/aiUsage) vs the raw logs above. They should agree from Jul 2026 on; earlier months were never backfilled.
| User | Ledger GritLift-paid | Ledger BYOK | Raw GritLift-paid | Raw BYOK | Match |
|---|