What I Built
Cute Magick is a self-hosted web runtime for people who know how to code but don't want to fight servers, pipelines, and configuration just to make a website.
You get a real development environment — file explorer, code editor, multi-language runtime, version history, databases — inside a single Docker container. Create a site, write some files, hit Go Live. That's it.
Live: cutemagick.com | GitHub: github.com/pinkhairs/cutemagick
Screenshots:
Workspace
File Explorer, Time Machine, & Code Editor
The Problem
Modern web infrastructure has a gatekeeping problem. Servers have a bad rap.
You learned HTML and CSS once. Maybe PHP. You could make things. Then somewhere along the way, shipping a website started requiring Git workflows, CI/CD pipelines, build tools, serverless functions, YAML configs, and a minor in DevOps.
Static site hosts solved part of this, but they only serve files as-is. Want to include a reusable header? Pull from a database? Handle a form submission? Sorry, you need a "real" server now. Go set up Nginx.
Cute Magick exists because your computer is already a server, and the web is already accessible. We just need to make that feel true again.
How It Works
Sites Are Folders
A site in Cute Magick is a folder with files. No databases to configure, no build pipelines, no deployment rituals. You create a site, you get a folder. HTML, CSS, PHP, Python, Node, Lua, Bash — whatever you want, all in the same place, all working together.
Each site has two states: working (your private draft) and live (what the world sees). You edit in working. When you're ready, you click Go Live. Your audience sees the update instantly. You keep editing. Live stays put until you say otherwise.
Polyglot Runtime
This is the part I'm most proud of. Cute Magick doesn't make you pick a language. The file extension tells the runtime what to do:
-
.php→ PHP (with SQLite, cURL, GD, Imagick) -
.py→ Python 3 (with requests, Pillow) -
.js→ Node 20 (with automaticnpm installfrom yourpackage.json) -
.lua→ Lua 5.4 -
.sh→ Bash (with curl, jq, imagemagick, the works) -
.html→ served as-is
An index.html next to a contact.php next to a data.py — all in the same site. Runtime figures it out per file. You don't configure anything.
Scripts run CGI-style. Each request spawns a fresh process, runs your code, sends the output. Your secrets are injected as environment variables automatically. Scripts are killed after 3 seconds or 100KB of output, so design accordingly.
Time Machine
Every time you change something — create a file, save a change, upload an image, delete something — Cute Magick takes a snapshot.
Open the Time Machine tab and you see your site's entire history. Click any version to preview it. Want to bring Tuesday's version back? Restore it. This doesn't delete anything — it creates a new version that copies the old one. Your timeline stays intact.
Under the hood, it's Git. If you know Git, you can open a terminal and do whatever you want. If you don't know Git, you never have to.
Secrets
API keys, passwords, tokens — they go in the Secrets tab, not in your code. Cute Magick stores them in a hidden .env file that's never committed to Git, never exported, never pushed to remotes, just injected at runtime:
$apiKey = $_ENV['API_KEY'];
Share your code publicly. Open source your site. Your secrets stay private.
Databases
Each site can have SQLite databases. No MySQL, no Postgres, no credentials to manage. Just create a .db file and start querying. Your database is a file that goes wherever your site goes.
Databases are shared between working and live states via symlinks, so your data stays consistent. They're not versioned (Git doesn't track row-level changes), but you can export to JSON or SQL and version those files if you want.
Remotes
Optional Git remotes let you back up to GitHub, GitLab, or wherever. Push and pull manually — Cute Magick doesn't auto-sync. Your site's history travels with it. Secrets and databases stay local.
The Workspace
The workspace is a customizable desktop-style interface. Each site is a draggable window with five tabs:
- 🏠 Home — your live site preview
- 📝 File Explorer — drag-and-drop, rename, delete, upload folders
- 🔄 Time Machine — your full version history
- 🔐 Secrets — environment variable management
- ⚙️ Settings — site URL, remote repos, password protection
On mobile, everything stacks vertically with newest windows at the top. Same features, different layout.
You can set a background image. Toggle dark mode. It's yours.
What Makes This Different
It's self-hosted. Your data lives on your machine. A site is just a folder. You can download it, move it, clone it with Git, import it into another Cute Magick instance.
It runs on almost nothing. 512MB RAM, 1GB disk, any CPU from the last decade. A Raspberry Pi 4 runs it fine. The cheapest VPS tier is overkill.
docker run -p 3000:3000 -v $(pwd)/cutemagick:/app/site ghcr.io/pinkhairs/cutemagick:main
That's the whole install.
It's not trying to be VS Code. The code editor has syntax highlighting, line numbers, and quick save. It's enough to work comfortably without leaving the browser. If you want a full IDE, edit locally and sync via Git.
You can't permanently break anything. Every change is a snapshot. Undo is built in. Delete a file by accident? Rewind. Push bad code live? Restore the previous version. The whole philosophy is: experiment without fear.
Security Model
Cute Magick is designed for single-tenant use — one person, one instance. Sites within the container aren't isolated from each other, which is intentional — it's your machine, your data.
Try It
Self-host in 30 seconds:
docker run -p 3000:3000 -v $(pwd)/cutemagick:/app/site ghcr.io/pinkhairs/cutemagick:main
Be sure to copy .env.example to .env and update the variables, specifically JWT_SECRET, LOGIN_EMAIL and PASSWORD (a bcrypt hash).
Open localhost:3000/admin, log in, create a site.
Or sign up at cutemagick.com if you'd rather not deal with infrastructure. The hosted plans are intentionally affordable because the hope is you eventually "graduate" to self-hosting.
GitHub: github.com/pinkhairs/cutemagick
Docs: cutemagick.com/docs (full documentation)
Contact: me@diana.nu
Who This Is For
You learned to make websites once. You liked it. Then the ecosystem got complicated and you drifted away. Or you're a developer who's tired of configuring infrastructure just to play with an idea. Or you want a place to build things where you own your data and can't accidentally destroy anything.
Cute Magick is that place.
Thanks for reading. Go make something.




Top comments (1)
This is exactly the kind of thing the web needs more of. The "your computer is already a server" philosophy resonates hard.
I've been building something in a similar spirit but from the P2P angle — bittorrented.com streams torrent content directly in the browser via WebTorrent. No client install, no server dependency, just browser-to-browser connections.
Different approach to the same core idea: the web should feel accessible again without all the DevOps ceremony. Love the polyglot runtime — being able to drop a .php next to a .py in the same folder and have it Just Work is such a small thing that makes a huge difference.
The Time Machine feature backed by Git is clever too. Most self-hosted tools skip version history entirely.