# Show HN: Bringing Back a Bulletin Board with (Mostly) Static HTML

> Source: <https://www.folj.com/architecture.htm>
> Published: 2026-08-16 18:05:11+00:00

**How I learned to stop worrying and love Static HTML (mostly)**

For ten years, I had a phpBB bulletin board for puzzles. It co-existed with static HTML. It wasn't great, but it was good enough.

Out of the millions per month viewing my puzzles via static HTML, I got about five new puzzles and fifteen new comments a month.

Then spammers figured out how to spam my phpBB, so I simply took the bulletin board down, and left the static HTML up.

Claude Code eventually got me thinking about reviving all the old bulletin board content.

But this time, I wanted almost everything to be static HTML.

Bots? Where we are going, we don't need to worry about bots.

Currently, each month I get about:

- 0-5 new updates

- 300 unique visitors, who actually interact with the site

- 19,000 uniques who visit then simply bounce

- 3 million bots visiting the site a month

(This was generated with AI)

So, we have a new 900-90-9-1 Rule. For every 900 bots, we get 90 visitors, 9 who interact, 1 who contributes. Except for me it is more like a 1,000,000-10,000-100-1 ratio.

Static HTML is a perfect fit for me. I only have about 600 pages that I update about once a week. I don't need dynamic content, as I am not building a community. 3 million bots hitting a dynamic site would force me to learn all about Cloudflare. Static HTML has no problem with bots. So I use python to regenerate static HTML, with a handful of dynamic pages to accept new content or new comments.

(This was hand drawn then neatened with AI)

** Slow is smooth, and smooth is fast.** Any fool can accelerate a powerful motorcycle in a straight line. The really fast racers are incredibly smooth, precise and deliberate on their inputs. Refreshing a bulletin board once a week with new comments and content is also a very slow and deliberate input. And nothing beats static HTML for raw speed.

(This was hand drawn then neatened with AI)

To make it happen, Claude Code imported the puzzles from my original HTML into a database. Then Claude code wrote scripts to dynamically generate new HTML straight from the DB. It looked just like my old site. I then migrated all the old phpBB puzzles into the DB and regenerated again. Now all my original puzzles, and the community added puzzles were all on the same page. I also added the old phpBB comments to the DB, along with some other feedback.

I then added some dynamic scripts to allow users to submit feedback, new puzzles, or comments. I added some fairly hefty [spam](/spam.htm) protection as well. Visitors get fast, simple pages. I get to review everything weekly from some custom administrative dashboards. If everything looks good, I regenerate the HTML, server side.

**This works really well for my site:** Users who engage with my site spend on average about an hour clicking around. Very few users submit anything. I don't ask submitters to register, or to verify their email address. It is hopefully therefore understood that their submissions will take time to be reviewed and approved.

**This works really well for me as well:** I can review multiple submissions at once. If things look good, I can regenerate everything at once. Plus I can do things now that previously weren't possible. My pages look like they could be dynamic, e.g. I show how many comments (2) are available to view on the relevant comments page. The server need only calculate this once, when I regenerate.

**This works really well for my hosting provider:** The site is running on a low cost, shared, cPanel style host. I learned early on that my shared tenant hosting provider doesn't appreciate sites that spin up hundreds of CGI requests. This no longer constrains me. I generate once. Users read hundreds of times.

**This works really well for Vibe Coding as well:** It really doesn't matter how elegant the underlying scripts are to regenerate the static HTML. They don't need to scale or perform. The only areas I need to focus on are the pages that are truly dynamic, the ones that pose a security or spam or performance concern.

**Lessons learned? **

**1. The 80/20 rule.** The first 80% of this project took a day. The next 80% of this project took a week. The last 80% of this project took a month. This mostly fits within the 80/20 rule. I easily doubled the scope of what I originally intended, but each change took longer. It was mostly because I used Sonnet, which struggled to navigate the increasingly sophisticated asks and the increasingly spaghetti code. AI is not a Senior Engineer. Not yet, anyway.

**2. The Claude Cowboy.** I have yet to look at any of the code. I have no automated tests. I have looked at the resulting HTML and the underlying schema, but I have never once worried about adding an index to optimize performance. Being a Claude cowboy is fine for a personal project, but alarming professionally. Back in the 80's when I was punching assembly using hex, I figured we would get here... But I assumed it would be gradual, not such a sudden change.

**3. If it's not intuitive at first, just give it time.** Things are happening so quickly. I suspect half my intuitions are probably wrong. I just don't know which half. Writing used to indicate thought. Coding used to indicate technical ability. School used to measure effort. Computer science used to be a path to the middle class. Images used to be worth a thousand words. Seeing used to be believing. REST API's used to be for the 1%. SaaS companies used to have amazingly scalable margins. Business users used to accept UX. Reporting used to be difficult. I build with AI to try to figure out which intuitions no longer apply, but I fear I can barely keep up.

**What do you think?**

Check it out: [Home Page](/).

Send me [some feedback](/email.htm). Remember to check the checkbox if you don't want to be published on the [wall of fame/shame](/feedback.htm)

**P.S. All text, on this page, was hand written.** None of this was written by AI. Not even the HTML. To create this page, I use a simple text editor that looks like this...

So if my HTML looks a little janky, don't blame Claude Code, that is 100% on me.
