What broke, what's fixed, why it can't come back, and the two calls Daniel still needs to make.
The whole problem was the old design: every phone read and wrote the entire camp state as one shared document, directly to the database. A single stale phone could overwrite everyone. We moved the source of truth onto a server that mediates and authorizes every write.
Under the hood: 16 of the app's data domains were also moved out of the shared blob into proper database tables (blob shrank ~740 KB → 75 KB), so reads and writes are scoped per-record instead of whole-document.
The re-architecture had accidentally broken parents' ability to add notes/photos. Rebuilt: a parent enters their phone, gets a session scoped to their own children, and can edit their kids' notes/photos — and nothing else. Verified end-to-end on the live system.
Anonymous writes blocked, a real minimum-version gate added, and attendance now validated against the roster. Details in "Why the bugs can't return" below.
5 bad marks (1 phantom, wrong-group, duplicates) removed. True present: Day 2 = 96, Day 3 = 93 (+1 each pending one Daniel call). The root cause is now blocked server-side.
New address summercampsos, old one auto-forwards, and every stale app is force-updated to the current version. "This is the new system" — as intended.
We've had this conversation before and I was wrong then — so this time it's four concrete server guarantees, each with the live proof I ran against the real system tonight. The point is not "we tested more"; it's that the class of failure is now structurally impossible, not just fixed.
Honest limit: the one thing software can't decide for us is human judgment — e.g. which group a child actually belongs to. Where the roster itself is ambiguous, that's flagged for Daniel below rather than guessed.
| Role | Who | Logins |
|---|---|---|
| Group instructors | 1 per group (g1–g7) | 7 |
| Young-trainer volunteers (משמריסטים) | every active volunteer | 33 |
| Core staff | managers / coordinators | 5 |
| Stations | entry · photos · logistics | 3 |
| Admins | Tom, Daniel | 2 |
| Total | 50 | |
All 50 credentials are minted and sit in a private click-to-copy sheet for Daniel (one tap copies a ready-to-send login message per person). It is not published here — it holds passwords. Everyone is prompted to set their own password on first login. Daniel: distribute before next camp day
No login. They enter the phone their child is registered under, see their kid(s), and can add/edit notes and photos. It saves to the server and persists — verified live. They also see their child's full schedule and info (reading was never restricted).
They cannot edit the schedule, other children, groups, or staff data — those writes are dropped by the server. This is the change that makes the Jul-6 incident impossible. Seeing the schedule ≠ editing it.
When the project was migrated (~3 weeks ago, before us) the old storage was deleted. 65 photos point at that deleted storage and are unrecoverable — 0 can be restored by us (verified against current storage). They've been broken in the app for weeks; the migration faithfully carried dead links. The 26 working photos (current project + Google Drive) are fine.
Possible shortcut before reshooting: 14 orphaned image files still sit in current storage under an old restore/ folder with no links pointing to them. They may match some of the 65 — worth a quick visual check before retaking those.
| Category | Count |
|---|---|
| Students | 28 |
| Volunteers (משמריסטים) | 22 |
| Dogs | 8 |
| Staff | 4 |
| Group instructors (אנה g2 · מרגריטה g6 · לי g7) | 3 |
Full name-by-name list (grouped) is ready for Daniel — the photos station login (station-photos) is the fastest way to reshoot them in-app.
Items 2 & 3 are human calls only Daniel/the instructors can make — the data is ambiguous and I won't guess with real children's records. Everything else is done.