Each asset is minified as much as possible to ensure the resulting HTML will fit on the device.
After gzipping, the result is a single 8kb file, which is served by the MicroPython web server.
All of the graphics aside from the favicon are SVG for responsive scaling on all devices, phones through to 27" desktops.
I am using a WeMos D1 Mini, but any ESP8266 board running the latest MicroPython firmware will do. Simply launch a WebREPL session to upload the files, then reboot to configure the AP and web server.
The captive portal is not working yet. So, clients connecting to the unencrypted access point will have to visit the access point IP to see the HTML. Once I get it working, all DNS traffic will be spoofed and all traffic redirected to the HTML page.