Imported from wildanhatami/its-tasty (
AGENTS.md). Install upstream withnpx skills add wildanhatami/its-tasty. Copyright stays with the author.
This is NOT the Next.js you know
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in node_modules/next/dist/docs/ before writing any code. Heed deprecation notices.
It's Tasty — Panduan untuk AI Agent
Landing page + toko online bakery (katalog, checkout via WhatsApp, dashboard admin) berbahasa Indonesia, dideploy di Vercel.
Tech Stack
| Layer | Teknologi |
|---|---|
| Framework | Next.js 16 (App Router) — React 19 |
| Styling | Tailwind CSS v4 (@tailwindcss/postcss) |
| Auth | Auth.js / NextAuth v5 (next-auth@^5.0.0-beta) — Google OAuth, strategi JWT |
| Database | Notion API (@notionhq/client v5) — sumber kebenaran untuk Produk, Users, Orders, Testimonials |
| Deploy | Vercel (domain: its-tasty.vercel.app) |
| Lainnya | framer-motion, lucide-react, jose, tsx (untuk skrip CLI) |
Struktur Penting
src/lib/auth.ts— konfigurasi NextAuth (callbacks:signIn,jwt,session)src/lib/notion-users.ts— getOrCreateUser / getUserByEmail (rolecustomer|admin)src/lib/notion.ts,notion-schema.ts,notion-config.ts— akses & schema ke-4 database Notionsrc/lib/store-config.ts— konfigurasi toko (WA, alamat, jadwal, metode pembayaran)src/lib/order-pricing.ts— perhitungan harga per varian ukuransrc/proxy.ts— middleware proteksi route adminsrc/lib/admin-guard.ts—requireAdmin()untuk layout/API adminsrc/components/admin/*— dashboard admin (Products, Orders, Users, Testimonials, DatabaseHealth)docs/SETUP.md— panduan setup lengkap (Notion schema, Google OAuth, dll)scripts/setup-notion.ts— CLInpm run notion:setupuntuk cek/perbaiki schema Notion
Aturan Koding
- Baca panduan Next.js versi ini — Next.js 16 punya breaking change; baca
node_modules/next/dist/docs/sebelum menulis kode. Perhatikan deprecation notice. - Auth tidak boleh menolak login karena Notion gagal —
signIncallback HARUSreturn trueuntuk akun Google valid meskipun Notion timeout/error (fallback rolecustomerdijwtcallback). Jangan regresi ke perilaku lama yangreturn falsepada error Notion. - Semua panggilan Notion di callback auth memakai
withTimeout(...)(8s signIn/jwt, 5s refresh role) agar tidak menggantung request saat cold start Vercel. - Setiap perubahan di
src/lib/auth.tsatausrc/lib/notion-users.tsharus diperiksa dulu apakah memutus alur login Google. - Role di-refresh otomatis dari Notion tiap 60 detik di
jwtcallback (dilewati di Edge runtime agar tidak memblok middleware). - Route publik (katalog/beranda) memakai ISR 60 detik; route admin & API admin
force-dynamicagar data Notion selalu segar. - Semua query list Notion memakai
collectPaginatedAPI(aman untuk data > 100 baris). - Komentar & pesan log memakai bahasa Indonesia, konsisten dengan kode yang ada.
- Selalu jalankan
npm run lint(dannpm run buildbila perlu) sebelum menyelesaikan perubahan. - Jangan commit kecuali diminta pengguna.
- Hati-hati dengan pelanggan token/sekret: jangan pernah menulis nilai env var ke file apa pun selain
.env.local(yang sudah di-gitignore).
Environment Variables
Didefinisikan di .env.local (lokal) dan Vercel Project Settings (production). Jangan pernah menampilkan/menulis nilainya.
| Variabel | Deskripsi |
|---|---|
GOOGLE_CLIENT_ID |
Client ID aplikasi OAuth Google |
GOOGLE_CLIENT_SECRET |
Client secret OAuth Google |
AUTH_SECRET |
Secret sesi Auth.js (buat dengan npx auth secret) |
NEXTAUTH_URL / AUTH_URL |
URL app: http://localhost:3000 (lokal) atau https://its-tasty.vercel.app (production) — harus sama dengan domain yang didaftarkan di Google OAuth |
NOTION_TOKEN |
Internal integration token Notion |
NOTION_DATABASE_ID |
Database Produk |
NOTION_USERS_DATABASE_ID |
Database Users (Role: customer / admin) |
NOTION_ORDERS_DATABASE_ID |
Database Orders |
NOTION_TESTIMONIALS_DATABASE_ID |
Database Testimonials |
VERCEL_OIDC_TOKEN |
Token OIDC dari Vercel (otomatis, untuk opsional auth Vercel) |
Skrip npm run notion:setup membaca ID database dari .env.local dan bisa membuat database baru bila ID belum terisi.
Perintah
npm run dev # development
npm run build # production build
npm run lint # eslint
npm run notion:setup # cek & perbaiki schema Notion (--check untuk dry-run)
Referensi
- Setup lengkap:
docs/SETUP.md - Progress harian:
PROGRESS.md
