-
Notifications
You must be signed in to change notification settings - Fork 5
Plan: Embedded job board (companies, roles, /jobs) #112
Description
Source of truth
Full master plan (schema, actions, routes, components, search, i18n, implementation order, out-of-scope, open questions): docs/job-listing.md
Status in doc: Draft (2026-04-05)
Summary
Embed a job board in TechDiary: companies as shared workspaces (Owner / Manager), job postings with Markdoc bodies, public discovery at /jobs, and dashboard management. Apply stays external in V1 (URL or email); no in-platform applications yet.
Key routes
| Area | Path |
|---|---|
| Public board | /jobs |
| Job detail | /jobs/[handle] |
| Company page | /companies/[handle] |
| Dashboard jobs | /dashboard/jobs, /dashboard/jobs/new, /dashboard/jobs/[id] |
| Dashboard company | /dashboard/company, members, settings |
Highlights
- Actors: Job seeker (browse; login for bookmark / comments), Owner vs Manager with permission matrix in doc §3.2.
- Join company: Owner invite (notification + accept) or join secret code (instant Manager).
- Data model:
company_profiles,company_members,company_invites,job_listings,job_listing_tags; extend bookmarks/commentsresource_typewithJOB. - Stack fit: SQLKit repos, server actions + Zod, MeiliSearch index
job_listings,CommentSectionon job detail,HomepageLayouton/jobs.
Implementation order (from doc §15)
- DB → domain models → repos → inputs
company.actions.tsthenjob.actions.ts- Public
/jobs,/jobs/[handle],/companies/[handle] - Dashboard jobs + company management
- Search sync, sitemaps, i18n
Out of scope (V1)
In-platform applications, application tracking, resume upload, email job alerts, paid featured listings, etc. — see doc §16.
Open questions (doc §17)
Track product decisions before / during build (posting without company, moderation, default expiry, salary requiredness, invite expiry, …).
Next steps
Break into smaller implementation issues (DB migration, company CRUD, job CRUD, public UI, search, …) and link them here as sub-tasks.