Dwulx
Web Platform2023

DWULX

$50,000+ Stripe volume in the first 3 months with a complex multi-role wallet system.

$50K+
Stripe volume (first 3 mo)
3
Role-specific dashboards
4
Wallet ledger features
SCROLL
Client
Misty Interactive Studios
Domain
Full-Stack / Fintech
Platform
Web (Next.js)
Duration
Jan 2023 — May 2025
Core Stack
Next.js · PostgreSQL · Stripe
The Brief

THE
PROBLEM

Dwulx connects parents with childcare providers for bookings, wallets, and payouts — the wallet had to survive real Stripe volume, not a demo ledger. The stack migrated from an early React/Node app to Next.js for SEO and performance while preserving money-movement correctness.

Next.js dashboards with Stripe Connect, PostgreSQL double-entry ledger tables, idempotent webhooks, and admin tooling to freeze payouts when disputes open — parents, providers, and ops each see scoped ledgers.

Core Engineering Challenge

Commission splits, cancellation-triggered withdrawal holds, automatic monthly disbursements, and blocked payments during disputes — all visible to three roles with different mental models of “balance available.”

$50K+
Stripe Volume
3
Role Dashboards
4
Wallet Features
Extended stack
frontend
Next.js
database
PostgreSQL
backend
Stripe
devops
Docker
dwulx1
dwulx1
How we built it

THE ARCHITECTURE

01
Multi-role auth

RBAC with separate Next.js route groups and server-side enforcement on API routes.

Next.jsRBAC
02
Double-entry ledger

Postgres schema for accounts, postings, and balances with invariant checks in transactions.

PostgreSQLStripe
03
Stripe Connect

Onboarding, PaymentIntents, transfers, and webhook-driven reconciliation with idempotency keys.

Stripe ConnectWebhooks
04
Holds & disputes

State machine ties cancellations and tickets to withdrawal locks visible in UI.

PostgreSQLProduct
05
Migration & SEO

Next.js migration preserved URLs and improved TTFB for provider discovery pages.

Next.jsPerformance
System Data Flow
Ingestion
CrawlerContent Hash10K+ pages
Processing
ChunkerDeduplicatorEmbedding API
Storage
pgvectorPostgreSQLRedis Cache
Auth
Identity ProviderJWT BridgeSessions
Query
HNSW SearchRe-rankerLLM Stream
Delivery
Web AppMobile AppUsers
What we delivered

THE RESULTS

$50K+

Processed in the first three months after launch — enough real traffic to flush rounding bugs, timezone edge cases on disbursement cron, and Stripe Connect onboarding friction before scaling marketing spend.

$50K+
Stripe Volume

Processed in the first three months after launch — enough real traffic to flush rounding bugs, timezone edge cases on disbursement cron, and Stripe Connect onboarding friction before scaling marketing spend.

3
Role Dashboards

Parents, providers, and admin each interact with the same underlying ledger through different lenses — parents see spend and receipts, providers see earnings and holds, admin sees exceptions and manual overrides.

4
Wallet Features

Splits, holds, scheduled disbursements, and dispute blocks — implemented as explicit ledger states so support could answer “where is my money?” from rows, not inferred balances.

Visual documentation

SCREENS &
INTERFACES

dwulx2
dwulx2
dwulx3
dwulx3
dwulx4
dwulx4
dwulx5
dwulx5
Engineering decisions

TECH
DEEP DIVE

LED
Ledger-first balances

Never store a single floating “balance” column without postings — support and audits require explainability.

Stripe webhooks were idempotent keyed by event ID to survive retries safely.

NXT
Next.js rewrite

Server components and routing improved SEO for parent acquisition without a separate marketing site.

Three dashboards shared components but not data loaders to avoid accidental data leaks.

Next Case Study
Mobile App
FundsforNGOs

Grant discovery mobile app

FlutterDartProvider
Start a project

LET'S
BUILD
SOMETHING.

We take on a small number of projects at a time. If the problem is hard, we're interested.

Email
hello@techmusketeers.com
Response time
Within 24 hours
Availability
Open for new projects · 2025