Bake, Don’t Fry has been one of my more successful blog entries. I wonder if this was because of style or content (or both?). Anyway, since people seem interested in it, I thought I’d sketch out my views on how to make baked sites work.
First, let me clarify that using static web pages for your site does not preclude things that people generally associate with dynamic sites (like templates, newsboxes, stock tickers, etc.). Nor does it mean that your site can’t have any interaction or collaboration (comments, boards, polls). While these things obviously won’t work if you move platforms or server software, at least the content already on your site won’t die. The key is to keep a strict separation between input (which needs dynamic code to be processed) and output (which can usually be baked).
So how would this work? You’d need a dependency tracking system (good old GNU make might even do the job) that would allow you to add new content to the system (something tricky with make alone — is this what automake does?) or modify old content and would then rebuild the dependent pages or create new ones as necessary. As an example, a new blog entry should create a new page for the entry, rebuild the previous entry page, rebuild the day/week/month’s pages and rebuild the home page. It would also have to add all the dependencies for the new page (to the template, to the previous entry, to that entry, to the category name) and add a dependency to the previous entry page.
Current systems (like OpenACS) could even be hoodwinked into doing this with little or no modification. The dependency information could be layered on top and then the system could simply call the dynamic scripts when that page needed to be regenerated. Of course, a purebred system would probably be better since it would give a chance for URL structure to be designed more sensibly.
Baking doesn’t do everything, though. Input systems, like the code that accepts comments, would still need to be dynamic. This is a limitation of web servers which I doubt will ever be solved in a standard way. Dynamic tools (like homepage generators and search software) will either have to be fried, or use client-side technologies like SVG, Java(Script), Flash (ick!). There’s no way around that.
If you’re interested in helping build a system to help with baking sites, please let me know.