CMS (Next.js 15 App Router) untuk mengelola konten y-blogpage — kelola blog, kategori, tag, user, dan profil. Dipakai oleh user dengan role ADMINISTRATOR, EDITOR, AUTHOR, atau SUBSCRIBER (lihat pembagian akses di README y-backend).
Repo ini adalah salah satu dari 4 repo dalam sistem Neuvarixal:
| Repo | Peran |
|---|---|
| y-backend | REST API |
| y-dashboard (repo ini) | CMS untuk mengelola blog |
| y-blogpage | Situs blog publik |
| neuvarixal-deploy | docker-compose, Terraform (AWS), CI/CD, monitoring |
- Next.js 15 (App Router) + React 19 + TypeScript
- Tailwind CSS + shadcn/ui (Radix primitives)
- Tiptap (rich text editor untuk konten blog)
- Axios (lihat
lib/axiosInstance.ts) + SWR untuk data fetching ke y-backend - Context API (
context/AuthContext.tsx) untuk state autentikasi + route guard
Cara termudah lewat neuvarixal-deploy (docker compose up sekaligus menjalankan backend & database yang dibutuhkan — lihat README repo itu). Untuk jalan berdiri sendiri:
pnpm install
# buat .env.local, isi minimal:
# NEXT_PUBLIC_BASE_URL=http://localhost:4000/api
# NEXT_PUBLIC_ASSETS_URL=http://localhost:4000
# NEXT_PUBLIC_BLOG_URL=http://localhost:3002
pnpm devPerlu instance y-backend yang sudah jalan di NEXT_PUBLIC_BASE_URL/NEXT_PUBLIC_ASSETS_URL di atas.
Semua env yang dipakai bersifat NEXT_PUBLIC_* (ter-bundle ke JavaScript sisi browser saat build — bukan secret, jangan taruh apa pun rahasia di sini).
| Variabel | Contoh | Keterangan |
|---|---|---|
NEXT_PUBLIC_BASE_URL |
https://api.example.com/api |
Base URL API backend, termasuk suffix /api (dipakai langsung sebagai baseURL axios — beda konvensi dari y-blogpage!) |
NEXT_PUBLIC_ASSETS_URL |
https://api.example.com |
Base URL untuk file statis (foto profil, cover blog) — tanpa suffix /api |
NEXT_PUBLIC_BLOG_URL |
https://blog.example.com |
URL situs blog publik, dipakai fitur "copy link blog" di halaman detail |
Karena NEXT_PUBLIC_* di-bake saat build, mengubah nilainya di server/CI tidak berlaku ke image yang sudah ter-build — perlu build ulang (lihat bagian Deploy).
app/
(auth)/login/ # halaman login
(blogs)/blogs/
(blogs)/ # list, create, edit, view blog
(categories)/categories/
(tags)/tags/
(users)/users/ # manajemen user (khusus ADMINISTRATOR)
(profile)/profile/edit/ # edit profil sendiri
(_documentation)/docs/ # halaman dokumentasi internal
page.tsx # dashboard home (chart ringkasan)
context/AuthContext.tsx # state login + redirect ke /login kalau belum auth
lib/axiosInstance.ts # instance axios + interceptor redirect saat 401/403
services/ # pemanggil API per resource (blog, user, tag, ...)
Login menyimpan cookie httpOnly dari backend; AuthContext mengecek status lewat GET /api/auth/check dan me-redirect ke /login kalau belum authenticated (lihat komentar di context/AuthContext.tsx — sebelumnya route ini tidak dijaga sama sekali). lib/axiosInstance.ts juga otomatis redirect ke /login kalau ada response 401/403 dari API mana pun.
Penting: kalau ada endpoint backend baru yang butuh login tapi lupa dipasangi middleware
accessValidationdi sisi backend, gejalanya PERSIS seperti route guard yang salah — halaman dashboard yang manggil endpoint itu langsung "terlempar" ke/loginwalau sudah login. Cek dulu response API-nya sebelum curiga ke kode frontend.
dashboard.Dockerfile — multi-stage build, NEXT_PUBLIC_* di atas di-bake lewat ARG/ENV saat docker build (lihat contoh build-arg di neuvarixal-deploy/docker-compose.yml).
CI/CD (.github/workflows/build.yml): setiap push ke main, build image dengan NEXT_PUBLIC_* dari Repository Variables GitHub (Settings → Secrets and variables → Actions → Variables), push ke GHCR (ghcr.io/rezafardan/y-dashboard), lalu memicu deploy otomatis di repo neuvarixal-deploy. Kalau mengubah salah satu Repository Variable di atas, wajib re-run workflow build ini supaya nilai baru ikut ter-bake — sekadar mengubah Variable tidak berpengaruh ke image yang sudah ada. Detail penuh alur CI/CD, infrastruktur (Terraform/AWS), dan monitoring ada di README repo neuvarixal-deploy.