Penulis: grupmuda

  • checklist alur dari “belum” → “finish (1.0)

    Saya sudah cek struktur GoScribe v0.4.34 (block-suite) dari ZIP terakhir. Kondisinya: UI/fitur inti sudah “jalan” tapi masih dominan file-based, dan ada beberapa komponen yang masih stub / belum ada untuk status “CMS full terintegrasi (DB + mail + cron/queue + API)”.

    Di bawah ini checklist alur dari “belum” → “finish (1.0)” yang paling realistis dan minim ngulang kerja.

    Audit cepat v0.4.34 (status sekarang)

    ✅ Sudah ada & relatif solid

    Router single entry: index.php + .htaccess (rewrite + blocking file sensitif)

    Admin panel (registry menu/pages) via gm-admin/admin.php + theme modern

    Auth + CSRF + throttle login: gm-includes/auth.php

    RBAC dasar: gm-includes/roles.php

    Posts/Pages/Media/Settings/Mail berjalan (file-based JSON): gm-includes/posts.php, pages.php, media.php, options.php, mail.php

    Plugin & theme manager (upload zip + safe extract): gm-includes/plugins.php, themes.php

    REST API ada tapi masih skeleton: gm-includes/rest-api/server.php

    Cron endpoint masih stub: gm-cron.php

    ⚠️ Gap besar untuk “full CMS”

    Belum ada installer (wizard install + lock install)

    Belum ada DB layer (PDO wrapper + schema + migrasi) → masih JSON di gm-admin/data/

    Cron/Queue belum nyata (scheduler/worker)

    REST API belum ada routing + auth + resource endpoints

    Users admin masih read-only: gm-admin/users.php

    Hooks baru add_action/do_action (belum ada filter/remove_action, dll): gm-includes/hooks.php

    Ada duplikasi folder: gm-content/ vs content/ (perlu dirapikan governance-nya)

    Checklist alur dari sekarang sampai “Finish 1.0”
    Phase 0 — Rapikan fondasi (wajib, cepat)

    ⬜ 0.1 Tegaskan folder standar (pilih satu):

    Tetapkan hanya content/ untuk themes/plugins/uploads

    Putuskan gm-content/ mau dipakai apa (cache drop-in) atau dibuang (sekarang isinya cache stub)

    ⬜ 0.2 Auto-create & proteksi folder runtime

    Saat bootstrap, pastikan dibuat:

    content/uploads/ + .htaccess block php + index.php

    gm-admin/data/ + gm-admin/logs/ (sudah, tapi pastikan permission check)

    ⬜ 0.3 Konsisten “asset cache busting”

    Versi CSS/JS admin pakai query ?v=GM_VERSION (biar update nggak ketahan cache)

    Phase 1 — Installer (biar “siap pakai” seperti WP)

    ⬜ 1.1 Buat folder /install/ + step wizard (min 4 step)

    Welcome

    Setup DB (test koneksi)

    Setup Admin (buat admin pertama)

    Setup Site (title, email, timezone, permalink)

    Success + “lock install”

    ⬜ 1.2 Generate config real

    gm-config.php sekarang placeholder → installer harus menulis: DB creds, keys/salt, base_url, env flags

    Tambah install lock (mis. gm-admin/data/installed.lock)

    Router: kalau belum installed → redirect ke /install/

    ⬜ 1.3 Hardening pasca-install

    Auto generate .htaccess tambahan untuk folder sensitif (uploads/plugins/themes sudah ada sebagian)

    Phase 2 — DB Core (ini yang bikin semua modul “nyatu”)

    ⬜ 2.1 Buat gm-includes/db.php (PDO)

    koneksi, prepared statements, error handling, logging (gm_log_query)

    table prefix (mis. gm_) + charset collation

    ⬜ 2.2 Buat schema minimal (GoScribe 1.0)

    gm_users, gm_usermeta

    gm_posts, gm_postmeta (pos+halaman satu tabel beda post_type)

    gm_options (ganti settings.json)

    gm_terms, gm_term_taxonomy, gm_term_relationships

    gm_media (atau attachment model)

    gm_jobs (queue) + gm_logs (audit trail)

    ⬜ 2.3 Migrator versi schema

    simpan versi di gm_options (mis. db_version)

    jalankan migration otomatis saat bootstrap/admin login

    Phase 3 — Migrasi dari JSON → DB (tanpa bikin fitur pecah)

    ⬜ 3.1 Options: gm-includes/options.php

    fallback: kalau gm_options ada → pakai DB, kalau tidak → file-based (sementara)

    ⬜ 3.2 Users: gm-includes/auth.php

    pindahkan gm-admin/data/users.json → gm_users

    sesuaikan login + reset password store

    ⬜ 3.3 Content: gm-includes/posts.php & pages.php

    pindahkan gm-admin/data/content/posts.json/pages.json/categories.json/tags.json → DB

    pastikan slug unique, excerpt generator tetap jalan

    ⬜ 3.4 Media library

    metadata file minimal masuk DB (path, mime, size, created_at, owner)

    Phase 4 — Operasional: Mail + Queue + Cron (biar produksi “waras”)

    ⬜ 4.1 Queue benar (bukan “tick per request” doang)

    gm_jobs + worker mode (CLI atau cron http hit gm-cron.php)

    mail send masuk queue, worker yang proses

    ⬜ 4.2 Cron real (gantikan stub gm-cron.php)

    scheduler: run jobs (mail queue, cleanup tmp, rotate logs, cache purge)

    ⬜ 4.3 Admin UI untuk Mail (sebagian sudah ada)

    test SMTP, log email, retry/backoff

    Phase 5 — REST API (baru bisa disebut CMS modern)

    ⬜ 5.1 Routing API beneran (bukan echo JSON saja)

    /api/v1/posts, /pages, /media, /users (admin)

    auth: token/session-based + RBAC per endpoint

    ⬜ 5.2 Rate limit + audit log untuk endpoint sensitif

    Phase 6 — Finishing “Enterprise-grade” (tanpa over-engineering)

    ⬜ 6.1 Users management full

    CRUD user, assign role, reset password admin-side (gm-admin/users.php sekarang read-only)

    ⬜ 6.2 Hooks upgrade

    tambah: add_filter/apply_filters, remove_action, has_action (plugin ecosystem lebih hidup)

    ⬜ 6.3 Backup/Restore

    export DB + uploads (zip) + restore wizard

    ⬜ 6.4 Update system (opsional tapi “kelas CMS”)

    core/theme/plugin update checker + checksum + rollback

    Definition of Done (Finish 1.0)

    CMS dianggap “selesai” kalau:

    Install wizard jalan dari nol → login admin → bikin pos/halaman → upload media → tampil di frontend

    Data tidak lagi bergantung ke JSON untuk core (users/posts/options minimal sudah DB)

    Mail SMTP bisa test + queue jalan via cron

    API v1 minimal posts/pages/media ada

    Plugin/theme install/activate tidak bikin white screen (safe mode tetap ada)

    Kalau kamu mau, saya bisa breakdown Phase 1–3 jadi task list per file (mis. “buat db.php, ubah options.php begini, ubah auth.php begini…”) biar eksekusinya tinggal dicicil tanpa nyasar.