Taxonomy Domain
The Taxonomy domain (app/domains/taxonomy/ in jodapp-api) owns the shared vocabularies the rest of the platform points at: job categories and skills. It holds no operational data — other domains reference taxonomy rows, never the other way around.
Models
| Model | Table | What it is |
|---|---|---|
Taxonomy::Category | taxonomy_categories | Job categories. Since the 2026-07 redesign: 18 active categories with display_order 1–18, every older category archived (status enum, no deletes). Employers pick one when posting a Careers::Job; gig listings carry a category name via Gig::TempJob::CATEGORY_MAP. |
Taxonomy::Skill | taxonomy_skills | Skills vocabulary used by talent profiles. |
Taxonomy::CategoryRequest | taxonomy_category_requests | Append-only inbox of category requests from employers who picked "Others" — see CategoryRequest. |
The 2026-07 category redesign
The original 89 seeded categories did not match our blue-collar clientele, and a broken picker meant employers only ever saw 10 of them. The redesign replaced them with 18 evidence-based categories, repaired every miscategorized job in production, and rebuilt the picker to show all options at once.
- Anchor issue: jodapp-api#1840
- Full research and decisions: 2026-07 Taxonomy Categories initiative
Growth rules (the short version)
- "Others" is the escape hatch and the request inbox. If Others grows above ~5% of postings for a quarter, the taxonomy has a gap.
- A request becomes a new category when 3+ distinct employers ask for the same concept, or 5+ similar Others postings pile up.
- Add-only: categories are never renamed or deleted, only added (or archived with their jobs re-pointed first). Soft cap 20, hard cap 25.