← All work

Abroad

A student-platform prototype on a non-Next.js server runtime.

Next.jsReact NativeExpoElysiaJSBunPostgreSQLSupabaseDocker ComposeRedisTurborepo
Role
Engineer
Period
Jun 2025 – Jul 2025
Status
Prototype
Stack
ElysiaJS on Bun, Next.js, Expo, Docker Compose.

5

Apps in the monorepo

146

Source files

~10,546

Lines of code

12

Commits, all Adam

The problem

A study-abroad program needed a platform spanning a marketing site, a student-facing mobile app, and internal business/admin portals — five apps sharing one backend.

Constraints

  • A short engagement window, with interns onboarding onto the codebase partway through.
  • The backend needed to run outside the Next.js request lifecycle, since it served multiple frontends including a mobile app.

What I built

A Bun-workspace monorepo with five apps: a Next.js marketing site, an ElysiaJS API on Bun, an Expo/React Native mobile app, and admin/business portals, backed by Postgres and Supabase, containerized locally with Docker Compose, Nginx, and Redis. I also authored an 846-line intern onboarding guide covering the codebase and local setup.

Architecture

ElysiaJS on Bun was chosen as a dedicated API runtime rather than Next.js Server Actions, so the same backend could serve the marketing site, the mobile app, and the admin portals without coupling any of them to Next.js's request model.

Decisions and tradeoffs

Decision

Run the API on ElysiaJS/Bun instead of folding it into the Next.js app.

Because

Five apps, including a mobile client, needed one backend that wasn't tied to a single frontend's framework.

Trade-off

It's the only project in this history on a non-Next.js server runtime, which meant less reusable tooling from other projects and a second stack to maintain expertise in.

Outcome

Status
Prototype, never shipped
Source files
146, ~10,546 lines
Apps in the monorepo
5

As of 2026-08-24

Constraint

The project's own status notes recorded unresolved errors in the admin and business portals at the time development paused. It's presented here honestly as a prototype, not a finished product.

Want the full picture, or open to talking about your own project?