Dokumentasi Website Marketplace Digital Product | RIZALCODE

Опубликовано: 10 Июль 2026
на канале: RizalCode
8
1

❤️ Like & Subscribe :
https://s.id/SubscribeRizal

🔗 Repository GitHub :
https://s.id/GithubZufarRizal

📸 Instagram :
https://s.id/InstagramRizal

🧵 Threads :
https://threads.net/zufarrizal

💳 Support :
https://s.id/SupportRizal

Tech Stack

Backend

Runtime: Node.js v18+
Framework: Express.js v5.2.1
Template Engine: EJS v6.0.1
Database: PostgreSQL 14+
Database Driver: pg v8.22.0 node-postgres
Auth: bcrypt v6.0.0 password hashing
Security: helmet, express-rate-limit, express-validator, cors
Compression: compression v1.8.1 gzip
Environment: dotenv

Frontend

HTML: EJS templates server-side rendering
CSS: Custom CSS dark theme, rem units, responsive
JavaScript: Vanilla JS no framework
Icons: Font Awesome 6.5.1
Fonts: Poppins + DM Sans Google Fonts
Navigation: Standard page loads full page reload

Deployment

Container: Docker + docker-compose
Process Manager: PM2
Reverse Proxy: Nginx
PaaS: Railway.app / Render.com
SSL: Let's Encrypt certbot

Version Control

VCS: Git
Hosting: GitHub private repository

🔍 SEO

Meta Tags — Dynamic title, description, robots per halaman
Open Graph — og:title, og:description, og:sitename, og:type, og:locale
Twitter Card — summarylargeimage
Canonical URL — Setiap halaman public
robots.txt — Allow public pages, disallow admin/API
sitemap.xml — Dynamic dari DB, include semua produk aktif
JSON-LD — Organization, WebSite landing, Product + Breadcrumb market-detail
Structured Data — Dynamic dari settings sitename, siteemail, sitephone, sitelogourl
Performance — Gzip compression, static file cache CSS/JS 7d, images 30d, fonts 1y, lazy loading, preconnect
Semantic HTML main, nav, section, heading hierarchy h1→h2→h3
Admin pages — noindex, nofollow

📝 Notes

Database auto-create tables saat pertama kali dijalankan
Admin default otomatis dibuat jika belum ada
Cookie-based auth untuk server-side rendering
Semua halaman kecuali `/login` dan `/` butuh auth
Maintenance mode block semua user kecuali admin
Image upload di-compress otomatis max 2MB, quality 80%
Stok dihitung dari digital_items bukan input manual
Semua tabel punya pagination, sortable columns, dan bulk actions
Semua konfirmasi pakai custom modal bukan alert/confirm native
Navigasi menggunakan standard page loads bukan SPA/PJAX
Auto-cancel pesanan pending setelah 24 jam
Countdown timer di modal pembayaran
Footer sticky di semua halaman panel
Dashboard terpisah untuk admin dan user
Semua CSS pakai satuan rem dinamis
Nama situs 100% dinamis dari settings tidak ada hardcoded
CSS units — Semua pakai satuan rem dinamis, responsive
Maintenance — Konfigurabel, auto-disable, progress bar real-time
Logout — Support cookie dan X-Auth-Token header
Galeri — Admin bisa lihat, preview, copy URL, hapus gambar dengan pengecekan referensi
SEO — Meta tags, OG, Twitter Card, JSON-LD, sitemap.xml, robots.txt
Settings — site_email, site_phone, site_logo_url upload gambar logo
Auth CSS — Dedicated auth.css untuk halaman login/register