QR ATTENDANCE MANAGEMENT SYSTEM (QR-AMS)

Developed by Kiko Abellera
Checking…
Google Sheets: not connected

Administrator

Everything below is admin-only: event setup, roster and QR codes, the attendance log, PDF reports, and connection settings.

Event Details

Start here. Name the event and set how many days it runs — everything else (QR codes, scanning, reports) is organized under this event.
Each Day has a Morning and Afternoon session, each with its own Time In and Time Out — set on the Scan Attendance tab. A student can only be recorded once per checkpoint (e.g. Day 1 Morning Time In), so accidental double-scans are automatically blocked.
Only allow scanning on each Day's actual date
Blocks Time In/Out if the selected Day's assigned date is in the past or hasn't arrived yet — e.g. Day 1 (Jul 20) can't be scanned on Jul 21 or Jul 19. Turn off if you need to record a late correction.
➕ Add StudentsManual entry, paste a list, or import from Excel
Add one student
Paste a list
One student per line: ID, Name, College, Program
Import from Excel
🔄 Sync Roster to Other Scanning DevicesSend the student list + event setup to another phone/laptop
No programs found in roster yet.
Leave College on "All" and no programs checked to export everyone. Check one or more programs to send only those students to a device.

Roster (0)

Filter, print QR cards, or manage the student list below.
No students added yet.
0
Total Scans
0
Time In
0
Time Out
0
Pending Sync

Full Attendance Log

No attendance recorded yet.

Archived Events

When you change the Event Name to a new event, the previous event's scan records are archived here automatically instead of being lost — they're kept out of the active log so a new event starts clean.
Good for multi-day events — once a day is done and confirmed synced to Google Sheets, archive just that day to free up space on this device without touching the other days still in progress.
No archived events yet.

Student Attendance Report

Generates a printable PDF for one student showing Time In / Time Out for every day and session of the current event.

All Students — Bulk Report

One combined PDF, one page per student, grouped by College and Program, alphabetical by name within each group. Useful for filing after the event, or for a student leader to pull just their own college/program.

Device Storage

This device keeps the roster, attendance log, and archives in the browser's local storage — a fixed pocket of space per device (often ~5MB on iPhones, ~10MB on Android/desktop). This shows roughly how full that is.
Calculating…
Running low? Archive finished days (Log tab → Archive by Day) after confirming they've synced to Google Sheets, then delete old archives once you've downloaded their CSV backup.

Google Sheets Connection

Every scan is sent live to a Google Sheet through a small Apps Script you deploy once. See setup steps below.

Admin Access

The Event, Roster, Attendance Log, Reports, and this Settings tab all require the admin username and password. The Scan Attendance tab stays open for anyone to use.
Important: this password check runs inside the browser, not on a server — it's meant to stop casual access by students or volunteers at the check-in table, not to withstand someone deliberately inspecting the page's code. Don't reuse a sensitive password here.

One-time Google Apps Script Setup

Do this once per Google Sheet you want attendance to sync to.
  1. Open (or create) the Google Sheet you want attendance saved to.
  2. Go to Extensions → Apps Script.
  3. Delete any starter code and paste the script shown below.
  4. Click Deploy → New deployment. Choose type Web app.
  5. Set "Execute as" to Me, and "Who has access" to Anyone.
  6. Click Deploy, authorize when prompted, then copy the Web app URL.
  7. Paste that URL into the field above and click Save Settings, then Send Test Row — check your Sheet for a row that says TEST.
Because Google Apps Script doesn't send back normal browser CORS headers, this app posts data "blind" (it can't read the reply). Every scan is also kept in this app's local log as a backup, so nothing is lost even if a sync silently fails — use Retry Pending Sync on the Log tab if you were ever offline.
If a row still doesn't appear after sending a test: check the Sheet for a row starting with DEBUG or PARSE_ERROR — it will show you the exact reason the script gave up. Also open Deploy → Manage deployments in the Apps Script editor and confirm "Who has access" is set to Anyone, not "Anyone with Google account" — the app sends requests anonymously, so a login-restricted deployment will reject them without any visible error on your end.
Already deployed before? This version removes the "Day" number column (it was showing up as odd 1899/1900 dates due to a Google Sheets auto-formatting quirk, and Day Date already covers it). Paste the updated script in, then Deploy → Manage deployments → edit (pencil) → New version → Deploy — same URL, no need to reconnect. Your existing Sheet's old header row won't update automatically — either delete the Attendance sheet tab so it regenerates cleanly, or manually update the header row to: Event, Day Date, Session, Mode, Time, Student No, Name, Year Level, College, Program.
Tap Start Scanning to open the camera
Camera Off

Recent Scans

Live feed for this session
Nothing scanned yet.

Daily Attendance Report