The careers site for Caldova, an AI-native pharmaceutical company. Browse open roles and submit an application with your name and email �� no account required.
This is the sample application for the GitHub Copilot CLI workshop. It's a deliberately small, realistic app: job postings are Markdown content, and the only database-backed feature is the apply flow.
Note
Caldova is a fictional company created for demonstration and training purposes. The roles, locations, and applications in this app are not real.
- Astro — static output by default, with a single on-demand route for the apply endpoint (via the
@astrojs/nodeadapter) - Tailwind CSS v4 — styling, themed with the Caldova brand palette
- Astro Content Collections — job postings are Markdown + frontmatter in
src/content/jobs/(validated by a Zod schema) - Drizzle ORM + libSQL (SQLite) — the
applicationstable only - Vitest — unit tests for pure logic and an integration test for the apply insert
- Playwright — end-to-end tests (runs against the built Node server)
npm install
npm run devpredev runs db:setup (applies the applications migration) before starting the dev server at http://localhost:4321.
- Job postings are files, not database rows: one Markdown file per role in
src/content/jobs/, with frontmatter (title,department,location,type,remote,postedDate,summary) and a Markdown body. The schema lives insrc/content.config.ts. - Applications are the only relational data: the
applicationstable (db/schema.ts) stores each submission — a logicaljobIdreference, the applicant'snameandemail, and optionalnote/links. There is no authentication; the applicant supplies their details directly on the form.
src/content/jobs/— job postings (Markdown + frontmatter)src/content.config.ts— content collection schemasrc/lib/jobs.ts— pure helpers overJob[](sorting, formatting)src/lib/applications.ts— application validation schema + insert helpersrc/lib/db.ts— Drizzle/libSQL client for theapplicationstablesrc/pages/—index.astro(listing),roles/[slug].astro(detail + apply form),api/apply.ts(on-demand endpoint),thanks.astro,about.astro,404.astrosrc/components/— reusable.astrocomponentsdb/— Drizzle schema, migrations, and migrate/test helperse2e-tests/— Playwright tests
npm run dev— start the dev server (predevmigrates the database)npm run build— build the site (prebuildmigrates the database)npm run start— run the built Node server (dist/server/entry.mjs)npm run test:unit— Vitest unit + integration testsnpm run test:e2e— Playwright e2e tests (builds + starts the server first)npm run lint— ESLintnpm run typecheck—astro checknpm run db:generate/db:migrate/db:setup— Drizzle schema/migration tasks