--- title: "Applyfold: an applicant tracking system for a growing startup" author: "@chris" author_url: https://elements.dev/users/chris published: 2026-09-30T19:15:54.472Z url: https://elements.dev/demos/2kv2t8ng/applyfold-an-applicant-tracking-system-for-a-growing-startup kind: post format: article --- # Applyfold: an applicant tracking system for a growing startup by [@chris](https://elements.dev/users/chris) ยท 2026-09-30 ## Description A careers page with PDF resume uploads, a drag-and-drop pipeline board for each job, and interview scorecards, all live. Applyfold needed resume uploads, a pipeline board that updates for everyone watching, emails to applicants, and two kinds of hiring accounts. Each of those is a part of Elements, so the agent spent its 17 minutes on the hiring workflow itself. **What Elements gave the app** - **A live pipeline board.** Applications are a LiveTable, one view per job. Dragging a candidate to a new column saves the move, and a database trigger broadcasts every new application and stage change, so each open board updates whether the change came from the careers page, a candidate's page or another board. - **Resume uploads.** The apply form sends the resume as a file field to an `@rpc` function, which checks that the bytes are a real PDF under 5 MB and stores it. The hiring team previews it on the candidate's page. - **Server calls as function calls.** Scorecards, notes, interviewer assignments and the job editor call server functions straight from the page with `@rpc`, and validation messages come back to the field they belong to. - **Email to applicants.** Each application sends a confirmation from an email template. Dragging a candidate to rejected offers a polite rejection email, sent from a second template. - **Sessions and roles.** Admins see every job and board. An interviewer sees only the candidates assigned to them, and one guard enforces it on every page and server call. - **Data from SQL files.** Migrations define the schema and seed three accounts, four jobs, 21 candidates and ten scorecards, each candidate with a one-page PDF resume built in SQL. The project server applied each one as soon as it was saved. **What the project server gave the agent** The project server runs alongside the agent and answers as soon as a file is saved: it type-checks the templates, TypeScript and SQL, applies migrations and reruns the tests, so every question came back right away and the agent kept building. **What shipped** The app type-checks with zero errors and all 19 tests pass. Every page works on desktop and phone, and live updates arrive across tabs, such as a new application or a board move appearing on another open board.