Skip to content

Learn by Build — Online Learning Landing Page

An early practice build: a landing page for learning by doing

Learn by Build is one of the first projects I built when I started out. It is a landing page for an imagined learning platform where students learn by building real projects. The aim was to practise turning a bold design into clean, reusable components, not to ship a finished product.

Type
Practice project · landing page
Role
Design & front-end build
Core stack
Next.js 16 · React 19 · TypeScript · Tailwind CSS v4
Focus
Layout, components, visual design
Learn by Build — Online Learning Landing Page — interface screenshot

The problem

Early on, it is easy to build pages as one long file where every button and badge is styled by hand. The page looks right once, but every change means finding and fixing the same styles in several places.

This project was a chance to practise the opposite: take a busy, colourful design and build it from a small set of shared parts, so the page stays consistent as it grows.

What I built

A Next.js 16 App Router site in TypeScript, styled with Tailwind CSS v4 and two custom display fonts, and deployed on Vercel.

  • Hero: a dark panel with a bold headline, two calls to action, student avatars with a rating, and a 3D “LBY” illustration with floating streak and “completed” cards.

  • Popular courses: three colour-coded cards for HTML, CSS and JavaScript, each with a category badge, difficulty level, progress bar and a Continue or Locked button.

  • Promo section: a yellow block with the platform’s benefits as a checklist and a sign-up button.

  • HTML reference page: a searchable list of HTML guides and elements, with deprecated and experimental elements clearly marked.

The technical decisions, and why

Shared buttons and badges

Buttons and badges are built once with class-variance-authority, with variants for style and size, and a small cn helper merges extra Tailwind classes safely. Every button on the page comes from the same component, so a style change happens in one place.

Course cards driven by data

The course cards are rendered from an array rather than written out three times. Each course names its colour theme, and lookup maps turn that name into the card background and progress-bar colours, so adding a course means adding one object.

Search over a typed list

The HTML reference page keeps its content in a typed array of sections and items, each with an optional status. The search filter is memoised with useMemo, so typing only re-filters the list instead of rebuilding the page.

Where it landed

The landing page is live and matches the design closely on desktop. As a first project it is simple: the courses and students are placeholder content, and there is no sign-in or real course behind the buttons.

The main lesson was to build shared components first. It made the page quicker to finish and is the habit behind every later project in this portfolio.

Built with

Next.js 16React 19TypeScriptTailwind CSS v4CVAReact Icons

Related work

  • Evro AI — B2B SaaS Landing Page

    A React 19 and Vite landing page for an AI coaching startup: a header that follows the section colour, a pausable autoplay slider, and copy kept in typed data files.

  • Conversion-Focused Landing Page

    A conversion-focused landing page in React, Tailwind and GSAP — structuring the page around objections, and the technical SEO built in at build time.