Todo System Organization & Status Tracking
Problem
Currently using todos-as-content-pages pattern (which is great!), but organization and tracking is inconsistent:
Current state:
- Some todos have "todo" in the title, some don't
- All use
tags: ['todo']for identification - No way to mark todos as done/completed
- No linking between todos β work done β commits β resolution
- Can't easily see "all open todos" vs "completed todos"
What works well:
- β Rich documentation format (way better than GitHub Issues)
- β AI-accessible (can query, generate, edit todos with AI)
- β Version controlled (git history shows evolution)
- β Searchable and linkable
What needs improvement:
- β Inconsistent naming (some say "todo", some don't)
- β No status tracking (can't tell what's done)
- β No traceability (which commit addressed which todo?)
- β No overview page (list of all todos by status)
Desired Patterns
1. Title Convention: NO "Todo" Prefix
Bad (redundant):
title: "Todo: Docs Homepage"
title: "Todo: Hide Header Metadata"
Good (descriptive):
title: "Docs Homepage Routing Decision"
title: "Hide Header Metadata Field"
title: "Metadata Editor Implementation"
Rationale:
- The
tags: ['todo']already marks it as a todo - UI can show badges/context (π² Open, β Done)
- Titles should be slug-based or explanatory
- Reduces noise when todos convert to documentation
2. Status Tracking Field
Add status field to PostMeta for todos:
// In src/types/post.ts
export interface PostMeta {
// ... existing fields
status?: 'open' | 'in-progress' | 'done' | 'blocked' | 'wont-do';
}
Usage in frontmatter:
{
"title": "Metadata Editor Implementation",
"slug": "metadata-editor",
"type": "doc",
"tags": ["todo", "feature", "metadata"],
"status": "open"
}
Status meanings:
open- Not started, needs workin-progress- Currently being worked ondone- Completed, maybe keep for documentationblocked- Can't proceed (waiting on something)wont-do- Decided not to implement
3. Linking Todos to Work
GitHub Issue style: Issue β Commit β Resolution
Our equivalent:
{
"title": "Hide Header Metadata Field",
"slug": "hide-header-metadata",
"type": "doc",
"tags": ["todo", "metadata", "components"],
"status": "done",
"resolvedBy": "commit-2026-01-25-metadata-controls",
"relatedCommits": ["commit-2026-01-25-metadata-controls"]
}
Or simpler, just link in the content:
## Resolution
Implemented in [Metadata Controls Commit](/docs/commits/metadata-controls-commit).
Changes:
- Added `hideHeader?: boolean` to PostMeta
- Updated page rendering logic
- Applied to about-me.tsx
4. Todo Overview Page
Create /todos page (or filtered view on homepage) showing:
Open Todos:
- π² Metadata Editor Implementation
- π² Search/Filter/Sort Improvements
- π² Docs Homepage Routing Decision
In Progress:
- π Private Content System
Completed:
- β Hide Header Metadata Field
- β Update Authorship Metadata
Blocked:
- π§ Feature X (waiting on library update)
Implementation: MVP
Step 1: Add Status Field to Type
Update src/types/post.ts:
export interface PostMeta {
title: string;
slug: string;
date: string;
author?: string | string[];
authorshipNote?: string;
description?: string;
type: 'post' | 'doc' | 'doc:commit';
tags?: string[];
status?: 'open' | 'in-progress' | 'done' | 'blocked' | 'wont-do'; // NEW
// ... other fields
}
Step 2: Update Existing Todos
Add status: 'open' to all current todos:
todo-docs-homepage.mdβstatus: 'open'todo-hide-header-metadata.mdβstatus: 'open'todo-update-authorship-metadata.mdβstatus: 'open'
Step 3: Visual Indicators in Navigator
Update Navigator to show status badges:
// In Navigator component
const statusIcons = {
open: 'π²',
'in-progress': 'π',
done: 'β
',
blocked: 'π§',
'wont-do': 'β',
};
{posts.map(post => (
<div key={post.slug}>
{post.tags?.includes('todo') && post.status && (
<span>{statusIcons[post.status]} </span>
)}
<Link href={post.route}>{post.title}</Link>
</div>
))}
Step 4: Filter Todos by Status
Add filtering to Navigator or create dedicated /todos view:
const todos = posts.filter(p => p.tags?.includes('todo'));
const openTodos = todos.filter(t => t.status === 'open');
const inProgressTodos = todos.filter(t => t.status === 'in-progress');
const doneTodos = todos.filter(t => t.status === 'done');
Implementation: Future Enhancements
Auto-link Todos to Commits
When creating a commit summary doc, check for related todos and auto-update their status:
// In commit doc frontmatter
{
"title": "Metadata Controls Implementation",
"type": "doc:commit",
"resolves": ["hide-header-metadata"], // Slug of todo(s) resolved
}
Script to auto-update todos:
# Find commit docs with "resolves" field
# Update corresponding todo status to "done"
# Add "resolvedBy" link to todo
Todo Board View
Create Kanban-style board at /todos/board:
| Open | In Progress | Done |
|---------------|-------------------|-------------------|
| Metadata Edit | Private Content | Hide Header |
| Search/Filter | | Authorship Update |
| Docs Homepage | | |
Drag-and-drop to change status (updates frontmatter).
Priority Field
Add priority to PostMeta:
priority?: 'low' | 'medium' | 'high' | 'critical';
Sort todos by priority in overview.
Due Dates
Add dueDate field:
dueDate?: string; // ISO 8601 format
Show overdue todos in red, upcoming in yellow.
Todo Templates
Create templates for common todo types:
Feature Spec Template:
## Problem
[What needs to be solved]
## Proposed Solution
[How to solve it]
## Implementation Steps
1. Step one
2. Step two
## Files to Modify
- `src/file1.ts`
- `src/file2.ts`
## Related
- [Related Todo](#)
- [Related Commit](#)
Bug Fix Template:
## Bug Description
[What's broken]
## Expected Behavior
[What should happen]
## Actual Behavior
[What currently happens]
## Steps to Reproduce
1. Step one
2. Step two
## Proposed Fix
[How to fix it]
Archive Completed Todos
Option 1: Move to content/archive/todos/
Option 2: Keep in place but filter by status
Option 3: Add archived: true field
Preference: Option 2 (keep everything, filter by status). Completed todos serve as documentation.
Integration with Metadata Editor
When the metadata editor exists, bulk operations on todos become trivial:
Bulk status update:
- Query: "Show all todos with status='open' and tags include 'metadata'"
- Action: Set status='done' for all results
Bulk cleanup:
- Query: "Show all todos with 'Todo:' in title"
- Action: Remove 'Todo: ' prefix from all titles
Consistency check:
- Query: "Show all posts with tag='todo' but no status field"
- Action: Add status='open' to all results
Current Naming Cleanup Needed
These todos need title updates:
- β
todo-docs-homepage.mdβ keep title as is (already descriptive) - β
todo-hide-header-metadata.mdβ keep title as is - β
todo-update-authorship-metadata.mdβ keep title as is
Actually, reviewing existing todos - the titles are already good! They don't have "Todo:" prefix, they're descriptive. The filenames have "todo-" prefix for clarity, which is fine.
Pattern to maintain:
- β
Filename:
todo-descriptive-name.md(clear what it is) - β Title: "Descriptive Explanation" (no "todo" needed)
- β
Tags:
['todo'](for filtering) - β
Status:
'open'(for tracking)
Examples of Good Todo Metadata
Feature Request:
{
"title": "Metadata Editor with AI Assistance",
"slug": "metadata-editor-feature",
"type": "doc",
"tags": ["todo", "feature", "metadata", "ai"],
"status": "open",
"priority": "high",
"description": "Build AI-powered metadata editor for bulk operations on content"
}
Bug Fix:
{
"title": "CodeBlock Formatting in Dark Mode",
"slug": "codeblock-dark-mode-bug",
"type": "doc",
"tags": ["todo", "bug", "styling", "codeblock"],
"status": "in-progress",
"priority": "medium"
}
Research/Decision:
{
"title": "Docs Homepage Routing Strategy",
"slug": "docs-routing-decision",
"type": "doc",
"tags": ["todo", "routing", "architecture", "decision"],
"status": "open",
"priority": "medium",
"description": "Decide between dedicated /docs page, unified homepage, or redirect pattern"
}
Completed:
{
"title": "Hide Header Metadata Field",
"slug": "hide-header-metadata",
"type": "doc",
"tags": ["todo", "metadata", "components"],
"status": "done",
"resolvedBy": "commit-2026-01-25-metadata-controls",
"description": "Add optional hideHeader field to PostMeta for component control"
}
Why This Matters
A well-organized todo system means:
- Never lose track of work - Everything documented, statusable, searchable
- Clear priorities - Know what to work on next
- Historical record - See what was planned, what shipped, what was abandoned
- Onboarding - Future employer/collaborator can see your thought process
- Validated by metadata editor - Bulk operations prove the system's power
The todo system isn't just task trackingβit's project memory as queryable data.
Timeline
Now (5 minutes):
- Add
status?: 'open' | 'in-progress' | 'done' | 'blocked' | 'wont-do'to PostMeta type - Add
status: 'open'to existing todos
Soon (1 hour):
- Add status indicators to Navigator
- Create simple todo filter/overview page
Later (2-3 hours):
- Implement todo board view
- Add priority and due date fields
- Build auto-linking between todos and commits
Eventually:
- Drag-and-drop status updates
- Todo templates
- Advanced filtering and sorting
- Integration with metadata editor for bulk ops