This is my personal website, built from scratch as both a publishing platform and a development workspace. It's where I document my work, share my thoughts, and build web applications.
On the surface, this looks like a standard personal website. Under the hood, it's a full-stack framework for rapidly building and shipping web applications. The site itself is the primary application, but it also serves as a container for other projects.
When I build a new app I can rebuild it within this repo, leverage the existing tooling and component system, and host it directly on the site. The framework makes each new project faster and better than building standalone.
The stack is the result of years of experimentation on this project. I've rebuilt it multiple times, trying different approaches until I landed on what actually works for me.
Core:
Content System:
Developer Experience:
Infrastructure:
What does it cost to run this?
Hosting static sites is often free. For my site specifically, being a Next.js app hosted on Vercel, that means I need to pay more attention to serverless and edge function usage. But for a personal site like this, the free tier handles everything beautifully.
I've wanted my own corner of the internet since I was a teenager. Not a profile on someone else's platform, but an actual space that's mine. This is that space.
More practically: I needed a cross between a note taking app, a personal knowledge management system, a traditional blog, a place for my development tools and documentation, and a dev blog, all with the flexibility to evolve as needs change. I needed a powerful, customized tool that makes my work better.
This website is primarily meant to help me develop better software. It's my testbed for new features, new ideas, and anything I find interesting and worth working on.
The first and most obvious way is that this is a full-stack web app that I maintain in production. The fact that the site functions at all means that I put significant work into making it do so, which means I have learned a lot of things about software to get to that point.
The next thing it does is it gives me endless things to work on. There is always a new feature for the site. The site is never done. As the site gets bigger with more features and content, novel technical problems naturally arise that need solving. And even if the site doesn't need active work done on it, it serves as the container for all my other development work, which means even when I'm not working on the site directly, I'm working inside of it and using it.
One thing I love doing is debugging things with it. I don't add random print statements to the console to debug things. I post a comprehensive, styled, organized, interesting illustration of the problem I'm having and the associated outputs as a page on my site.
The fact that it's a website is secondary to the fact that I'm a visual learner who is visualizing my problems in precise detail while web and browser just so happen to be the medium I'm using to do so.
Instead of using a note taking app and writing down stuff I did, stuff to remember, stuff I think is interesting, or stuff I think is important, I constantly generate detailed documents of this stuff and make them available as content on the site.
Not necessarily for other people to see, although I would find that somewhat amusing. But moreso because I believe if I can continue to have a record of what I've done and a way to access that record that I will be able to improve my work and learning.
A LOT of the design of this site can be attributed to me trying to maximize the UX of notes themselves because for years I have felt like I don't have the right tools for notes.
Some other things have started to appear on this site that I think are really exciting and weren't exactly intended but are very welcome. By having a robust component system, content design, and AI assistance, I can actually make quality web pages really, really fast and that's honestly just a lot of fun.
I can see how I can make it even faster and better in a lot of ways (see roadmap for component generator spec and metadata editor spec).