Exsport
Exsport adalah platform e-commerce untuk merek tas Exsport (exsportbags.com). Pelanggan menelusuri katalog, menambah barang ke cart, memilih kurir, membayar, lalu melacak pengiriman. Staf mengelola produk, stok, order, member, promosi dan konten dari admin panel. Platform ini bicara dengan tiga layanan luar: Biteship untuk pengiriman, DOKU untuk pembayaran, dan PowerBiz (WMS) untuk stok gudang.
Binari membangun dan memeliharanya. Semuanya satu project Jira, DEF07.
Bagaimana bentuknya
Exsport adalah satu produk yang dibagi ke beberapa repository, satu per layanan. Ini kebalikan dari INACT, yang satu codebase di-fork per klien. Di sini ada satu sistem live, dan pembagiannya berdasarkan peran, bukan klien.
Storefront (Next.js) Admin (Next.js)
│ │
└──────────────┬───────────────┘
▼
Backend (NestJS, GraphQL + REST)
│
┌────────────────────┼────────────────────┐
▼ ▼ ▼
Biteship DOKU PowerBiz (WMS)
(delivery) (payment) (stock)
│ │ │
└───────── webhook receiver → SNS ─────────┘Repository-nya
Semua di bawah binari-digital di GitHub. Checkout lokal ada di bawah /Volumes/xpro/erisristemena/ dalam folder yang dinamai sesuai stack (nestjs/, nextjs/, …), bukan di bawah www/ seperti repo INACT.
| Repo | Peran | Stack | Branch di origin |
|---|---|---|---|
def-exsport-backend | GraphQL + REST API, semua business logic | NestJS 10, Apollo, TypeORM, Postgres | main, staging, development |
def-exsport-frontend-storefront | Toko pelanggan | Next.js 15, React 19, Apollo, NextAuth | main, staging, development |
def-exsport-frontend-admin | Admin / CMS | Next.js 15, React 19, Apollo, NextAuth | main, staging, development |
def-exsport-webhook | Menerima callback pihak ketiga, menyebar ke SNS | Express 5, plain JS | main only |
def-exsport-3rdparty-simulator | Proxy di depan Biteship/DOKU/WMS, dengan simulasi error | Express 5, http-proxy | main only |
def-exsport-data-migration | Import produk dan member sekali jalan dari Google Sheets | Deno, TypeScript | main only |
def-exsport-stresstest | Load test yang menjalankan browser sungguhan | Go 1.24, playwright-go | main only |
def-exsport-pulumi | AWS infrastructure as code | Pulumi, TypeScript | main only |
Versi dibaca segar di perbandingan repo. Model branch dibaca dari origin, jangan dari ingatan — ini yang menentukan seluruh git workflow. Lihat Mengerjakan tiket.
Fakta stack yang penting
| API | Backend menyajikan code-first GraphQL (autoSchemaFile: true, tanpa schema.gql yang di-commit) di /{APP_PREFIX}/graphql, ditambah REST untuk file upload dan webhook masuk |
| Database | Postgres saja — satu engine, jadi tidak ada aturan cross-driver INACT yang berlaku |
| Schema | TypeORM dengan synchronize: true — schema hanya ditentukan oleh file entity *.model.ts. Tanpa folder migrations, tanpa seed script |
| Auth | Dua realm JWT terpisah: admin/CMS dan member storefront. Guard per-resolver, tanpa global guard |
| Frontend | Keduanya Next.js 15 App Router, Apollo Client, NextAuth. Storefront pakai Tailwind v4, admin pakai Tailwind v3 |
| Pihak ketiga | Biteship, DOKU, PowerBiz WMS — hanya diakses dari backend. Di dev mereka menunjuk ke simulator |
| Deploy | Push ke sebuah branch otomatis men-deploy env itu lewat GitHub Actions di runner self-hosted rumah |
Ke mana selanjutnya
Baru di sini: Setup lokal, lalu codebase tour, lalu mengerjakan tiket. Menelusuri fitur: peta fitur dan halaman fitur itu. Bekerja di satu repo: halaman repo-nya. Menambah atau memperbaiki halaman: panduan kontribusi.