V E R T E X 8  ·  INTERNAL DOCS

Halaman ini berisi manual book & SOP internal.
Bukan untuk disebarluaskan.

V8 Wiki  —  Dokumentasi Internal Sistem
help.vertex8.co.id

Arsitektur Keseluruhan Sistem Vertex8

Vertex8 Platform
OperatorPT Hive Prime Wellness
Jumlah sistem5 subdomain
Database1 Supabase project bersama
Hosting1 akun cPanel bersama
BahasaPHP (backend), Vue 3 (frontend)
DeveloperAchmad Setya Surya Pamungkas

Vertex8 (HYROX Training Club, Serpong) menjalankan 5 sistem digital terpisah yang semuanya terhubung ke satu project Supabase yang sama dan di-hosting dalam satu akun cPanel yang sama. Ini penting dipahami: perubahan skema database di satu sistem bisa berdampak ke sistem lain, dan semua sistem berbagi data member/transaksi yang sama.

Daftar Isi
  1. Diagram arsitektur
  2. Tabel ringkasan 5 sistem
  3. Prinsip penting yang perlu dipahami semua staff teknis

Diagram Arsitektur

graph TB SB[("Supabase
(1 project bersama)")] subgraph Publik JOIN["join.vertex8.co.id
Self-checkout & registrasi"] V8S["v8score.vertex8.co.id
V8 Real Assessment"] STAGE["stage.vertex8.co.id
Kompetisi HYROX"] end subgraph Internal DEV["dev.vertex8.co.id
ERP Staff"] end subgraph Member MEM["member.vertex8.co.id
Portal Member"] end JOIN --> SB V8S --> SB STAGE --> SB DEV --> SB MEM --> SB DEV -.->|kelola semua data| SB

Tabel Ringkasan 5 Sistem

#DomainFungsi UtamaPengguna
1dev.vertex8.co.idERP internal — kelola member, transaksi, booking, badge/tierStaff (Admin, Coach, Sales, Finance)
2join.vertex8.co.idSelf-checkout publik — beli paket, drop-in, daftar member baruCalon member & tamu umum
3member.vertex8.co.idPortal member — booking kelas, V8 Passport, voucher/milesMember terdaftar (login OTP WA)
4v8score.vertex8.co.idTes fitness assessment (funnel sales calon member)Calon member, tim sales
5stage.vertex8.co.idRegistrasi & operasional kompetisi HYROXPeserta lomba, juri, staff venue

Prinsip Penting

Satu database, banyak pintu. Karena kelima sistem berbagi 1 Supabase project, mengubah struktur tabel (nama kolom, tipe data) di satu sistem berisiko mematahkan sistem lain yang membaca tabel sama. Selalu cek dulu apakah tabel yang mau diubah dipakai sistem lain sebelum melakukan perubahan skema.
Path config berbeda-beda per subdomain. Folder vertex8_config/ (isinya kredensial Supabase) letaknya di root akun cPanel, tapi jumlah "naik folder" (dirname(__DIR__, N)) yang dibutuhkan buat sampai ke situ BEDA-BEDA tergantung struktur nested subdomain di cPanel kamu. Jangan asal copy path dari satu subdomain ke subdomain lain — selalu diverifikasi dulu.

dev.vertex8.co.id — Sistem ERP

ERP Internal
JenisStaff-only, login wajib
StackPHP + PostgREST (Supabase)
NavigasiTerpusat di includes/nav_config.php
Jumlah grup navigasi11 grup
Jumlah sub-modul~45 halaman

dev.vertex8.co.id adalah pusat kendali operasional Vertex8 — satu-satunya sistem yang dipakai staff internal (Admin, Coach, Sales, Finance) untuk mengelola member, transaksi, booking kelas, dan seluruh program loyalitas (V8 Passport). Semua modul didaftarkan lewat satu file konfigurasi navigasi terpusat (nav_config.php), jadi menambah modul baru cukup edit satu file untuk otomatis muncul di sidebar dan sistem izin akses.

Daftar Isi
  1. Dashboard
  2. Members
  3. POS
  4. Vouchers & Miles
  5. Booking & Check-In
  6. Finance
  7. Settlements
  8. TC (Training Center)
  9. V8 Score
  10. V8 Passport
  11. CRM & Tools
  12. Settings

1. Dashboard

Halaman pertama yang muncul setelah login — ringkasan angka operasional harian (member aktif, transaksi hari ini, kelas berjalan). Titik masuk, bukan modul kerja utama.

2. Members

Sub-halamanFungsi
index.phpDaftar & kelola data member (CRUD utama)
rfid.phpAssign/kelola kartu RFID member untuk check-in
founder100.phpKelola status "Founder" (100 member pertama)
prereg.php / prerenewed.phpPre-registrasi & pre-renewal (member yang daftar/perpanjang sebelum efektif berjalan)
bulk_effective.phpSet tanggal efektif massal (misal migrasi member lama)

Status Aktivasi Member

Setiap member punya kolom activation_status dengan 4 kemungkinan nilai:

stateDiagram-v2 [*] --> Active Active --> Freeze: Staff freeze manual Freeze --> Active: Unfreeze Active --> Expired: Paket habis, tidak diperpanjang Expired --> Active: Beli paket baru (renewal) Active --> Pending: Renewal baru diproses,
menunggu aktivasi Pending --> Active: Tanggal efektif tercapai
Freeze ≠ Expired. Freeze itu jeda sementara yang staff kontrol manual (misal member cuti/sakit), sedangkan Expired murni karena masa aktif paket habis. Badge "Always On Time" di V8 Passport spesifik mengecek riwayat Freeze, bukan Expired.

3. POS (Point of Sale)

Sub-halamanFungsi
index.phpKasir utama — keranjang belanja, checkout, pilih metode bayar
simple.phpVersi ringkas kasir (transaksi cepat, item terbatas)
products.phpKelola katalog produk yang dijual di kasir
redemption.phpRedeem produk pakai Miles/voucher (bukan bayar tunai)
invoice_print.phpCetak/export invoice transaksi
report.phpLaporan penjualan POS

Alur Transaksi POS

graph LR A[Staff susun keranjang] --> B{Metode bayar} B -->|QRIS| C[Generate QRIS] C --> D[Webhook konfirmasi otomatis] B -->|Manual: Cash/Transfer/Debit| E[Transaksi status Pending] E --> F[Staff klik "Konfirmasi Pembayaran"
setelah uang beneran masuk] D --> G[Paket/voucher ter-grant ke member] F --> G
Transaksi non-QRIS SELALU mulai dari status Pending, dan paket/voucher BARU ter-grant ke member setelah staff eksplisit klik "Konfirmasi Pembayaran" — bukan otomatis begitu transaksi dibuat. Ini untuk mencegah kasir salah tandai "sudah lunas" padahal uang belum benar masuk.

Diskon Otomatis Berbasis Tier

Sejak fitur V8 Passport aktif, ada mekanisme opsional: jika toggle "Allow Auto Tier Discount" dinyalakan (lihat bagian V8 Passport), sistem otomatis memotong harga sesuai tier member — khusus untuk pembelian bundling, dideteksi dari keberadaan field periodDays di tiap item keranjang. Kalau ada satu saja item non-bundle di keranjang, diskon otomatis tidak berlaku sama sekali untuk transaksi itu.

4. Vouchers & Miles

Sub-halamanFungsi
index.phpKelola katalog voucher (definisi: diskon %, kategori, syarat)
bundles.phpKelola paket bundle (isi paket, harga, durasi hari)
miles.phpKelola program Miles (poin loyalitas, produk redeem)
wallet.phpLihat saldo voucher/miles per member (dompet member)

Voucher yang benar-benar dimiliki seorang member disimpan di tabel vertex8_memberinventory (terpisah dari katalog voucher vertex8_vouchers) — jadi katalog itu "produk yang bisa diberikan", sementara inventory adalah "apa yang sudah dimiliki member tertentu".

5. Booking & Check-In

Sub-halamanFungsi
schedules.phpKelola jadwal kelas (tanggal, jam, coach, kapasitas)
classes.phpKelola master data jenis kelas
checkin.phpCheck-in member (scan RFID) ke kelas yang dibooking
noshow.phpKelola penalti no-show (member booking tapi tidak datang)
reviews.phpKelola feedback/review member atas kelas
class_report.phpLaporan kehadiran per kelas
event_report.phpLaporan kehadiran event khusus
analytics.phpAnalitik booking (kelas favorit, jam ramai, dst)

Status Check-In

graph LR A[Member booking kelas] --> B["Status: Pre-Booked"] B --> C{Datang & scan RFID?} C -->|Ya, sebelum kelas selesai| D["Status: Valid"] C -->|Tidak, kelas sudah lewat| E[Kena penalti No-Show] E --> F[Tercatat di vertex8_noshowpenalty]
Kolom class_name di log check-in bisa berisi "Gate Access" — ini catatan tap RFID di pintu masuk gym, bukan check-in ke kelas tertentu. Modul manapun yang menghitung "jumlah check-in kelas" wajib mengecualikan baris ini.

6. Finance

Sub-halamanFungsi
coa.phpChart of Accounts — struktur akun keuangan
expenses.phpCatat pengeluaran operasional
pnl.phpLaporan Profit & Loss
settlement.phpRekonsiliasi settlement pembayaran (QRIS/gateway)

7. Settlements

Sub-halamanFungsi
referral.phpKelola kode referral & komisi member yang mengajak member baru
commission.phpKelola komisi sales/salesman
report_member.phpLaporan settlement per member

Kode referral tercatat di tabel vertex8_Referrals (kode dimiliki satu member), lalu setiap transaksi yang memakai kode itu tercatat di kolom referral_code pada vertex8_Transactions — dari situ komisi dihitung.

8. TC (Training Center)

Sub-halamanFungsi
race.phpCatat hasil race/kompetisi member (dipakai kriteria badge "Race Ready")
bodycomp.phpCatat pengukuran body composition (dipakai kriteria badge "Transformation")
padel.phpKelola fasilitas & jadwal Padel
achievement.phpKelola misi/achievement tambahan member

9. V8 Score

Panel admin untuk mengelola submission V8 Real Assessment (lihat dokumentasi lengkap di halaman v8score.vertex8.co.id) — lihat hasil kuis calon member dan kelola benchmark skor.

10. V8 Passport

Sub-halamanFungsi
Manage BadgesCRUD badge — nama, kategori, kriteria, poin, icon
Manage TiersAtur range persentase & benefit tiap tier
Member ProgressCari member, lihat status badge, award/cabut manual, grant benefit tier
graph TD A[Member beraktivitas
check-in, transaksi] --> B[Badge Engine
cron harian jam 3 pagi] B --> C{Kriteria badge
terpenuhi?} C -->|Ya| D[Badge earned
+ notif WA 8x8] C -->|Tidak| E[Tetap locked] D --> F[Poin terkumpul] F --> G{Tier tercapai?} G -->|Ya| H[Staff grant benefit
manual via Member Progress] H --> I[Diskon: unlimited, generate kapan saja] H --> J[Miles/Bundle/Merch: sekali per tier,
checklist per-item terkunci]

Tier & Benefit

TierRange PoinDiskonMilesBundle
Hybrid Trainee0–33%5%+250
Hybrid Athlete34–66%10%+750Season Pass 1 Bulan
Elite Athlete67–100%30%+1500Season Pass 3 Bulan

SOP: Menambah Badge Baru

  1. Buka Manage Badges → + Badge Baru.
  2. Isi Nama, Deskripsi, pilih Kategori (menentukan warna & ikon default).
  3. Pilih Tipe: Milestone (permanen setelah diraih) atau Status (bisa hilang lagi kalau syaratnya tidak terpenuhi, misal "Always On Time").
  4. Pilih Kriteria dari dropdown (25 jenis tersedia, dikelompokkan per kategori) — preview kalimat otomatis muncul untuk memastikan logikanya benar.
  5. Isi Nilai Target dan Poin.
  6. Upload icon (opsional) — PNG/SVG rasio 1:1, drag-drop langsung ke kotak upload.
  7. Simpan. Badge otomatis mulai dihitung di run badge engine berikutnya (bukan real-time).

SOP: Grant Benefit Tier ke Member

  1. Buka Member Progress, cari nama member.
  2. Kartu "Tier Saat Ini" muncul menampilkan tier & persentase poin.
  3. Untuk diskon: klik "Generate Voucher" — bisa berkali-kali kapan pun dibutuhkan.
  4. Untuk Miles/Bundle/Merchandise: centang item yang mau diberikan (item yang sudah pernah diberikan otomatis terkunci), lalu klik "Grant Item Terpilih".
  5. Untuk merchandise fisik: setelah di-grant sistem, serahkan barangnya secara manual ke member — sistem hanya mencatat status "eligible", tidak mengurus logistik fisik.
Diskon tier HANYA berlaku untuk pembelian bundling — di-enforce otomatis di level checkout (POS & join.vertex8.co.id), bukan sekadar aturan tertulis di SOP. Kalau ada item non-bundling di keranjang, transaksi ditolak sistem, bukan cuma diskonnya dibatalkan.
Notifikasi WA badge pakai 8x8 Connect resmi (bukan StarSender) — template harus di-approve dulu di 8x8 Connect sebelum dipakai, placeholder pakai format {{1}} {{2}} bukan {nama}. Ada kill-switch toggle terpisah untuk notif ini, default mati.

11. CRM & Tools

Sub-halamanFungsi
whatsapp.phpBroadcast WhatsApp ke daftar member/lead
wiki.phpCatatan internal tim (mirip dokumentasi mini di dalam ERP)
Free Class (free_class/index.php)Kelola pendaftaran trial class gratis (funnel calon member)

Settings

Sub-halamanFungsi
users.phpKelola akun staff & hak akses
password.phpUbah password akun sendiri
nav_catalog.phpReferensi katalog navigasi (terhubung ke nav_config.php)
highlight.php / landing.phpKelola konten landing page publik
logs.phpLog aktivitas staff di sistem
wa_reports.phpLaporan status pengiriman WhatsApp

Prinsip Navigasi

Semua menu di atas didaftarkan di satu file: includes/nav_config.php. Struktur registrasinya berbentuk array asosiatif per grup, tiap item berisi label, path file, dan (opsional) role yang diizinkan. Menambah modul baru = tambah satu baris di file ini, otomatis muncul di sidebar DAN masuk ke sistem checklist izin akses per role — tidak perlu edit dua tempat terpisah.

join.vertex8.co.id — Self-Checkout Publik

Self-Checkout
JenisPublik, tanpa login wajib
Payment gatewayiPay88 (QRIS)
Fungsi utamaBeli paket/drop-in/event, daftar member

join.vertex8.co.id adalah pintu masuk publik untuk siapa pun yang mau beli paket membership, drop-in class, atau event tanpa perlu login staff. Pembayaran diproses lewat iPay88 (QRIS), dan setiap transaksi disimpan sebagai status Pending dulu sampai webhook pembayaran mengonfirmasi.

Alur Checkout

sequenceDiagram participant U as Customer participant J as join.vertex8.co.id participant I as iPay88 participant W as Webhook participant DB as Supabase U->>J: Pilih item (bundle/produk/event) J->>DB: Simpan Transaksi (status Pending) J->>I: Request QRIS I-->>U: Tampilkan QR code U->>I: Scan & bayar I->>W: Callback pembayaran sukses W->>DB: Update status jadi Paid W->>DB: Aktifkan paket/booking member

Fitur Utama

FiturKeterangan
Registrasi & pembelian paketMember baru daftar sekaligus beli bundle
Drop-in bookingBooking kelas satuan tanpa membership
Referral trackingKode referral tercatat di transaksi
Reviews publikTestimoni member (rating 4–5 bintang) ditampilkan carousel
Auto tier discountDiskon otomatis terpotong kalau member eligible & beli bundling (lihat V8 Passport)

Catatan Historis Penting

Bug _dropin_slots (sudah diperbaiki, tapi perlu diingat). Frontend sempat menyimpan data _dropin_slots di DALAM object item, padahal backend membacanya dari top-level payload. Efeknya: pembayaran sukses tapi booking tidak pernah ter-create, tanpa error apa pun (webhook baca data kosong lalu keluar diam-diam). Kalau menambah field baru ke payload checkout, selalu pastikan strukturnya top-level, bukan nested di dalam item.
Sistem ini TIDAK punya redeem voucher manual (beda dari POS) — satu-satunya cara member dapat diskon di sini adalah lewat sistem auto-discount berbasis tier.

member.vertex8.co.id — Portal Member

Portal Member
JenisLogin khusus member (OTP WhatsApp)
Stack FrontendVue 3 (CDN, tanpa build step)
Fitur andalanV8 Passport (badge & tier)

member.vertex8.co.id adalah portal self-service untuk member yang sudah terdaftar. Login memakai OTP lewat WhatsApp (8x8 Connect), lalu member bisa booking kelas, cek riwayat, redeem voucher/miles, dan — fitur paling baru — melihat V8 Passport mereka sendiri.

Navigasi Utama

MenuFungsi
ProfileInfo member, status paket
VouchersVoucher & bundle yang dimiliki
MilesSaldo Miles, redeem produk
ArenaJadwal kelas (swipe) + My Bookings (digabung jadi satu tab dengan sub-navigasi)
PassportKartu identitas digital, badge, tier, benefit

V8 Passport — Tampilan Member

Halaman Passport menampilkan kartu identitas yang bisa di-swipe antar tier (preview tier yang belum tercapai muncul dengan overlay gembok), badge yang sudah/belum diraih, dan status klaim benefit (warna hijau = sudah diklaim, kuning = sudah eligible tapi menunggu staff proses).

graph TD A[Buka halaman Passport] --> B[Kartu identitas + carousel tier] B --> C[Swipe lihat tier lain] C --> D[Grid benefit tier yang sedang dilihat] D --> E{Status benefit} E -->|Hijau| F[Sudah diklaim] E -->|Kuning| G[Eligible, menunggu staff] E -->|Abu-abu| H[Tier belum tercapai] B --> I[Tombol Download Passport Card] I --> J[PNG kartu TIER ASLI member
bukan tier yang sedang di-preview]
Kartu yang di-download SELALU sesuai tier asli member, bukan tier yang sedang di-preview lewat swipe — ini memastikan member tidak bisa "curang" download kartu tier yang belum dicapai untuk dipamerkan di media sosial.

Otentikasi

Login memakai OTP WhatsApp lewat 8x8 Connect (bukan gateway tidak resmi). Sesi tersimpan di server, request API member selalu perlu memberId yang tervalidasi.

v8score.vertex8.co.id — V8 Real Assessment

Fitness Assessment
JenisPublik, funnel sales
TujuanKuis fitness untuk calon member
OutputRadar chart, PDF score card, kirim via WA

v8score.vertex8.co.id adalah alat assessment fitness yang dipakai tim sales untuk menarik calon member — pengunjung mengisi kuis performa (lari, angkat beban, dst), lalu mendapat skor visual (radar chart) dan bisa "membuktikan" skornya dengan submit nama & nomor WhatsApp untuk dapat kartu skor resmi dalam bentuk PDF.

Metodologi Skoring

Skor dihitung dari 5 kategori yang saling overlap, masing-masing berbobot 20%:

KategoriBobot
Strength20%
Cardio20%
Functional20%
Endurance20%
Hybrid Engine20%

Perhitungan pakai lookup band diskrit (bukan interpolasi linear) berdasarkan dokumen resmi coach "VERTEX PERFORMANCE TEST" — tabel skor terpisah untuk pria/wanita khusus kategori Run, Row, dan Pull-up.

graph LR A[Isi kuis performa] --> B[Scoring engine] B --> C[Lookup band diskrit
per kategori] C --> D[Radar chart 5 kategori] D --> E[Download Score Card PNG] D --> F["Prove Your Score"
submit nama + WA] F --> G[PDF resmi via TCPDF] G --> H[Kirim otomatis via 8x8 WA]

Integrasi ke ERP

Modul admin V8 Score ada di dev.vertex8.co.id (grup navigasi "V8 Score"), dipakai staff untuk melihat submission dan mengelola benchmark skor.

Path config subdomain ini nested berbeda — document root-nya ada di public_html/v8score.vertex8.co.id/ (di DALAM public_html utama, bukan sejajar), jadi jumlah "naik folder" ke vertex8_config/ beda dari subdomain lain. Selalu cek pesan error bootstrap.php yang menunjukkan path mana saja yang sudah dicoba, sebelum menambah path baru.

stage.vertex8.co.id — STAGE by VERTEX8

Platform Kompetisi HYROX
JenisPublik + Admin role-based
PaymentiPay88 (QRIS)
Role adminSuperuser, Judge Leader, Judge Member

STAGE by VERTEX8 adalah platform lengkap untuk menyelenggarakan kompetisi format HYROX (6 kategori, individu/tim) — mulai dari pendaftaran & pembayaran peserta, penjadwalan wave/heat, panel juri untuk penilaian real-time hari-H, leaderboard publik, sampai kartu finisher digital yang dikirim via WhatsApp.

Halaman Publik

HalamanFungsi
Landing PageVideo background, info 6 kategori kompetisi
RegistrasiForm individu/tim, QRIS iPay88, redeem Super Voucher
Card HubAkses kartu finisher lewat link WA hasil "Push Card Wave"
Operation (Check-in/Redeem/Status)Scan QR staff untuk check-in & redeem add-on hari-H
Modul Operation sengaja publik tanpa PIN — ini keputusan sadar (bukan celah keamanan yang terlewat): halaman status peserta memang read-only, dan mutasi data (check-in, redeem) hanya terjadi dari device staff yang melakukan scan, bukan dari device customer. Jangan "diperbaiki" jadi butuh login tanpa berdiskusi dulu — itu bisa mematahkan alur operasional hari-H.

Panel Admin (Role-Based)

ModulFungsiRole Minimum
DashboardRingkasan angka kompetisiSuperuser
Events / CategoriesKelola event & kategori lombaSuperuser
Race SchedulerAtur wave/heat, party code wajib, wave lockingSuperuser
Judge DashboardInput skor/waktu real-time, stop per-timJudge Leader / Judge Member
TV DashboardPengaturan tampilan leaderboard layar venueSuperuser
Finisher Card SettingsKustomisasi desain kartu finisherSuperuser
Transactions / ReportMonitoring pembayaran, export data pesertaSuperuser

Alur Hari-H

sequenceDiagram participant P as Peserta participant S as Staff (scan) participant J as Judge Dashboard participant TV as TV Dashboard P->>S: Datang, tunjukkan QR tiket S->>S: Scan check-in P->>J: Mulai wave/heat J->>J: Judge input waktu/skor per tim J->>TV: Leaderboard update real-time P->>S: Selesai, redeem add-on (kalau ada) Note over P: Kartu finisher terkirim via WA
setelah "Push Card Wave"

Catatan Teknis Penting

  • Wave locking: begitu sebuah wave sudah dimulai lewat Judge Board, jadwalnya terkunci (read-only) — tidak bisa diedit sembarangan untuk mencegah kekacauan data di tengah lomba.
  • Penilaian per-tim: satu klik di Judge Dashboard menghentikan waktu SEMUA anggota tim sekaligus dengan waktu selesai yang identik.
  • Notifikasi WA resmi (wave_assignment_reminder) pakai template 8x8 Connect yang sudah di-approve, kategori Utility, dengan attachment dokumen (PDF) dan tombol "Visit Website".

Dokumen ini dibuat berdasarkan riwayat pengembangan sistem Vertex8. Kalau ada bagian yang sudah berubah dan belum ter-update di sini, mohon diinfokan ke developer untuk direvisi.