“It’s somewhere in the chat.”

Three years of commissions and the finished pieces live in Telegram threads, Drive folders, and DMs you’d have to scroll for an hour to find. Sona gets them out, onto a site you own, with every piece credited and linked to the artist who made it.

self-hosted · your GitHub + Cloudflare · open source, Apache-2.0
↓ and after
sparky.ink, a live Sona site: gallery home with artist credits

sparky.ink · 140+ works · 90+ artists credited · 170+ stickers mirrored

Commissionsevery piece credited · linked to the artist
Fursuit photosphotographer credited
Sticker packsmirrored from Telegram, artist credited

Credit is the whole point

Upload a piece and the first question is who made it. Commissioned art, fursuit photos, mirrored sticker packs, con history: every tile links back to the artist. Credit is part of the upload flow, not a setting.

There’s no feed, no follower count, no visitor accounts. You’re the only login. It’s a website, the old kind.

One artist directory, shared between sites

Everyone commissions from a lot of the same artists, so Sona sites share a moderated registry: search it while crediting a piece and pull the artist in, or submit a new one back for everybody. Names, avatars, and handles get entered once and stay right everywhere. Opt-in, and never in your site’s page-load path.

100+
artists in the registry
300+
platform handles linked
30+
moderated submissions

For collectors, not artists

If you’ve spent a few years paying artists to draw your character, you have pieces spread across chats and folders everywhere. Sona is the collector’s side of the transaction: one place for the work, with the artists’ names attached.

Artists already have their side

FurAffinity, Weasyl, portfolio sites: that’s the artist’s half, and Sona doesn’t try to be it. What artists get here is quieter. Every Sona site showing their work links back to them, with handles the registry keeps current.

Set up in an evening, mostly from your browser

Sona is a template repo, not a service. Fork it into your own GitHub account and paste four commands into a terminal; the setup script provisions Pages, D1, and R2 on your own Cloudflare account. That part takes about five minutes, and it’s safe to re-run.

Everything after happens in your browser. The first-run wizard walks you through your password, site name, and theme, and updates arrive later through GitHub’s fork sync with migrations applied exactly once. Never touched a terminal? The setup guide assumes nothing and shows every command.

# the 5-minute prelude:
$ npm run setup
  ✓ Pages · D1 · R2 provisioned on your account
  → SETUP_TOKEN printed (use once at /admin/setup)

Seven sites run it today

Seven personalities, one template: sparky.ink · akito.dog · taro.surf · sheeb.net · deer.parts · yuja.ink · rechner.solutions

Browse the showcase →

Sponsors

The $75/mo GitHub Sponsors tier includes your name, handle, and a link right here and in the repo.

See the sponsor tiers

Pricing

Self-host
Free

Open source under Apache-2.0, every feature. Runs on Cloudflare’s free tier; a personal gallery won’t come near the limits. You pay for your domain and nothing else.

✓ Full source: your fork keeps working even if this project stops
✓ Your data, your domain, your Cloudflare account
— You run the setup script and push deploys
Get the repo
waitlist open
Managed
TBD

We’re seriously considering running hosted Sonas: no terminal, no Cloudflare account, we host and update yours. The waitlist tells us how many people want it, and you’ll hear first if it happens.

✓ Skips the CLI entirely
✓ Updates and backups handled for you
✓ Double opt-in waitlist; leave anytime
Join the waitlist

Managed-hosting waitlist

Leave your email and you’ll hear first if managed hosting happens.

First we email you once to confirm it’s really you. Nothing lands until you click that link. We only email you about Sona managed hosting, and we never sell or share your address. Privacy.

FAQ

Do I need to know how to code?

No, but you need to be comfortable pasting four commands into a terminal. The setup script does the provisioning and the first-run wizard does the configuration in your browser. If you’ve ever set up a Minecraft server, this is easier.

What does it cost to run?

Your domain (~$10/year) and that’s usually it. Cloudflare’s free tier covers Pages, the D1 database, and R2 image storage well past what a personal gallery uses.

What about NSFW work?

Mark a piece NSFW and the public site gates it behind a confirmation. And yes, hosting it is allowed: Cloudflare’s hosting policy only removes illegal material, and serving images from R2 is exactly the setup Cloudflare points media sites at. Legal adult art on your own account is fine. Keeping it legal and gated is on you.

What if something goes wrong during setup?

The setup script is safe to re-run; it skips anything that already exists. If a deploy fails, your fork’s Actions tab shows exactly which step went red, and re-running the job picks up from there. Still stuck? hello@sona.fast or the Telegram bot; a human answers.

What happens if Sona the project disappears?

Your site keeps running. It’s your fork, on your GitHub, deployed to your Cloudflare; there’s no central server to go down. You’d stop getting updates, and that’s the whole blast radius. The shared registry is opt-in and never in your page-load path.

How do updates work?

Your site is a fork of the main repo, so updating is one click: GitHub shows a “Sync fork” button when something new ships, and pressing it redeploys your site with the latest code. Database changes apply themselves during the deploy. Your art, settings, and content live separately from the code, so updates never touch them.

I’m an artist. Should I run one?

For your own portfolio, probably not; FurAffinity, Weasyl, or a portfolio site fits better. But if you also collect art of your own character, sure. Either way the registry helps you: it keeps your name and handles correct on every site that shows your work.

Stop scrolling for it.

Fork the repo tonight, be live before you go to bed. sheeb.net did.