Admissions Tracker
Single-file HTML CRM for the UFV admissions workflow. File System Access API + IndexedDB. No install, no server, no cloud.
Why
Part of what I did at UFV involved contacting prospective students at scale — Salesforce on one screen, my own notes scattered across spreadsheets. The shared CRM was slow, the spreadsheets drifted out of sync, and I needed a personal layer to keep track of who I had called, what I had said, and when to follow up.
I didn’t want to put candidate data into any cloud SaaS. So I built a single HTML file that lives on my disk and talks to a JSON file via the File System Access API.
What it does
- Tracks every prospect contacted: name, course, status, comments, call history, follow-up reminders.
- Four KPI tiles at the top: JPA (open-day attendees), Alta Portal (portal sign-ups), PA (admissions test), RP (place reserved). Updated live.
- Five views: contact list, call log, Kanban for follow-ups, charts, activity feed.
- One-click “Copy Salesforce link” per contact, so I can flip to the official CRM only when I need to.
- Date-stamped snapshots: take a Kanban snapshot today, browse last week’s state read-only.
- Excel/XLSM export of weekly KPIs (built with SheetJS) for the office’s recurring reports.
- Full-text search across names, courses, comments, notes — works while everything else is loading.
- Light/dark theme.
How it works
A single static HTML file, ~3,500 lines of vanilla JS, no build step.
State lives in a JSON file on disk (admissions.json). The browser writes to it via the File System Access API (showSaveFilePicker, showOpenFilePicker), and the file handle persists across sessions in IndexedDB — so once you’ve picked the file, opening the HTML again restores everything automatically. No re-prompting, no “where’s the file” dialog every time.
User preferences (theme, KPI configuration) live in localStorage. The XLSM export is generated client-side with SheetJS, so weekly reports are a one-click download — no Excel macros, no server round-trip.
![]()
![]()
![]()
Status
In active use as a personal tool at the UFV admissions office. A couple of coworkers have asked for a copy.
See it
- Code: private — ask me
- Contact: hello@damianvidalc.com