Founder & product builder · Jul 2026 – now
Attendance
EMAS is my own product: an employee management and attendance platform. Employees check in from their phone, managers see who's in, and HR gets clean records and leave approvals.
395 commits, all mine · live as EMAS Attence
(01)Why
Attendance still lives in spreadsheets.
A lot of teams still track attendance on spreadsheets, paper registers and WhatsApp. Nobody can say for sure who checked in, where, or when, and every branch does it a bit differently.
(02)What works today
- AttendanceCheck-in and check-out from the app, with break tracking and work-from-home and outdoor-duty states.
- GPS and field teamsLocation-aware check-ins, validated on the server against configurable office and site geofences.
- LeaveEmployees request leave; managers and HR approve it, with a clear status history for every request.
- Shifts and policiesShifts and attendance rules that apply consistently across departments and branches.
- OrganizationEmployees, departments, branches and designations in one place, with invites.
- RolesSeparate views and permissions for employees, HR, organization admins and company owners.
- MobileAndroid and iOS apps, built from the same web app with Capacitor.
(03)Screenshots
From the live product site.


Screens inside the app sit behind a login. Ask me for a walkthrough.
(04)My contribution
- Product vision, planning docs and roadmap
- Backend API and database design
- Web app, Android and iOS apps
- Auth, roles and tenant isolation
- Deployment and the public product site
(05)Architecture
Five boxes, no magic.
FastAPI and Python on the backend, PostgreSQL for data, Redis for rate limiting, Next.js for the web app, and Capacitor for the phone apps.
(06)The hard parts
01
Keeping companies apart
Multi-tenant bugs are the scary kind. I moved the company check into Postgres row-level security, set by the server on every transaction. If a filter is missing, you get nothing back, not another company's rows.
02
GPS is messy
Accuracy changes from phone to phone, and indoors it can be way off. The server makes the geofence call, not the app, and every attempt is logged so a manager can look at the odd cases.
03
Sessions inside a mobile wrapper
Cookies, CSRF protection and refresh tokens have to behave the same in the Capacitor app as in the browser. That took more debugging than any feature.
(07)Process
I wrote the plan before the code.
Before writing any code in July I wrote these seven docs, and I still go back to them:
- docs/01-project-vision.md
- docs/02-requirements.md
- docs/03-roles-permissions.md
- docs/04-database-design.md
- docs/05-api-design.md
- docs/06-ui-wireframes.md
- docs/07-roadmap.md
(08)Recent commits
- 2026-10-28fix(ci): run account deletion integration tests once
- 2026-10-27Suppress database driver details in guard failures
- 2026-10-27Add focused account-deletion guard diagnostic
- 2026-10-27Expose safe account deletion setup phase in CI
- 2026-10-27Fix async engine lifecycle in integration tests
- 2026-10-27fix: resolve backend CI regressions
- 2026-10-27fix: complete CI formatting and strict typing fixes
- 2026-10-27fix: set postgres listener config safely
(09)Status
- Product site and sign-up at emasattendance.comLive
- Everything listed aboveBuilt
- Self-service account deletionIn progress
- Fingerprint device supportIn the original plan
- Payroll modulePlanned
Want a walkthrough or to try it with your team? Get in touch.
