Production course platform for selling video programs online. I owned the frontend architecture, payment integration, CMS modeling, and authentication flows while adapting to evolving business requirements over time.
TypeScript
React
Next.js
Tailwind CSS
Framer Motion
Stripe
GraphQL
Hygraph CMS
Zustand
Nodemailer
Vimeo SDK
FFMpeg
client
NOISM Hairculture
platform
Digital Learning / LMS
role
Development, Product
status
Production
01
Assessment
1.1 / Overview
Digital Learning Platform
NOISM Academy is a full-stack learning platform built to deliver premium video education in hair extensions and braiding techniques. It bridges the gap between structured online video courses and direct offline offerings like 1:1 masterclasses. Designed for aspiring beauty professionals, the platform targets motivated learners who invest seriously in specialized techniques. It is currently live, hosting flagship video programs with a scalable roadmap for catalog expansion.
Role: Lead Full-Stack Architect
I led the project end-to-end — acting as frontend architect, full-stack developer, and technical decision-maker.
Product Thinking
Translating business goals into a structured digital product.
Frontend Architecture
Preparing build-ready layouts and implementing Next.js logic.
Backend & CMS
Modeling complex relational content structures in Hygraph.
Payments & Auth
Secure integration of Stripe Webhooks and Clerk Identity.
Infrastructure
Handling deployment, performance, and video delivery SDKs.
Decision Making
Navigating technical trade-offs in a solo environment.
Architect's Perspective
The project required balancing product thinking, technical architecture, and visual execution within a solo development environment.
1.2 / Visual Identity
Visual Harmony & Premium Experience
To reflect the premium positioning of NOISM, the UI was carfully designed around the font family of Akzidenz-Grotesk. The focus remained on high-contrast visual harmony, utilizing generous whitespace and premium imagery to elevate the educational content beyond a standard LMS.
H2
Akzidenz-Grotesk Extended
Body
Akzidenz-Grotesk Light
1 / 3
Scroll to explore
Minimalist Grid
Intentional use of negative space to focus on technique.
Content First
Large-scale video assets and professional stylizing photography.
Brand Depth
A cohesive light aesthetic for a high-end salon feel.
02
The Problem
Business KPIs
Enable Premium Sales
Catalog Scalability
Offline Booking Sync
Product Maintainability
Key Technical & Strategic Challenges
I led the project end-to-end — acting as frontend architect, full-stack developer, and technical decision-maker — personally responsible for every high-stakes architectural choice and their downstream consequences.
01
Trust & Value Perception
Premium pricing requires an interface that communicates credibility. The UX had to bridge the gap between "online video course" and "professional investment."
02
Non-Technical Ownership
The client needed full autonomy over descriptions, pricing, and lesson structures without touching the codebase.
03
Maintainability
Architecture had to be extensible to support a growing catalog of courses without requiring structural rewrites or developer intervention.
04
Media Performance
Video content required professional-grade optimization to ensure seamless delivery while maintaining high fidelity for visual techniques.
03
The Solution
3.1 / Architecture Overview
Building on Managed Infrastructure
The platform was built as a unified full-stack application using Next.js (Pages Router). To minimize infrastructure overhead while maintaining complex data relations, I bypassed a traditional database server in favor of a managed GraphQL Content Layer.
This architecture treats the CMS not just as a blog, but as a relational engine that governs course lessons, user ownership, and video metadata.
Technical Foundation
01
TypeScript
Type-safe architecture
02
React
Component-driven UI
03
Next.js
Unified Full-stack Framework
04
GraphQL
Relational Content API
05
Zustand
Scalable state management
06
Nodemailer
Email sending service
Why Stripe
Selected for EU Tax Compliance and a robust webhook ecosystem. Ensures purchases are confirmed server-side before course access is triggered.
Why GraphQl
Hygraph allowed for Structured Modeling without server maintenance. It empowered the client to manage course lesson order and lesson metadata independently while keeping queries extremely lightweight.
Why Next.js
Rendering Flexibility: Static generation for marketing pages, ISR for courses, SSR for real-time tasks
API Routes: For handling webhooks in both Stripe and Clerk cases
Middleware: Built-in support for custom authentication flows
Framework: A mature ecosystem and long-term maintainability
04
Key Features
4.1 / Delivered Functionality
Production Capabilities
The platform was built to handle the full lifecycle of a premium educational product—from secure discovery to transactional integrity and content delivery.
001
Authentication & Access Control
Secure user entry with role-based permissions.
Secure user entry with role-based permissions.
002
Secure Payment Flow
A robust pipeline using Stripe webhooks for processing transactions securely.
A robust pipeline using Stripe webhooks for processing transactions securely.
003
CMS-Driven Architecture
Decoupling content management from the frontend to allow updates independently.
Decoupling content management from the frontend to allow updates independently.
004
Transactional Email System
Automated communications for user actions and business notifications.
Automated communications for user actions and business notifications.
005
SEO & Metadata
Optimized for search visibility with modern search engine optimisation techniques.
Optimized for search visibility with modern search engine optimisation techniques.
006
Media Optimization
High-performance asset handling ensuring fast load times for images and smooth video playback.
High-performance asset handling ensuring fast load times for images and smooth video playback.
007
Progressive Web App
Installable app, with both desktop and mobile optimization.
Installable app, with both desktop and mobile optimization.
05
Technical Deep Dive
5.1 / System Architecture
Technical Blueprint
The system is designed around event-driven state changes. External signals — primarily payment confirmations — trigger secured API mutations that define user access levels in the content layer.
Nodemailer
Email
Stripe
Payments
Vimeo
Media
Clerk
Auth
Hygraph
CMS
Nodemailer
Email
Stripe
Payments
Vimeo
Media
Clerk
Auth
Hygraph
CMS
Next.js
version 14
Sources:Multi-tenant SaaS
Core:SSR / ISR / API Routes
Client:Premium LMS Interface
5.2 / Checkout Flow
Purchase Architecture
No access is granted from the frontend — everything depends on webhook confirmation to enforce strict server-side validation, ensuring that only authenticated and verified events trigger any changes in user permissions or resource availability.
Checkout Initialization
User selects a course and triggers the secure session creation on backend.
Zustand → Next.js API → Stripe
Payment Confirmation
User is redirected to Stripe’s secure hosted checkout page for payment processing. The frontend does not handle or confirm payment itself.
Stripe Checkout
Webhook Validation
Crucial security step: The server verifies the Stripe signature and extracts session metadata.
Next.js API & Stripe Webhooks
Access Provisioning
Final confirmation. Course access is granted only after server-side validation is complete.
Graphql Mutation
5.3 / Models & Relations
Data Mutation Strategy
Relying on relational logic and database relationships rather than simple boolean states to handle all data mutations and access control in a secure and scalable manner.
Access is declarative. We query the relationship directly. Scales effortlessly to bundles and tiered memberships.
Advantages of Relational Modeling
01
Anti-Fragile
By modeling user access through relational data instead of boolean flags (e.g., isEnrolled, hasAccess), the system avoids brittle state management. Access is derived from actual purchase relationships rather than manually maintained flags.
02
Naturally Scalable
Every purchase creates a new relational entry between a member and a course via a GraphQL mutation. There is no need for additional state synchronization or manual updates.
03
Tier-Ready
While the current model is based on single purchases, the relational structure allows easy extension into tier-based subscriptions. A tier entity can be introduced as another relation (member → tier → courses), without altering existing purchase logic.
04
Declarative Auth
Access control is expressed through declarative rules instead of imperative condition checks across components. Route protection, content visibility, and course access are derived directly from the authenticated user’s state and relational data.
5.4 / Access Pipeline
Rendering Logic & Access Control
The UI renders conditionally based on structured relational data — not local assumptions.
AuthClerk Validation
IdentityHygraph Member
RelationalCourse Link
RenderConditional UI
This pipeline ensures that all content access decisions — from dashboard visibility to individual video playback — are derived exclusively from verified authentication and relational data rather than local state or assumptions.
5.5 / Middleware
Route Protection
Authentication and authorization responsibilities are cleanly separated. Next.js middleware intercepts every request before a page renders — enforcing rules at the edge.
middleware.ts — active rules
7 rules
Protected
/dashboard(.*)auth.protect()
PROTECTED
/checkout(.*)auth.protect()
PROTECTED
/support(.*)auth.protect()
PROTECTED
Public
/Landing page
CACHED
/coursesCourse catalog
CACHED
/group-classesGroup class listings
CACHED
/1-on-1-masterclassMasterclass page
CACHED
Middleware owns identity — pages own content. No overlap.
5.6 / CMS Driven Architecture
CMS-Centric Content Flow
Content updates are deliberate, so rendering follows a build-centric philosophy.
Content lifecycle
Creation
Hygraph CMS
Course added
Structure
Modules & Lessons
Course structured
Generation
Next.js SSG
Static Assets
Revalidation
ISR Hybrid
Periodic Updates
Performance
Pure static speed
Efficiency
No runtime queries
Scalability
Handles heavy load
5.7 / Incremental Static Rendering
Hybrid Rendering
Moving from standard server-side rendering to Hybrid Static Regeneration had instant impact on performance and data traffic.
pages/course/[slug].tsx
export async function getServerSideProps() {
export async function getStaticProps() {
const course = await getCourse(params.slug);
return { props: { course }
, revalidate: 3600// Background refresh every 1hr
};
}
5.8 / Playback
Media Delivery Architecture
The media delivery architecture leverages the Vimeo Player SDK for high-quality frontend playback, server-side relational gating via Hygraph, and a custom FFmpeg CLI pipeline for video optimization, prior to Vimeo upload.
01
UI Layer
Player Experience
Interactive controls & quality switching
02
Auth Gate
Relational Ownership
Gated via Hygraph Member-to-Course link
03
Infrastructure
Vimeo Hosting
Global CDN & adaptive bitrate streaming
04
Video Optimisation
FFmpeg CLI
Custom pipelines for optimal media delivery
By offloading bandwidth management and storage complexity to Vimeo, the system prioritizes premium delivery quality while maintaining absolute control over content authorization.
5.9 / summary
Why This Architecture Matters
The system is designed to scale in features and content without increasing operational complexity.
Security
Event-Driven
Webhook-based state mutations ensure the system reacts to external triggers (payments) with 100% reliability.
Architecture
Relational
Ownership is modeled through data relationships, providing a single, declarative source of truth for access.
Operations
CMS-Controlled
Content autonomy allows for rapid updates and course management without touching a single line of code.
Infrastructure
Decoupled
Independent systems for auth, payments, and content minimize the blast radius of any single failure.
Intentional Design Goals
This architecture is foundational to achieve scale and operational simplicity by fostering horizontal expansion through new courses and future-proof monetization, all while minimizing manual intervention to empower non-technical management.
06
Outcomes & Impact
6.1 / Revenue
Market Validation
The first launched premium course has already generated revenue in the thousands (USD) range with positive user reviews.
Market Validation Phase:Complete
Validating market demand for structured, high-ticket beauty education through premium positioning and a frictionless platform experience.
Pricing StrategyPremium Filter
Product StatusRevenue-First
User TrustVerified
Operational Transformation
Reducing technical debt and manual overhead to enable sustainable and organic business growth.
Pre-Launch
Manual Coordination
Education offerings required direct human oversight. Launching new material involved heavy friction and systemic uncertainty.
Hand-led Payments
Confirmations and access grants required manual verification and direct handling of customer requests.
Result: Limited scalability & high operational pressure.
Post-Launch Engine
Event-Driven Flow
Course publishing is CMS-driven (SSG/ISR). Payments are automated via Stripe, triggering webhook-driven access provisioning instantly.
The New Client Workflow
Upload
Curate
Notify
Impact: Zero-touch revenue stream.
Autonomous Branch
The online education branch is now fully automated, allowing it to function as a 24/7 revenue engine without manual intervention.
Automated CRM
Critical events (Purchase, Access Grant, Onboarding) trigger automated transactional emails, removing the need for follow-ups.
Frictionless Scale
The client no longer handles coordination; they curate content. This shift effectively enabled a new, scalable revenue stream.
6.2 / Performance
Real-World Performance
The application achieves strong technical metrics, resulting in fast load times, smooth interactions, and a consistent experience across devices.
Lighthouse Analysis
Environment: Production / Desktop
98
Performance
80
Accessibility
100
Best Practices
92
SEO
Perception of Quality
Refined visuals, Akzidenz-Grotesk typography, and high-quality Vimeo delivery. Performance supports the premium brand positioning.
0.3s
First Contentful Paint
1.2s
Largest Contentful Paint
0ms
Total Blocking Time
0
Cumulative Layout Shift
6.3 / Autonomy
Stability & Reliability
Infrastructure designed for predictable, real-money transactions.
Encrypted
Isolated Environments
Strict separation between Development and Production via Clerk & Stripe keys.
Verified
Webhook Integrity
Stripe CLI-validated local testing ensuring 1:1 parity with live production events.
Optimal
Zero-Incident Record
100% successful payment processing with no production-level incidents to date.
Strategic Impact
Payment architecture was the most sensitive part of the system due to real-money implications, but it is now stable and predictable.
07
Lessons Learned
7.1 / Payments
Stripe & Secure Event Handling
Proper Stripe integration isn't just about the API. It's about the infrastructure around it. The complexity of signature verification and CLI forwarding is a feature, not a bug.
Environment separation
Signature verification
CLI forwarding for local development
Careful event handling
Payment systems must be event-driven and server-validated — never client-trusted.
7.2 / Database
Relational Data as Access Control
Modeling Member ↔ Course relations in GraphQL proved significantly more robust than boolean flags. By mutating ownership only after webhook confirmation, the relation becomes the absolute source of truth.
7.3 / Responsibility
Solo Product Ownership
Operating independently across product, architecture, and delivery.
The Burden
Handling fluid requirements and independent architectural vision without a technical sparring partner.
The Privilege
Full ownership of system design standards and direct accountability for the production delivery.
Solo vs Team Dynamics
Paralleling film my film production expirience: Large teams multiply output but require massive coordination. Solo work limits scale but maximizes control. This project reinforced the importance of preparation, foresight, and architectural clarity when working alone. In distributed systems, mistakes compound quickly.
7.3 / Responsibility
Future Improvements
Things I would consider if starting over right now, or by the next big junction the project might face in a future.
Backend Architecture
Move away from CMS-first constraints toward a more explicit backend layer.
Framework Direction
Reevaluate the use of Next.js — especially for a more client-driven experience.
Scalability
Define clearer separation between frontend, backend, and content systems to make future growth less coupled.