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>
57 lines
3 KiB
Markdown
57 lines
3 KiB
Markdown
# 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](https://github.com/ImranR98/Obtainium/releases) 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](obtainium://add/https://git.mowden.top/Beartaria/CampgroundTickets)
|
||
|
||
If the button doesn't open Obtainium, add it manually:
|
||
1. Obtainium → **Add App**
|
||
2. **App source URL:** `https://git.mowden.top/Beartaria/CampgroundTickets`
|
||
3. Obtainium detects the **Forgejo** source automatically → **Add**.
|
||
4. 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)
|
||
|
||
1. Open **Safari** (not Chrome) and go to **https://scan.beartariacampgrounds.com**
|
||
2. Tap the **Share** button → **Add to Home Screen** → **Add**.
|
||
3. Launch **Camp Scan** from the home screen. It runs full-screen like a native app.
|
||
4. 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)
|
||
|
||
1. Open Camp Scan.
|
||
2. Enter the **gate PIN** (ask the event organizer). The first tap also enables scan sounds.
|
||
3. 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.
|