// Case study · Aug 2026 – present
Stacks Reports
An internal reporting system for SJSU's MLK Library stacks team
// The problem
Student assistants reported shelving problems, damaged books and equipment issues informally, so problems got lost, nobody could see what was open, and there was no record of who changed what.
// What I built
A full-stack web app (Flask, SQLAlchemy, SQLite) where assistants file a report by floor, location, category and priority, and the team works it from Open to Resolved.
// Result
Resolution time down by roughly 25% compared with informal reporting.
- Flask
- SQLAlchemy
- SQLite
- Gunicorn
- systemd
// Controls I designed in
- 01
Sign in
PIN authentication
Each assistant signs in with a PIN; brute-force lockout is specified for the production release.
- 02
Role check
Role-based access
Assistants file and work reports; only admins manage accounts.
- 03
Report
Structured input
Floor, category and priority are captured on every report; QR codes at the shelves are specified next.
- 04
Every change
Audit log
Each status change is recorded with who made it and when.
// Why it mattersIt's the same set of controls I test as an auditor (access, authentication, change logging), built from the other side.