Managing side projects across GitHub issues, random docs, and mental notes is a recipe for abandoned repos.
After shipping 28+ projects, I built a Notion-based system that actually keeps things on track. Here's the exact setup.
The Problem: Developer Project Sprawl
Every developer I know has:
- 5+ abandoned repos with "I'll finish this later" energy
- TODO lists in 3 different apps
- No idea which project is closest to being shippable
- Bugs reported in DMs they'll never find again
The fix isn't more discipline. It's a single workspace that matches how you actually work.
The 5-Template System
1. Project Dashboard (The Command Center)
One page that answers: What's the status of everything?
| Project | Status | Priority | Last Touched | Next Action |
|---|---|---|---|---|
| CLI tool | 🟡 In Progress | High | Today | Write tests |
| Blog engine | 🔴 Blocked | Medium | 3 days ago | Fix auth bug |
| Game prototype | 🟢 Shipped | Low | Last week | Monitor feedback |
Key properties:
- Status (Not Started → In Progress → Blocked → Shipped → Archived)
- Priority (High/Medium/Low)
- Last Touched date (auto-sorts by staleness)
- Next Action (always know what to do next)
2. Sprint Tracker (Weekly Focus)
The dashboard shows everything. The sprint tracker forces you to pick 3 things this week.
Week of March 3, 2025
━━━━━━━━━━━━━━━━━━━
🎯 Sprint Goal: Ship v1 of CLI tool
Tasks:
☑ Write unit tests for parser
☐ Add --verbose flag
☐ Update README with examples
Carry-over from last week:
☐ Fix edge case in config loader
The rule: If it's not in this week's sprint, it doesn't exist. Everything else goes to the backlog.
3. Bug Tracker
Not Jira. Not Linear. Just a Notion database with:
- Title: What's broken
- Severity: 🔴 Critical / 🟡 Annoying / 🟢 Cosmetic
- Steps to Reproduce: (force yourself to write this)
- Status: Open → Investigating → Fixed → Verified
- Related Project: linked to the dashboard
When someone reports a bug in Discord? Copy it here in 10 seconds. Now it exists in your system, not in your memory.
4. API Reference
Every project that talks to an API gets a page:
## Stripe API
Base URL: https://api.stripe.com/v1
Auth: Bearer token (stored in .env)
### Endpoints I Actually Use
POST /charges — Create a charge
GET /customers/:id — Get customer details
POST /refunds — Process refund
### Gotchas
- Rate limit: 100/sec (never hit it, but good to know)
- Webhook signatures use raw body, not parsed JSON
Beats searching through docs every time. Build it as you go — don't try to document everything upfront.
5. Learning Log
## 2025-03-04
Learned: Playwright's `page.wait_for_load_state('networkidle')`
times out if there are long-polling connections.
Use 'domcontentloaded' instead.
Applied to: Browser automation project
Source: Stack Overflow + trial and error
Why this matters: You solve the same problems repeatedly if you don't write down the solution. Future-you will thank present-you.
⚡ Want the ready-made templates? I packaged all 5 as a Notion template pack you can duplicate in one click — free, name your price.
Setup Tips
Start with the Dashboard. Everything else links back to it.
Use Notion's "Relation" property to connect bugs → projects, sprints → projects, and API refs → projects. One click shows you everything related to a project.
Template buttons save time. Create a "New Bug Report" template with pre-filled severity and status fields. Filing a bug should take < 30 seconds.
Review weekly. Every Friday, spend 10 minutes:
- Archive anything you've decided not to finish (this is healthy, not failure)
- Update statuses
- Pick next week's sprint items
Why Notion Over [Insert Tool]?
- Free tier is generous — unlimited pages, no per-seat pricing for personal use
- Flexible — databases, kanban, calendar, all in one
- Offline access — works without internet (mobile app caches)
- API available — automate with scripts if you want to get fancy later
The point isn't that Notion is perfect. It's that one imperfect system beats five perfect tools you use inconsistently.
What This Changed For Me
Before: 5 abandoned projects, scattered notes, constant context-switching guilt.
After: I know exactly what's in progress, what's blocked, and what I'm ignoring on purpose. The "ignoring on purpose" part is underrated — it's intentional, not forgotten.
The system doesn't make you productive. It makes the cost of chaos visible, which naturally pushes you toward finishing things.
Building in public at MaxDevTools on Gumroad. Developer tools, templates, and playbooks — most are free.
Top comments (0)