Sheet 2 of 6 · Garapan · Exploded assembly

Garapan

Student freelance marketplace

The Garapan architecture as an exploded drawing. Each part links to its section.

Specification

Role
Fullstack Developer
Team
Capstone team project · I owned nearly the full build
Stack
Kotlin, Jetpack Compose, NestJS 11, Prisma, PostgreSQL, Next.js 16, TypeScript, Tailwind CSS, Midtrans, Firebase FCM, Socket.io, Cloudinary
Repos
mobile + admin public · API private

mobile repo admin repo

Drawn by
Praffi Ramadhani
Date
2026-06-30
Status
archived
Sheet
2 / 6

Overview

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.

This started as a capstone team project. I owned nearly the full build across mobile, backend, and admin, including architecture, features, integrations, and shipping.

The problem

“That works until money, scope, delivery, and disputes enter the picture.”

Student freelancers and small clients often meet through chat groups and informal referrals. 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.

A1 · Part 1 of 5

Android app

Android client for mahasiswa and clients, covering auth, profiles, marketplace search, jasa and projects, proposals, orders, Midtrans checkout, wallet, chat, reviews, notifications, and support.

Built with

  • Kotlin and Jetpack Compose
  • MVVM, Clean Architecture, Hilt
  • Retrofit, DataStore, Coil
  • Google Sign-In, FCM, Midtrans Snap checkout

A debug APK is available from the mobile repository README.

Detail Jasa

Landing Page Bisnis UMKM

4.0 (1 Ulasan) Terverifikasi

Mulai Dari

Rp 750.000

Andi Pratama

Web Development - Universitas Indonesia

4.5

Deskripsi Jasa


Responsive landing page with CMS-ready structure.

Ulasan Pelanggan

4.0

1 Ulasan

Garapan Demo Client

Landing page selesai sesuai brief dan mudah dipresentasikan.

Mulai Dari

Rp 750.000

Checkout

Ringkasan Pesanan

Landing Page Bisnis UMKM

Oleh Andi Pratama


Harga Layanan Rp 750.000

Total Pembayaran Rp 750.000

Metode pembayaran dipilih di halaman Midtrans setelah Anda mengetuk Bayar Sekarang.

Detail Pesanan

Pembayaran Jasa: Landing Page Bisnis UMKM

Freelancer Andi Pratama
Total Rp 750.000

Ajukan Dispute

Laporkan Masalah Pesanan

Silakan jelaskan masalah secara rinci. Alasan ini akan ditinjau oleh Admin untuk penyelesaian escrow sengketa.

0/1000

Minimal 10 karakter.

Live demo Garapan's Android order flow, rebuilt in HTML with the API's seed data. Order the service, let Andi deliver, then accept the work or file a dispute. The Midtrans payment page is skipped.

A2 · Part 2 of 5

Admin console

Internal Next.js ops dashboard for users, moderation, transactions, disputes, support chat, articles, analytics, and settings. The code is public at admin-garapan. The deployed console stays behind login, so the demo below rebuilds its dispute page.

Built with

  • Cookie-based admin sessions through BFF route handlers
  • React Query tables, moderation and dispute workflows
  • Support chat with attachments, article management, dashboard analytics

GARAPAN · Admin

Dispute & Laporan

Laporan Terbuka

1

Ditolak

0

Total Laporan

1

Selesai Diselesaikan

0

Status
ID Laporan Pihak Terkait Jenis Masalah Status Tanggal Aksi
80000000...0001
CD

Citra Digital

Pelapor - Klien

AP

Andi Pratama

Terlapor - Mahasiswa

Hasil pekerjaan belum sesuai ruang lingkup yang disepakati dalam brief.
Terbuka
11 Nov 2026

Menampilkan 1-1 dari 1 data

Live demo The dispute page of Garapan's admin console, rebuilt in HTML around the API's seeded dispute. Open the report, choose how the escrow settles, and the log shows what the API moves.

A3 – A5 · Parts 3 to 5

NestJS API

NestJS service for JWT auth, Google Sign-In, catalog, orders, escrow settlement, payments, chat, notifications, moderation, and admin endpoints, on Prisma and PostgreSQL.

Also on the API side

  • Shared API contracts, so mobile and admin stay aligned on orders, reviews, notifications, and moderation states
  • Health and readiness checks, and error monitoring
  • A3 NestJS API auth · escrow · private
  • A4 Payments & push Midtrans · FCM · Socket.io
  • A5 PostgreSQL via Prisma
Where the money waits: one Garapan order, state by state MENUNGGU BAYAR, then DIPROSES once Midtrans settles, with escrow holding Rp 750.000. DIKIRIM when Andi delivers. SELESAI when the work is accepted, and escrow releases Rp 750.000 to Andi's wallet. From DIPROSES or DIKIRIM the client can file a DISPUTE, and escrow stays held until an admin rules: release to Andi, refund to the client's wallet (DIBATALKAN), split between them, or reject, which sends the order back to DIKIRIM. DETAIL A3 · ONE ORDER, ESCROW TO WALLET Where the money waits MENUNGGU BAYAR DIPROSES DIKIRIM SELESAI Midtrans settles escrow holds Rp 750.000 Andi delivers · push: Pesanan dikirim escrow releases Rp 750.000 to Andi's wallet DISPUTE escrow stays held until an admin rules on it ADMIN RULES (A2) RELEASE · paid out to Andi REFUND · DIBATALKAN, to Citra's wallet PARTIAL_REFUND · split between them REJECT · back to DIKIRIM, still held API PRIVATE · DRAWN FROM THE ORDER LOGS IN BOTH DEMOS

Key technical decisions

  1. Split by client, not by feature.

    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 and moderators never share an app.

  2. 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.

  3. The backend stays private, on purpose.

    It holds auth, payment, and settlement logic, so public proof lives in the mobile and admin repositories instead.

Current status

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; the dispute demo above is a rebuild of one page.