Garapan
An IT freelancer marketplace that connects Indonesian university students with clients through a mobile app, NestJS API, and internal admin console.
Garapan is an IT freelancer marketplace for Indonesian university students. Mahasiswa freelancers offer jasa and take projects; clients post work, hire, pay through escrow, chat, and review. The product ships as three surfaces: an Android app for the marketplace, a NestJS API for auth and business logic, and a Next.js admin console for operations.
This started as a capstone team project. I owned nearly the full build across mobile, backend, and admin — architecture, features, integrations, and shipping.
The problem
Student freelancers and small clients often meet through chat groups and informal referrals. That works until money, scope, delivery, and disputes enter the picture. Without a shared order flow, escrow, and moderation, trust breaks down and both sides waste time.
Garapan turns that informal loop into a marketplace with clear roles, paid orders, wallet withdrawals, reviews, reports, and an ops console for the cases that need human judgment.
Product surfaces
- Mobile app — Android client for mahasiswa and clients: auth, profiles, marketplace search, jasa and projects, proposals, orders, Midtrans checkout, wallet, chat, reviews, notifications, and support.
- Backend API — NestJS service for JWT auth, Google Sign-In, catalog, orders, escrow settlement, payments, chat, notifications, moderation, and admin endpoints. The API source stays private.
- Admin console — Internal Next.js ops dashboard for users, moderation, transactions, disputes, support chat, articles, analytics, and settings. Public code: admin-garapan. The deployed console is login-gated and not a public demo.
What I built
- Android app in Kotlin and Jetpack Compose with MVVM, Clean Architecture, Hilt, Retrofit, DataStore, Coil, Google Sign-In, FCM, and Midtrans Snap checkout.
- NestJS API with Prisma and PostgreSQL covering auth, marketplace catalog, orders, escrow, Midtrans sandbox payments, Socket.io chat, FCM notifications, content reports, disputes, wallet withdrawals, and admin operations.
- Next.js admin console with cookie-based admin sessions through BFF route handlers, React Query tables, moderation and dispute workflows, support chat with attachments, article management, and dashboard analytics.
- Cross-surface contracts so mobile and admin stay aligned on orders, reviews, notifications, and moderation states.
- Observability and deploy hardening on the API side, including health/readiness checks and error monitoring.
Key technical decisions
The system is split by client, not by feature dump. Mobile owns the marketplace UX. The NestJS API owns auth, money movement, and domain rules. Admin owns internal ops behind a protected session, so marketplace users never share the same surface as moderators.
Payments stay explicit: Midtrans handles checkout, while escrow settlement and wallet withdrawals stay under API control. Chat and push notifications keep both parties in the loop without turning the product into another unstructured chat group.
Keeping the backend private is intentional. It holds auth, payment, and settlement logic. Public proof lives in the mobile and admin repositories and the architecture described here.
Current status
Garapan is archived as a completed capstone build. The mobile repository and admin repository are public. The backend remains private. The admin deploy is an internal console behind login, so there is no public live demo. A debug APK for the mobile app is available from the mobile repository README.