Skip to content

User Flow

Authentication Flow

  1. User mengunjungi halaman login
  2. better-auth menangani session via cookie
  3. Setelah login, user diarahkan ke dashboard

Signup Flow

  1. User mengunjungi halaman signup
  2. User mengisi form (nama, email, password) atau memilih Google OAuth
  3. better-auth membuat user record di database
  4. Welcome email dikirim otomatis ke email user berisi greeting dan overview fitur
  5. User diarahkan ke dashboard untuk generate soul map pertama

Password Reset Flow

  1. User klik "Forgot Password" di halaman login
  2. User memasukkan email address
  3. better-auth generate reset token dan kirim password reset email dengan link
  4. User klik link di email (expire dalam 1 jam)
  5. User mengisi password baru
  6. better-auth update password hash dan invalidate sessions lama

Destiny Analysis Flow

Input Form (Unified)

  1. User membuka halaman /destiny
  2. Tab Input menampilkan form terpadu dengan field:
    • Profile Name (opsional, untuk labeling history)
    • Full Name (nama di akta kelahiran)
    • Birth Date (date picker)
    • Gender (Male / Female / Other)
    • Birth Time — mode Exact (time picker) atau Range (dropdown 7 rentang waktu dengan midpoint otomatis)
    • Birth City & Country
  3. Saat birth date dipilih, Weton (Primbon Jawa) dihitung otomatis dan ditampilkan (hari, pasaran, neptu)
  4. User menekan tombol Calculate Numerology atau Generate BaZi

Numerology (Client-Side)

  1. Engine kalkulasi deterministik berjalan di browser — tidak ada call ke server
  2. Hasil ditampilkan di tab Numerology: Life Path, Expression, Soul Urge, Personality, Maturity, Personal Year
  3. Setiap angka menampilkan calculation steps dan Master Number badge jika applicable
  4. Hasil otomatis tersimpan ke History (localStorage)

BaZi (Backend Proxy)

  1. Frontend memanggil POST /v1/checkDestinyAccess untuk cek usage limit
  2. Jika quota habis, tampilkan pesan lock dengan alasan
  3. Jika quota tersedia, frontend membangun prompt dan memanggil POST /v1/invokeDestiny
  4. Backend:
    • Verifikasi usage limit lagi
    • Proxy prompt ke base44 InvokeLLM integration
    • Increment usage counter di database
    • Return hasil LLM ke frontend
  5. Frontend parse dan render hasil di tab BaZi: Four Pillars, Day Master, Element Balance, Ten Gods, Luck Pillars, Life Guidance, Affirmations
  6. Hasil otomatis tersimpan ke History (localStorage)

History

  1. Tab History menampilkan daftar analisis terakhir (maksimal 20 entri)
  2. Setiap entri menampilkan profile name, nama, tanggal lahir, timestamp, dan badge sistem (Numerology / BaZi / Weton)
  3. User bisa klik entri untuk memuat kembali data dan hasil ke form
  4. User bisa menghapus entri individual dari history
  5. History disimpan di localStorage — tidak masuk ke backend database (sesuai kontrak saat ini)

Compatibility Flow

Create Compatibility

  1. User membuka halaman /compatibility dan klik New Compatibility
  2. Form menampilkan input untuk dua orang: nama, tanggal lahir, waktu lahir (opsional), kota lahir (opsional), dan tipe hubungan (romantic, friendship, professional, family)
  3. Frontend memanggil POST /v1/createCompatibility
  4. Backend menyimpan data dan menghitung compatibility score secara deterministik
  5. User di-redirect ke halaman result /compatibility/result/:id

Compatibility Result (Lite)

  1. Halaman result menampilkan:
    • Overall compatibility score dengan visual score ring
    • Summary singkat berdasarkan score dan relationship type
    • Dimension breakdown: emotional, communication, values, energy, growth
    • System score pills: Numerologi, BaZi, Human Design, Primbon
  2. Bagian Deep Insights ditampilkan sebagai locked section dengan teaser konten

Unlock Deep Insights

  1. User klik Unlock Deep Insights pada locked section
  2. Modal muncul dengan dua opsi:
    • Unlock with Token — jika user memiliki deep insights tokens, token langsung dikonsumsi dan result terunlock
    • Purchase (IDR 50,000) — memulai flow pembayaran Doku
  3. Jika user memilih purchase:
    • Frontend memanggil POST /v1/purchaseDeepInsights dengan compatibilityResultId
    • Backend membuat transaksi Doku dan insert record ke deep_insights_purchases (status pending)
    • Backend return paymentUrl
    • Frontend redirect user ke halaman pembayaran Doku
  4. User menyelesaikan pembayaran di Doku
  5. Doku redirect user kembali ke result page:
    • Sukses: ?payment=success → tampilkan success banner, invalidate query, reload result
    • Gagal: ?payment=failed → tampilkan error banner
  6. Webhook Doku secara async mengupdate:
    • transactions table status → paid
    • deep_insights_purchases status → paid, unlocked → true
    • compatibility_results unlocked → true, paidAccess → true
  7. Payment receipt email dikirim ke user berisi detail invoice dan konfirmasi unlock

Generate AI Deep Insights

  1. Setelah result terunlock, user bisa klik Generate AI Deep Insights
  2. Frontend memanggil POST /v1/generateDeepInsights dengan compatibility data
  3. Backend:
    • Verifikasi result sudah unlocked (unlocked / paidAccess)
    • Bangun prompt dengan data personA, personB, relationship type, overall score, dan dimensions
    • Proxy ke base44 InvokeLLM integration
    • Simpan hasil ke compatibility_results.deep_insights
  4. Frontend menampilkan:
    • Premium summary — narasi personal dan poetic
    • Strengths — 3 kekuatan hubungan
    • Challenges — 3 tantangan yang perlu diperhatikan
    • Guidance — 3 saran praktis
    • Spiritual narrative — paragraf poetic tentang kualitas spiritual koneksi
  5. Hasil AI tersimpan di database untuk recall — user bisa regenerate kapan saja

Compatibility List

  1. Halaman /compatibility menampilkan list semua compatibility results user
  2. Setiap item menampilkan nama pasangan, score, relationship type, dan badge premium jika deep insights sudah terunlock
  3. User bisa klik item untuk melihat detail

Journal Flow

  1. User membuka halaman /journal
  2. User membuat entry baru dengan form: text, mood (1-10), energy (1-10), stress (1-10), tags
  3. Frontend memanggil POST /v1/createJournal
  4. Entry tersimpan di database dan muncul di list
  5. User bisa melihat history entry dengan pagination
  6. Dengan minimal 2 entri, user bisa klik Generate AI Insights
  7. Frontend memanggil POST /v1/generateJournalSummary dengan entry data
  8. Backend membangun prompt, proxy ke base44 InvokeLLM, dan menyimpan hasil ke journal_entries.ai_summary
  9. Frontend menampilkan growth score, current season, what is improving, what needs attention, suggested next step, future directions, dan resilience note
  10. Hasil AI tersimpan di database untuk recall — user bisa refresh insight kapan saja

Profile Flow

  1. User membuka halaman /profile
  2. Halaman menampilkan informasi akun, usage stats, purchase history, dan link ke history pages
  3. Purchase History section menampilkan daftar deep insights purchases dengan status (pending / paid / failed) dan amount
  4. User bisa edit nama profil
  5. User bisa logout atau request penghapusan akun

Admin Flow

  1. Admin/Owner membuka halaman /admin
  2. System melakukan role guard — hanya admin dan owner yang bisa akses
  3. Halaman menampilkan lima tab:
    • Overview — dashboard statistik platform: total users, new users (today/week/month), total journal entries, total compatibility results, total revenue, transaction breakdown (paid/pending/failed), user growth bar chart, dan transaction status chart
    • Users — tabel seluruh user dengan search, pagination, update role, dan ban action
    • Payments — statistik transaksi (total revenue, paid/pending/failed count) dan tabel transaksi dengan filter status dan search
    • Content — moderation panel dengan sub-tab Journal Entries dan Compatibility Results; menampilkan seluruh konten user dengan informasi creator, mood/score, AI summary/insights status, dan pagination
    • Settings — konfigurasi platform: maintenance mode toggle, app name, contact email, free analysis limit, dan deep insights price
  4. Admin bisa filter transaksi by status (all/pending/paid/failed/cancelled/expired)
  5. Admin bisa search transaksi by invoice number atau product name
  6. Admin bisa search journal entries by text dan compatibility results by person name
  7. Pagination tersedia untuk semua tabel (users, transactions, journal entries, compatibility results)

Payment Flow (Deep Insights)

User clicks Unlock → Modal opens → Choose Purchase
  → POST /v1/purchaseDeepInsights
    → Backend creates Doku transaction + deep_insights_purchases record
    → Returns paymentUrl
  → Frontend redirects to Doku payment page
  → User completes payment on Doku
  → Doku redirects back to result page (?payment=success / ?payment=failed)
  → Doku webhook hits /api/v1/handleWebhook
    → Verifies signature
    → Updates transactions + deep_insights_purchases + compatibility_results
    → Sends payment receipt email to user