Featured project

Back to work

ProCoach

Coaching marketplace — from session to payment

RoleFrontend Product Engineer
StatusProduction
TechnologyNext.js • React • TypeScript • Tailwind CSS

01 — Overview

Building the frontend that connects coaches, learners, and Stripe across multiple production APIs.

ProCoach is a sports and fitness coaching marketplace. Coaches need to publish sessions, manage enrollments, and handle payouts. Learners and parents need a reliable path to discover sessions, enroll, and pay. I owned the web client that ties these journeys together.

Surfaces involved
Marketing and public contentAuthentication and onboardingCoach session operationsCoach calendarCoach wallet

02 — Problem

The product had to hold up as a connected workflow.

The product had to support the full coaching workflow — session publishing, enrollment, payments, and payouts — while coordinating several backend services from a statically hosted Next.js frontend.

03 — My role

What I owned.

Frontend Product Engineer — Frontend Product Engineer on the ProCoach web client — product UI, UI/UX, and feature workflows. I owned frontend and UI/UX; backend was handled separately, and I contribute there when needed.

Frontend product architecture
Coach session workflows
Learner enrollment
Payment experience
API integration
Authentication-related UX
Calendar and session UX
Wallet and payout surfaces

04 — Product flow

The path a user actually takes.

I treated the frontend as the product layer: not isolated screens, but connected workflows from discovery through enrollment, checkout, confirmation, and retry states.

Conceptual product flow for this domain — not a literal system diagram.

05 — Engineering

Decisions worth explaining.

01

Static hosting shaped routing and authentication architecture.

02

Payment was implemented as a stateful product workflow rather than a standalone checkout screen.

03

Feature-specific state was kept close to the workflow instead of introducing a large global state library.

05.1 — Architecture

How the pieces sit together.

06 — Challenges

What shaped the build.

Challenge

Reliable paid enrollment

What it meant

Enrollment could involve the schedules API, payments API and Stripe succeeding at different stages. The frontend therefore had to manage the transition from enrollment review to checkout and then payment confirmation/retry rather than treating payment as a single UI action.

Challenge

Static hosting with dynamic product workflows

What it meant

The application was designed as a static Next.js export while still supporting dynamic session and enrollment URLs. Routing and fallback behaviour therefore had to work within the static hosting model.

Challenge

Multiple API services

What it meant

The frontend consumes separate services for authentication/profile, schedules and payments, requiring a consistent client-side integration layer and session handling.

Challenge

Timezone-sensitive session information

What it meant

Session dates and times need to remain meaningful across user-facing scheduling and calendar views, requiring deliberate date parsing and formatting.

07 — Outcome

What shipped.

Production

Production-intended product UI with real API and payment integrations

Qualitative — no performance or business metrics are claimed here.

Delivered a substantial production-shaped frontend for a two-sided coaching marketplace.
Connected real product workflows across authentication, sessions, enrollment and payments.
Implemented a real payment experience rather than a static checkout mock.
Created distinct coach and learner experiences around the same product.

A production-shaped marketplace frontend connecting real coaching, enrollment, and payment workflows — without claiming unverified business metrics.

The repository contains production-oriented configuration, multiple API environments, Stripe integrations, CSP handling and static deployment configuration. Exact live traffic and business metrics are not established by the repository.

In the product

Next.js App Router with static export

Feature-level hooks and views

REST API integration across multiple service domains

JWT and OTP authentication flows

Stripe Embedded Checkout

Stripe Connect frontend surfaces

Client-side payment confirmation and retry handling

URL-driven deep links and filters

Responsive session and dashboard interfaces

Integrated and orchestrated existing backend services from the frontend. No backend service ownership is claimed from this repository.

08 — Learnings

I treated the frontend as the product layer: not isolated screens, but connected workflows from discovery through enrollment, checkout, confirmation, and retry states.
1 of 8 · OverviewNext →