Back to CurriculumWeek 9

Full-Stack Basics

Building a web UI for AI tools. This week you'll learn to create interactive front-end interfaces for the AI models you've already built — turning Python scripts into real applications that users can interact with in a browser.

HTML/CSSReactNext.jsAPI RoutesDeployment
Lesson Guide

Daily Lessons

Five days of structured lessons that take you from zero web development knowledge to deploying a full-stack AI application.

Day 1

HTML & CSS for AI Developers

Learning Objectives

  • Understand the structure of an HTML document (DOCTYPE, head, body)
  • Use semantic HTML tags (header, main, section, article, footer)
  • Style layouts with CSS Flexbox and Grid
  • Create responsive designs with media queries
  • Build a static landing page for an AI education tool

Activities

  • Guided walkthrough: Build a 'Study Buddy' landing page from scratch
  • Pair exercise: Style a quiz results page with CSS Grid
  • Mini-challenge: Make your page fully responsive (mobile, tablet, desktop)
  • Reflection: How does UI design impact learning tool effectiveness?
Day 2

JavaScript Essentials & DOM Manipulation

Learning Objectives

  • Write JavaScript functions, variables, and control flow
  • Manipulate the DOM to update page content dynamically
  • Handle user events (click, submit, input)
  • Use fetch() to call external APIs
  • Understand async/await for handling API responses

Activities

  • Live coding: Build an interactive flashcard component
  • Exercise: Create a 'word of the day' feature that fetches from an API
  • Lab: Add form validation to the Study Buddy signup page
  • Discussion: How JavaScript interactivity enhances learning experiences
Day 3

React Crash Course

Learning Objectives

  • Understand component-based architecture
  • Build functional components with JSX syntax
  • Manage state with useState and side effects with useEffect
  • Pass data between components via props
  • Handle forms and user input in React

Activities

  • Workshop: Convert the static landing page into React components
  • Exercise: Build a reusable 'QuestionCard' component with props
  • Lab: Create a multi-step quiz form with React state management
  • Code review: Peer review each other's component architecture
Day 4

Next.js & API Routes

Learning Objectives

  • Set up a Next.js project with the App Router
  • Create pages and navigate between them with file-based routing
  • Build API routes to serve as a backend for your AI tools
  • Connect your React frontend to your Python AI backend via API routes
  • Use environment variables securely for API keys

Activities

  • Guided setup: Initialize a Next.js project and deploy structure
  • Lab: Build an API route that calls your AI quiz generator (from Week 8)
  • Exercise: Create a 'Chat with AI Tutor' page that streams responses
  • Workshop: Connecting Python APIs to Next.js using fetch and route handlers
Day 5

Deployment & Full-Stack Integration

Learning Objectives

  • Deploy a Next.js application to Vercel
  • Configure environment variables in production
  • Connect a database (PostgreSQL) for persistent storage
  • Test your deployed application end-to-end
  • Set up a custom domain and SSL

Activities

  • Deployment lab: Push your AI tool to Vercel and verify it works
  • Exercise: Add a PostgreSQL database to store quiz results
  • Demo day: Present your deployed full-stack AI tool to the cohort
  • Retrospective: What did you learn? What would you improve?
Coding Exercise

Week 9 Project: AI Tool Dashboard

Build a full-stack web dashboard that lets users interact with multiple AI education tools you've built throughout the bootcamp.

Project Brief

Create an "AI Education Toolkit" dashboard — a Next.js application that provides a unified web interface for at least two AI tools you've previously built. Users should be able to navigate between tools, submit prompts, see AI-generated results, and optionally save their session history to a database. The goal is to demonstrate your ability to build a full-stack application that connects a modern frontend to AI-powered backends.

Requirements

Next.js app with at least 3 pages (Home, Tool 1, Tool 2)
Responsive design that works on mobile and desktop
At least 2 AI tool integrations via API routes
User input forms with client-side validation
Loading states and error handling for API calls
Deployed to Vercel with a working production URL
Clean, well-organized component architecture
README with setup instructions and screenshots

Grading Rubric

CriteriaExcellent (A)Good (B)Needs Work (C)
UI/UX Design (25%)Polished, responsive, intuitive navigation, consistent stylingClean layout, mostly responsive, minor inconsistenciesBasic layout, not responsive, inconsistent styling
AI Integration (25%)2+ tools work seamlessly, streaming responses, smart error handling2 tools work, basic error handling, some UX friction1 tool works, no error handling, poor integration
Code Quality (25%)Clean components, TypeScript, good naming, reusable patternsReasonable structure, some redundancy, mostly clear codeMessy code, large components, poor naming conventions
Deployment (25%)Live on Vercel, env vars configured, DB connected, README completeDeployed but minor issues, basic READMENot deployed or broken in production

Stretch Goals

  • Add user authentication (NextAuth.js) so users can save their sessions
  • Implement dark/light mode toggle with system preference detection
  • Add a 'History' page that stores and displays previous AI interactions
  • Use streaming responses for a real-time chat-like experience
Reference

Key Concepts

Quick reference for the core concepts covered this week.

Component Architecture

Break your UI into small, reusable pieces. Each component should do one thing well. Pass data down via props, and manage local state with useState. Think of components like teaching units — self-contained but composable.

API Routes

Next.js API routes let you build a backend inside your frontend project. Create a file in app/api/ and export handler functions. Use these to securely call AI APIs without exposing keys to the browser.

Responsive Design

Use Tailwind's responsive prefixes (sm:, md:, lg:) to create layouts that adapt to any screen size. Start with mobile-first design, then add complexity for larger screens.

Environment Variables

Store sensitive data (API keys, database URLs) in .env.local files. Access them with process.env.KEY_NAME in server-side code. Prefix with NEXT_PUBLIC_ only for client-side access.

Starter Code

Code Snippets

app/api/generate/route.ts
import { NextRequest, NextResponse } from "next/server";

export async function POST(req: NextRequest) {
  const { prompt, tool } = await req.json();

  // Validate input
  if (!prompt || !tool) {
    return NextResponse.json(
      { error: "Missing prompt or tool selection" },
      { status: 400 }
    );
  }

  // Call your AI backend
  const response = await fetch(process.env.AI_API_URL!, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${process.env.AI_API_KEY}`,
    },
    body: JSON.stringify({ prompt, tool }),
  });

  const data = await response.json();
  return NextResponse.json(data);
}
app/components/ToolCard.tsx
"use client";

interface ToolCardProps {
  title: string;
  description: string;
  icon: React.ReactNode;
  href: string;
}

export default function ToolCard({
  title, description, icon, href
}: ToolCardProps) {
  return (
    <a
      href={href}
      className="block p-6 rounded-xl border border-gray-200
                 hover:border-teal-400 hover:shadow-lg
                 transition-all duration-200 group"
    >
      <div className="w-10 h-10 rounded-lg bg-teal-50
                      flex items-center justify-center mb-4
                      group-hover:bg-teal-100 transition-colors">
        {icon}
      </div>
      <h3 className="font-bold text-gray-900 mb-1">{title}</h3>
      <p className="text-sm text-gray-500">{description}</p>
    </a>
  );
}