{"id":"cmv05qyqx000htm4dwawyj1ll","slug":"zx-parenting","judul":"ZX Parenting","deskripsi":"App ortu pantau anak — tugas, reward, screen time","parentId":null,"urut":1,"kategori":"mobile","tag":"[\"kotlin\",\"compose\",\"android\"]","status":"aktif","versi":"2.9.7","konsep":"\n\n## Status Implementasi Backend (UPDATE FINAL — Oktober 2026)\n\nSemua modul backend ZX Parenting telah diimplementasi dan deployed.\n\n### ✅ Selesai & Deployed (31 endpoint, 15 modul)\n1. Bank Soal + Rekomendasi + Cross-Language — 6 endpoint\n2. Screen Time + Hard Cap — 4 endpoint\n3. Adaptive GPS + Geofencing — 2 endpoint\n4. Master Toggle 2-layer PIN+OTP — 2 endpoint\n5. Anti-cheat Pattern Detection — 2 endpoint\n6. Foto Bukti Auto-delete 30 hari — 1 endpoint\n7. Multi-device Registration — 2 endpoint\n8. Forum AI Moderation — 3 endpoint\n9. Curfew Auto-lock — 1 endpoint\n10. Cold Start Bot Seed — 1 endpoint\n11. Google Play Billing (verify, acknowledge, RTDN) — 3 endpoint\n12. Laporan Phase 1 Ringkasan — 1 endpoint\n13. Laporan Phase 2 Tren Mingguan — 1 endpoint\n14. Laporan Phase 3 Bulanan — 1 endpoint\n15. Laporan Phase 4 AI Insights — 1 endpoint\n\nCleanup: lib/midtrans.ts dihapus, langganan checkout+webhook deprecated (410 Gone).\nSchema: PlayPurchase model, Langganan midtransOrderId → purchaseToken + productId.\n\n### ⏳ Sisa (Android-side)\n- Device Admin API (anti-uninstall) — Kotlin\n- i18n UI — default English, opsi Indonesian\n- Play Store listing + Google Cloud service account setup","createdAt":"2026-10-08T23:18:38.698Z","updatedAt":"2026-10-10T07:07:37.764Z","bagian":[{"id":"cmv05qyqy000itm4dgb5v5kgp","blueprintId":"cmv05qyqx000htm4dwawyj1ll","judul":"Ringkasan","konten":"Aplikasi parenting terpadu — ortu pantau anak (tugas, reward, screen time, lokasi).\n\n**3 komponen:**\n- **App Ortu** (Android, Kotlin + Compose) — repo `ZX-Parenting-ortu`, local `/opt/data/zx-ortu`\n- **App Anak** (Android, Kotlin + Compose) — repo `zx-agent`, local `/opt/data/zx-agent`\n- **Backend** (Next.js + Prisma + PostgreSQL) — repo `zx_parenting`, local `/opt/data/zx_parenting`\n\n**Versi:** v3.3.0 (versiKode 52)\n**URL:** https://zxparenting.zomet.my.id\n**Deploy:** Coolify id9, DB container `soqw27wuaccobs7z2prztkct`\n**CI:** auto-trigger push; rilis manual `rilis.yml` workflow_dispatch input `versi`\n**Version config:** `alamat.json` (versiNama, versiKode, idPaket, beranda, api, googleWebId)\n\n**Ekonomi:**\n- Token ZX (anak) — 1 token = 1 menit main, hard cap 3 jam/hari\n- ZX Coin (ortu) — marketplace, withdrawal\n- Google Play Billing (subscription + IAP). App rilis di Play Store. Tidak ada Midtrans.\n\n**Anti-bypass:** Device Admin API (Play Store compliant), Accessibility Service hanya untuk kuis lock.\n\n**Data privacy:** Foto bukti auto-delete 30 hari (`fotoExpireAt`). Gender/agama optional (UU PDP).","media":"[{\"id\":\"664c0240020ec762\",\"tipe\":\"gambar\",\"url\":\"/api/uploads/bp/zx-parenting/1791682804765-d4ed20ec.png\",\"label\":\"Feature graphic\"}]","urut":0,"createdAt":"2026-10-08T23:18:38.698Z","updatedAt":"2026-10-11T01:40:19.972Z"},{"id":"cmv05qyqy000jtm4daaseblsl","blueprintId":"cmv05qyqx000htm4dwawyj1ll","judul":"Stack","konten":"**App Ortu:**\n- Kotlin + Jetpack Compose\n- Retrofit2 + Gson (API client)\n- ViewModel + StateFlow (state management)\n- DataStore (local storage)\n- Google Play Billing Library (subscription + IAP)\n- repo: github.com/djvpri/ZX-Parenting-ortu\n\n**App Anak:**\n- Kotlin + Jetpack Compose\n- ZX Agent — device control, overlay, app blocker\n- Device Admin API (anti-uninstall, Play Store compliant)\n- Accessibility Service (kuis lock only — justified use case)\n- Adaptive GPS polling (5/15/2/1/3 min based on zone+speed)\n- repo: github.com/djvpri/zx-agent\n\n**Backend:**\n- Next.js 16 + Prisma 6 + PostgreSQL\n- Gemini AI (soal kuis, insights, content generator, anti-cheat pattern detection)\n- Google Play Developer API (server-side subscription verification via RTDN)\n- Google OAuth (login ortu)\n- bcrypt (PIN hash)\n- AI moderation (forum keyword filter Bahasa Indonesia + English)\n- repo: github.com/djvpri/zx_parenting\n\n**Deploy:**\n- Coolify VPS 103.93.129.94\n- App container: `pd59y3gb3k6nkqjqvm873uim-*` (ID berubah tiap deploy)\n- DB container: `soqw27wuaccobs7z2prztkct`\n- psql: `psql -U postgres -d postgres`","media":"[]","urut":1,"createdAt":"2026-10-08T23:18:38.698Z","updatedAt":"2026-10-10T04:20:01.732Z"},{"id":"cmv064ks90001pj2o9ecapquu","blueprintId":"cmv05qyqx000htm4dwawyj1ll","judul":"Data Model","konten":"**25+ Prisma models:**\n\n**Auth & User:**\n- `User` — PARENT/CHILD/ADMIN, email/passwordHash/googleId, username+pinHash (CHILD), locale, consent\n- `Anak` — 1:1 dengan User (CHILD), tanggalLahir, kelas, gender (optional), agama (optional), dormant\n- `DeviceRegistration` — daftar device per anak (multi-device), deviceName, isActive, revokedAt\n\n**Ekonomi Anak (Token ZX):**\n- `TokenBalance` — saldo per anak\n- `TokenLedger` — KUIS/TUGAS/CHALLENGE/FAMILY_QUEST/PINJAM/BAYAR_PINJAM/PEMAKAIAN/PENYESUAIAN/OFFICIAL_KUIS/OFFICIAL_TANTANGAN\n- `PinjamWaktu` — amount, createdAt, expireAt (24h), lunas\n\n**Ekonomi Ortu (ZX Coin):**\n- `CoinWallet` — saldo per ortu\n- `CoinLedger` — TOPUP_IAP/PEMBELIAN/PENJUALAN/REFERRAL/BONUS/PENYESUAIAN\n\n**Langganan:**\n- `Langganan` — FREE_TRIAL/PRO/ELITE, Google Play purchaseToken, subscriptionState, autoRenewing\n- `PlayPurchase` — productId, purchaseToken, orderId, verifiedAt (RTDN webhook verification)\n\n**Tugas & Kuis:**\n- `Tugas` — PENDING/DIKUMPULKAN/SELESAI/DITOLAK, fotoBuktiUrl, fotoExpireAt (auto-delete 30 hari), deadline\n- `KuisAttempt` — soal JSON (Gemini-generated), jawaban, skor, levelKesulitan, durasiDetik, flagged (anti-cheat)\n\n**Bank Soal (Persistent Question Bank):**\n- `BankSoal` — mataPelajaran, kelas, levelKesulitan (1-5), tipeSoal (PILIHAN_GANDA/ESSAY), pertanyaan, pilihanGanda, jawabanBenar, penjelasan, bahasa (\"en\"/\"id\"), source (AI/ORTU/MARKETPLACE), createdBy, tags[], ratingSum, ratingCount, translateFlag\n- `BankSoalTerjemahan` — bankSoalId, bahasa, pertanyaan, pilihanGanda, jawabanBenar, penjelasan, translatedAt (cached translation)\n- `BankSoalRate` — bankSoalId, userId, rating (up/down), createdAt\n\n**Gamifikasi:**\n- `Streak` — current/terbaik/terakhir\n- `ChallengeProgress` — challenge harian per anak\n- `FamilyQuest` + `FamilyQuestMember` — quest keluarga\n- `OfficialCompletion` — tracking complete official content\n\n**Device Control:**\n- `DeviceSession` — sessionLimit, cooldown, dailyLimit (hard cap 3 jam), curfew, appBlokir, GPS, geo-fence\n- `ActivityLog` — app_open/browser/quiz_lock/geo_exit\n- `GpsLog` — lastSpeed, lastInZone, pollInterval (adaptive: 5/15/2/1/3 min)\n\n**Marketplace:**\n- `KontenMarketplace` — PAKET_SOAL/PRESET/KUIS_HARIAN/ARTIKEL/VIDEO/TANTANGAN_MINGGUAN\n- `PembelianKonten` — 1x beli per konten\n- `OfficialMeta` — scheduling, targeting, metrics\n- `Hadiah` + `PesananHadiah` — marketplace hadiah ortu\n- `Withdrawal` — MINTA/DISETUJUI/DITOLAK/SELESAI (payout via bank transfer manual)\n\n**Komunikasi:**\n- `Pesan` — direct chat ortu↔anak\n- `ForumPost` + `ForumKomentar` — forum keluarga (AI moderation flag)\n\n**Moderasi:**\n- `ModerasiLog` — type (keyword_filter/report_block), target, reason, timestamp","media":"[]","urut":2,"createdAt":"2026-10-08T23:29:13.785Z","updatedAt":"2026-10-10T04:29:15.759Z"},{"id":"cmv064kuv0003pj2oz0k6ob9s","blueprintId":"cmv05qyqx000htm4dwawyj1ll","judul":"API Endpoints","konten":"**~60 API routes (Next.js App Router):**\n\n**Auth:**\n- `POST /api/auth/native-login` — login ortu (email+password)\n- `POST /api/auth/native-daftar` — daftar ortu\n- `POST /api/auth/native-google` — Google OAuth ortu\n- `POST /api/auth/native-anak` — login anak (username+PIN), JWT, rate limit 5/min, lockout 10→15min\n\n**Anak (CRUD):**\n- `GET/POST /api/anak` — list/create, GET flatten username+umur calc\n- `GET/PATCH/DELETE /api/anak/[id]` — detail/edit/hapus\n- `PATCH /api/anak/[id]/pin` — reset PIN (validasiPin, bcrypt)\n- `PATCH /api/anak/[id]/dormant` — toggle dormant\n\n**Device:**\n- `GET /api/device-session` — list\n- `PATCH/DELETE /api/device-session/[id]` — edit/hapus\n- `POST /api/device/register` — daftar device anak (multi-device)\n- `DELETE /api/device/[id]` — revoke device\n- `GET /api/device/gps` — GPS log + adaptive polling interval\n\n**Tugas & Kuis:**\n- `GET/POST /api/tugas` — list/create\n- `PATCH /api/tugas/[id]` — validasi (selesai/tolak)\n- `POST /api/tugas/ai-generate` — Gemini generate soal\n- `POST /api/tugas/jadwal` — CRUD scheduled AI tasks\n- `GET /api/tugas/[id]/kuis` — kuis session (shuffle, lock, submit, review)\n\n**Bank Soal:**\n- `GET /api/bank-soal` — list/filter (mataPelajaran, kelas, level, bahasa)\n- `POST /api/bank-soal` — simpan soal manual\n- `GET /api/bank-soal/rekomendasi?anakId=X` — rule-based recommendation (avg skor per mataPelajaran, level adaptif, filter duplikat)\n- `POST /api/bank-soal/[id]/rate` — ortu rate thumbs up/down\n- `POST /api/bank-soal/tugas` — create Tugas dari soal bank\n- `POST /api/bank-soal/[id]/translate` — trigger translate on-demand + cache (Gemini translate, cached permanently)\n\n**Ekonomi:**\n- `GET/POST /api/coin` — saldo + penyesuaian\n- `GET /api/token-ledger` — riwayat token anak\n- `GET/POST /api/pinjam` — pinjam waktu (max 30 min, 24h expiry) + hutang\n- `GET/POST /api/hadiah` — marketplace hadiah\n- `POST /api/hadiah/pesanan` — proses pesanan (beli/tolak)\n- `GET/POST /api/marketplace` — konten marketplace\n- `POST /api/marketplace/beli` — beli konten\n- `POST /api/marketplace/withdrawal` — tarik coin (min 50k, max 500k/bln, fee 10%, delay 3 hari, payout bank transfer)\n\n**Gamifikasi:**\n- `GET /api/leaderboard` — ranking (bot label \"Official\" sampai >50 user)\n- `GET/POST /api/challenges` — daily challenges + claim\n- `GET/POST /api/quests` — family quest\n- `GET /api/anak/streak` — streak data\n- `GET/POST /api/referral` — kode referral + claim\n\n**Komunikasi:**\n- `GET/POST /api/pesan` — direct chat\n- `GET/POST/DELETE /api/forum` — forum posts (AI moderation filter)\n- `POST /api/forum/[id]/komentar` — komentar\n- `POST /api/forum/[id]/report` — laporkan post\n\n**Langganan (Google Play Billing):**\n- `GET /api/langganan/status` — status langganan (FREE_TRIAL/PRO/ELITE)\n- `POST /api/langganan/verify` — verify purchase token dari app (Google Play Developer API)\n- `POST /api/langganan/rtdn` — Real-Time Developer Notifications webhook (Google Pub/Sub)\n- `POST /api/langganan/acknowledge` — acknowledge purchase\n\n**AI:**\n- `GET /api/insights` — insights anak (Gemini/rule-based)\n- `POST /api/admin/generate` — generate soal/preset (Gemini)\n- `GET /api/tugas/[id]/anti-cheat` — pattern detection flag\n\n**Laporan:**\n- `GET /api/laporan/ringkasan` — agregasi tugas+kuis+streak+token (v3.3.0)\n- `GET /api/aktivitas` — activity log anak\n\n**Official Content:**\n- `GET /api/anak/official` — feed anak\n- `GET /api/anak/official/[id]` — detail\n- `POST /api/anak/official/[id]/complete` — selesai + reward\n- `GET/POST/PATCH/DELETE /api/admin/official` — admin CRUD\n\n**Admin:**\n- `GET /api/admin/users` — list users\n- `GET /api/admin/metrics` — metrics\n- `GET/POST /api/admin/konten` — konten management\n- `GET/POST /api/admin/withdrawal` — withdrawal management\n\n**Lain:**\n- `DELETE /api/akun/hapus` — hapus akun","media":"[]","urut":3,"createdAt":"2026-10-08T23:29:13.879Z","updatedAt":"2026-10-10T04:29:15.844Z"},{"id":"cmv064laq0005pj2oufsf5jaf","blueprintId":"cmv05qyqx000htm4dwawyj1ll","judul":"Pitfall","konten":"⚠ `umur` dihapus dari schema, diganti `tanggalLahir DateTime?`. Umur dihitung server-side dari tanggalLahir. App tampilkan `?` jika null.\n\n⚠ Tanggal lahir server kirim ISO 8601 (`2019-04-19T00:00:00.000Z`). App pakai `fmtTgl()` substring(0,10) → `yyyy-MM-dd`.\n\n⚠ PIN blacklist (66 PINs: sequential+repeated 4/5/6 digit). `123456` = sequential naik → ditolak API. Existing PIN (1234) tidak di-retroactive reject.\n\n⚠ Reset PIN bug (3 iterasi):\n1. v2.9.5: dialog fire-and-forget → async callback\n2. v2.9.6: `state.error` global tidak reliable → pesan langsung dari callback\n3. v2.9.7: dua tombol Simpan di satu dialog → pisah `DialogResetPin`\n\n⚠ App container ID berubah tiap deploy Coolify. Cari via `sudo docker ps`.\n\n⚠ DB akses: SSH VPS → `sudo docker exec soqw27wuaccobs7z2prztkct psql -U postgres -d postgres`.\n\n⚠ Login anak JWT: POST /api/auth/native-anak, header `Authorization: Bearer <token>`.\n\n⚠ Validasi username: regex `/^[a-z0-9_]{3,20}$/`, reserved words set, P2002 catch → 409.\n\n⚠ Rate limit in-memory Map (single instance Coolify). 5/min per IP+username, lockout 10 gagal→15min.\n\n⚠ Play Store risk: Accessibility Service untuk anti-uninstall bisa kena ban. Pakai Device Admin API sebagai utama. Accessibility hanya untuk kuis lock (justified use case). Siapkan policy justification untuk Google Play review.\n\n⚠ Token inflation: hard cap 3 jam/hari. Token = kuota dalam cap, bukan override. Pinjam waktu tidak override cap. Tanpa cap, anak rajin-soal → main 5 jam.\n\n⚠ Data sensitif anak (UU PDP): gender/agama optional, hanya simpan kalau ortu isi. Tidak dikirim ke Gemini. Anak = subjek khusus, perlu consent ortu eksplisit.\n\n⚠ Multi-device bypass: screen time sync per-anak (bukan per-device). Device tidak terdaftar = tidak ada enforcement. Ortu harus daftar semua device anak.\n\n⚠ Foto bukti: `fotoExpireAt` di Prisma, cron job hapus harian. Auto-delete 30 hari setelah tugas selesai/divalidasi. Tidak pernah dipakai AI training.\n\n⚠ Google Play Billing: wajib verify purchase token server-side via Google Play Developer API. Jangan trust client-side purchase data. Gunakan RTDN (Real-Time Developer Notifications) untuk subscription state changes (cancel/refund/renew). Acknowledge purchases dalam 24 jam atau auto-refund.\n\n⚠ Google Play fee: 15% (first $1M/year) / 30% (above). Harga tier harus factoring fee ini. ZX Coin sebagai buffer — ortu beli coin via IAP, pakai coin di marketplace, fee Google sekali di top-up.","media":"[]","urut":4,"createdAt":"2026-10-08T23:29:14.450Z","updatedAt":"2026-10-10T04:20:02.881Z"},{"id":"cmv064ldw0007pj2oz5qsdqhs","blueprintId":"cmv05qyqx000htm4dwawyj1ll","judul":"Catatan Rilis","konten":"**v3.3.0** (kode 52) — tab Laporan compact: 4 kartu stat + AI insight + ringkasan tugas + laporan kuis + statistik token + timeline aktivitas. Backend `/api/laporan/ringkasan`.\n**v3.2.5** — app anak v1.8.2: fix kuis + offline mode\n**v3.2.1-v3.2.4** — generate soal AI v2 rewrite, OkHttp timeout 60s, UI fix\n**v3.2.0** — generate tugas AI (backend + UI app ortu)\n**v3.1.0** — menu Tugas di blueprint Engine\n**v3.0.0** — blueprint Engine launch (wiki simpan blueprint app)\n**v2.9.7** — pisah dialog reset PIN dari dialog edit anak\n**v2.9.6** — pesan error langsung dari callback (bukan state.error global)\n**v2.9.5** — dialog tunggu API respond + loading + error display\n**v2.9.4** — edit username anak + reset PIN + brute-force + PIN blacklist + reserved username\n**v2.9.3** — fix tanggalLahir ISO 8601 display (fmtTgl substring)\n**v2.9.2** — DatePicker native + dropdown gender\n**v2.9.1** — edit + hapus anak, umur→tanggalLahir\n**v2.9.0** — referral + leaderboard + challenges\n**v2.8.0** — pinjam waktu + AI insights\n**v2.7.1** — i18n (locale field)\n\n**Roadmap berikutnya:**\n- Membership tiers (Free/Pro/Elite) + Google Play Billing\n- Screen time control + hard cap 3 jam\n- Device Admin API anti-uninstall\n- Gamifikasi (streak, leaderboard, daily challenge)\n- Geofencing + adaptive GPS\n- Master toggle 2-layer (PIN+OTP)","media":"[]","urut":5,"createdAt":"2026-10-08T23:29:14.564Z","updatedAt":"2026-10-10T04:20:03.110Z"},{"id":"cmv2mshvd000bmg2opepuycyq","blueprintId":"cmv05qyqx000htm4dwawyj1ll","judul":"JSON","konten":"{\n  \"type\": \"service_account\",\n  \"project_id\": \"zxparenting\",\n  \"private_key_id\": \"212e27f4910755e2b2c2f59667291cfdf0d6fe1f\",\n  \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCwPc4ZDzGnRQPL\\nnb9CTUn+dc7IQSXaVgbXa4qrq6TF/ADr+phcV2OOvHTVcowf5FyJKnqptybto2oL\\n8eL7phlSyJOJEWcseXLzqynax+ChBDIlds/S7Q+Qb6ct7gn8ihpEbsD3bDy03WhL\\nfeZIMnQ6w1Xvd8tSCxxKjCh8V6diygdCmUmfn/A8dhZ5npWWGoUtj7FkTDlI12pN\\nPIA4yBI430X2qhYRiqWxFzlKzeoB0+BxkGR9rUzvK2jFz3cj1x14dfpTWgGZGw17\\nTyqfDQW+AwHXgyq7utkaDOyX/K8H4CUQZ9QjFPSOncxJNBVwqvpdRi4RhXOBTZMa\\n+Ep1CUn3AgMBAAECggEAEom1u4oPGX6XaxwBKaqyjUr8ALFll2U0HAWqVOtdjhu3\\nRxsZWqEwjiuBiJAfcB1XpG/s7hwfQqDNP0tmqjyq7ju91Q2ZEiMGNd47rVEX7ifg\\nVHN+YbvgxrsP1TN0JnWqVKdnsb7XVdjyJvqrtc1kz2eLiwBJSSx1AdxjR8z6hNf5\\nhSbtao6plOm0PTWxhmTR1WERyrDKzQGMwxpFBc/lKz42QSBf9pVJUDBxsH3Gkzc2\\nrpjBve9M/zvURPnfyXp01YG0rwB5IPgmDOy5SHk5TbTOdS9p5CgUKNe34wLG0ikL\\naJKUSWPd7EXEvcl0UXYP8F4NbXUcxIrDzqM9X95/QQKBgQDkWTCbvc+rCLOV2+1P\\nBRNrZgYxeZ/qpCf5b5KV8ZK+K68Zj6xzkFeDOUl8xIAXd2PfQfeui3XpzMztmNx4\\nN7Xm+TTPonVLeHs8KbBFPQcNma9gjxr3bpsg3dflzdz5agMZ32WoRVuZuAWj8qQw\\nVr42IqB2TBvRtV2crQobZP2BQQKBgQDFlUv9Ib2yaupTWZF1pvsr5Qbr79m5slHn\\nHwXN+ic8WnR3qlB22jTdhm0E4yo5hTpKY417ooUdx9r/3wzZ/uSme75iPUgob33k\\njYL2MskXp55S6B32OlC/IH1EVa0v2oMiRHMqB2wsd97rp7dsOa5TR/+KORKTa0ng\\nIfKQw7xFNwKBgH4jLpC5dz+5XMqJZDtkSGfpQb6OuuG4sEQ/d6/QdAkMxHrQPKjR\\nsSXRvWBog4Fy9/5ZyGHos8fk08bjy9W0oIzoWF3iFf0MnraLKM32ejDvFku2gWTw\\n+kxbf2l4IHq+LtxZ5SPgvErbtnHsFPqG0CfDVPRD8pITJ5TmmVCspsSBAoGAXgYM\\n8jmjPwtX1TAzY0yCDEJhx9cMwiyUgyqlJX7cOwFEmUmIHvb5301ABepgRp0avxme\\n023kcOaRVd/8CqUchAkw8Sj+dJeRzjh1UNmcDlCqrANfdrQLhthcJC+tSa9vZdgz\\nAZYkqQimIXhfdfYA+gqyFUHRkCunLSyadL9gkYMCgYEAu2C3lvknXK0/fu51rzZR\\nYr1D5nMTVeak8aCL7mXbAsAGy4PD+lo5uRICx4yOoUA7Wvp9PYztdZc/deSYUNTy\\nw+3VfK44CGNw8qNmVxtbGfoJ/2kvwJ1oKh/ED3BNI9akmtMisn0D9q0pa6egmk7k\\n0bDlf/h+dDFv2FT2AhnRDXA=\\n-----END PRIVATE KEY-----\\n\",\n  \"client_email\": \"zx-parenting-billing@zxparenting.iam.gserviceaccount.com\",\n  \"client_id\": \"107387419850321250664\",\n  \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n  \"token_uri\": \"https://oauth2.googleapis.com/token\",\n  \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n  \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/zx-parenting-billing%40zxparenting.iam.gserviceaccount.com\",\n  \"universe_domain\": \"googleapis.com\"\n}\n","media":"[]","urut":6,"createdAt":"2026-10-10T16:51:15.961Z","updatedAt":"2026-10-10T16:51:28.852Z"},{"id":"cmv3clezt0001pf2okvx0cucn","blueprintId":"cmv05qyqx000htm4dwawyj1ll","judul":"URL Hapus akun","konten":"","media":"[{\"id\":\"58ff5c006cea9bd1\",\"tipe\":\"link\",\"url\":\"https://zxparenting.zomet.my.id/hapus-akun.html\",\"label\":\"\"}]","urut":7,"createdAt":"2026-10-11T04:53:35.657Z","updatedAt":"2026-10-11T04:53:57.621Z"}],"children":[{"slug":"ekonomi-token","judul":"Ekonomi Token (Anak)","status":"aktif"},{"slug":"official-content","judul":"ZX Official Content","status":"aktif"},{"slug":"auth-anak","judul":"Auth Anak (PIN)","status":"aktif"},{"slug":"device-control","judul":"Device Control","status":"aktif"},{"slug":"marketplace-zx","judul":"Marketplace (ZX Coin)","status":"aktif"},{"slug":"ai-insights","judul":"AI & Insights","status":"aktif"},{"slug":"gamifikasi","judul":"Gamifikasi","status":"aktif"},{"slug":"komunikasi","judul":"Komunikasi","status":"aktif"},{"slug":"app-ortu","judul":"App Ortu (Android)","status":"aktif"},{"slug":"app-anak-android","judul":"App Anak (Android)","status":"draft"},{"slug":"dashboard-admin-web","judul":"Dashboard Admin Web","status":"draft"}],"parent":null}