Overview
Chekdee is a LINE-based employee attendance system I built at turnPRO for CAMT, Chiang Mai University. Staff check in from inside LINE instead of a separate app or a fingerprint scanner, and admins get schedules, leave and reports in one dashboard. The goal was to make attendance quick for staff and hard to fake, while giving admins numbers they can trust.
Staff open the app through LINE (LIFF with LINE Login), register once, and check in by scanning a rotating QR code shown on a lobby TV; checking out is a single button in the app. Lateness and absence follow clear rules against each person's scheduled shift, and admins can correct a day with a logged reason. Leave requests are submitted through a form with attachments and emailed to the supervisor with a secure, expiring approval link. Admins manage recurring weekly schedules per employee, since staff are students whose hours follow their class timetable, alongside holidays that sync automatically from a public API.
I built the full frontend in Next.js with the App Router, TypeScript, Tailwind CSS and shadcn/ui, with all interface copy in Thai on a custom design system. The backend is written in Go with Echo, following Clean Architecture, with LINE login and password login for the system owner, JWT access tokens with refresh-token rotation, and PostgreSQL. It runs on Docker Compose on the company's own Linux server.
The core challenge was trust: check-in only means something if it cannot be faked. The QR token rotates every 15 seconds and is HMAC-signed, so a screenshot stops working almost immediately. Kiosk TVs authenticate with revocable device tokens instead of user accounts, and worked hours are calculated against the scheduled shift rather than raw timestamps. For reporting, I built a two-sheet Excel export with an employee lookup dropdown, conditional formatting and a per-employee daily log, so admins can audit the data without needing access to the system itself.