Skip to content

Platform & seeker views + public application form #3

Description

@os-sam

Card docs/backlog/08-platform-seeker-views.md · Milestone M2 · Blocked-by: M1 (PR #1)

Scope

src/views/employer.view.ts, report.view.ts, skill.view.ts, credential-type.view.ts, candidate-credential.view.ts; extend job.view.ts / application.view.ts from #2 (rebase on it if it landed; otherwise coordinate through the PM). Load objectstack-ui.

Spec

Platform: ats_employer grid + listViews.pending_verification (verification_status == 'pending'), form with verification section (docs, status, note); ats_job.listViews.pending_review; ats_report grid (subject, target_type, reason, status, reporter) + listViews.open (status in ['new','investigating']); dictionary grids for ats_skill, ats_credential_type.

Seeker: ats_job.listViews.search — grid over status == 'published' only, columns title, employer, city, work_mode, salary_min, salary_max, employment_type; ats_application.listViews.mine as timeline ordered by applied_at; ats_interview.listViews.mine calendar; ats_candidate profile formViews.profile (all fields, salary section last); ats_candidate_credential grid.

Public application form — on ats_application.formViews.apply_public: type: 'simple', sharing: { enabled: true, allowAnonymous: true, publicLink: '/apply' }, fields limited to job, cover_letter, resume_snapshot plus whatever candidate identity fields the platform's public-form contract allows; submitBehavior: { kind: 'thank-you', … }.

The guest grant already exists — ats_guest_apply in src/security/permission-sets.ts, INSERT-only on ats_application. Do not widen it.

⚠️ If the public-form contract cannot create the linked ats_candidate in the same submission, stop and return needs_decision with the two options (two-step apply, or a lightweight ats_inquiry object). Do not invent a third.

Acceptance

  • pnpm validate && pnpm lint && pnpm typecheck green; paste the three tails in the PR.
  • GET /api/v1/forms/apply returns the whitelisted schema; an anonymous POST creates a row and no read is possible.

Out of scope

Navigation/apps, dashboards, translations.


Field names and enum values are pinned in DESIGN.md §02; the isolation model is §03. Delivery process is in AGENTS.md.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions