diff --git a/README.md b/README.md index ad236bb..a73242c 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,94 @@ # Khao Pad (ข้าวผัด) -**A modular CMS for Cloudflare** — lightweight, multilingual, and built for Thai software houses. +**The open-source website platform for Cloudflare.** Drives a non-ecommerce site end-to-end — content, SEO, analytics, navigation, and engagement — on Cloudflare Workers + D1 + R2 + KV. > ข้าวผัด = Fried rice. Everyone wants something slightly different, but in the end it's the same core dish — just with different sauces and ingredients. -## Why Khao Pad? +🌐 **Live demo**: [khaopad-example.codustry.workers.dev](https://khaopad-example.codustry.workers.dev) ([source](https://github.com/codustry/khaopad-example)) · 🌍 **Marketing site**: [khaopad-website.codustry.workers.dev](https://khaopad-website.codustry.workers.dev) -We kept running into the same CMS problem: +## What it is -| Solution | Problem | -| ------------------ | ----------------------------------------------------------------------------------- | -| Supabase | Great ecosystem, but $25/mo is heavy for small sites when Cloudflare is nearly free | -| Self-hosted Strapi | Too large, too many resources, needs separate deployment | -| Pages CMS | Great UI, but doesn't scale to D1/R2 when you need it | +Khao Pad started as "another CMS for Cloudflare." Through v1.5 it became a complete content layer — write, schedule, search, version, audit. v1.6 → v2.0 turned it into the surrounding machinery a real website needs: SEO, analytics, IA, performance, engagement. -Khao Pad fills the gap: **start lightweight, scale when needed, stay on Cloudflare.** +So: not a CMS. A **website platform** that happens to ship with a strong CMS at the core. -## Features +## Why? -- **One repo, one host, two surfaces** — public site at `/`, admin CMS at `/cms/*` -- **Multilingual first** — shared slug and media, separate content per language (TH/EN) -- **D1 + R2 storage** — articles in D1 (SQLite at the edge), media in R2, KV for caching. Sub-10ms reads from anywhere -- **Cloudflare-native** — D1 database, R2 media, KV caching, Workers deployment -- **Better Auth** — email/password auth with role-based access (Super Admin, Admin, Editor, Author) -- **Paraglide JS** — compile-time i18n with type-safe translations via inlang -- **SvelteKit + Tailwind + shadcn/ui** — modern, fast, beautiful +The Cloudflare-native stack (Workers + D1 + R2 + KV) is the cheapest, fastest way to host a content-heavy site in 2026. But there was no off-the-shelf platform that made the most of it: + +| Solution | Problem | +| ------------------ | ---------------------------------------------------------------------------------------- | +| Supabase | Great ecosystem, but $25/mo+ is heavy for small sites; needs a separate compute layer | +| Self-hosted Strapi | Big footprint, separate deployment, not Cloudflare-native | +| Pages CMS | Lovely UI, but git-backed storage doesn't scale to D1/R2 once you need real DB semantics | +| Ghost / Wagtail | Mature but heavy, opinionated about hosting, not edge-deployable | + +Khao Pad fills the gap: **start lightweight, scale when needed, stay on Cloudflare's free / near-free tier as long as you can.** + +## What ships + +Eleven shipped milestones (v1.0 → v2.0). Five "platform pillars" shaped the v1.6+ work: + +### Content (v1.0–v1.5) + +- **Articles + Pages** — markdown-first, per-locale (EN + TH out of the box, more locales easy to add), shared English-ASCII slug, cover image +- **Categories + Tags** — full taxonomy with public blog filtering (`/blog?category=…`, `?tag=…`) +- **Media library** — R2-backed, drag-upload, alt text, **folders** (v1.7), responsive `srcset` via Cloudflare Images (v1.9) +- **Markdown editor** — toolbar, split preview, autosave to localStorage, ⌘B / ⌘I / ⌘K shortcuts, image picker +- **Scheduled publishing** — set a future `publishedAt`, the public site doesn't reveal it until that time +- **Full-text search** — SQLite FTS5 over per-locale localizations, public `/blog?q=`, in-CMS list filter +- **Per-article revision history** — line-diff view, one-click restore, attribution +- **Audit log** — every CMS action recorded; admin viewer at `/cms/audit` +- **Token-based invitations** — admins create one-shot invite links; recipients claim and join + +### Discoverability (v1.6 — SEO foundations) + +- Per-page `