5.5 times a Charm!
I figured it would be nice for my first blog post on this site (especially before I publish this on the open web as I continue to tweak parts of the wonderful serene theme by Jianan Sun for Zola to my liking!) to ask myself why I want a personal website in the first place and how I got to the current tech stack I’m using.
I also feel it a bit odd to publish the website with out at least ONE blog post considering the whole blog-oriented theme I’m using (:
Why Have (a new) Personal Site?
When I made my first website I didn’t really give much thought to the idea of blogging or long-term maintainability. I just wanted something I could impress recruiters with in my first year as a student in college. As a result the very first iteration was incredibly hacky, fragile, and practically unmaintainable but it did the job.
As time went on more of the “shiny object syndrome”1 of my youth began to give way to an appreciation of simpler, more hackable and robust tools. I also found I quite missed the amount of writing I used to do when I was younger. As a kid my Dad used to make me write entries by hand in a daily journal, which I used to hate because I felt it was such a time consuming venture with no immediate benefit (none of the other kids I knew were forced to do anything like this, making me feel even worse about it). Now, as an adult, I still try to carve out time to do the equivalent in Obsidian thanks to the Daily Notes feature.
I also find it would be great to have a way to share what I learn and build in a more structured format. Sure, since most of my work is open source I can easily pull up the Github issues/pull requests I’ve closed but some of those were part of a thread of learning I felt might be great to have properly written up. If not for other developers who might be interested in my work, then for myself to be able to look back on and appreciate what I’ve accomplished (:
There’s an added bonus that having such a means to share my work also incentivizes me to keep working on projects that might just sit on the backburner indefinitely. I’ve always found that while it’s quite easy for me to think of things I want to build and learn, it’s a bit harder to keep the necessary momentum such that I bring those things to fruition. Being able to share my enthusiasm and progress is a pretty nice tool for motivation and record keeping in general.
The cherry on top for me is also having my own little corner of the World Wide Web. Social media can certainly let me do that but there’s something nice about having more control over the platform my work is on not to mention the ability to tweak that platform to my liking. I like being able to roll up my sleeves every now and then and get into the weeds to say, change the colors for the theme of my website or add and remove pages as I please. It’s my corner of the net and nobody else’s!
Iterations
I don’t think it’s worth putting down too much technical detail here but I think some of the problems as well as what I gained with each iteration of my website are fun to share and reflect on.
1st Iteration
Considering I was a first year in college trying to impress recruiters (and at the peak of my own “shiny object syndrome” moment) I cooked up a site with Bootstrap, less, and slim. While it’s possible for me to bring it back considering I saved all of that older work here I shudder to remember the aesthetics 2018/19 John thought were great for a personal site. I know I pulled a lot of JS/CSS tricks from CodePen examples and I definitely leaned into particles.js as a totally overkill and unnecessary background effect.
The result of gluing together all the Bootstrap examples I saw floating around, on top of hacking together the CSS/JS examples I saw (I had no prior web development experience other than a very simple UI for an app I built at Intel) was this very bloated, pain in the butt to modify, mobile-unfriendly site. I know I had Google Analytics enabled on it too, something I’m no longer a fan of.
Despite all the problems with this first iteration, it was a fantastic learning experience for me and set the bedrock for much of the knowledge I’d carry into tinkering with future iterations.
2nd Iteration
This time I put a bit more thought towards building something easier to maintain and more scalable. I was still in college at the time but a bit more experienced so I went down the Static Site Generator (SSG) rabbit hole and the myriad of themes that came with them and opted to go with Jekyll.
I was initially pretty happy with Jekyll but the slowness I felt along with live-reloading issues and Ruby version wrestling dampened my enthusiasm for it. At one point I recall having to spin up a Docker instance just because I was so frustrated with trying to resolve issues on my own machine (which certainly didn't help with build latency). I’m sure if I spent some more time with it I might be able to fix those issues now but it felt like it was better to just start from scratch.
I had started out with a nice theme that I eventually found myself adding on so much to that I probably broke a lot of things in the process. I was brash enough at the time to think what I had built was worth other people using and that theme still lives on as H-Plus. I'll probably consider archiving it considering I haven't revisited/maintained it in some time.
Despite all the problems I ran into, I look at the current version I have online now and still find myself quite pleased with what I was able to accomplish in learning the Liquid Templating Language Jekyll natively supports. I’m especially happy with the “Work" page that I made and I have yet to find a template that has as many “batteries-included" options I managed to glue together for linking projects and specifying job locations. That’s probably the one permanent skill I gained from this second iteration.
The Work Page on my old site. It will be missed!
3.5th and 4th Iteration
At this point I’d graduated college and moved away from my home state of California for work. As time went on I found myself wishing I had something that could hold a candle to what my colleagues had. In particular, my boss Xiu-Zhe (Roger) Luo had this really nice site made with Astro and another colleague Casey Duckering has this wonderful site made with Bootstrap.
Xiu-Zhe (Roger) Luo's Website using the AstroPaper theme
Casey Duckering's Website
I didn’t really feel like touching Bootstrap again after how painful it felt working with it in the first iteration of my site so Astro it was! I was especially impressed by the templates that were being offered but felt Roger’s use of AstroPaper was more than enough for me.
Originally I just forked the entirety of Roger’s page but noticed he was using an older version of the template. So, I scrapped what I had started to essentially graft onto his site and pulled in the latest version of the theme. In the beginning I was pretty happy with how things were going but I found hacking on the template to be a bit tricky, probably because I wasn’t all that familiar with TypeScript and I found myself running into situations where my intuition from Jekyll seemed to fall apart.
I had to put everything on pause considering the pace of work had ramped up quite a bit around that time but despite having 80% of what I wanted I still found myself wondering if I really wanted to keep going with it.
4.5th Iteration
According to my Obsidian project tracking system I went down this rabbit hole November 14th, 2025 2 but it occurred to me that maybe Astro was just too much and I needed to back to the basics. But, I still didn’t want to touch Bootstrap again.
I thought about what features I really needed from an SSG to live and I figured all I really cared about was the ability to convert Markdown to HTML. Thus Pandoc came to my mind3 and I was quite pleased to find that other folks (check out Will Styler, Cullum Smith’s, and Martin Fischer’s sites!) used a pandoc-based workflow as well.
My initial excitement and momentum quickly ground to a halt though when I realized there would still be some wrangling to be done in the domain of raw HTML/CSS/JS and it was very much not going to be the “batteries included” experience I had with Jekyll. While I wasn’t expecting everything I used to have to be available I immediately missed having something like Liquid available considering the limited abilities Pandoc had for similar functionality.
Despite the setback it was still great to see how much could be done by keeping things simple. Just like the older iterations I’ve shown I don’t think this was a total loss either. If Astro showed me what having too many batteries looked like, Pandoc showed me what having too little looked like.
5th Iteration
Right before the holidays I started looking around again for an SSG that felt a bit more hackable and friendlier to work with to me and Zola popped up on my radar. I loved the idea of just having a single binary and was blown away by just how fast it was. The serene theme is fantastic to use and while I still ran into a couple “rough edges” in terms of what I wanted to do the Tera template language (similar to Liquid) along with Jianan Sun’s work on the theme clicked with my previous experience quite nicely!
I also fell in love with how easy it is to selectively override parts of a theme and the ease of using internal links and shortcodes.
I look forward to doing some more hacking/tinkering as time goes on!
Conclusion
While I’m pretty confident Zola and serene will keep me a happy camper for a long time to come I still acknowledge the possibility that perhaps as this site grows and I want to add certain features another SSG will take the cake. Maybe I’ll have accumulated enough web development experience at some point I’ll go down the Bootstrap (or pandoc!) route again.
I know this seems like a rather circuitous way of building a personal site but in every iteration I mention I managed to learn something new, so while I might have ended things physically empty-handed, mentally I’m grateful for all that accumulated experience.
For anybody who’s read this far that either doesn’t have a personal website yet I hope this serves as some inspiration that it’s very much a worthy endeavor even if things don't work out!
If you’d like to get in touch to leave a comment, please reach out via my e-mail on the contact page
This is a term I use to describe the penchant certain folks have of always jumping to the newest tool/most complex stack just because it sounds very cool, with little justification or thought to long-term benefit, stability, or ease of use. “New” doesn’t necessarily have to be new in terms of release time, just new to the person. Trust me, I’m just as guilty as the developer next to me!
I usually try to jot down ideas into my Obsidian vault as soon as I get them but it’s always possible there’s a couple days of lag depending on how busy I am.
I should mention I had never actually looked closely at all the things Pandoc was capable of, I just knew it from the occasional problem I’d have trying to convert Jupyter notebooks to PDFs. When I looked up tools that could convert Markdown to HTML THEN I finally played around with Pandoc proper. Shiny object syndrome strikes again!