CMS Custom untuk Growth Content
Saat konten makin banyak, CMS custom kasih kontrol workflow dan struktur data yang lebih tepat. Ini pengalaman kita bangun CMS sendiri pake Supabase dan Next.js.
DaunsCode Editorial Team
admin@daunscode.com • 13 Feb 2026
Kenapa Bikin CMS Sendiri?
Mungkin pertanyaan pertama yang muncul: "Kan udah ada WordPress, Ghost, Strapi, kenapa harus bikin sendiri?" Pertanyaan yang valid sih. Jawabannya: tergantung kebutuhan.
Kalau kamu cuma butuh blog simpel, ya WordPress udah lebih dari cukup. Tapi kalau kamu butuh:
- Kontrol penuh atas struktur data
- Workflow approval yang spesifik
- Integrasi seamless sama website yang udah ada
- Nggak mau bayar hosting CMS terpisah
- Performance yang nggak bisa dikompromiin
Nah di situ CMS custom mulai make sense.
Stack yang Kita Pake
Buat CMS di DaunsCode, kita pake:
- Supabase sebagai database dan auth
- Next.js App Router buat frontend admin
- Tailwind CSS buat styling
- Supabase Storage buat upload gambar
Kenapa Supabase? Karena dapet PostgreSQL yang proper, built in auth, storage, dan RLS. Satu platform buat semuanya. Nggak perlu setup database terpisah, Auth terpisah, file storage terpisah.
Struktur Data yang Fleksibel
Salah satu keuntungan CMS custom adalah kamu bisa desain schema database sesuai kebutuhan. Contoh schema articles kita:
CREATE TABLE public.articles (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
slug TEXT UNIQUE NOT NULL,
title TEXT NOT NULL,
excerpt TEXT,
content TEXT NOT NULL,
category TEXT,
tags TEXT[] DEFAULT {},
status TEXT DEFAULT draft CHECK (status IN (draft, published, archived)),
reading_minutes INTEGER DEFAULT 5,
cover_image_url TEXT,
published_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
Perhatiin beberapa hal:
- tags pakai array nggak perlu tabel relasi terpisah buat tag, PostgreSQL native support array
- status dengan CHECK constraint mencegah status yang nggak valid masuk ke database
- reading_minutes dihitung otomatis berdasarkan panjang content
- slug unique memastikan nggak ada URL yang duplikat
Workflow Content
Di CMS kita, workflow nya simpel tapi efektif:
- Draft penulis bikin artikel, masih bisa diedit sebebasnya
- Published artikel live dan bisa dibaca publik
- Archived artikel ditarik dari publik tapi datanya masih ada
Transisi antar status dilakuin via admin panel. Dan karena pakai RLS, artikel draft otomatis nggak keliatan di website publik.
Admin Panel
Admin panel kita dibangun sebagai bagian dari website utama, bukan app terpisah. Route nya di /elaina-cms (ya, kita emang suka anime).
Fitur utamanya:
- List artikel dengan filter status dan search
- Editor form untuk bikin dan edit artikel
- Preview liat hasilnya sebelum publish
- Media manager upload dan manage gambar
Semua operasi write lewat API route di server yang pake service_role key Supabase. Jadi RLS tetep jalan buat user biasa, tapi admin bisa CRUD via server.
Markdown sebagai Format Content
Kita pilih Markdown sebagai format content karena beberapa alasan:
- Simpel nggak perlu rich text editor yang berat
- Portable markdown bisa di-render di mana aja
- Version friendly gampang di-diff kalau mau tracking changes
- Developer friendly kebanyakan dev udah familiar sama markdown
Di sisi render, kita pake react-markdown dengan plugin remark-gfm (buat tabel dan strikethrough) dan rehype-katex (buat rumus matematika). Hasilnya bisa render markdown lengkap termasuk tabel dan formula.
SEO dari Content
Salah satu goals dari CMS ini adalah bantu SEO. Beberapa hal yang kita implementasi:
- Auto generate meta tags dari title dan excerpt
- Sitemap otomatis semua artikel published masuk sitemap
- Structured data JSON LD buat setiap artikel
- Canonical URL mencegah duplicate content
- OG dan Twitter cards biar sharing di social media ada preview nya
Semua ini otomatis dari CMS, penulis nggak perlu mikirin technical SEO.
Performance
Karena pakai Next.js, kita dapet beberapa keuntungan performance:
- Server side rendering artikel di-render di server, bukan di browser
- Static generation halaman yang jarang berubah di-generate pas build time
- Image optimization gambar otomatis di-resize dan serve dalam format yang optimal
- Code splitting setiap halaman cuma load JS yang dibutuhin
Hasilnya? Blog kita konsisten dapet skor 90+ di PageSpeed Insights.
Lessons Learned
Beberapa hal yang kita pelajari selama bikin CMS custom:
- Start simple jangan langsung bikin yang kompleks. Mulai dari CRUD basic, trus iterate
- RLS itu non negotiable setup security dari awal, jangan ntar ntar
- Markdown itu enough nggak perlu rich text editor yang fancy kalau markdown udah cukup
- Test di production dev environment sama production kadang beda behavior, terutama buat caching
- Monitor pasang analytics dan error tracking dari awal biar tau kalau ada yang bermasalah
Worth It Nggak?
Jujur, bikin CMS custom itu butuh effort lebih dibanding install WordPress. Tapi buat kasus kita, hasilnya worth it banget:
- Full control atas semua aspek
- Performance yang nggak bisa dicapai pake CMS general purpose
- Nggak ada bloat dari fitur yang nggak dipake
- Bisa diextend sesuai kebutuhan kapan aja
Kalau kamu tertarik bikin CMS custom buat bisnis kamu, DaunsCode bisa bantu dari planning sampai deployment. Tinggal hubungi kita aja.
Ready to build the next big thing?
DaunsCode siap bantu arsitektur, UI, dan implementasi produk digital yang scalable untuk bisnis kamu.
Let's Talk Project