Any place or thing that needs regular checks
Checkpoints and rounds with QR codes

What you get
- A QR code and phone page per checkpoint
- Visits with a name, a PIN and a checklist
- Problems reported with a photo
- Overdue alerts by email
- A dashboard with history and CSV export
- Optional photo and location safeguards
The prompt
Change the names, prices and details to yours. Your AI needs LazyFrog connected first: two minutes.
Use LazyFrog to build checkpoint rounds for the places we check regularly: a QR code per checkpoint that opens a checklist on the phone, problems reported with a photo, an email when a check is overdue, and a dashboard with history. For the look: rugged and high-contrast like safety gear, charcoal and white with hi-vis yellow, a bold industrial sans, big buttons easy to tap with gloves on, status as green, amber and red tags, and a landing page with a photo of a phone scanning a code on a door.
The live demo
What Codex built from that prompt on 14 November 2026, in about 6 minutes, then published as an example. Try it: what you add is put back every night.
The full spec
The same app with every detail named: the pages, fields and tables. Use it when you want exactly this app; the short prompt leaves those choices to your AI.
Use LazyFrog to build checkpoint rounds for the places and things we check regularly: rooms, machines, vehicles, fire extinguishers. Checkpoints go in a table called checkpoints (site, name, type, every_hours, code, require_photo, latitude, longitude, check_location), grouped by site, each with a random code of at least 128 bits; checkpoint types (checkpoint_types: name, checklist as a list of items) give a checkpoint its optional checklist. The app makes a QR code for each checkpoint (an npm QR library is fine) pointing to its phone page at /c/<code>, as an image at /admin/checkpoints/<id>/qr.png, and a printable PDF sheet of a site's codes with each checkpoint's name under its code. The phone page has two big buttons. "Log a visit": the person picks their name and types their PIN (a table called people: name, pin_hash; PINs of 4 to 6 digits, checked on the server, with a pause after a few wrong tries), ticks the checklist, and the visit is saved with its time (a table called visits). "Report a problem": a description, the urgency (low, normal or urgent) and a photo taken with the phone's camera (a table called problems: checkpoint_id, description, urgency, photo_path, status as open, in progress or fixed, reported_by, reported_at; photos kept privately in the project's file store, JPEG, PNG, WebP or GIF, checked by their first bytes). Per checkpoint I can require a photo with each visit, and a location check: the phone page sends the browser's position, and a visit more than 100 m from the checkpoint's saved position is refused. The about text says honestly that a printed code can be photographed and used elsewhere: these checks discourage that, they don't prevent it. A checkpoint is overdue when its last visit (or, before one, its creation) is older than every_hours. One cron job every 15 minutes marks the checkpoints that have just become overdue and emails me (the owner) the list, each checkpoint once until it's visited again. The manager's side is under /admin, protected with LazyFrog's protected pages (I'll choose the password in the portal): a dashboard with each checkpoint's last visit, the overdue ones and the open problems with their photos and a way to move them along, the history per checkpoint and per person, people and their PINs, and /admin/export.csv with every visit (site, checkpoint, person, visited_at, checklist). Add a JSON API: POST /admin/api/people with {"name", "pin"}; POST /admin/api/checkpoints with {"site", "name", "type", "every_hours"} answers {"id", "code"} (a type that doesn't exist yet is made, with no checklist); GET /admin/api/overdue lists the overdue checkpoints; POST /c/<code>/visit with {"name", "pin", "checked": [...], "latitude", "longitude"} answers 201, or 403 for a wrong PIN; POST /c/<code>/problem is a multipart form (description, urgency, name, and the photo in the field photo). Start with two example sites and checkpoints of different kinds, among them a bathroom, a forklift and a fire extinguisher whose last visit was two days ago against every 24 hours (so it shows as overdue), and three made-up people.
The full spec was built and checked on LazyFrog on 31 October 2026. It took about 5 minutes.