Website resmi Arcthogus — tim esports Valorant asal Indonesia yang berdiri sejak 2021. Dibangun dengan Next.js 16 dan Supabase, dilengkapi sistem toko jersey online, panel admin, dan halaman profil tim yang interaktif.
- Homepage interaktif — particle canvas, custom cursor, parallax, scroll reveal, glitch effect, dan typing animation
- Toko jersey — order online, redirect ke Bayaraja untuk pembayaran QRIS, dan cek status order via Order ID
- Panel admin — kelola pesanan, update status fulfillment, atur harga dan stok toko, ganti password
- Bayaraja integration — payment link dibuat otomatis per order, status diupdate via webhook (pending → waiting → confirmed)
- Keamanan — rate limiting per IP (Supabase RPC), harga dihitung di server, HMAC-SHA256 webhook verification, CSP headers, HSTS, dan CORS
| Layer | Teknologi |
|---|---|
| Framework | Next.js 16.1.6 (App Router) |
| UI | React 19, TypeScript 5 |
| Backend / Auth | Supabase (PostgreSQL, Auth, Storage) |
| Deploy | cPanel + Phusion Passenger |
app/
├── page.tsx # Homepage
├── store/page.tsx # Toko jersey
├── login/page.tsx # Login admin
├── dashboard/page.tsx # Panel admin
└── api/
├── submit-order/ # Terima order, buat Bayaraja payment link
├── check-order/ # Cek status order (publik)
├── webhooks/bayaraja/ # Terima webhook dari Bayaraja
└── auth/callback/ # OAuth callback Supabase
lib/
└── supabase/
├── server.ts # Service role client (server-only)
└── browser.ts # Anon key client (browser)
proxy.ts # Middleware auth
1. Clone & install
git clone https://github.com/akbarr13/arcthogus.git
cd arcthogus
npm install2. Environment variables
cp .env.local.example .env.localIsi .env.local:
NEXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
SUPABASE_SERVICE_ROLE_KEY=eyJ...
ALLOWED_ORIGIN=http://localhost:3000
BAYARAJA_API_URL=https://bayaraja.arwebs.my.id
BAYARAJA_API_KEY=byr_...
BAYARAJA_QRIS_ACCOUNT_ID=uuid-qris-account
BAYARAJA_WEBHOOK_SECRET=whsec_...3. Supabase — buat tabel & fungsi
Buat dua tabel di Supabase:
orders— kolom:id, name, phone, address, size, qty, price, total, status, notes, bayaraja_link_id, payment_url, created_atsettings— wajib ada row denganid = 1
Buat dua RPC functions:
check_rate_limit(p_ip, p_endpoint, p_max, p_window_seconds) → boolean
check_order_status(p_order_id) → row (tanpa PII)Buat storage bucket:
store-assets→ public
Aktifkan RLS di tabel orders dan settings dengan SELECT policy untuk anon.
4. Jalankan dev server
npm run devLihat DEPLOY.md untuk panduan lengkap.
npm run build
bash deploy.sh
# Upload isi deploy_cpanel/ ke server, lalu restart Node.js App di cPanel