Hypothetically, consider a social photo platform - each pic gets its own url, this page contains the image, text about the image, buttons for the user to click, related pics, and some user-specific elements (maybe notifications, etc.). There are different ways of going about the frontend. In each case, elements specific to the logged-in-user and the related images get fetched via api calls and are rendered client side.
For rendering the rest of the page, couple of distinct possibilities -
- Everything is rendered client side - one can use a single page application to handle the routing. The page structure stays the same, and new image uri's and the associated content are fetched via api calls.
SEO is a priority, so pure client side rendering is suboptimal.
Server side rendering for each page with NextJS or even Express is another option.
Another way is to do a static export in something like NextJS - which will generate separate html files for each image.
Now my thought is to skip all of that and go old school with sed/awk. We'll have a template file with all the styling elements and placeholders for the image uri and its description, etc. Then a script iterates through a list of values (queried from a database) specific to each image (img source URIs, description text, etc.) and uses sed to replace the placeholders in the template file and output a separate html file.
Each file has the same javascript to load the user-specific components.
Every time someone adds a new image, the script runs with the uri of the image and the description, etc. as the variables passed to it, and adds a new html file in a flat file structure.
These "variables" are stored in a database. So whenever we change the "design" of the page, we repeat the same process again - regenerate each html file.
The flat file structure will run into limitations, which is solvable with a directory structure. Nginx remains performant with large numbers of files.
Right now, we use NextJS with a mix of server side rendering and static pages, so it is all good. But I have been wondering about achieving something similar with more rudimentary (and performant) tools.
There's not too much additional work involved - templatizing the html file is straightforward, and this won't be difficult to script.
What's good and bad about this?