# erzamadana-ui/jastipkita architecture

> Architecture diagram of the GitHub repository erzamadana-ui/jastipkita, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/erzamadana-ui/jastipkita
- Repository: https://github.com/erzamadana-ui/jastipkita

## Overview

JastipKita is a two-sided Indonesian personal-shopping marketplace: buyers post shopping requests, verified travelers publish trips and offers, and accepted matches proceed through pricing, protected payment, delivery, and receipt. The API and shared pure-domain engine provide the main runtime; the public site and admin SPA support discovery and operations. The README also documents mobile clients, finance, risk, growth, support, and compliance capabilities. Several paths are represented by their enclosing module because their implementation was not sampled; mobile source and database migrations were not in the supplied tree.

Main entry points: [`apps/api/src/app.ts`](https://github.com/erzamadana-ui/jastipkita/blob/main/apps/api/src/app.ts) (HTTP API), [`apps/api/src/modules/checkout`](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/checkout) (Checkout and Purchase), [`apps/api/src/modules/requests`](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/requests) (Shopping Requests), [`apps/api/src/modules/offers`](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/offers) (Offers and Matching)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["Client Experiences"]
  node_web["Public Website"]
  node_adminspa["Admin SPA"]
  node_mobile["Mobile App"]
end

subgraph group_marketplace["Marketplace Flow"]
  node_core{{"Domain Engine"}}
  node_requests["Shopping Requests"]
  node_trips["Traveler Trips"]
  node_offers["Offers and Matching"]
end

subgraph group_transaction["Trust and Transaction"]
  node_auth["Authentication"]
  node_identity["KYC and Files"]
  node_checkout["Checkout and Purchase"]
  node_delivery["Delivery and Receipt"]
  node_disputes["Disputes"]
end

subgraph group_operations["Operations and Platform"]
  node_api["HTTP API<br/>[app.ts]"]
  node_moneyops["Payments and Finance"]
  node_adminmods["Admin Operations"]
  node_notifications["Notifications"]
end

subgraph group_integrations["External Services"]
  node_database[("PostgreSQL")]
  node_paymentprovider["Payment Provider"]
  node_storage["File Storage"]
end

node_buyer(("Buyer"))
node_traveler(("Traveler"))
node_admin(("Admin Operator"))

node_buyer -->|"discovers"| node_web
node_buyer -->|"uses"| node_mobile
node_traveler -->|"uses"| node_mobile
node_web -->|"requests data"| node_api
node_mobile -->|"calls"| node_api
node_admin -->|"operates"| node_adminspa
node_adminspa -->|"calls"| node_api
node_api -->|"dispatches"| node_auth
node_api -->|"dispatches"| node_requests
node_api -->|"dispatches"| node_trips
node_api -->|"dispatches"| node_offers
node_api -->|"dispatches"| node_checkout
node_api -->|"dispatches"| node_delivery
node_api -->|"dispatches"| node_disputes
node_api -->|"dispatches"| node_identity
node_requests -->|"checks restrictions"| node_core
node_offers -->|"uses matching"| node_core
node_checkout -->|"calculates quote"| node_core
node_checkout -->|"starts payment"| node_paymentprovider
node_paymentprovider -->|"sends webhook"| node_api
node_api -->|"dispatches"| node_moneyops
node_delivery -->|"updates transaction"| node_api
node_disputes -->|"records cases"| node_api
node_identity -->|"stores documents"| node_storage
node_api -->|"dispatches events"| node_notifications
node_api -->|"dispatches"| node_adminmods
node_adminmods -->|"queries and updates"| node_database
node_requests -->|"persists requests"| node_database
node_trips -->|"persists trips"| node_database
node_offers -->|"persists offers"| node_database
node_checkout -->|"persists purchases"| node_database
node_delivery -->|"persists delivery"| node_database
node_disputes -->|"persists cases"| node_database
node_moneyops -->|"records finance"| node_database
node_notifications -->|"reads and writes"| node_database

click node_web "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/web/src"
click node_adminspa "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/admin/src"
click node_mobile "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/mobile"
click node_api "https://github.com/erzamadana-ui/jastipkita/blob/main/apps/api/src/app.ts"
click node_core "https://github.com/erzamadana-ui/jastipkita/tree/main/packages/core/src"
click node_auth "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/auth"
click node_identity "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/kyc"
click node_requests "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/requests"
click node_trips "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/trips"
click node_offers "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/offers"
click node_checkout "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/checkout"
click node_delivery "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/delivery"
click node_disputes "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/disputes"
click node_moneyops "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules"
click node_adminmods "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/admin"
click node_notifications "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/notifications"
click node_paymentprovider "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/providers/payment"
click node_storage "https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/providers/storage"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_web,node_adminspa,node_mobile toneBlue
class node_core,node_requests,node_trips,node_offers toneAmber
class node_auth,node_identity,node_checkout,node_delivery,node_disputes toneMint
class node_api,node_moneyops,node_adminmods,node_notifications toneRose
class node_database,node_paymentprovider,node_storage,node_buyer,node_traveler,node_admin toneIndigo
```

## Components

### Client Experiences

- [Public Website](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/web/src): `apps/web/src`
- [Admin SPA](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/admin/src): `apps/admin/src`
- [Mobile App](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/mobile): `apps/mobile`

### Marketplace Flow

- [Domain Engine](https://github.com/erzamadana-ui/jastipkita/tree/main/packages/core/src): `packages/core/src`
- [Shopping Requests](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/requests): `apps/api/src/modules/requests`
- [Traveler Trips](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/trips): `apps/api/src/modules/trips`
- [Offers and Matching](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/offers): `apps/api/src/modules/offers`

### Trust and Transaction

- [Authentication](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/auth): `apps/api/src/modules/auth`
- [KYC and Files](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/kyc): `apps/api/src/modules/kyc`
- [Checkout and Purchase](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/checkout): `apps/api/src/modules/checkout`
- [Delivery and Receipt](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/delivery): `apps/api/src/modules/delivery`
- [Disputes](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/disputes): `apps/api/src/modules/disputes`

### Operations and Platform

- [HTTP API](https://github.com/erzamadana-ui/jastipkita/blob/main/apps/api/src/app.ts): `apps/api/src/app.ts`
- [Payments and Finance](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules): `apps/api/src/modules`
- [Admin Operations](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/admin): `apps/api/src/modules/admin`
- [Notifications](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/modules/notifications): `apps/api/src/modules/notifications`

### External Services

- **PostgreSQL**
- [Payment Provider](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/providers/payment): `apps/api/src/providers/payment`
- [File Storage](https://github.com/erzamadana-ui/jastipkita/tree/main/apps/api/src/providers/storage): `apps/api/src/providers/storage`

### Other components

- **Buyer**
- **Traveler**
- **Admin Operator**

## Connections

- Buyer → Public Website: discovers
- Buyer → Mobile App: uses
- Traveler → Mobile App: uses
- Public Website → HTTP API: requests data
- Mobile App → HTTP API: calls
- Admin Operator → Admin SPA: operates
- Admin SPA → HTTP API: calls
- HTTP API → Authentication: dispatches
- HTTP API → Shopping Requests: dispatches
- HTTP API → Traveler Trips: dispatches
- HTTP API → Offers and Matching: dispatches
- HTTP API → Checkout and Purchase: dispatches
- HTTP API → Delivery and Receipt: dispatches
- HTTP API → Disputes: dispatches
- HTTP API → KYC and Files: dispatches
- Shopping Requests → Domain Engine: checks restrictions
- Offers and Matching → Domain Engine: uses matching
- Checkout and Purchase → Domain Engine: calculates quote
- Checkout and Purchase → Payment Provider: starts payment
- Payment Provider → HTTP API: sends webhook
- HTTP API → Payments and Finance: dispatches
- Delivery and Receipt → HTTP API: updates transaction
- Disputes → HTTP API: records cases
- KYC and Files → File Storage: stores documents
- HTTP API → Notifications: dispatches events
- HTTP API → Admin Operations: dispatches
- Admin Operations → PostgreSQL: queries and updates
- Shopping Requests → PostgreSQL: persists requests
- Traveler Trips → PostgreSQL: persists trips
- Offers and Matching → PostgreSQL: persists offers
- Checkout and Purchase → PostgreSQL: persists purchases
- Delivery and Receipt → PostgreSQL: persists delivery
- Disputes → PostgreSQL: persists cases
- Payments and Finance → PostgreSQL: records finance
- Notifications → PostgreSQL: reads and writes
