// Full-Stack Developer — Laravel · Next.js

I build business systems that just work.

I turn messy, real-world operations — the spreadsheets, the WhatsApp threads, the guesswork — into software teams actually use. From the database to the dashboard, I own it end to end.

4+ yrs shipping production softwareCTO & sole engineer of a live ERP24 live builds you can clickBased in Surabaya · works remote
01

Selected Work

The six that carry the most weight — a live ERP in daily production, a SaaS I own, and the builds where the hard part was payments, tenancy, operations or geography.

Business System · ERP

Distribution ERP

CV Anugerah Sejati — building-materials distributor · CTO & Lead Developer

problemOrders lost between sales & warehouse; nobody knew who owed what; month-end took 3 people two days of copy-pasting Excel.
buildOne integrated ERP — quotation → order → delivery → invoice with self-updating stock, partial payments & cashback, FIFO costing, and a director's dashboard (P&L, cashflow, receivables).
resultmonth-end: 2 days → real-time 7 roles · full audit trail · 60+ models, 29 services.
LaravelPHPMySQLTailwindAlpine.js
cvanugerahsejati.com
CV Anugerah Sejati ERP — distribution control board
AI SaaS · Product I own

FeedLens

AI review-intelligence SaaS · Solo founder & full-stack

problemCustomer feedback piles up faster than anyone can read it — and a gut-feel summary misses what to actually do about it.
buildAn AI SaaS that turns raw reviews into decisions: per-review sentiment, a 1–5 score, recurring themes and one concrete action item — Groq (gpt-oss-120b) under a strict-JSON contract, with a Recharts dashboard, auth, metered plans and Xendit billing.
resultreviews → decisions sentiment · themes · action items · free + Pro tiers · billing in test mode · built & owned end to end.
Next.jsTypeScriptSupabaseGroq AIRechartsXendit
getfeedlens.com
FeedLens — AI review-intelligence SaaS landing page and dashboard preview
Payments · Marketplace escrow

CareEscrow — Escrow Marketplace

Stripe Connect marketplace payments · Full-stack build

problemA marketplace that takes money on someone else's behalf has to hold it, split it, refund it and pay it out — correctly, every time. Most builds bolt payouts on at the end and meet the hard parts in production.
buildA therapy-booking marketplace built payments-first: Stripe Connect Express onboarding through Account Links, PaymentIntents that hold funds in escrow, a 75/25 split released as Transfers, full and partial refunds, signature-verified webhooks, and a cron that auto-releases held funds once a session is done.
resultheld → split → released Express onboarding · escrow PaymentIntents · 75/25 transfers · full + partial refunds · signature-verified webhooks · Stripe test mode. A demo I built and own end to end.
Next.jsTypeScriptStripe ConnectSupabaseRLSWebhooks
careescrow · payments console
CareEscrow — Stripe Connect payments console showing funds held in escrow, released transfers and payout activity
SaaS · Supabase · Realtime

CrewBoard — Multi-tenant SaaS

Team task board · Full-stack build (Supabase + Next.js)

problemTeams need one shared board every member sees update in real time — but each team's data must stay strictly isolated at the database, not just hidden in the UI.
buildA live kanban SaaS: Supabase Auth, a relational Postgres schema, database-level Row Level Security so each workspace is fully isolated, and Realtime so cards move across sessions instantly. Sign-up auto-seeds a private workspace.
resultRLS-isolated + realtime Supabase Auth · Row Level Security · live sync · role-based access · seeded demo account so you can click straight in.
Next.jsTypeScriptSupabasePostgreSQLRLSRealtime
crewboard · saas demo
CrewBoard — multi-tenant team kanban SaaS built with Supabase (Auth, RLS, Realtime)
Ops · Procurement · AI

StokAlur — Procurement OS

Spreadsheet-to-system for an SME's purchasing · Full-stack build

problemPurchasing runs on a shared spreadsheet: approvals happen in chat, nobody quite trusts the stock column, and reorders get remembered late — usually once the line has already stopped.
buildA procurement system that treats the spreadsheet as the on-ramp: paste or upload a sheet and it becomes live records. Purchase orders you can approve, reject and receive, stock measured against reorder points, supplier on-time scoring, and an AI reorder briefing that turns lead times into a one-click draft PO.
resultspreadsheet → live system CSV / Google-Sheet importer · approve-reject-receive flow · low-stock alerts · AI reorder suggestions with a heuristic fallback · light + dark. A demo I built and own.
Next.jsTypeScriptSupabasePostgreSQLGroq AITailwind
stokalur · procurement os
StokAlur — procurement inventory screen showing stock levels against reorder points with low-stock flags
Geospatial · Field ops · Offline

LADANG — Field Incident Map

Plantation monitoring system · Full-stack build (Next.js + Leaflet)

problemField staff spot a fire, a pest outbreak or flooding out in the blocks and report it over WhatsApp. Nobody can see where anything is happening, which areas keep repeating, or whether it was ever dealt with. And the places it happens have the worst mobile signal.
buildA report goes in from a phone with GPS, photo and notes; the coordinate is matched to a plantation block by point-in-polygon, then rendered on an interactive map with per-type pins, zoom-aware clustering and blocks shaded by how many incidents are still open. Filters, an Open → On Progress → Closed workflow with full history, and a dashboard on top. Reports written with no signal queue locally and sync themselves once the device is back online.
resultGPS → block → map → closed point-in-polygon block detection · hotspot shading · offline queue with automatic sync · everything persists, with a reset button.
Next.jsTypeScriptLeafletZustandRechartsTailwind
ladang · field ops
LADANG — plantation field-incident monitoring map with block polygons, coloured incident pins and hotspot shading
02

All builds

Everything else I've shipped and still keep online. All of them are demos I designed and built myself, and every one is clickable — filter by the kind of thing you're looking for.

OLEA olive oil storefront — editorial hero with a single-estate bottle

OLEA

Storefront

Premium olive-oil store with a working cart — add to cart, drawer, quantities, mock checkout, all persisted.

Next.js · Tailwind · Motionopen ↗
Lumière beauty storefront — chic editorial hero with serum product

Lumière

Storefront

Single-product skincare DTC landing — masked headline reveal, shop-by-concern, add-to-bag through to checkout.

Next.js · Tailwind · Motionopen ↗
AUBIN fashion storefront — editorial hero for a quiet-luxury ready-to-wear label

AUBIN

Storefront

Quiet-luxury ready-to-wear one-pager: editorial hero, product edit, interactive lookbook and a functional cart.

Next.js · Tailwind · Motionopen ↗
MEKAR florist storefront — boutique bouquet atelier landing page in Bahasa Indonesia

MEKAR

Storefront

Florist atelier in Bahasa Indonesia, priced in Rupiah — bouquet collection, cart and same-day framing.

Next.js · Tailwind · Motionopen ↗
EMBER candle storefront — warm artisanal hero with a lit candle

EMBER

Storefront

Home-fragrance brand: four scents, a burn ritual section, gallery and a cart that survives a refresh.

Next.js · Tailwind · Motionopen ↗
KEMASA wholesale packaging storefront — bulk discount tiers per product and volumetric shipping explained

KEMASA

Storefront

Wholesale packaging supplier — quantity-tier pricing, enforced minimum order, and shipping billed on volumetric weight, plus an orders and stock panel.

Next.js · Tailwind · Motion · Rechartsopen ↗
TopNova — game top-up storefront with an automated fulfilment admin panel

TopNova

Storefront

Game top-up store with a real automation backend — signature-verified payment webhook, auto-delivery, retry and auto-refund.

Next.js · Tailwind · Webhooksopen ↗
Seruni — salon booking system with real-time therapist availability

Seruni

Booking

Salon booking that can't double-book: real-time slots from each therapist's hours, booked without an account.

Next.js · Zustand · Motionopen ↗
AIVELLE — aesthetic clinic booking system with treatment menu and doctor scheduling

AIVELLE

Booking

The same booking engine reskinned for an aesthetic clinic — treatments, doctors, patient history, membership points.

Next.js · Zustand · Motionopen ↗
Sakan — property management dashboard showing occupancy, revenue and maintenance activity

Sakan

Ops & internal

Property management for Dubai bedspace rentals — occupancy map, tenants, payments, maintenance kanban. Edits persist.

Next.js · Supabase · Rechartsopen ↗
Kasira — café point-of-sale screen with menu grid and live order cart

Kasira

Ops & internal

Café point-of-sale: menu grid to cart to QRIS/cash/card, a 58mm thermal receipt, shift cash-up and a Z-report.

Next.js · Zustand · Rechartsopen ↗
TourOps — private tour operator dashboard with revenue chart and upcoming departures

TourOps

Ops & internal

Tour-operator back office — leads kanban with follow-up flags, departures, guide assignment and revenue recap.

Next.js · Recharts · Motionopen ↗
MomenKita — QR photo-sharing landing page

MomenKita

SaaS & AI

Scan a QR at an event and upload straight to a live shared gallery — no app, no login, ~80% smaller files.

Next.js · Drizzle · MySQLopen ↗
FlowBridge — lead-integration service dashboard with live Groq AI enrichment

FlowBridge

SaaS & AI

Webhook to CRM, exactly once: contract validation, idempotent dedupe, AI enrichment, retry with backoff.

FastAPI · Next.js · Groq AIopen ↗
Arkatek — company profile site for an electrical & industrial engineering firm

Arkatek

Sites & motion

Corporate site for an industrial engineering firm — kinetic hero, animated counters, light/dark, duotone imagery.

HTML · CSS · JavaScriptopen ↗
RUANG — all-day café landing page with ordering call-to-action

RUANG

Sites & motion

All-day café landing built to convert — trust bar, reviews, WhatsApp and delivery-app ordering, sticky mobile CTA.

Next.js · Tailwind · Motionopen ↗
Motion Lab — gamified EdTech animation demo with a claymorphic app preview

Motion Lab

Sites & motion

A clickable gamified-learning animation system: Rive state-machine mascot, streaks, XP ring, level-ups.

Rive · Lottie · Framer Motionopen ↗
Govinda concept — monochrome editorial redesign concept for a wedding photographer's site

Govinda concept

Sites & motion

An unsolicited redesign concept for a wedding photographer — his art direction kept, structure and booking form fixed.

Next.js · Tailwind · Motionopen ↗
03

How I work

I'm a full-stack developer who started by building a company's entire operations platform from scratch — as its CTO and only engineer. That meant sitting with the sales, purchasing, and finance teams first, learning how the business actually runs, then designing the system around reality.

I work across Laravel/PHP and Next.js/React/TypeScript, and I use AI tooling (Claude Code) to ship fast — while staying in control of every line. I own the architecture, not just the syntax.

“Software that fits how people work beats software that's clean but ignores how people work.”
04

Stack

Frontend

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • Motion / Framer

Backend & Data

  • Laravel / PHP
  • FastAPI / Python
  • PostgreSQL · MySQL
  • Supabase (Auth · RLS)
  • REST APIs · Webhooks

Practice

  • Full-stack architecture
  • Multi-tenant SaaS
  • ERP / business systems
  • Payments (Stripe · Xendit)
  • AI-assisted dev (Claude Code)
05

Writing

Notes from builds, written so the useful part is checkable rather than impressive.

7 Sep 2026·8 min read

Switching payment gateway is a migration, not a swap

The comparison threads argue about fees and approval speed. The cost lands in your own code: webhook verification is a different security model between providers, every virtual account number you issued carries the old provider’s company code, and reconciliation has to survive two providers at once. How to migrate without moving anything in flight, and when not to switch at all.

Read the article →
3 Sep 2026·7 min read

“Which payment gateway works for an individual?” is two questions

Taking money in for your own sales and sending money out to other people are different licensed activities, and a provider that accepts you as an individual for one says nothing about the other. Six questions to ask before switching, and why a personal account gets reviewed for whose money passes through it rather than how much.

Read the article →
2 Sep 2026·7 min read

Can an Indonesian company build its own payment gateway?

The Bank Indonesia licence probably does not apply if the only money moving is your own, because a PJP is defined as facilitating payments for other people. What actually stops you is QRIS, which no merchant can issue for itself. What is left to build, and the three questions that say don’t.

Read the article →
1 Sep 2026·8 min read

I ran Supabase’s RLS checklist against my own app. It failed four checks.

Tenant isolation was correct and the recursion trap was already avoided. What failed was everything around it: no TO authenticated, helpers not wrapped in a subquery, an UPDATE policy with no WITH CHECK on a table carrying a billing column, and SECURITY DEFINER helpers sitting in the schema PostgREST exposes.

Read the article →
1 Sep 2026·6 min read

The shipping cost your wholesale price list cannot see

Five packs of bubble wrap weigh 21 kg and get billed as 94 kg. How chargeable weight works, why only two of eight SKUs are affected and you cannot eyeball which, and why shipping cost is a property of the basket rather than the product.

Read the article →
31 Aug 2026·6 min read

Marketplace split payments when Stripe Connect does not support your country

Connect does not support platforms incorporated in Indonesia or Malaysia. What that actually means, why the “legacy” account-type warning is not what it looks like, the honest local alternatives, and the five parts of escrow that break no matter which provider you pick.

Read the article →
// let's build

Got a process held together by spreadsheets?

Tell me what's slowing your operations down — I'll tell you honestly how I'd build it.

WhatsApp +62 811-333-8088