Skip to content
Back to Hub
0/10 complete
Specialization Track

Frontend Engineer Path

Learn how production UI teams think: user journeys, semantic markup, design systems, shadcn and Carbon-style patterns, visual language, rendering, data, forms, performance, and release safety.

10 lessons
3 phases
0 official source families

Certificate Lane

Docs-Driven Specialization Review

Complete the authored lessons, finish the track assessment, and pass at 80%+ to unlock certificate eligibility.

Certificate in progress
Coursework

0/10

0% complete

Assessment

not started

Certificate

Locked

locked

Lesson Flow

Flow Timeline

0/10 lessons done

Next up

Product Thinking and UI States

Product and UI Foundations

Product and UI Foundations

Product Thinking and UI States

Pending

Step 1

Product and UI Foundations

Semantic HTML and Accessibility

Pending

Step 2

Product and UI Foundations

Design Systems, Tokens, and Layout

Pending

Step 3

Product and UI Foundations

Design Systems in Practice: shadcn, Carbon, and Product UI Patterns

Pending

Step 4

Product and UI Foundations

Visual Language: Typography, Spacing, Icons, and Stroke Systems

Pending

Step 5

Components, Data, and Interaction

React Components and State Boundaries

Pending

Step 6

Components, Data, and Interaction

Routing, Rendering, Data Fetching, and Caching

Pending

Step 7

Components, Data, and Interaction

Forms, Mutations, and Recovery Paths

Pending

Step 8

Performance and Release Confidence

Performance, Testing, and Release Confidence

Pending

Step 9

Performance and Release Confidence

Capstone: Production Frontend Delivery

Pending

Step 10

Phase 1

Product and UI Foundations

Start with user journeys, semantic structure, accessibility, and design-system discipline before component complexity appears.

Phase 2

Components, Data, and Interaction

Move from static screens into component boundaries, rendering decisions, mutations, and forms that behave correctly.

Phase 3

Performance and Release Confidence

Finish by optimizing, testing, and packaging the frontend so another engineer would trust it in production.

Lesson 1 of 10

Product Thinking and UI States

Frontend work starts before components. A strong UI begins with a clear user goal, a clear page purpose, and a clear map of every state the interface can enter.

Production teams do not design only for the happy path. They design for loading, empty, error, permission, and success states because those are what real users actually hit.

If you can name the state model before you code, your UI will be more stable and your components will stay simpler.

ui-states.ts
1type DashboardState = 2 | "idle" 3 | "loading" 4 | "ready" 5 | "empty" 6 | "error"; 7 8function getScreen(state: DashboardState) { 9 if (state === "loading") return "Show skeleton"; 10 if (state === "empty") return "Show empty prompt"; 11 if (state === "error") return "Show recovery action"; 12 return "Show dashboard"; 13}
Real-World Scenario

A startup needs a customer dashboard that must work for first-time users, power users, and users whose data fetch fails halfway through.

What you learned
  • Map the product goal before coding the screen.
  • Design the non-happy states intentionally.
  • Clear state models reduce accidental UI complexity.
Build Mission

Choose one real page such as an admin dashboard or onboarding flow and write every state it can enter before you build it.

Check Yourself
  • What happens when data has not loaded yet?
  • What happens when the user has no data?
  • What action should the user be able to take from an error state?
Definition of Done
  • The page has an explicit state map, not only a visual mockup.
  • Every major state has a user action or explanation attached to it.
  • Another engineer can read the state model and predict the UI behavior.
Lesson 2 of 10

Semantic HTML and Accessibility

Semantic HTML gives the browser and assistive technologies a real description of the interface. That makes the UI easier to navigate, maintain, and test.

Accessibility is not a separate polish pass. It begins with correct structure, strong labels, meaningful headings, focus styles, and predictable keyboard behavior.

Strong frontend engineers use semantics to lower complexity, not just to satisfy a checklist.

semantic-dashboard.html
1<main> 2 <header> 3 <h1>Project Dashboard</h1> 4 </header> 5 6 <section aria-labelledby="active-projects"> 7 <h2 id="active-projects">Active projects</h2> 8 <ul> 9 <li>Accessibility audit</li> 10 <li>Billing redesign</li> 11 </ul> 12 </section> 13</main>
Real-World Scenario

Your team must pass an accessibility review before a government client will approve rollout of the frontend.

What you learned
  • Semantic structure helps users, search engines, and engineers.
  • Good accessibility starts with HTML, not only ARIA.
  • Labels, headings, and focus behavior are part of the frontend contract.
Build Mission

Take one page from your product idea and replace vague containers with semantic sections, headings, and meaningful labels.

Check Yourself
  • Why is heading order important for navigation?
  • When should you prefer semantic elements over generic containers?
  • What would a keyboard-only user need to operate the screen confidently?
Definition of Done
  • The page structure is semantic and easy to scan.
  • Interactive elements can be reached and understood by keyboard.
  • Labels and headings explain intent instead of relying on visual layout alone.
Lesson 3 of 10

Design Systems, Tokens, and Layout

CSS quality at scale comes from systems. Reusing a spacing scale, color tokens, type rules, and component patterns makes the UI predictable and easier to evolve.

Layout should express hierarchy and intent. Flexbox, grid, gap, and max-width are engineering tools, not decoration.

Once a team skips tokens and patterns, every new feature becomes harder to align and review.

tokens-and-layout.css
1:root { 2 --bg: #08111f; 3 --panel: #0f1b31; 4 --text: #e6edf7; 5 --accent: #f5b83a; 6 --space-4: 1rem; 7 --space-6: 1.5rem; 8} 9 10.card-grid { 11 display: grid; 12 grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); 13 gap: var(--space-4); 14}
Real-World Scenario

Three frontend engineers are shipping new pages weekly, and visual drift has started causing design bugs and review churn.

What you learned
  • Tokens keep visual decisions consistent.
  • Layout is a system of relationships, not a bag of random values.
  • Reusable patterns lower review and maintenance cost.
Build Mission

Create a mini token set for color, spacing, and type, then rebuild one section of a page using only those tokens.

Check Yourself
  • Which decisions should become tokens instead of ad hoc values?
  • What layout pattern will survive if more cards are added later?
  • Why does consistency increase product trust?
Definition of Done
  • The page uses reusable tokens instead of repeated raw values.
  • Layout remains stable as content grows or shrinks.
  • At least one component can be reused on a second screen without redesign.
Lesson 4 of 10

Design Systems in Practice: shadcn, Carbon, and Product UI Patterns

Not every design system serves the same kind of product. A fast-moving startup may prefer composable primitives like shadcn/ui, while a large enterprise design organization may need stronger governance and documentation similar to IBM Carbon.

The lesson is not 'copy a library and stop thinking.' The lesson is to study why different systems exist, what constraints they optimize for, and how those choices affect speed, consistency, and long-term maintainability.

Strong frontend engineers can analyze other websites, identify repeatable patterns, and then translate those patterns into a design system that fits their own product instead of blindly cloning visuals.

design-system-fit.js
1const systemFit = { 2 startupUi: ["speed", "composability", "small-team velocity"], 3 enterpriseUi: ["governance", "accessibility", "cross-team consistency"], 4 decision: "choose patterns that match the product and team size", 5};
Real-World Scenario

Your team is building both a public-facing startup site and an internal B2B dashboard, so the design system must support speed without collapsing into inconsistency.

What you learned
  • Design systems should match product constraints and team structure.
  • shadcn/ui and IBM Carbon represent different operating models, not simply different looks.
  • Studying other websites is useful when you analyze patterns, not when you cargo-cult visuals.
Build Mission

Audit three websites or apps, compare their navigation, spacing, component consistency, and interaction patterns, then explain what kind of design system each one implies.

Check Yourself
  • Why would a startup choose a lighter-weight component system than an enterprise platform team?
  • What does Carbon optimize for that a fast startup might not need yet?
  • How do you turn visual inspiration into reusable product rules instead of one-off copies?
Definition of Done
  • The learner can compare at least two real design system strategies with concrete tradeoffs.
  • Website analysis produces reusable rules, not vague inspiration boards.
  • A justified choice is made about whether the product needs primitives, stricter system governance, or a hybrid.
Lesson 5 of 10

Visual Language: Typography, Spacing, Icons, and Stroke Systems

Interfaces feel coherent when their visual language is systematic. Typography scale, spacing rhythm, radius, shadows, icon style, and stroke weight should work together as one language.

Stroke systems matter more than many teams realize. If icon strokes, borders, dividers, and illustrations all use different line weights, the UI feels noisy even when the layout is technically correct.

A strong visual system makes new screens cheaper to design because the team is no longer inventing the look on every feature.

visual-language.css
1:root { 2 --font-display: "Sora", sans-serif; 3 --space-2: 0.5rem; 4 --space-4: 1rem; 5 --radius-card: 1rem; 6 --stroke-ui: 1px; 7 --stroke-icon: 1.75; 8}
Real-World Scenario

A product looks 'almost right' but still feels inconsistent because icons, borders, headings, and spacing were chosen independently by different people.

What you learned
  • Visual consistency depends on a full language, not isolated colors.
  • Stroke and icon systems are part of the design system, not separate polish work.
  • Typography and spacing choices affect perceived trust and clarity.
Build Mission

Create a mini visual-spec sheet for one product that includes type scale, spacing rhythm, radius rules, icon style, and stroke weights.

Check Yourself
  • What happens when icons and borders use inconsistent stroke weights?
  • How does spacing rhythm change the perceived professionalism of a screen?
  • Which visual tokens should remain fixed across marketing and product surfaces?
Definition of Done
  • A visual language is defined with reusable values and examples.
  • Icons, borders, and strokes follow a consistent rule set.
  • A second screen can be built without inventing new visual decisions.
Lesson 6 of 10

React Components and State Boundaries

Component design is about boundaries: what owns state, what receives props, and what can stay purely presentational.

Messy frontend code usually comes from unclear ownership. If several components can mutate the same truth in inconsistent ways, the UI becomes fragile.

Good React architecture keeps local state local, shared state explicit, and side effects visible.

component-boundaries.tsx
1type Task = { id: string; title: string; done: boolean }; 2 3function TaskList({ tasks }: { tasks: Task[] }) { 4 return tasks.map((task) => ( 5 <div key={task.id}>{task.title}</div> 6 )); 7} 8 9function Dashboard() { 10 const [tasks, setTasks] = useState<Task[]>([]); 11 return <TaskList tasks={tasks} />; 12}
Real-World Scenario

A multi-step onboarding flow has become brittle because every step mutates shared state in a different way.

What you learned
  • Clear ownership keeps state from becoming chaotic.
  • Separate display logic from orchestration when possible.
  • Shared state should be deliberate, not accidental.
Build Mission

Split one complex screen into components, then mark which component owns which piece of state and why.

Check Yourself
  • What should stay local to a component?
  • When is lifting state up the right choice?
  • Which component should be easiest to unit test and why?
Definition of Done
  • State ownership is documented and easy to explain.
  • Presentation components can be reused with different data.
  • Side effects are not hidden inside random child components.
Lesson 7 of 10

Routing, Rendering, Data Fetching, and Caching

Frontend engineers need a rendering model, not just component syntax. In Next.js, routing, server rendering, client interactivity, and fetch caching choices affect performance and correctness.

A page does not always need the same data strategy. Some data should be cached, some should revalidate periodically, and some should always be fresh.

Production frontend work includes choosing those boundaries intentionally rather than defaulting everything to client-side fetching.

rendering-strategy.tsx
1export default async function Page() { 2 const marketingData = await fetch("https://example.com/api/marketing", { 3 cache: "force-cache", 4 }); 5 6 const dashboardData = await fetch("https://example.com/api/dashboard", { 7 cache: "no-store", 8 }); 9 10 return <div>Choose the right caching strategy for each surface.</div>; 11}
Real-World Scenario

Marketing content changes weekly, but billing and permissions data must always reflect the latest server state.

What you learned
  • Different UI surfaces need different rendering and caching choices.
  • Server-rendered and client-interactive concerns can coexist cleanly.
  • Data strategy is part of frontend architecture.
Build Mission

Take two pages from the same product and choose which data should be cached, revalidated, or always fresh.

Check Yourself
  • Which data can safely be cached?
  • What breaks if a sensitive dashboard renders stale data?
  • Why is a single global fetching strategy usually a mistake?
Definition of Done
  • Each page has an explicit rendering and caching choice.
  • The team can explain why a surface is static, revalidated, or dynamic.
  • Data-fetching strategy improves user experience without hiding correctness risks.
Lesson 8 of 10

Forms, Mutations, and Recovery Paths

Forms are where product, validation, backend contracts, and trust meet. A good form feels obvious, resilient, and fast.

Mutation flows must account for disabled buttons, validation, loading, optimistic updates, success states, and recovery after failure.

Many frontend bugs are really bad mutation-state handling rather than styling issues.

mutation-states.ts
1type SaveState = "idle" | "saving" | "success" | "error"; 2 3function getButtonLabel(state: SaveState) { 4 if (state === "saving") return "Saving..."; 5 if (state === "success") return "Saved"; 6 if (state === "error") return "Try again"; 7 return "Save changes"; 8}
Real-World Scenario

An internal admin form saves sensitive billing settings, so mistakes, double submits, and unclear error states are costly.

What you learned
  • A mutation flow needs more than one button and one request.
  • Validation and recovery are part of UX quality.
  • Trust increases when the interface explains what is happening.
Build Mission

Design one form flow with explicit client validation, server validation, loading feedback, and a visible retry path.

Check Yourself
  • What should the UI say while a mutation is in progress?
  • How does the user recover after a server error?
  • Which validations belong in the client and which must still happen on the server?
Definition of Done
  • Form shows validation, loading, success, and failure states clearly.
  • Retry and recovery are possible without refreshing the page.
  • Client-side checks complement rather than replace server validation.
Lesson 9 of 10

Performance, Testing, and Release Confidence

Frontend quality is measured after the UI ships, not only before. Slow renders, broken flows, and hidden regressions all erode trust quickly.

Teams need lightweight but real confidence: critical-path tests, performance measurements, and monitoring that shows whether the release is healthy.

The point is not maximal ceremony. It is fast feedback and stable delivery.

frontend-release-checklist.js
1const releaseChecklist = [ 2 "Key flow tested", 3 "Large bundle checked", 4 "Accessibility smoke test passed", 5 "Monitoring enabled", 6];
Real-World Scenario

A launch went live, conversion dropped, and nobody could tell whether the issue was layout, backend latency, or a failed event hook.

What you learned
  • Performance and testing are delivery concerns, not post-launch extras.
  • Measure the important user paths first.
  • A small release checklist beats guesswork.
Build Mission

Write a release checklist for one user-facing feature that includes performance, regression, and observability checks.

Check Yourself
  • Which user flow would hurt most if it regressed?
  • How will you know the UI got slower after release?
  • What does frontend monitoring need to distinguish?
Definition of Done
  • Critical path has test coverage or scripted verification.
  • Release includes at least one measurable performance check.
  • Monitoring can tell whether the problem is UI, network, or API-related.
Lesson 10 of 10

Capstone: Production Frontend Delivery

Now combine the full frontend stack into one production-ready surface: semantic structure, strong layout, clear component boundaries, data strategy, mutations, and release safety.

A complete frontend capstone should feel like product engineering, not a design exercise. It needs states, tradeoffs, and instrumentation.

This is where the frontend path becomes portfolio-grade proof.

frontend-capstone-dod.ts
1const definitionOfSuccess = { 2 accessibility: true, 3 responsive: true, 4 metricsVisible: true, 5 criticalFlowTested: true, 6};
Real-World Scenario

You are the frontend owner for a feature launch and need to present the product, architecture choices, and release-readiness to the rest of the team.

What you learned
  • Frontend engineering is product delivery plus reliability, not only screens.
  • A capstone should prove judgment, not just style.
  • Production readiness needs states, metrics, and safe release thinking.
Build Mission

Ship a real frontend surface such as a dashboard, admin panel, or onboarding app with a written Definition of Done and a short release note.

Check Yourself
  • What would make this frontend feel production-ready to another engineer?
  • Which state or error path still feels underdesigned?
  • How would you verify the release worked after users arrive?
Definition of Done
  • Capstone includes semantic UI, responsive layout, real state handling, and instrumented flows.
  • Another engineer can review the release plan and understand what will be monitored.
  • The project is coherent enough to demo and defend in an interview or review.
Back to Curriculum