
Code Doodles Revival
A containerized revival of codedoodl.es, making its community-created gallery of interactive browser sketches easier to self-host.
- Goal
- Bring back one of my favorite browser landing pages
- My role
- Solo developer
- Status
- Active
- Started
- Ended
- Docker
- Node.js
- CoffeeScript
- JavaScript
- WebGL
- Canvas
codedoodl.es was one of my favorite browser landing pages: a collection of small, interactive visual experiments that gave me something interesting to look at before getting on with whatever I had opened the browser to do. It was an open-source, collaborative creative coding project, and the original site went offline in 2020. Its roughly 80 sketches, including WebGL graphics and Canvas experiments, were still worth visiting. I wanted to bring the gallery back and containerize it so anyone interested could deploy a copy without having to reconstruct the original development environment.
My contribution is the revival and deployment work, not the original gallery or its artwork. The sketches belong to the project’s community of contributors, and I wanted to preserve the experience of browsing their work. The feat/containerize branch packages the existing CoffeeScript and Express application, along with its compiled frontend, into a Docker image. The complete doodle archive remains a separate set of assets that needs a web server; the application can point to it through DOODLES_URL. I also made the site’s public URL, listening address, and port configurable, so a deployment is no longer tied to the original hostnames and local binding.
I kept the scope centered on making the existing collection accessible again. The original project already supplied the creative work, navigation, and presentation; the container adds a practical way to run that application elsewhere. The main features of the revived setup are:
- A gallery of 78 community-created sketches, from particle systems and shader experiments to generative patterns.
- Individual sketch pages with previous, next, and random navigation for exploring the collection.
- Preserved author credits, descriptions, and interaction instructions alongside the artwork.
- A containerized application with configurable public and archive URLs for self-hosting.
- Automated image builds, with publishing to GHCR and my Forgejo registry on non-pull-request runs.
One implementation challenge was rebuilding an application whose toolchain had aged along with it. The existing Gulp and node-sass setup called for an older environment, so I put Node 10.16.0 and Python 2.7.18 into a dedicated build stage, compiled the frontend, and pruned development dependencies before copying the application and Node runtime into the final image. That exposed another old assumption: startup eagerly loaded deployment utilities that were not needed to serve the gallery and were absent from the runtime image. I moved those imports into the already-disabled deployment hook. I also enabled gzip handling in the manifest requests so the older HTTP client could read the compressed sketch archive. Together, these changes made the existing application easier to package without requiring a frontend rewrite.
For now, I see this as a preservation project with room to become something more. The container still carries a legacy application stack, so making it deployable is not the same as modernizing it. When I have more time, I hope to use it as a playground for coding agents: creating new sketches, exploring variations, and working on small visual programs whose results I can inspect directly in the browser. The immediate value though is bringing back a collection I enjoyed and giving other people a way to host it too, while keeping the original contributors’ work at the center of the experience.