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.
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.
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.
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.
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.
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.
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.
One app instead of a split frontend/backend - simpler to build, deploy, and hand off to the client.
Catches mistakes before they ship and keeps the styling consistent across three very different dashboards.
Database, login, file storage, and access rules in one place, with Postgres underneath instead of a proprietary black box.
Handles video conversion and playback so courses load smoothly without the client needing their own video infrastructure.
Lets the client edit bilingual marketing copy themselves, without a developer, after handoff.
Flags errors in production before a student or teacher has to report them.
Blocks bot signups on the registration form without making real users solve puzzles.
Automated tests around the payment-verification and role logic, the two places a bug would matter most.
Makes the site installable like an app, useful on the patchier mobile connections common in the region.
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.