Overview
Roadmap items are MDX entries under content/roadmap
. Each item has a title, description (rich text), status, date, and a category. The public page /roadmap
shows kanban-like columns grouped by status and sorted by community votes.
Location and slug
- Collection: roadmap
- Path:
content/roadmap
- Filename: read-only; generated from title (slugified, lowercase, trimmed).
Votes are keyed by the item slug. Renaming a title changes the slug and will appear as a new item with zero votes. Avoid renaming existing items if you want to preserve votes.
Fields
- title — required.
- description — required rich text.
- status — required; choose from predefined statuses.
- createdAt — required date; used for ordering within groups.
- category — required; choose from predefined categories.
Statuses and categories
Statuses: New · Evaluating · Planned · In Progress · Released
Categories: AI · Analytics · Auth · CMS · Dashboard · Feature · Marketing · Payments · TechStack · UI
Column order on /roadmap
: New → Evaluating → Planned → In Progress → Released.
To adjust option lists, update tina/options/roadmapStatuses.ts
and tina/options/roadmapCategories.ts
.
Roadmap page
- Metadata is defined in
app/roadmap/page.tsx
. - Data loader
fetchRoadmap(last = 100)
:- Fetches entries from Tina (sorted by
createdAt
). - Queries Supabase
roadmap_votes
for{ slug, votes }
. - Merges counts into items, groups by status, and sorts each column by votes (desc).
- The page is marked
dynamic = 'force-dynamic'
to reflect vote changes promptly.
There are no per-entry pages. All items are shown together and filterable by status visually.
Voting
- Users upvote with a button on each card.
- State is mirrored locally (small “voted” flag in
localStorage
) for UX. - Server actions call Supabase RPCs to increment or decrement votes on
roadmap_votes
. - Columns re-sort on the client after each vote so the highest-voted items rise.
Want to reset votes for an item? Remove its row in roadmap_votes
(or create a new item with a new slug).
Guidelines
- Use short, action-oriented titles.
- Keep descriptions focused on the problem and outcome; bullets work well.
- Pick the right status—don’t mark as In Progress until it truly is.
- Set category so users can scan areas quickly.
- Avoid renaming titles (slugs) of items that already have votes.