SewMe
SewMe is an innovative online platform designed to connect tailors with buyers seamlessly. Customers can effortlessly search for tailors that match their specific needs and preferences. The website offers a range of features including custom tailoring options, real-time tracking of dressmaking or alteration progress, live chat with tailors for personalized communication, and secure cashless payment transactions. SewMe ensures a smooth and efficient experience for both tailors and customers, enhancing the entire tailoring process.
2024
Website
Laravel 11, Livewire, MySQL, Midtrans, Tailwind CSS
Problem
The bespoke tailoring and garment alteration industry traditionally relies on manual, in-person coordination. Customers struggle to discover verified tailors, compare craftsmanship portfolios, and accurately communicate body measurements without scheduling multiple fitting visits. Conversely, home-based and independent tailoring businesses face unorganized order books, cash flow vulnerability, and lack tools to provide transparent production progress to clients. SewMe was conceived as an end-to-end tailoring marketplace connecting consumers, vetted tailors, and administrators with escrow-secured cashless payments.
My role
This platform was engineered during my software engineering internship at PT Unimasoft Teknologi Indonesia. I served as the Lead Backend Developer (~79 commits), taking ownership of relational data modeling, custom measurement workflows, payment gateway integration, and the tailor revenue disbursement ledger:
- Relational Database Design: Authored 39+ MySQL schema migrations spanning tailor store verification (
toko), multi-image garment catalogues (product_images), orders (pesanan), custom measurements (custom_ukuran), and payout tracking (tarik_uang). - Custom Order & Precision Measurement Engine: Built the bespoke ordering pipeline allowing buyers to input tailored biometric measurements (shoulder width, chest circumference, waistline, sleeve length) saved in relational records tied to individual order items.
- Multi-Stage Order Lifecycle Management: Designed a deterministic progression state machine (Awaiting Payment $\to$ Awaiting Tailor Confirmation $\to$ In Production $\to$ Shipped $\to$ Completed), enforcing authorization policies ensuring tailors only access and mutate their own shop orders.
- Midtrans Cashless Payment Integration: Implemented cashless checkouts utilizing Midtrans Snap API and resilient webhook handlers to capture verified transaction settlements.
- Tailor Payout & Revenue Ledger (TarikUang): Developed revenue reconciliation logic calculating withdrawable shop balances after deducting platform commission fees, complete with superadmin proof-of-transfer verification workflows.
- Direct Messaging & Review System: Supported direct messaging between customers and tailors for material/fabric consultations, accompanied by post-completion 5-star ratings and textual feedback.
System architecture
The application leverages Laravel 11 with server-rendered Blade templates and Livewire 3 for reactive frontend interactions:
- Model-View-Controller (Laravel 11): Implements role-based routing (Customer, Tailor Partner, Admin), form request validation, and scoped access policies.
- Livewire 3 Components: Powers reactive interactions for shopping carts, dynamic search filters, and messaging feeds without requiring full page refreshes.
- Midtrans Payment Gateway: Supports Virtual Accounts, E-wallets (GoPay/QRIS), and credit cards with signature-verified webhook endpoints.
- Relational Storage (MySQL): Preserves transactional order data, chat transcripts, garment portfolios, and financial payout audits.
Key modules & endpoints
| Module / Route | Method & Path | Core Functionality |
|---|---|---|
| Auth & Store Profile | POST /login, POST /register |
Customer session handling and new tailor onboarding |
| Tailor Verification | GET /admin/toko, POST /admin/toko/verifikasi |
Superadmin review and approval of tailor credentials |
| Bespoke Checkout | POST /pesanan/checkout |
Order creation with linked CustomUkuran parameters |
| Progress Tracking | GET /pesanan/{id}/detail |
Milestone status tracking across cutting, sewing, and fitting |
| Status Transition | POST /pesanan/{id}/status |
Tailor updates order phase with optional note/photo |
| Midtrans Webhook | POST /midtrans-callback |
Validates transaction settlement signatures |
| Tailor Payout Request | POST /tarik-uang/tambah |
Tailor withdraws balance earned from completed orders |
| Financial Audit | GET /admin/tarik-uang |
Superadmin ledger to inspect balances and upload transfer receipts |
| In-App Messaging | GET /chat/{toko_id}, POST /chat/send |
Pre-order fabric and sizing discussions |
Technical challenges
1. Managing bespoke anatomical measurements.
Unlike standard apparel e-commerce with fixed sizing options (S/M/L/XL), bespoke tailoring demands granular physical dimensions. Storing measurements as unstructured text leads to input errors and ruined garments. We established a dedicated custom_ukuran table bound by a 1-to-1 relationship with pesanan, enforcing numeric validation (in centimeters) for every critical seam dimension before handoff.
2. Financial reconciliation and preventing balance overdrafts.
Customer payments are held in escrow and become withdrawable only when an order is flagged as Completed (status 3). Within TarikUangController, available balances are strictly reconciled by subtracting total verified withdrawal requests from total gross completed order earnings, guarding against double-withdrawals.
3. Multi-tenant data scoping across independent tailors.
Tailors must not have visibility into competitor orders, customer registries, or financial reports. We enforced data isolation via Eloquent query scopes: whereHas('produk', fn($q) => $q->where('user_id', Auth::id())), guaranteeing tenant privacy at the query layer.
4. Tamper-proof payment callback verification.
Order statuses are never updated based on client-side redirect query parameters. The application transitions orders to Paid exclusively upon receiving verified Midtrans webhooks validated with SHA512 hash comparisons over order_id, status_code, gross_amount, and server keys.
Future improvements
- Implement real-time WebSockets (Laravel Reverb / Pusher) in the messaging subsystem to eliminate client polling.
- Integrate automated logistics courier APIs (RajaOngkir / Shipper) to calculate fabric delivery rates dynamically.
- Automate tailor payout disbursements using the Midtrans Iris Payout API.
Simulate Midtrans payment webhook lifecycle and idempotency defense against replay attacks or network retries.
POST /midtrans/webhook
Payload & SHA-512 Hash
Verify Signature
Midtrans API Double-Check
State Transition Guard
getOriginal('status')
DB::transaction
Assign Room & Invoice PDF
// System ready. Click one of the action buttons above to simulate.
Benchmark impact of compound index on 50,000 monthly bill records for midnight billing cron.
ref (Index Seek)
idx_user_bulan_tahun
1 row
0.002% of table
1.2 ms
99.2% faster
O(log N)
B+ Tree Traversal
View More Projects

Digital library API: borrowing, book requests, premium accounts, and cashless fine payments.
- Node.js
- Express
- MySQL
- +3

Gamified educational community platform: Phaser mini-games (Kitty Attack), real-time score pipeline, and Top-10 leaderboards.
- Next.js
- Node.js
- Express
- +3

Flutter app for learning sign language with offline on-device AI detection and gamification.
- Flutter
- TensorFlow Lite
- MediaPipe
- +2