My first cut at ZAML tried to minimize Amazon S3 (cloud storage) costs. There was just one full HTML page with a fragment stored for each quote. Javascript fetched the quote and inserted it into the page—a very simple, one page app, all in S3 with no server.
ZAML 2.0 added permalinks, a URL for each ZAML that could be copied into an e-mail or another Website. I tried several things: bare URL with an anchor (e.g., http://zaml.us/#AbcD89) or a query parameter (e.g., http://zaml.us/?AbcD89). Neither played well with Google Analytics (GA) and with no server, that was the easiest way to track traffic.
Amazon S3 allows specifying an error document for a Website. This catches all missing pages and other errors. Ruby classes have something similar, a method_missing method. A common practice is to use it to extend a class at runtime, based on runtime information, e.g. dynamic find methods that search by a column in the database. Think of it as lazy evaluation of infrequently used methods.
With this insight, I could use the usual URL form, (e.g., http://zaml.us/AbcD89.html) and have Javascript in the error document extract the ZAML fragment name, fetch it, and insert it into the page. Clever!
But search engines don’t run Javascript normally and probably ignore 404 errors (Page Not Found). So ZAML works, but is not searchable. Not a good practice if I want people to find the site.
Amazon S3 is ridiculously cheap. You can store gigabytes for the cost of the smallest EC2 server. I was optimizing the wrong thing. So ZAML 3.0 has a full HTML page for each quote. I expect Google and the other search engines to start indexing ZAML soon. To play even better with the search engines, ZAML 3.1 will include a sitemap.xml file.