FieldProof Android release build, for portfolio review. Same commit as the deployed review console.
Built by CI — run 33935381654 — at the PR #6 merge ref ef90622, whose tree 942bb45b is byte-identical to main at 76339db, the commit this tag points at and the commit the console at https://upwork-system-thun-viet.vercel.app is deployed from. Gates on that run: migrations apply from empty and from seed, pgTAP 11 files / 208 assertions (run three times), hosted smoke against the live project, Android release build, admin lint/typecheck/test/build.
Install
sha256 2d1d0fdcd79269342c3bf91dbbdad2ca28eef9f37d2eb74af18176e274a12f3a
Android 8.0+. Sideload — the app is not on Play, so Android will warn about an unknown developer; that warning is expected for any self-signed build. App version is still 0.1.0 (pubspec.yaml unchanged), hence the .2 build suffix rather than a new number.
Demo account
fieldproof-demo-inspector@yopmail.com
DemoInspector2026!
Deliberately an inspector, not an admin: the mobile app is the field-capture half of the product and RLS scopes it to that inspector's own work.
What changed since v0.1.0-demo (f12d71d)
Database, applied to the hosted project on 2026-09-05 (20260905000600–000800):
- EXECUTE on the three trigger functions withdrawn from
public,anon,authenticated;search_pathpinned to''onset_updated_at()andenforce_submission_transition(). - Self-signup closed at the database:
handle_new_user()now refuses any address not insignup_allowlist(RLS forced, no policy, unreadable by client roles). - One stranded real-device QA inspection removed from the demo data.
App (apps/mobile, 12 commits): Figma parity pass — density, findings hero, reports and settings screens; the finding editor explains the two choices it already had; an empty history no longer offers a summary or a filter; render fixes found by looking at the captured screens; the hosted smoke test no longer strands a draft, and its purge tool exists.
What to try
- Sign in — the history loads from hosted Supabase.
- Open Cavendish House — a draft, with an editable punch list.
- Turn on airplane mode, then create an inspection and add a punch item. It is kept on the device and marked Not synced, and the banner says only local drafts are shown.
- Force-stop the app and reopen it, still offline. The draft and its items are still there.
- Turn the network back on and press Retry. The draft syncs once, the marker clears, and it appears exactly once — no duplicate.
- Submit it. Submission is only offered after sync, and the record is immutable afterwards.
Known, intentionally deferred
- Offline photo capture — drafts and punch items work offline; attaching photos does not.
- ~30 s cold-start delay when the app is opened offline with no cached profile. Data is never at risk; the list simply waits for a DNS lookup to fail.
SMOKE run… do-not-keeprows may be visible in the console: each CI run submits one and the cleanup job cannot delete it until its privileged key is configured (seedocs/DEPLOY.md).