A static site hosting structured learning series on software engineering and AI. Built with Nuxt 4 and deployed to Cloudflare Pages.
Live: learning.edufalcao.com
A 30-lesson series covering the fundamentals of building AI agent systems — from mental models to production deployment. Each lesson is designed for ~10 minutes of reading with practical exercises.
| Week | Theme | Days |
|---|---|---|
| 1 | Foundations — What Is an Agent? | 1–7 |
| 2 | Architecture — Designing Agent Systems | 8–14 |
| 3 | Implementation — Building Real Agents | 15–21 |
| 4 | Production — Advanced & Real-World | 22–30 |
Topics include: the agent loop, tools & function calling, context management, memory, MCP, multi-agent orchestration, debugging, testing, security, observability, cost optimization, HITL patterns, and more.
- Nuxt 4 — Vue 3 framework with static generation (
nuxt generate) - @nuxt/content — Markdown-driven content, auto-routing, Shiki syntax highlighting
- Tailwind CSS 3 — Utility-first styling (via
@nuxtjs/tailwindcss) - Cloudflare Pages — Static hosting with automatic deployments
├── app/ # Nuxt 4 app directory
│ ├── app.vue
│ ├── pages/
│ │ ├── index.vue # Hub landing page (course grid)
│ │ └── [course]/
│ │ ├── index.vue # Course homepage (hero, progress, weekly grid)
│ │ └── [slug].vue # Lesson page (sidebar, content, prev/next nav)
│ ├── components/
│ │ ├── DayCard.vue # Lesson card in the weekly grid
│ │ ├── WeekSection.vue # Weekly grouping with header
│ │ ├── LessonSidebar.vue # Sidebar navigation (all days)
│ │ ├── LessonNav.vue # Previous/Next lesson navigation
│ │ ├── ProgressBar.vue # 30-day visual progress bar
│ │ ├── SiteNav.vue # Top navigation bar
│ │ └── SiteFooter.vue # Footer with credits
│ ├── composables/
│ ├── layouts/
│ │ └── default.vue
│ └── assets/
├── content/ # Stays at root (Nuxt Content)
│ ├── courses/
│ │ └── agentic-coding.yml # Course metadata (title, weeks, colors)
│ └── agentic-coding/
│ └── day-01.md ... day-30.md
├── public/
│ └── favicon.svg # Open book favicon
├── nuxt.config.ts
├── tailwind.config.ts
└── .github/workflows/deploy.yml # CI/CD to Cloudflare Pages
-
Create the course metadata file:
# content/courses/my-course.yml title: "Course Title" description: "Short description." slug: my-course color: "#10B981" lessons: 10 weeks: - number: 1 name: "Week Name" subtitle: "Week subtitle" color: "#3B82F6"
-
Add lesson files with frontmatter:
content/my-course/day-01.md ... day-10.md -
The hub landing page and routing pick up new courses automatically.
# Install dependencies
pnpm install
# Start dev server (http://localhost:3000)
pnpm dev
# Generate static site
pnpm generate
# Preview static build
pnpm preview
# Lint and typecheck
pnpm lint
pnpm typecheckAutomatic via GitHub Actions on push to main. The workflow:
- Installs dependencies (
pnpm install --frozen-lockfile) - Generates static output (
pnpm generate) - Deploys
.output/publicto Cloudflare Pages
Required GitHub secrets:
CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID
- Theme: Dark, developer-first
- Accent: Cyan (
#00E5CC) + Magenta (#FF006E) - Typography: Space Grotesk (headings) + DM Sans (body) + JetBrains Mono (code)
- Code blocks: Shiki
github-darktheme with copy button - Responsive: Mobile-first, 2-column layout on desktop (sidebar + content)
Content is © Eduardo Falcão. All rights reserved.