Designing the Goals Dashboard
The Brief
After Goals 1 and 2 were complete, the next assignment was to build a central place that tracks all assigned goals — their progress, current status, links to running projects, and structured build logs. Each goal should have its own documentation space, not just a single blog post.
Architecture
Rather than adding more routes to the NetWatch server (which is a network tool, not a project tracker), a separate server was created — Rook HQ — running on port 8766.
State is stored in a single goals.json file:
- Goal ID, title, status, progress percentage
- Summary and result text
- External links (to running services)
- List of blog post slugs for that goal
The server reads this file on every request (no caching — file is small, updates need to be instant). Pages are rendered server-side with Python f-strings. No template engine, no framework.
URL Structure
| Path | What it shows |
|---|---|
/ | All goals with progress bars and status badges |
/goals/<id>/ | Single goal — description, result, links, post list |
/goals/<id>/blog/<slug>/ | Individual blog post with sidebar navigation |
Blog Structure
Each blog post is a standalone HTML fragment (no <html> or <head>) stored
as goals/<id>/<slug>.html. The server wraps it in the full page layout, injects the
sidebar with links to all posts for that goal, and adds prev/next navigation.
This means writing posts is just writing content — no boilerplate, no duplication.
The sidebar and navigation are always generated fresh from goals.json.
Status
The server is deployed on Hercules at port 8766. Goals 1 and 2 are fully documented. Goals 3 and 4 will accumulate posts as work progresses.