Dispatch № 11 · south-view
South-View Gallery
Community photo gallery for a historic cemetery
- React
- Vite
- Google Apps Script
- Google Sheets
- Gemini API
- GitHub Pages
A photo submission and gallery system for the Historic South-View Preservation Foundation, built with a small team, that lets visitors share photos from events and graves and lets staff curate them into a public gallery.
By the numbers
- Built the React app behind the Historic South-View Preservation Foundation's community gallery: visitors scan a QR code, submit photos, and staff approve them into a public gallery sorted by event or burial.
- Added burial records with per-grave QR codes and printable label sheets, gallery search, and multi-photo upload, all backed by a Google Sheet and Drive folder the Foundation owns, with no servers to run.
The flow
A visitor at an event, or at a grave, scans a QR code and submits one or more photos with an optional caption and a consent checkbox. An AI check flags anything questionable, a staff member approves or rejects each photo, and approved photos appear in a public gallery filtered by event or burial.
Moderation as checkable rules
Instead of asking a model "is this appropriate?", the check splits that question into specific rules, such as no personal contact info in the caption and respect for graves and burial sites, following a teammate's research. A teammate wired those rules to Gemini, which reviews pending photos when staff open the review queue. Every check returns the same result shape, so the Staff page labels results by engine without caring which one ran.
Burials and QR codes
Burials live alongside events in the same Sheet tab, each with its own QR code, gallery link, and optional details like years and plot. Staff can print a sheet of QR labels for every burial at once, and can add burials one at a time or paste many rows straight into the Sheet.
No-cost backend
Submissions are stored as rows in a Google Sheet and photos in a Drive folder, connected to the site through an Apps Script web app my teammates and I built, so the Foundation owns its data and there are no servers to maintain. Staff can moderate from the site or straight from the Sheet, and the staff page locks after repeated wrong passwords.