Finally Shipping My Portfolio
This is not my first attempt at a portfolio site. A while back I put together what I thought would be the place to showcase my work and host a blog where I could write about whatever I was building or learning along the way. I still want that second part, by the way. I expect these posts to end up a bit like a stream of consciousness over time, not polished white papers. Just me thinking out loud about things I find interesting.
The problem is I never actually launched that first version. It lived in staging, never got promoted to production, and never got shared anywhere. It worked well enough as a concept, but every time I looked at it I felt like it looked amateur and unprofessional. Not because I could not find the right words, I am usually fine there, but because I threw the layout together almost haphazardly without really knowing what I wanted it to look like. UI and UX design are not where I spend most of my professional time, and while I am generally okay at implementing something once the design exists, coming up with the layout from scratch has always been a struggle for me. So the site sat there. Waiting. Judging me a little, if I am honest.
Why now
The timing finally felt right because I have a handful of personal projects I am genuinely excited to talk about, and I wanted a home for them that did not feel like an afterthought bolted onto a resume page. That was also why splitting work experience and personal projects felt obvious to me. I expect some people will land here because they saw my name on an application or a referral, and the experience page is there for that. But I am more interested in the folks who show up because they want to see what I am building and how I think about problems. I want to build a bit of a personal brand around being a solid engineer and architect. Someone with a lot of tools in the belt who can adapt to different scenarios, solve complicated problems, drive real value, and explain why a given approach makes sense. I also care about being approachable. I connect with people easily, and I want the site to reflect that, not just a list of credentials.
The redesign itself feels a lot more cohesive and pleasant to look at, which was really the bar I needed to clear before I was willing to put my name on it.
What I am excited to write about
I am not going to deep-dive any of these here, that is what the project pages and future posts are for, but they were a big part of the motivation for getting this done in the first place.
The one I have spent the most time on lately is a Discord bot, API, and dashboard for managing EA Sports college football online dynasties. It started as a fun tool for my friends and me to generate fake betting lines for user-vs-user games so we could wager fake currency on matchups in our dynasty. It has grown into something much bigger: a multi-server SaaS-style setup with a Go backend deployed on Coolify, a Next.js front end, Discord OAuth for users and admins, and a dashboard where people can view matchups, bets, and server-specific settings. It is the kind of project that started as a joke and turned into a real system, which is my favorite genre.
I also have an open-source multi-tenant mTLS proxy (multi-mtls-proxy) that lets users onboard an application and get signed certificates automatically, then configure dynamic routes to downstream services. That one came out of a real problem I run into at work: when clients onboard to Adobe’s App Builder stack for modern Commerce development, they sometimes need IP allowlists, but App Builder is serverless so there is no fixed IP list to hand them. The usual answer is “set up your own mTLS proxy,” which is cumbersome and a lot of clients do not have the appetite to stand that up and maintain it long term. This project is not live yet, but I am hoping to get it running soon so we can actually use it.
And then there is the fun one: a shoot-em-up style game I have been tinkering with in Go and Raylib (space-shmup-go). Game development is what got me into programming in the first place. I never did it professionally, but I still love solving game problems, and this has been a great way to learn Go. There is even a live leaderboard at leaderboards.prestonchoate.dev backed by a small API built for the game.
Those three are very different shapes of work, which is kind of the point. I like having more than one lane.
The stack (and why it is boring on purpose)
I went with Astro because the content is the product. I wanted to write markdown, have it turn into typed entities for the site, and be able to add a blog post or project write-up later by dropping in a file and redeploying. No CMS wrestling for a personal site.
Tailwind was the other easy call. I needed something that would not fight me while I figured out a layout I could live with, and Tailwind is everywhere at this point with easy to find documentation and examples, which matters when you are not a UI specialist by trade.
The goal was not to invent a design system from scratch. It was to ship something clean enough that I would stop being embarrassed to share the URL.
If you are stuck on yours
If you are thinking about redoing your portfolio, the main thing I would tell you is there is no time like the present. I think I waited too long because I was stuck on an impasse with layout and formatting, and it started to feel like writer’s block, I knew what I wanted to exist, I just could not find the motivation to push through the part I am bad at. In hindsight, the idea of starting (or fixing) the thing is almost always more daunting than actually doing it.
For this redesign I used some tooling to help me get past that particular hurdle. I do not think there is anything wrong with using what is available to you when you are stuck on something outside your usual wheelhouse. The weight of starting is usually a lot lighter than it feels. Pick a small piece, try it, and if it feels good keep going. If it does not, stop and come back later with a different small piece. You will finish it that way.
I should have done that sooner. At least it is live now and I have plenty to write about.