Attendance from one photo
Faces are matched in the browser against the centre roster. The photograph never leaves the device and is never stored β only a 128-number embedding is kept.
Footpathshala runs across zones, centres, volunteers and hundreds of children β on spreadsheets that do not talk to each other. This replaces them with one system that records what happens, then answers questions about it in plain language.
Hello, Meera π
412
children
71%
attendance
64
volunteers
ATTENDANCE TREND
Numeracy β Building blocks
Delivered π Β· 45 min
Life Skills β Practice
Coming up β³ Β· Thu
Every module writes to one database. That is the whole point β it is what makes the analytics, and UpayGPT, possible at all.
Faces are matched in the browser against the centre roster. The photograph never leaves the device and is never stored β only a 128-number embedding is kept.
UpayGPT writes the SQL, runs it on live data, and shows you the query it used. An answer nobody can audit is not an answer.
Distance from the centre is recomputed on the server, so service hours reflect where a volunteer actually stood.
Build a lesson once, schedule it across centres, and see which lessons were genuinely delivered.
Not totals. Which centre is slipping, which children are falling behind, which centres are short of volunteers.
Hours accumulate and eligible volunteers receive a serial-numbered certificate without anyone chasing a spreadsheet.
Years of spreadsheets import through a column-mapping step, so the new system starts with the history rather than pretending it does not exist.
Navigation and the controls a volunteer touches in the field are translated β not a machine-translated shell that claims more than it delivers.
Nobody at a field NGO should need SQL to find out which centre is struggling. Type the question; UpayGPT writes the query, runs it against live data, and shows you both the answer and the query.
That last part is the design. The generated SQL is always visible and always logged, and it runs under your own permissions β asking a question differently does not widen what you are allowed to see.
Three centres fell below 55%. Sitabuldi Signal dropped from 78% to 51% over six weeks β the steepest decline in the programme.
select center_name,
round(avg(attendance_rate), 1) as rate
from v_attendance_daily
where session_date >= date_trunc('month',
current_date - interval '1 month')
group by center_name
order by rate asc
limit 12Recognition runs entirely in the volunteerβs browser. The class photograph is decoded, measured, and discarded on the device β it is never uploaded, and there is no column in the schema to store it in.
What is saved is a list of 128 numbers per child, which cannot be turned back into a photograph. Every match is shown to the volunteer with a confidence reading, and they can override any row before the register is saved.
Photo captured on the volunteer's phone
stays on the device
Faces detected and measured in the browser
no upload, no server cost
Matched against that centre's roster only
128 numbers, never an image
Volunteer reviews and corrects
the model never has the last word
Sign in with a demo account to walk through every module with realistic data behind it.