CompanyMgmt
Attendance, leave and payroll for any business, from a tea stall with two staff to a company with branches. In English and Bangla.

The problem
Our CSE327 group project was a 1,000-line FastAPI file with SQLite, in-memory sessions and unsalted passwords: fine for showing design patterns, unsafe for even one real business. I rebuilt it as a product any business can sign up for, that works in Bangla on cheap phones and keeps every company's data walled off.
What I built
- Tenant isolation enforced by the database: forced Postgres row-level security on every tenant table, composite foreign keys, and a test that calls every route with another workspace's IDs
- Clock-ins checked against each branch's area on the map, overnight shifts, per-branch time zones, and corrections that someone else has to approve
- Leave with Bangladesh Labour Act defaults, and payroll runs with four-eyes approval and payslip PDFs in English and Bangla
- Security aimed at OWASP ASVS Level 2: Argon2id, rotating refresh tokens with reuse detection, TOTP, step-up confirmation and a hash-chained audit log
- A Next.js 16 static app with a per-page CSP, light and dark themes, and WCAG 2.2 AA checks on every screen
- A FastAPI modular monolith on Cloud Run, Neon and Cloudflare, provisioned with OpenTofu; it all scales to zero when idle
Outcome
- 168 API tests at 92% coverage, all against real Postgres
- Browser journeys on desktop and phone, in English and Bangla, with accessibility and CSP checks
- Rebuilt from my CSE327 project; deployment is scripted and ready to go live
Screens

Owner's home: clock in, who's at work now, team hours and what's waiting 
Attendance records, with where each clock-in happened 
Placing a branch on the map with the area people must clock in from 
The leave calendar: who is away this month, approved and waiting 
A finalized pay run with earnings, deductions and how each person is paid 
The audit log, which can't be edited and checks its own integrity
Stack
- FastAPI
- PostgreSQL
- Next.js
- TypeScript
- SQLAlchemy
- Tailwind
- Cloud Run
- Neon
- Cloudflare
- OpenTofu