Backend (Fastify + TS): FluentForms webhook -> NocoDB row + QR + MailerSend email; PIN auth; scan/lookup/redeem with per-code serialization; reusable QR codes with count-based check-in; admin search. App (Expo, one codebase): Android APK + iPhone PWA. Login, camera scanner (native + web barcode-detector split), green/red overlay with sound + haptics, admin lookup/redeem. Session token persisted per device. Ops: multi-stage Dockerfile serving API + PWA same-origin, compose bound to 127.0.0.1; Forgejo Actions runner + tag-triggered signed APK build for Obtainium. Docs in README.md and INSTALL.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 KiB
Installing Camp Scan on gate phones
Camp Scan runs two ways. Use whichever fits the device:
- Android → install the native app (best camera performance) via Obtainium, which also auto-updates it.
- iPhone / iPad → install the PWA from Safari (no App Store needed).
Either way, you enter the gate PIN once and the device stays signed in for the whole event.
Android (Obtainium)
Obtainium installs and updates apps straight from our Forgejo releases — no Play Store.
1. Install Obtainium
Get it from the Obtainium releases page or F-Droid, and install the APK (you may need to allow "install unknown apps" for your browser/file manager).
2. Add Camp Scan
Tap this on the phone:
➕ Add Camp Scan to Obtainium
If the button doesn't open Obtainium, add it manually:
- Obtainium → Add App
- App source URL:
https://git.mowden.top/Beartaria/CampgroundTickets - Obtainium detects the Forgejo source automatically → Add.
- Tap Install.
3. Updates
When a new version is released (a new vX.Y.Z tag builds an APK), Obtainium shows an update — tap to install over the top. Because every release is signed with the same key, updates install cleanly.
If the repository is private: Obtainium can't read the releases without a token. Either make the repo (or a releases-only mirror) public, or in Obtainium set a Forgejo credential/token under the app's Additional Settings. A token can also be embedded in the add-link, but anyone who sees that link gets repo read access, so prefer public releases. Ask the maintainer which applies.
iPhone / iPad (PWA)
- Open Safari (not Chrome) and go to https://scan.beartariacampgrounds.com
- Tap the Share button → Add to Home Screen → Add.
- Launch Camp Scan from the home screen. It runs full-screen like a native app.
- Allow camera access when prompted (required to scan). Camera only works over HTTPS, which the site provides.
Android users can also "Add to Home Screen" from Chrome instead of using Obtainium if they prefer the web version.
First run (all devices)
- Open Camp Scan.
- Enter the gate PIN (ask the event organizer). The first tap also enables scan sounds.
- You're in. The device stays signed in until you tap Sign out or the session expires (~30 days). You won't re-enter the PIN each shift.
Using it
- Scan: point the camera at a ticket QR. Pick how many people are entering now (a family can split arrivals across the day on one code), then Check in. Green + chime = success and the count is saved; red + buzz = a problem (already fully redeemed, not a valid ticket, or a network/database error — the reason is shown).
- Admin (top-right): if scanning won't work, search by name, email, or ticket code, then use the buttons to check people in or undo a mistaken check-in.