Skip to content

What is Spotcraft

Your portfolio content, your Supabase, your frontend.

Spotcraft is an open-source, self-hosted headless portfolio CMS built on Supabase. It’s for developers and creatives who want their own portfolio site without hand-editing JSON or running a full CMS: you bring your own Supabase project, edit your content in the Spotcraft dashboard, and fetch it from whatever frontend you like — Next, Astro, SvelteKit, or plain HTML.

Spotcraft is being built to power vin.ski.

Spotcraft dashboard ── edits ──▶ Your Supabase project ◀── reads published content ── Your frontend
(self-hosted app) (Postgres + Auth) (planned) (Next, Astro, …)
  • Your Supabase project holds your content and your team’s accounts. You own the data.
  • Spotcraft is the dashboard you self-host to edit it, with invite-only accounts and roles.
  • Your frontend reads published content straight from Supabase — with supabase-js or the REST API and your project’s publishable key. Drafts stay private. (Planned.)

There’s no Spotcraft cloud and no lock-in: if you stop using Spotcraft, your content is still plain Postgres tables in your own Supabase project.

  • Developers who want to design and build their own site, but not hard-code its content.
  • Creatives working with a developer: they edit in the dashboard, the site updates.
  • Anyone who finds a full CMS too much for a portfolio, and JSON files in a repo too little.

Works today

  • Invite-only accounts — no public sign-up
  • Roles: admin (everything, including the team), editor (content), default user (own account only) — see Roles
  • User management: invite, resend, change role, remove
  • Account page: change password, sign out everywhere; password reset by email
  • Database workflow: Drizzle schema → generated Supabase migrations
  • Unit and end-to-end tests, CI, this documentation

Next

  • Content types: projects, case studies, work experience, testimonials, contact submissions
  • Public read access for published content (read-only policies; drafts stay private)
  • Examples for fetching content from Next, Astro, SvelteKit and plain HTML