🎓 JavaScript Foundations: From Static to Interactive
Level: Beginner • Duration: ~10–12 hours
🎯 Course Goal
By the end, students will write clean, modern JavaScript (ES6+), manipulate the DOM, handle events, validate forms, fetch API data, store state locally, and enhance their portfolio site with interactive features.
🧩 Course Structure Overview
| # | Module | Duration | Key Deliverable |
|---|---|---|---|
| 1 | Intro to JavaScript & Setup | 45m | JS file linked to portfolio, console basics |
| 2 | Variables, Types & Operators | 60m | Type demos + mini calculator |
| 3 | Control Flow | 45m | Feature flag toggles on portfolio |
| 4 | Functions & Scope | 60m | Utilities file + pure functions |
| 5 | Arrays & Objects (ES6) | 60m | Data-driven project cards |
| 6 | The DOM | 75m | Dynamic portfolio sections (create/append/update) |
| 7 | Events & Interactivity | 75m | Mobile menu, modal, tabs, or accordion |
| 8 | Forms & Validation | 60m | Contact form validation + UX feedback |
| 9 | Fetch API, Async/Await & Storage | 90m | Live data widget + localStorage state |
| 10 | Final Project | 2–3h | Interactive, data-enhanced portfolio v1.0 |
📘 Detailed Module Breakdown
MODULE 1: Intro to JavaScript & Setup
Objective: Understand where JS runs, how to include it, and use dev tools.
- Where JS runs (browser/Node),
<script>placement,defer - Console,
console.log, errors, DevTools - Strict mode, ES6 overview
Deliverable ✅ app.js linked to portfolio; log site version and greet user.
MODULE 2: Variables, Types & Operators
Objective: Work with primitives, let/const, and basic expressions.
let,const,var(why to avoidvar)- Types: string, number, boolean, null, undefined, bigint, symbol
- Template literals, arithmetic, comparison, logical operators
Mini-Project ✅ Mini price calculator (subtotal, tax, total) in console + DOM printout.
MODULE 3: Control Flow
Objective: Add logic with conditionals and loops.
if/else,switch, truthy/falsy- Loops:
for,while,for…of,Array.prototype.forEach - Guard clauses, early returns
Portfolio Task ✅ Feature flags: based on a boolean, show/hide a promo banner or beta badge.
MODULE 4: Functions & Scope
Objective: Write reusable functions; understand scope and closures.
- Function declarations vs expressions, arrow functions
- Parameters, defaults, rest/spread
- Scope (global/block/function), closures (intro)
Deliverable ✅ utils.js with 3+ pure functions (e.g., formatCurrency, slugify, clamp).
MODULE 5: Arrays & Objects (ES6 Essentials)
Objective: Manipulate structured data cleanly.
- Array methods:
map,filter,reduce,find,some/every,sort - Objects: destructuring, shorthand properties, computed keys
- JSON basics
Mini-Project ✅ Data-driven portfolio grid: render projects from an array of objects.
MODULE 6: The DOM (Document Object Model)
Objective: Read and update the page dynamically.
- Querying elements, creating nodes,
classList,dataset - Insert/update/remove; performance tips (fragments)
- Measuring and reading attributes
Deliverable ✅ Build “Recent Projects” section entirely via JS from data; lazy add 6+ cards.
MODULE 7: Events & Interactivity
Objective: Respond to user actions.
addEventListener, event object, delegation- Keyboard and click events; accessibility tips (focus, ARIA)
- UI patterns: mobile nav toggle, tabs, accordion, modal
Mini-Project (choose one) ✅ Mobile menu toggle with outside-click close • Tabs by category • Modal for enlarged screenshots
MODULE 8: Forms & Validation
Objective: Validate user input and give UX feedback.
- Accessing inputs, change/input/submit events
- HTML5 validation APIs, custom messages
- Error states, success states, preventing submit
Deliverable ✅ Contact form validation (name, email, message); inline errors; success reset.
MODULE 9: Fetch API, Async/Await & Storage
Objective: Get data from the web and persist preferences locally.
fetch, responses,.json(), error handlingasync/await, try/catch, loading states, basic retrieslocalStorage/sessionStoragefor theme, menu state, filters
Mini-Projects ✅ “Latest GitHub Repos” widget • Dark Mode toggle persisted to localStorage
MODULE 10: Final Project — Interactive Portfolio v1.0
Objective: Integrate everything into your live portfolio.
- JS-rendered sections: Projects or Testimonials from a data array
- Interactivity: At least two patterns (e.g., mobile nav + tabs/modal/accordion)
- Forms: Client-side validation with helpful messages
- Async: Fetch external data (e.g., GitHub repos, public JSON placeholder)
- State: Persist at least one preference in
localStorage(e.g., dark mode) - Code Quality: Separate utils.js, data.js, app.js; comments + simple module pattern
Stretch Goals Debounced search • “Back to top” smooth scroll • Intersection Observer to animate cards on scroll
🧾 Course Materials
- PDF lesson notes
- Starter files (
/js/utils.js,/js/app.js,/js/data.js) - Practice exercises & quizzes per module
- Final project checklist & rubric
- Certificate of completion
🧱 Suggested Next Courses
- PHP Foundations (pair the front end with dynamic back ends)
- WordPress Development Foundations
- Modern React (or Vue) Essentials
- APIs & AJAX Deep Dive
🧑🏫 Instructor Notes (Internal)
- Encourage Chrome DevTools mastery (Elements, Console, Network)
- Insist on semantic HTML + accessible JS interactions (focus states, ARIA)
- Promote small, composable functions and data-driven UIs
- Keep everything tied to the student’s portfolio site for momentum and coherence