Card docs/backlog/07-employer-views.md · Milestone M2 · Blocked-by: M1 (PR #1)
Scope
src/views/application.view.ts, interview.view.ts, candidate.view.ts, job.view.ts; barrel src/views/index.ts; wire views in objectstack.config.ts. Load objectstack-ui.
Spec
ats_application — list: grid (display_name, job, candidate, stage, source, applied_at, rating). listViews: pipeline kanban groupByField: 'stage', card columns display_name, job, rating, applied_at; inbox_new / inbox_screening / inbox_interview / inbox_offer / inbox_hired grids filtered by stage. formViews.default two-column: job, candidate, stage, source, rating, cover_letter.
ats_interview — listViews.calendar: calendar on scheduled_at, title display_name, colour by status. Grid list with round, scheduled_at, mode, interviewers, status, rating.
ats_candidate — listViews.talent_pool: grid with full_name, city, current_title, experience_years, skills, seeking_status; filters on skills/city/experience_years. listViews.gallery: gallery, image avatar, title full_name, subtitle current_title.
ats_job — listViews.mine: grid (title, status, city, employment_type, headcount, published_at, expires_at); listViews.published: filter status == 'published'.
Every filter is a CEL/filter expression over record.<field>; export options csv/xlsx on grids.
Acceptance
pnpm validate && pnpm lint && pnpm typecheck green (validate checks column bindings); paste the three tails in the PR.
pnpm dev boots; kanban groups by stage, calendar renders on scheduled_at (screenshot in PR).
Out of scope
Apps/navigation, platform and seeker views, dashboards.
Field names and enum values are pinned in DESIGN.md §02. A value not pinned there is a needs_decision, not an invention. Delivery process — branch, worktree, draft PR, gates — is in AGENTS.md.
Card
docs/backlog/07-employer-views.md· Milestone M2 · Blocked-by: M1 (PR #1)Scope
src/views/application.view.ts,interview.view.ts,candidate.view.ts,job.view.ts; barrelsrc/views/index.ts; wireviewsinobjectstack.config.ts. Loadobjectstack-ui.Spec
ats_application—list: grid (display_name, job, candidate, stage, source, applied_at, rating).listViews:pipelinekanbangroupByField: 'stage', card columns display_name, job, rating, applied_at;inbox_new/inbox_screening/inbox_interview/inbox_offer/inbox_hiredgrids filtered by stage.formViews.defaulttwo-column: job, candidate, stage, source, rating, cover_letter.ats_interview—listViews.calendar: calendar onscheduled_at, titledisplay_name, colour bystatus. Grid list with round, scheduled_at, mode, interviewers, status, rating.ats_candidate—listViews.talent_pool: grid with full_name, city, current_title, experience_years, skills, seeking_status; filters on skills/city/experience_years.listViews.gallery: gallery, imageavatar, titlefull_name, subtitlecurrent_title.ats_job—listViews.mine: grid (title, status, city, employment_type, headcount, published_at, expires_at);listViews.published: filterstatus == 'published'.Every filter is a CEL/filter expression over
record.<field>; export options csv/xlsx on grids.Acceptance
pnpm validate && pnpm lint && pnpm typecheckgreen (validate checks column bindings); paste the three tails in the PR.pnpm devboots; kanban groups by stage, calendar renders onscheduled_at(screenshot in PR).Out of scope
Apps/navigation, platform and seeker views, dashboards.
Field names and enum values are pinned in
DESIGN.md§02. A value not pinned there is aneeds_decision, not an invention. Delivery process — branch, worktree, draft PR, gates — is inAGENTS.md.