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.