Video summary

I helped my weird internet friend automate her website using a python script

Main summary

Key takeaways

Technology

Goal / Problem

  • Allison FGO’s site (NeoCities-style, no server-side rendering) required a lot of repetitive manual HTML work.
  • The video builds a Python “static website factory” that dynamically generates HTML pages (and later uploads/mirrors to a web server) by using:
    • a CSV data export (acting like a spreadsheet/DB)
    • a downloaded template.html
    • deterministic file naming + directory structure for each meme page

Recommended approach (tech analysis)

The speaker compares rendering strategies and recommends static generation:

  1. Manual editing of every HTML file (too slow, error-prone)
  2. Server-side rendering (requires server access + backend DB)
  3. Client-side rendering (JavaScript; worse accessibility and harms SEO/permalinks)
  4. Static site generation: generate all HTML ahead of time with a program, then sync the result to the server.

What the generated pages include (product features)

Each generated meme page contains:

  • Date display
  • Meme image link + embedded image URL (path includes year/month/id)
  • Text blurb/description
  • Previous/Next navigation buttons (links to neighboring pages)
  • Download button that points directly to the GIF

Key technical constraints observed

  • The original site loads pages inside an iframe, and URLs include IDs like:
    • .../2020/jan/1.27.2020-1.gif
    • HTML references like 2020/jan/1.27.html (hover reveals underlying paths)
  • Because NeoCities/host is static-like, the generator must output a lot of prebuilt HTML files.

Data model / CSV “database”

  • Allison’s CSV export includes at least:
    • meme ID (unique identifier containing date + a per-day sequence number; separators like hyphen/period)
    • meme text (the description text)
  • The CSV might include an extra table-name/header row exported from Mac Numbers, so the code includes logic to skip that first non-data line if needed.

HTML templating method

  • Instead of a templating engine, the code uses simple placeholder replacement on template.html, e.g.:

    • %pretty date% → replaced with formatted date text (e.g., “January 27th, 2020”)
    • %meme image% → replaced with the correct GIF path
    • %meme text% → replaced with HTML-escaped text

Safety: HTML escaping

  • The script HTML-encodes meme text so characters like < and > don’t break the generated HTML.
  • This ensures user content renders as literal text, not injected markup.

Parsing the meme ID to extract date parts

  • The script transforms the identifier into a uniform format by swapping separators, then splits into:
    • month, day, year, and the extra numeric “sequence” component
  • It also maps month numbers to:
    • short month (“Jan”, “Feb”…)
    • long month (“January”, “February”…)
  • Month/day formatting is generated in code to match the template’s expectations.

File / directory output structure

  • The generator creates directories like:
    • out/<year>/<shortMonth>/
  • It writes HTML files using:
    • out/<year>/<shortMonth>/<memeID>.html (exact naming inferred from how navigation expects URLs)

Previous / Next navigation logic

  • The code changes from “process one row at a time” to processing three rows at once:
    • previous, current, next
  • For edge cases:
    • if there is no previous/next, the link uses a placeholder like # so buttons don’t navigate incorrectly.

Packaging + “no-tiling/terminal required” UX

  • The delivered tool is intended to work on a Mac with minimal terminal use:
    • Rename the script to a runnable file (e.g., website factory.com as an executable wrapper)
    • When double-clicked, it opens Terminal and runs automatically.
  • To make it robust, the script:
    • uses #!/usr/bin/env python3
    • uses __file__ + os.chdir() so it runs relative to its own directory (not the user’s home folder)
    • prints debug/system info to help troubleshooting on others’ machines

Install workflow / automation tutorial

  • The author plans to publish it open source on GitHub and provides an install command sequence that:
    • creates a folder on the desktop
    • downloads template.html, data.csv, and the Python script
    • sets execution permissions
    • runs the script to generate out/ HTML pages

Review / validation performed

  • The script is tested by:
    • generating output for sample CSV rows
    • verifying that produced HTML files contain correctly replaced fields
    • verifying navigation links (previous/next) across different years/months
    • checking that escaping prevents </> from breaking HTML
    • re-running generation to confirm it still works after removing/recreating output

Main speakers / sources

  • Main speaker / developer: Dave (the video creator; author of the Python script and “website factory” tool)
  • Project owner / collaborator: Allison FGO (Allison Seago; creator of the site/database)
  • Source material referenced: Allison FGO’s exported data.csv and downloaded template.html from the existing iframe-based page structure.

Original video