Home/Work/InOnOut
2026E-LearningFull-StackMarketplace

InOnOut

A full-stack e-learning marketplace for the Lao market - students, teachers, and admins each get their own dashboard, video courses stream through Mux, and payments are checked by hand because that's how commerce actually works there.

3
User roles: student, teacher, admin
~19K
Lines of TypeScript
35
API route handlers
148
Commits over 3 months
[ THE PROBLEM ]

The client needed an e-learning platform for the Lao market - bilingual from the start, not English with a translation bolted on later. Students needed to browse and buy video courses, teachers needed to build and sell them, and someone needed to keep both sides honest.

The harder problem was payments. Most e-learning platforms assume a card or a payment gateway. In Laos, everyday commerce runs on bank transfers by QR code and a photo of the receipt sent as proof. A generic Stripe-style checkout would have been a mismatch for how people there actually pay.

So the platform needed a manual verification step built in from day one - a real workflow, not a payment gateway pretending to fit a market it wasn't built for.

[ THE SOLUTION ]

InOnOut is a single Next.js 16 application on top of Supabase for the database, authentication, and file storage. Each user's role - student, teacher, or admin - is stored directly in their login token instead of a separate lookup table, which sidesteps a class of database security bugs that role tables are prone to. Mux handles video upload and playback for course content, and Sanity powers the bilingual marketing pages so the client can edit copy themselves without needing a developer.

ARCHITECTURE FLOW
Student / Teacher / Admin
Next.js App
Supabase · Mux · Sanity
Installable as a PWA, with the offline/update layer coordinated against the login-refresh flow so the two don't fight each other
[ HOW IT WORKS ]
01

Enrollment & Roles

A student signs up and can start browsing courses right away. A teacher's account is flagged for admin approval before they can publish anything. Each role sees a completely different dashboard from the same login system.

02

Course Creation & Video

Teachers upload lesson videos, which Mux automatically converts into a format that plays smoothly on any device or connection, then serves it back through a private, secure link.

03

Manual Payment Verification

A student pays by bank transfer and uploads a photo of the receipt. An admin checks it against the bank record and approves or rejects the enrollment by hand - slower than a card payment, but it matches how people actually pay in this market.

04

Bilingual Content

Marketing pages, course descriptions, and site copy are managed in Sanity in both English and Lao, so the client can update wording themselves without touching code or waiting on a developer.

[ SCREENSHOTS ]
[ TECH STACK ]
Next.js 16 + React 19

One app instead of a split frontend/backend - simpler to build, deploy, and hand off to the client.

TypeScript + Tailwind CSS 4

Catches mistakes before they ship and keeps the styling consistent across three very different dashboards.

Supabase

Database, login, file storage, and access rules in one place, with Postgres underneath instead of a proprietary black box.

Mux

Handles video conversion and playback so courses load smoothly without the client needing their own video infrastructure.

Sanity

Lets the client edit bilingual marketing copy themselves, without a developer, after handoff.

Sentry

Flags errors in production before a student or teacher has to report them.

Cloudflare Turnstile

Blocks bot signups on the registration form without making real users solve puzzles.

Vitest

Automated tests around the payment-verification and role logic, the two places a bug would matter most.

Workbox / next-pwa

Makes the site installable like an app, useful on the patchier mobile connections common in the region.

[ WORK TOGETHER ]

Building a marketplace or platform of your own?

I build custom web platforms for businesses that need something built around how their market actually works, not a generic template. Fixed price, clean code, fast delivery.