LOKAL
Lokal.cartCLIENT
Lokal traveler home: ask a question, popular questions in Paris, stories from locals (demo data)
TRAVELER HOME · DEMO DATA
PostcardLokal · Built and through client QA

React Native marketplace · client

Lokal

A marketplace app where travelers pay to chat with verified locals for honest city advice, and locals earn from what they know.

Built and through client QA

When
May – Jul 2026
My part
Built the mobile app (all 100 commits), led the team on the backend and the web app, and built the admin console
Credit
Built with Creative Mantra developers; I reviewed and merged their 41 pull requests on the web app. Screens shown run locally on demo data.
PostcardLokal · Built and through client QA
Next stop: Backend ↓
App screens
112
Admin modules
~30
Team commits
390+
E2E test files
53
React Native + ExpoTypeScriptZustandNode + ExpressMySQLStripe + Stripe ConnectFirebase pushApple + Google sign-inGemini API
01_Backend13 MAY 2026

Chapter 1 of 8 ·

Payments, email and notifications from day one

A two-sided marketplace needs money moving in both directions, so the backend started with payments, email and push notifications in place, split into 24 route modules.

PostcardBackend · 1 of 8
Next stop: The app ↓
PostcardBackend · 1 of 8
02_The_app27 MAY 2026

Chapter 2 of 8 ·

One app, two kinds of user

The app moved from a React web prototype to React Native. Travelers search cities, browse locals' stories and open paid chats. Locals publish stories that expire, answer questions and get paid.

  • Paid chats with quiet hours and daily limits
  • A verification flow with ID upload to become a local
  • Ranked city search and a live "city pulse"

$ git log Initial commit

PostcardThe app · 2 of 8
Next stop: Web app ↓
City search with stories from locals and cities to explore
EXPLORE CITIES
A local's story: tapas crawl in Gràcia
A LOCAL'S STORY
PostcardThe app · 2 of 8
03_Web_app27 MAY 2026

Chapter 3 of 8 ·

The same product in a browser

A full React web app for travelers and locals alongside the phone app: sign-up with email codes or Google and Apple, chats, stories, earnings and payouts, with 53 Playwright end-to-end tests. I ran the repo and merged the team's 41 pull requests.

$ git log feat: implement OAuth authentication flow with Google and Apple support, including user onboarding and account management screens.

PostcardWeb app · 3 of 8
Next stop: Push ↓
A local's public profile with expertise and stories
LOCAL PROFILE
PostcardWeb app · 3 of 8
04_Push9 JUN 2026

Chapter 4 of 8 ·

Your local replied

Push notifications on iOS and Android, so a traveler hears back while they're still standing in the street they asked about.

$ git log feat: implement device token management and FCM integration for push notifications

PostcardPush · 4 of 8
Next stop: Payouts ↓
Paid chat between a traveler and a local in Paris
PAID CHAT
PostcardPush · 4 of 8
05_Payouts11 JUN 2026

Chapter 5 of 8 ·

Locals get paid, properly

A wallet, tax information, withdrawals and payouts through Stripe Connect, with fees and net amounts tracked on every withdrawal and multi-currency support.

$ git log feat: implement payout support flow and tax documentation screens with router integration

PostcardPayouts · 5 of 8
Next stop: Admin ↓
Local earnings: today, this week, this month, recent transactions
EARNINGS
Local dashboard with City Pulse and stories
LOCAL DASHBOARD
PostcardPayouts · 5 of 8
06_Admin13 JUN 2026

Chapter 6 of 8 ·

A control room with thirty modules

The admin console runs the marketplace: applications to become a local, a story review queue, trust and safety, appeals, moderation rules, withdrawal requests, support tickets, city management and live platform metrics.

$ git log feat: implement admin dashboard modules including Escalations, SystemHealth, AuditLog, PlatformMetrics, Appeals, Policies, and ModerationRules

PostcardAdmin · 6 of 8
Next stop: Client QA ↓
Admin console: ecosystem overview (demo data)
ECOSYSTEM OVERVIEW
Story review queue
STORY REVIEW
PostcardAdmin · 6 of 8
07_Client_QA3 JUL 2026

Chapter 7 of 8 ·

Through the client's test rounds

The client ran structured test journeys through the app. Drafts now save themselves, newly approved locals get a welcome moment, and the app reached version 1.0.4.

PostcardClient QA · 7 of 8
Next stop: Idempotency ↓
PostcardClient QA · 7 of 8
08_Idempotency8 JUL 2026

Chapter 8 of 8 ·

Never charge twice, never send twice

On a flaky phone connection a retry must not mean a second charge or a duplicated message, so payments and messages are idempotent. Admins get moderation, appeals and safety reports.

$ git log feat: add idempotency for payments and chat messages, implement banking data validation, and normalize OAuth error codes

PostcardIdempotency · 8 of 8
Next stop: TrainerAI ↓
Trust, safety and payments
TRUST & SAFETY
Platform metrics
PLATFORM METRICS
PostcardIdempotency · 8 of 8
Continue?NEXT
TrainerAI welcome screen: Welcome to trainer.ai, your instant AI trainer

Next cartridge

TrainerAI

An AI fitness coach app: answer six questions and get a personalised daily diet plan with calories and macros for every meal.