CuriousCoach.tools
This is the site you’re looking at right now - a portfolio and blog built to showcase tools and document the journey of building them.
The Approach
Rather than reaching for a CMS or a complex content management setup, I wanted something minimal that I could understand completely and modify easily.
The core idea: a single apps.ts file acts as the source of truth for all project cards. Each app has structured metadata - name, summary, description, status, type, links - and the UI renders from that data. No database, no admin panel, just a TypeScript file.
How It Works
Card-Based Content
Apps are defined as structured data:
{
slug: "my-app",
name: "My App",
summary: "One-liner for cards",
description: ["Paragraph one", "Paragraph two"],
status: "tool", // maturity: tool or lab
type: "utility", // purpose: coaching-tool or utility
visible: true
}
This drives the card components on the Tools and Labs pages. Change the data, the UI updates.
Two-Dimensional Categorisation
Apps have two orthogonal dimensions:
- Status (maturity):
toolfor production-ready,labfor experimental - Type (purpose):
coaching-toolfor AI-powered thinking aids,utilityfor workflow tools
This lets me separate the playful experiments from the practical helpers, while also distinguishing finished work from work-in-progress.
Markdown for Detail
Each app gets a markdown file in content/apps/ for longer-form content. The card gets you interested; the markdown page tells the full story.
Tech Stack
- Astro - Static site generator with great developer experience
- TypeScript - Type safety for the app metadata
- Markdown - Blog posts and detailed app pages
- Vercel - Deployment on push to main
Why Build It?
I wanted a place to share what I’m building that wasn’t LinkedIn posts or scattered GitHub repos. Somewhere I could show the tools themselves, but also write about the decisions, dead ends, and lessons learned along the way.
The blog isn’t separate from the portfolio - it’s part of the same story. Building in public means showing the process, not just the polished result.
Design Philosophy
Minimal by default: No features until they’re needed. No CMS until a JSON file isn’t enough. No complex build pipelines until the simple ones break.
Data-driven UI: The apps.ts pattern means adding a new project is editing a file, not clicking through an admin interface.
Write to understand: The blog exists because writing about building helps me understand what I’m actually doing - and sometimes helps others too.
Built with Astro. Deployed on Vercel. Content managed via text files and git.
If you want more control, you can run your own instance from the source, or get in touch about a private setup.
View the source and install instructions on GitHub