Every time I build a new product, I end up rebuilding the same blog system. Different frontends, different frameworks, but always the same core problem: I need a place to manage and serve blog content.
WordPress is overkill. Headless CMS solutions like Contentful or Sanity charge per seat and per API call. For indie hackers building multiple products, this adds up fast.
So we built Blot.
The problem we're solving
If you're building multiple products—whether you're an indie hacker, agency, or SaaS builder—you know this pain. Each project needs a blog:
- Marketing blog for your SaaS
- Documentation site for your API
- Personal blog alongside your portfolio
- Client blog for that agency project
Each time, you face the same decision: rebuild it, use WordPress (and deal with hosting, security, updates), or pay enterprise prices for a headless CMS that charges per seat and API call.
None of these options made sense for someone building multiple products.
What Blot does
Blot is a headless CMS designed specifically for people building multiple projects. It's multi-tenant by default—one account powers unlimited sites (depending on your plan). It's API-first, so your content works with any frontend. And it integrates beautifully with AI content tools.
The workflow is simple:
- Create a site
- Get your API key
- Start publishing content
That's it. No sales calls, no complex setup, no per-seat pricing.
Building it in 5 days
We shipped Blot in 5 days. Not as a prototype—as a production-ready platform with real users. Here's how we did it.
Day 1: Foundation
Started with the tech stack decision. Next.js 16 with the App Router was an easy choice—industry standard, excellent TypeScript support, and clean routing for both dashboard and API. Supabase provides PostgreSQL, authentication, and storage in one place.
Spent most of Day 1 on database schema design. This is the foundation everything builds on, so it needed to be right. Key design decisions:
- Sites as isolated containers for all content
- Row Level Security for multi-tenancy
- Slugs as API identifiers
- Full SEO support built in
The schema supports sites, posts, categories, tags, authors, API keys, webhooks, team members, plans, and usage tracking.
Day 2: Dashboard and content management
Built the core dashboard with sidebar navigation. Created the post editor using TipTap—a headless rich text editor built on ProseMirror. This was the right choice: extensible, great React integration, and active community support.
The editor includes all the formatting options you'd expect: text styles, headings, lists, quotes, code blocks, links, images, and text alignment. Added a sticky toolbar so it's always accessible while scrolling.
Built CRUD interfaces for categories, tags, and authors. These provide the organizational structure for content.
Day 3: API development
This is where Blot becomes useful. The REST API is clean and predictable:
GET /api/v1/sites/my-blog/posts
POST /api/v1/sites/my-blog/posts
PUT /api/v1/sites/my-blog/posts/post-slug
DELETE /api/v1/sites/my-blog/posts/post-slug
Implemented API key authentication with two permission levels: read (published content only) and read_write (full CRUD access). Keys are hashed with SHA-256 before storage—you only see the plain key once at creation.
Added rate limiting to prevent abuse. Current limits: 100 reads/minute and 30 writes/minute for free users, with higher limits on paid plans. The implementation uses in-memory storage for now (Redis for production scale).
Public read access means published posts can be fetched without authentication—perfect for static site generation.
Day 4: Advanced features
Webhooks were essential. When content changes, your static site needs to rebuild. Blot sends webhooks for post.created, post.updated, post.deleted, post.published, and post.unpublished events.
Each webhook includes an optional HMAC signature for verification—never trust unsigned webhooks in production.
Added post scheduling. Write posts ahead of time, set a publication date, and forget about it. The system handles the rest.
Implemented image uploads using Supabase Storage with drag-and-drop support, file type validation, and a 5MB size limit.
Day 5: Polish and deployment
Focused on user experience: loading states, error messages, confirmation dialogs, responsive design. Built in-app API documentation showing your personalized base URL and authentication examples.
Set up Vitest for testing. Fixed several edge cases discovered during testing. Deployed to Vercel with custom domain configuration.
First successful API call from an external application at 6:30 PM. That moment when it all works.
The features
Multi-tenant architecture
One account, unlimited sites (plan-based). Each site is completely isolated with its own posts, categories, tags, authors, API keys, and webhooks. No data leakage between sites.
Rich text editor
TipTap editor with full formatting support, syntax-highlighted code blocks, and a sticky toolbar. The editor outputs clean HTML that works anywhere.
API-first design
RESTful API with authentication, rate limiting, and public read access. Works with Next.js, Astro, vanilla HTML, or any frontend framework.
Webhooks
Event-driven integrations for static site rebuilds. Includes signature verification for security.
Post scheduling
Write posts ahead of time and schedule publication dates. The system publishes automatically.
Team collaboration
Invite team members with role-based access. Four roles: Owner (full control), Admin (near-full access), Editor (content creation), and Viewer (read-only). Available on Pro and Enterprise plans.
Custom domains
Serve your blog on your own domain with automatic SSL. Configure DNS, and Blot handles the rest. Pro and Enterprise plans.
Import tools
Migrate from WordPress, Ghost, or CSV files. Upload your export file and Blot automatically creates posts, categories, and tags.
SEO optimization
Every post includes meta title, meta description, and Open Graph image fields. Reading time is calculated automatically.
Who it's for
Indie hackers
You're building multiple products. Each needs a blog for marketing, documentation, or updates. Managing separate WordPress installations or paying per-seat pricing doesn't make sense.
Blot gives you one dashboard for all your blogs. Create a site, grab the API key, integrate with your frontend. Done.
Small agencies
Managing content for multiple client sites is a nightmare. Separate CMS instances per client, training clients on complex systems, unpredictable costs.
Blot provides centralized content management with simple client handoff. Each client gets their own site with role-based access. Flat monthly pricing regardless of how many sites you manage.
SaaS builders
Your product needs blog functionality but building it from scratch takes weeks away from your core product. Integrating a full CMS adds complexity.
Blot's API lets you add blog features quickly. Focus on your product, let Blot handle the content infrastructure.
Pricing that makes sense
Three plans, all with flat monthly pricing:
Free (£0/month): Perfect for getting started. 1 site, 100 posts, 1,000 API calls per day. Full API access, webhooks, and scheduling included.
Pro (£12/month): For growing projects. Unlimited sites and posts, 100,000 API calls per day, team collaboration (up to 5 members), custom domain support.
Enterprise (£29/month): For agencies and high-traffic applications. Everything in Pro plus unlimited API calls and unlimited team members.
No per-seat fees. No API call surcharges. Simple pricing.
The tech stack
Built with modern, reliable technologies:
- Next.js 16: App Router for both frontend and API
- Supabase: PostgreSQL database with authentication and storage
- TailwindCSS 4: Utility-first CSS
- shadcn/ui: High-quality component library
- TipTap: Extensible rich text editor
- Vercel: Hosting and deployment
- Stripe: Billing and subscriptions
The architecture is designed for reliability and scale. Row Level Security ensures multi-tenant data isolation. API keys are hashed before storage. Webhooks include signature verification.
What's next
Blot shipped with the features that matter: multi-tenant architecture, rich text editing, API access, webhooks, team collaboration, custom domains, and import tools.
The roadmap includes:
- Content versioning for tracking changes
- Media library for centralized image management
- GraphQL API as an alternative to REST
- Custom fields for extending posts with metadata
- Analytics dashboard for view counts and popular posts
- AI integration for content suggestions
But the core is solid. Blot solves the problem it was built to solve: one CMS for all your blogs.
Join the waitlist for early access
Blot is coming soon. Sign up to the waitlist at blot.so for early access.
Be among the first to create your site, integrate with your frontend, and stop rebuilding the same blog system. We built this because we needed it ourselves. Now we're sharing it with everyone who's tired of the same problem.
The documentation will include integration guides for Next.js, Astro, and vanilla JavaScript. The API is straightforward REST—if you can make a fetch request, you can use Blot.
We'll ship features based on real feedback. If there's something you need, let us know when you join.