Skip to content
codexa

Web apps · React

Hiring pipeline

Move candidates from application to offer, with roles, interview dates and a stage board.

Hiring pipeline starter, as built from its own files
Starter screenshot captured from this template's own build at 1440×900. It shows the template as it ships, not output generated from a prompt.

What you get

A hiring tracker for a growing team: log candidates, their role, source and next interview, then drag the conversation forward stage by stage on the board. The roles, stages and sample candidates live in src/app.ts.

Files

Exactly what is copied into a new project: 12 files, nothing generated.

Raw data: GET /api/v1/templates/app-hiring-pipeline

src/app.ts
src/app.ts
import type { AppSpec } from "./types"; /** Everything this app shows. Edit freely. */export const app: AppSpec = {  "brand": "Shortlist",  "icon": "star",  "storageKey": "shortlist-candidates-v1",  "entity": {    "singular": "Candidate",    "plural": "Candidates"  },  "title": "Candidates",  "subtitle": "Open roles: product designer, backend engineer, support lead",  "currency": "$",  "titleKey": "name",  "statusKey": "stage",  "tones": {    "Applied": "neutral",    "Screening": "accent",    "Interview": "warn",    "Offer": "good",    "Rejected": "bad"  },  "views": [    "table",    "board"  ],  "fields": [    {      "key": "name",      "label": "Name",      "type": "text",      "required": true    },    {      "key": "role",      "label": "Role",      "type": "select",      "options": [        "Product designer",        "Backend engineer",        "Support lead"      ]    },    {      "key": "email",      "label": "Email",      "type": "email",      "hideInTable": true    },    {      "key": "source",      "label": "Source",      "type": "select",      "options": [        "Referral",        "Job board",        "Careers page",        "Outreach"      ]    },    {      "key": "interview",      "label": "Next interview",      "type": "date"    },    {      "key": "salary",      "label": "Expected salary",      "type": "money"    },    {      "key": "stage",      "label": "Stage",      "type": "select",      "options": [        "Applied",        "Screening",        "Interview",        "Offer",        "Rejected"      ]    },    {      "key": "notes",      "label": "Notes",      "type": "longtext",      "hideInTable": true    }  ],  "summary": [    {      "label": "Candidates",      "kind": "count"    },    {      "label": "In interviews",      "kind": "count",      "status": "Interview"    },    {      "label": "Offers out",      "kind": "count",      "status": "Offer"    },    {      "label": "Offer budget",      "kind": "sum",      "field": "salary",      "status": "Offer"    }  ],  "seed": [    {      "name": "Maya Fernandes",      "role": "Product designer",      "email": "maya.fernandes@mail.com",      "source": "Referral",      "interview": "2026-11-02",      "salary": 118000,      "stage": "Interview",      "notes": "Strong portfolio, mobile banking case study."    },    {      "name": "Daniel Kim",      "role": "Backend engineer",      "email": "dkim.dev@mail.com",      "source": "Careers page",      "interview": "2026-10-29",      "salary": 142000,      "stage": "Interview",      "notes": "Go and Postgres. Systems round next."    },    {      "name": "Grace Adeyemi",      "role": "Support lead",      "email": "grace.adeyemi@mail.com",      "source": "Job board",      "interview": "2026-10-24",      "salary": 84000,      "stage": "Offer",      "notes": "Offer sent Oct 26, start date flexible."    },    {      "name": "Jonas Weber",      "role": "Backend engineer",      "email": "jonas.weber@mail.com",      "source": "Outreach",      "interview": "2026-11-06",      "salary": 136000,      "stage": "Screening",      "notes": ""    },    {      "name": "Lucia Moreno",      "role": "Product designer",      "email": "lucia.m@mail.com",      "source": "Job board",      "interview": "2026-11-09",      "salary": 105000,      "stage": "Applied",      "notes": ""    },    {      "name": "Ethan Cole",      "role": "Support lead",      "email": "ethan.cole@mail.com",      "source": "Referral",      "interview": "2026-10-20",      "salary": 79000,      "stage": "Rejected",      "notes": "Great attitude, not enough team-lead experience yet."    },    {      "name": "Aisha Rahman",      "role": "Backend engineer",      "email": "aisha.rahman@mail.com",      "source": "Referral",      "interview": "2026-10-27",      "salary": 148000,      "stage": "Offer",      "notes": "Competing offer, decision by Nov 4."    },    {      "name": "Noah Petersen",      "role": "Product designer",      "email": "noah.p@mail.com",      "source": "Careers page",      "interview": "2026-11-04",      "salary": 98000,      "stage": "Screening",      "notes": ""    }  ]};

Remix

Remix this template

Describe what to change and the agent starts from Hiring pipeline's files. The box is already started for you: finish “Start from Hiring pipeline and …”

Agent ready

Creates a free account first; your idea is carried over.

Dependencies

Documented from the template's package.json. The runtime has a prebuilt dependency set for Vite + React + TypeScript, so installs are fast.

  • react^19.1.0
  • react-dom^19.1.0
  • vite^6.3.0
  • @vitejs/plugin-react^4.4.0
  • tailwindcss^4.1.0
  • @tailwindcss/vite^4.1.0
  • typescript^5.8.0

How it runs

Framework
Vite + React + TypeScript
Dev command
npm run dev
Build command
npm run build
Output directory
dist
Port
5173
Entry route
/

Projects run in an isolated sandbox with a live preview. Read the projects documentation for settings, snapshots and deployment.

All templates

Build on Hiring pipeline

Create a free account, start from this template, and ask the AI agent to turn it into your app.