Sistem Platform
YUKTA
Platform hybrid LMS & Social Learning yang mempertemukan santri, pemuda, dan talenta dalam satu ekosistem berkembang, bermanfaat, dan berkelanjutan.
Mengapa YUKTA Hadir
Latar belakang masalah dan solusi yang ditawarkan platform.
- Santri lulus pesantren kurang skill dunia kerja, tidak bisa lanjut kuliah
- Santri aktif haus ilmu umum & skill menghasilkan uang (halal)
- Remaja putus sekolah / broken home tidak akses pendidikan formal
- Usia target: SMP akhir hingga SMA akhir (15–19 tahun)
- Tidak ada wadah yang mengakomodir minat-bakat sekaligus monetisasi
- Wadah digital pembelajaran skill dunia (bisnis, marketing, dll)
- Kolaborasi talent, vendor, mentor dalam satu ekosistem
- Sistem poin → dompet digital → tarik tunai (insentif nyata)
- Anti-mainstream: gabungan LMS + Medsos + Game Edukasi
- Goal: semua pihak bebas finansial, berkecukupan, berbagi manfaat
Arab — يُؤْتَ (Yu'ta): Diberi, dianugerahi (QS. Al-Baqarah: 269).
Jawa Timuran — "Yuk ta": Ajakan santai akrab, "Ayo lah, ayo dong".
Sanskerta — Yukta: Connected, suitable, skilful, joined, endowed — terhubung, tepat, dibekali, selaras.
Kesimpulan: YUKTA = Wadah yang mengajak pemuda untuk terhubung & terbekali agar dianugerahi kebaikan yang banyak.
High-Level Architecture
Gambaran besar bagaimana komponen sistem saling terhubung.
┌──────────────────────────────────────────────────────────────┐
│ CLIENT LAYER │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
│ │ Browser │ │ Mobile │ │ Gmail │ │ Midtrans │ │
│ │ (Web) │ │ Browser │ │ OAuth │ │ Payment │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └─────┬─────┘ │
└───────┼──────────────┼──────────────┼──────────────┼─────────┘
└──────────────┴──────┬───────┴──────────────┘
│ HTTPS
┌─────────────────────────────┼────────────────────────────────┐
│ PRESENTATION LAYER │
│ (PHP 8.2 + JS) │
│ ┌────────┐ ┌────────┐ ┌────────────┐ ┌──────────┐ │
│ │Landing │ │ Auth │ │ Dashboard │ │ Admin │ ... │
│ └───┬────┘ └───┬────┘ └─────┬──────┘ └────┬─────┘ │
└──────┼──────────┼─────────────┼─────────────┼───────────────┘
└──────────┴──────┬──────┴─────────────┘
│
┌───────────────────────────┼─────────────────────────────────┐
│ BUSINESS LOGIC LAYER │
│ (PHP Classes) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ UserMgmt │ │CourseMgr │ │ PointSys │ │ VCardGen │ │
│ │ Auth │ │ LMS │ │ Wallet │ │ AI Proxy │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
└───────┼─────────────┼─────────────┼─────────────┼───────────┘
└─────────────┴──────┬──────┴─────────────┘
│ PDO
┌─────────────────────────────┼────────────────────────────────┐
│ DATA LAYER │
│ ┌──────────────────┐ │ ┌──────────────────┐ │
│ │ MySQL 8.x │◄───────┴──────►│ File Storage │ │
│ │ (24 Tabel) │ │ /uploads/* │ │
│ └──────────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────┼────────────────────────────────┐
│ EXTERNAL INTEGRATIONS │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
│ │ Google │ │ DeepSeek │ │ Midtrans │ │ WhatsApp │ │
│ │ Identity │ │ AI API │ │ PGW API │ │ (opsional)│ │
│ └──────────┘ └──────────┘ └──────────┘ └───────────┘ │
└─────────────────────────────────────────────────────────────┘
Alur Perjalanan Pengguna
Flow utama dari pengunjung awam hingga menjadi member aktif.
yukta.id
3 opsi auth
punya akun?
Form/Gmail/WA
Member Free
Upload bukti
Flow Midtrans (auto): user bayar di halaman Midtrans → callback webhook ke api/midtrans-webhook.php → sistem auto-aktifkan PRO tanpa campur tangan admin. Jika payment gagal/expired → status = expired, user bisa coba lagi.
4 Level Pengguna
Matriks hak akses setiap role dalam sistem.
| Fitur / Aksi | Superadmin | Admin | Mentor | Member Free | Member PRO |
|---|---|---|---|---|---|
| Akses Panel Admin | |||||
| Kelola Pengaturan Global | |||||
| Kelola Admin Lain | |||||
| CRUD Konten (Kutipan, Berita, Produk) | |||||
| CRUD Kursus & Materi | |||||
| Verifikasi Pembayaran Manual | |||||
| Akses Kursus Free | |||||
| Akses Kursus Premium | |||||
| Generate Virtual Card | |||||
| Posting di Bacaanku | |||||
| Main Edu Game & Kumpul Poin | |||||
| Tukar Poin → Saldo → Tarik Tunai |
24 Tabel MySQL
Desain skema relasional untuk seluruh fitur platform.
1. users — Data pengguna utama
| Kolom | Tipe | Constraint | Keterangan |
|---|---|---|---|
| id | INT | PK AI | Primary key |
| username | VARCHAR(50) | UNIQUE NOT NULL | Untuk URL vcard |
| nama_lengkap | VARCHAR(100) | NOT NULL | Nama tampilan |
| VARCHAR(150) | UNIQUE | Nullable jika daftar via WA | |
| no_wa | VARCHAR(20) | UNIQUE | Format 62xxx |
| password | VARCHAR(255) | Hash bcrypt, null jika OAuth | |
| google_id | VARCHAR(100) | UNIQUE | Google OAuth ID |
| avatar | VARCHAR(255) | Path foto profil | |
| role | ENUM | NOT NULL | 'superadmin','admin','mentor','member' |
| is_pro | TINYINT(1) | DEFAULT 0 | 0=Free, 1=PRO |
| pro_expiry | DATETIME | Null jika bukan PRO | |
| total_poin | INT | DEFAULT 0 | Dihitung dari transaksi |
| wallet_balance | DECIMAL(12,2) | DEFAULT 0 | Saldo Rupiah |
| is_active | TINYINT(1) | DEFAULT 1 | Banned = 0 |
| created_at | DATETIME | Waktu registrasi | |
| updated_at | DATETIME | Terakhir update |
Denormalization ringan pada likes_count & comments_count untuk mengurangi COUNT query saat load beranda. JSON columns pada game_levels.objects_data menyimpan posisi x,y objek 360 secara fleksibel. Cron job diperlukan untuk cek pro_expiry tiap jam, reset leaderboard, dan bersihkan session expired.
Directory Tree
Organisasi file di server cPanel public_html.
- yukta.id/
- index.php ← Landing Page
- login.php / register.php / logout.php
- auth-google.php ← OAuth callback
- auth-process.php ← Handler login/register
- dashboard.php ← Beranda member
- virtual-card.php / edu-game.php
- bacaanku.php / ruang-kursus.php
- kursus-detail.php / ruang-kreatif.php
- ruang-santai.php / profil.php
- dompet.php ← Saldo & riwayat
- upgrade-pro.php
- vcard/
- index.php ← Public viewer: yukta.id/vcard/{username}
- admin/
- index.php (dashboard)
- users.php / quotes.php / news.php
- products.php / courses.php
- course-materials.php / edu-games.php
- bacaanku-moderate.php / kreatif-moderate.php
- santai-videos.php / payments.php
- redemptions.php / withdrawals.php
- settings.php
- api/
- generate-vcard.php ← Proxy DeepSeek
- game-checkpoint.php / midtrans-webhook.php
- midtrans-init.php / like-comment.php
- upload.php ← Unified upload
- config/
- database.php ← PDO connection
- app.php ← Constants, API keys
- includes/
- auth-check.php / pro-check.php
- admin-check.php / functions.php
- csrf.php
- assets/
- css/
- style.css / dashboard.css / admin.css
- js/
- app.js / dashboard.js
- vcard.js / edugame.js
- admin.js
- img/
- logo.svg / og-image.jpg
- css/
- uploads/
- avatars/ / vcard/ / bacaanku/
- kreatif/ / courses/ / game-scenes/
- payments/ / .htaccess ← Disable PHP exec
- .htaccess ← Rewrite vcard URL
- cron-pro-check.php ← Cron expirasi PRO
Halaman Depan yukta.id
Simpel, jelas, memikat. Pertama kali dilihat pengunjung.
┌────────────────────────────────────────────┐ │ [Logo YUKTA] [Masuk/Join] │ ← Navbar fixed ├────────────────────────────────────────────┤ │ Hero Section │ │ [Gambar/ilustrasi pendukung] │ │ JUDUL BESAR │ │ "Terhubung, Terbekali, Dianugerahi" │ │ Tagline 1-2 baris │ │ [ Gabung Sekarang — Gratis ] │ ← CTA ├────────────────────────────────────────────┤ │ 3 Kolom Fitur Unggulan │ │ [Belajar Skill] [Karya Kreatif] [Cari] │ ├────────────────────────────────────────────┤ │ Cara Kerja (3 langkah) │ ├────────────────────────────────────────────┤ │ Testimoni / Social Proof │ ├────────────────────────────────────────────┤ │ © 2025 YUKTA. All rights reserved. │ ← Footer └────────────────────────────────────────────┘
Login & Registrasi
3 metode autentikasi yang saling melengkapi.
Setelah consent Google, cek apakah google_id sudah terdaftar. Jika belum: redirect ke halaman "Lengkapi Profil" meminta: (1) Username (pre-fill dari email, bisa diedit), (2) Nomor WA (wajib), (3) Set password opsional. Jika sudah: langsung set session dan masuk dashboard.
Beranda Setelah Login
3 kotak kaca transparan + 6 menu utama di atas video background.
┌──────────────────────────────────────────────┐ │ [Logo] [Avatar] Nama │ ├──────────────────────────────────────────────┤ │ VIDEO BACKGROUND (loop 10s) │ │ pemandangan desa, pegunungan, awan │ │ ┌────────────────────────────┐ │ │ │ Kata Mutiara Harian [✕] │ ← Glass │ │ └────────────────────────────┘ card │ │ ┌────────────────────────────┐ fade-in │ │ │ Fakta Menarik [✕] │ │ │ │ [Baca selengkapnya →] │ │ │ └────────────────────────────┘ │ │ ┌────────────────────────────┐ │ │ │ Produk Unggulan [✕] │ │ │ └────────────────────────────┘ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │Virtual │ │Edu Game │ │Bacaanku │ │ ← Row 1 │ │Card PRO │ │ │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │Ruang │ │Ruang │ │Ruang │ │ ← Row 2 │ │Kursus │ │Kreatif │ │Santai │ │ │ └─────────┘ └─────────┘ └─────────┘ │ └──────────────────────────────────────────────┘
AI-Powered VCard Generator
Input deskripsi → AI generate halaman portofolio web unik.
"Kamu adalah web designer. Buatkan halaman portofolio/virtual card satu halaman (single HTML file dengan inline CSS & JS). Desain modern, elegan, responsive. Gunakan animasi CSS menarik. Tanpa framework. Warna tema sesuai deskripsi user. Gambar user di path: /uploads/vcard/{filename}. Output HANYA kode HTML, tanpa penjelasan."
360 Virtual Room Game
Game edukasi berbasis panorama 360 dengan kontrol gyro dan swipe.
Social Reading Feed
Instagram-style grid untuk membangun budaya baca.
Grid 3 kolom, pengisian per baris:
┌──────────┬──────────┬──────────┐
│ POPULER#1│ RANDOM │ RANDOM │ ← Baris 1
│ (top) │ (pool) │ (pool) │
├──────────┼──────────┼──────────┤
│ POPULER#2│ RANDOM │ RANDOM │ ← Baris 2
├──────────┼──────────┼──────────┤
│ POPULER#3│ RANDOM │ RANDOM │ ← Baris 3
└──────────┴──────────┴──────────┘
Logic: pool_populer = ORDER BY (likes+comments) DESC
pool_random = WHERE id NOT IN(populer) RAND()
Loop: 1 populer + 2 random per baris
Implementasi: server-side PHP rendering| Posting baru | +5 poin |
| Memberikan like | +2 poin |
| Menulis komentar | +3 poin |
| Selesaikan level game | +3 poin |
| Selesaikan bab kursus | +4 poin |
Learning Management System
Modul belajar dengan tracking progress dan mode runtut.
┌──────────────────────────────────────────┐ │ [Pencarian: Cari kursus...] │ │ [Filter Kategori ▼] │ ├──────────────────────────────────────────┤ │ ┌────────────┐ ┌────────────┐ │ │ │ [Thumbnail]│ │ [Thumbnail]│ │ │ │ Nama Kursus│ │ Nama Kursus│ │ │ │ ████░░ 60% │ │ ███░░░ 30% │ ← Progress │ │ 12 Bab │ │ 8 Bab │ │ │ └────────────┘ └────────────┘ │ │ ┌────────────┐ ┌────────────┐ │ │ │ [Thumbnail] PREMIUM │ │ ← Badge │ │ [Kunci] │ │ [Kunci] │ ← Jika belum PRO │ └────────────┘ └────────────┘ │ └──────────────────────────────────────────┘
Wadah Unjuk Gigi & Ide
Tempat sharing karya dan ide bisnis kreatif antar member.
Karena kamu bilang masih bingung konsepnya, ini usulan saya:
Konsep: "Pitch Corner" — Semi-Forum dengan Vote System
Setiap post di Ruang Kreatif punya 2 tab: "Karya" (portofolio, desain, tulisan, foto) dan "Ide Bisnis" (proposal singkat, mockup, MVP). Member lain bisa memberikan Upvote atau Downvote (seperti Reddit), plus komentar diskusi.
Fitur spesifik:
• Post yang mendapat 50+ upvote otomatis dapat badge "Trending" dan muncul di highlight dashboard.
• Admin/Mentor bisa memberikan badge "Validated by Mentor" pada post yang dinilai punya potensi nyata.
• Ada tombol "Mau Kolaborasi" — jika user klik, sistem kirim notifikasi ke pemilik post (bisa via WA link). Ini memfasilitasi koneksi antar talent.
• Kategori: Ide Bisnis, Karya Desain, Karya Tulis, Prototype/Demo, Lainnya.
• Tidak ada sistem poin di sini (untuk menjaga kualitas, bukan kuantitas). Poin hanya dari Bacaanku & Game & Kursus.
┌──────────────────────────────────────────┐ │ [Tab: Semua] [Karya] [Ide Bisnis] │ │ [Pencarian...] [Sort: Trending▼] │ ├──────────────────────────────────────────┤ │ ┌──────────────────────────────────┐ │ │ │ [Gambar] Nama Karya/Ide │ │ │ │ oleh @username · 2 jam lalu │ │ │ │ Kategori: Ide Bisnis │ │ │ │ Deskripsi singkat... │ │ │ │ ▲ 42 ▼ 3 💬 8 🤝 Mau Kolaborasi│ │ │ │ [Badge: Trending] │ │ │ └──────────────────────────────────┘ │ │ ┌──────────────────────────────────┐ │ │ │ [Gambar] Karya Desain Logo... │ │ │ │ ▲ 28 ▼ 1 💬 5 🤝 Mau Kolaborasi│ │ │ └──────────────────────────────────┘ │ └──────────────────────────────────────────┘
Video Menenangkan
Video alam durasi panjang / looping untuk menemani belajar atau bersantai.
Lebih dari sekadar video player — buat pengalaman "virtual cozy room":
• Katalog visual: Grid thumbnail video dengan kategori (Hujan, Hutan, Laut, Gunung, Kota Malam, Perkopian). Setiap thumbnail punya preview 3 detik saat di-hover.
• Mini player floating: Setelah pilih video, buka di mini player yang bisa di-drag ke pojok manapun layar. User bisa tetap browsing fitur lain sambil video tetap bermain.
• Sound mixer: Untuk video bertema "coffeeshop" atau "hutan", sediakan slider untuk mix suara (misal: suara hujan 60% + suara kopi 30% + suara burung 10%). Ini bikin pengalaman jadi unik dan personal.
• Timer tidur: Fitur "Sleep Timer" — set 15/30/60 menit, video otomatis fade-out perlahan lalu berhenti. Cocok buat yang pakai untuk tidur.
• Video source: Upload sendiri ke server (mp4, terbatas kuota) ATAU embed dari YouTube (lebih hemat storage). Rekomendasi: embed YouTube + beberapa video premium self-hosted.
┌──────────────────────────────────────────┐ │ [Kategori: Hujan Hutan Laut Gunung ...] │ │ [Pencarian...] │ ├──────────────────────────────────────────┤ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ [Thumb]│ │ [Thumb]│ │ [Thumb]│ │ │ │ Hujan │ │ Hutan │ │ Laut │ │ │ │ 2:00:00│ │ 1:30:00│ │ 3:00:00│ │ │ │ ▶ Play │ │ ▶ Play │ │ ▶ Play │ │ │ └────────┘ └────────┘ └────────┘ │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ [Thumb]│ │ [Thumb]│ │ [Thumb]│ │ │ │ Gunung │ │KotaMLM │ │Perkopian│ │ │ └────────┘ └────────┘ └────────┘ │ ├──────────────────────────────────────────┤ │ Setelah Play → Mini Player Floating: │ │ ┌──────────────────────┐ │ │ │ ▶ Hujan Di Hutan 🔊──│ ← Draggable │ │ │ [Slider Volume] [⏱] │ │ │ └──────────────────────┘ │ └──────────────────────────────────────────┘
Dari Poin → Saldo → Tarik Tunai
Sistem insentif yang nyata dan transparan.
Untuk fase awal (MVP), sistem poin → saldo → tarik tunai bisa sepenuhnya manual oleh admin tanpa integrasi Midtrans. Ini mengurangi kompleksitas signifikan. Midtrans hanya dipakai nanti untuk payment PRO membership (fase 3+). Penukaran poin bisa dilakukan via form + verifikasi admin.
Upgrade & Benefit
2 opsi pembayaran: manual dan otomatis via Midtrans.
2. User transfer.
3. User upload bukti transfer (gambar) ke sistem.
4. Status: pending.
5. Admin cek di panel admin → approve/reject.
6. Jika approve: is_pro=1, pro_expiry=NOW()+duration, kirim notifikasi WA ke user.
2. Backend panggil api/midtrans-init.php → dapat Snap Token.
3. Popup Midtrans Snap Payment muncul (pilihan: QRIS, VA, e-wallet, CC).
4. User bayar.
5. Midtrans kirim webhook ke api/midtrans-webhook.php.
6. Backend verifikasi signature → auto update is_pro=1 + pro_expiry.
7. Tanpa campur tangan admin.
| Akses kursus premium | Free | PRO |
| Generate Virtual Card (AI) | Free | PRO |
| Badge PRO di profil | Free | PRO |
| Prioritas tampil di leaderboard | Free | PRO |
Kendali Penuh dari Backend
Semua pengaturan konten dan operasional dari satu panel.
3 API Eksternal
Semua dipanggil dari backend PHP via cURL, tidak ada API key di frontend.
Hardening Sistem
Langkah-langkah keamanan wajib untuk platform.
Roadmap 6 Fase
Urutan build yang realistis untuk shared hosting tanpa tim besar.
Total waktu: 12-16 minggu (3-4 bulan) untuk 1 developer full-time. Jika part-time (4 jam/hari), perkiraan 6-8 bulan. Fase 1-2 bisa diluncurkan sebagai MVP dalam 4-5 minggu part-time untuk mulai menarik user awal.
Sumber Pendapatan Platform
Bagaimana YUKTA menghasilkan uang secara berkelanjutan.
Teknologi yang Digunakan
Semua stack disesuaikan dengan constraint shared hosting cPanel.
| Layer | Teknologi | Versi | Keterangan |
|---|---|---|---|
| Backend | PHP | 8.2 | Procedural + OOP class helper, tanpa framework |
| Database | MySQL | 8.x | 24 tabel, relasional, InnoDB engine |
| DB Driver | PDO | Built-in | 100% prepared statements |
| Frontend CSS | Tailwind CSS | CDN v3.4 | Utility-first, tanpa build step |
| Frontend JS | Vanilla JS | ES6+ | Tanpa framework, modular per halaman |
| Font | Space Grotesk + JetBrains Mono | Google Fonts | Heading + monospace code |
| Icons | Font Awesome | 6.5 CDN | Icon set lengkap |
| 3D Engine | Three.js | CDN r160+ | Khusus Edu Game (360 panorama) |
| AI API | DeepSeek | v1 | VCard generator, via PHP cURL proxy |
| OAuth | Google Identity | OAuth 2.0 | Login via Google, PHP cURL |
| Payment | Midtrans | Snap API v2 | PHP SDK via Composer, webhook |
| Server | Apache cPanel | Shared | .htaccess rewrite + security headers |
| Cron | cPanel Cron Jobs | — | Cek PRO expiry tiap jam, cleanup session |
Pertimbangan: (1) Shared hosting cPanel limit memory ~256MB, Laravel bisa makan 50-80MB hanya bootstrap. (2) Tanpa framework = full kontrol, tidak ada "magic" sulit debug. (3) Performa lebih ringan, hanya load yang dibutuhkan. (4) Untuk 1 developer, overhead framework sering tidak sebanding. Strategi: Tetap terstruktur: folder config/, includes/, class helper terpisah, consistent naming convention — ini "framework-nya sendiri" tanpa vendor lock-in.
Mengajak, Terhubung, Terbekali, Dianugerahi.
Blueprint ini adalah fondasi. Langkah selanjutnya adalah eksekusi Fase 1.
Dokumen Blueprint Arsitektur Sistem YUKTA v1.0 — 2025