Project 2: Lost in the Scroll
project-2-brief.md Project 2: Lost in the Scroll
Theme: Teaching Through Story Question: Can you explain what you learned by telling a story about it? Weight: 50% of course grade Due: Week 10 (Final Presentations)
Overview
You're building a scrollytelling site โ a single-page narrative that traces your JavaScript learning journey through a personal metaphor. This isn't a tutorial. It's not a blog post. It's a designed, animated, scroll-driven story that makes someone who's never written code understand what it felt like to learn.
Every concept you've learned this quarter โ variables, events, classList, design tokens, localStorage โ becomes a chapter in your story. Every animation technique you learn over the next five weeks โ CSS transitions, GSAP timelines, ScrollTrigger โ becomes part of how you tell it.
The metaphor is yours. The story is yours. The scroll is your medium.
Chapters vs. Tools
Not every concept needs its own section. Some are transformative "aha" moments worth a full chapter. Others are techniques you'll use along the way.
Chapters (The Story Beats)
These are the transformative moments โ what it felt like to learn.
Note: These are working titles. Use them as-is or rename them to fit your metaphor.
| Chapter | Concept | The Moment |
|---|---|---|
| First Contact | console.log, DevTools | "I can talk to the browser" |
| Naming Things | Variables (let, const) | "I can hold and name things" |
| The Switch | Conditionals, classList | "I can make the page respond" |
| Listening | Events, addEventListener | "I can react to the user" |
| The System | Design tokens, CSS custom properties | "I see the pattern now" |
| The Memory | localStorage | "Things can persist" |
| The Scroll | ScrollTrigger, scroll-driven motion | "The page itself is the interaction" |
Tools Along the Way
These are techniques used to accomplish chapters โ not their own story beats.
document.querySelectorโ how you grab thingsdocumentElementโ the root for themingmatchMedia/prefers-color-scheme/prefers-reduced-motionโ detecting preferencesdataset/data-*โ storing state in HTML- CSS transitions, @keyframes โ foundational motion
- GSAP syntax (gsap.to, timeline) โ the animation tool
- SVGs โ visual assets
- Figma variables โ where tokens come from
Pick 5โ7 chapters for your story. Use the tools as needed to build them.
What You're Building
- A personal metaphor โ A framing device that maps code concepts to something you already understand
- A design system โ Figma variables, tokens, exported to CSS custom properties
- A scrollytelling site โ 5โ7 scroll sections, each chapter explaining a concept through your metaphor
- CSS motion โ Transitions and keyframes for foundational animation
- GSAP animations โ Timelines with intentional easing for entrance sequences
- ScrollTrigger โ Scroll-driven reveals, at least one scrubbed animation
- A pinned section โ Your "showpiece" moment where scroll controls the narrative
- Accessibility โ
prefers-reduced-motionalternative, keyboard navigation, semantic HTML
Requirements
The Metaphor
- Choose a metaphor that maps JS concepts to something personal
- Each section connects a code concept to a chapter in your metaphor
- A non-coder could follow the story without understanding the code
- The metaphor is consistent โ it doesn't break or shift mid-story
Design System
- Figma design with all sections designed before coding
- Figma variables: color primitives, semantic tokens, typography, spacing
- Exported to
tokens.csswith CSS custom properties - Tokens used consistently throughout the site (no hardcoded values)
Content & Structure
- 5โ7 scroll sections, each covering a JS concept
- Real, written content (not placeholder text)
- Visual assets that support the metaphor (illustrations, photos, icons)
- Clear narrative arc: beginning โ development โ resolution
CSS Motion (Week 6)
- CSS transitions on interactive elements (hover, focus)
- At least one
@keyframesanimation (hero entrance or repeating element) - Performant properties used (
transform,opacity)
GSAP Animation (Week 7)
- GSAP loaded via CDN
-
gsap.to()orgsap.from()used for entrance animations - At least one
gsap.timeline()sequencing 3+ elements - At least 2 different easing values that match your story's tone
ScrollTrigger (Week 8)
- ScrollTrigger plugin loaded and registered
- All sections have scroll-triggered animations
- At least one section uses
scrubfor progress-linked animation - Start/end points are calibrated (tested, not default)
Advanced Scroll (Week 9)
- At least one pinned section (your showpiece moment)
- Peer review completed and feedback addressed
- Deployed to GitHub Pages
Accessibility
-
prefers-reduced-motioncheck wraps all GSAP animations - Content is fully readable with animations disabled
- Keyboard navigable (Tab through all interactive elements)
- Semantic HTML (proper heading hierarchy, landmarks)
- Color contrast passes WCAG AA on all token pairs
- Focus states visible
Metaphor Options
Choose one of these or discover your own:
1. The Kitchen
Variables are ingredients. Functions are recipes. Events are timers going off. Conditionals are taste tests. The design system is your mise en place โ everything in its place before you cook.
2. The Garden
Variables are seeds. The DOM is soil. Events are weather. Conditionals are seasons. localStorage is the root system that persists underground even when nothing is visible above.
3. The Map
Each concept is a landmark on a journey. The switch is a fork in the road. Tokens are the legend. Scroll is the path you walk.
4. The Mixtape
Each concept is a track on a mixtape. Variables are samples. Events are drops. Conditionals are bridges between sections. The design system is the album art system that ties it all together visually.
Discover Your Own
Use this prompt with an LLM (ChatGPT, Claude, etc.):
"I'm a design student learning JavaScript for the first time. I've learned about variables, events, conditionals, classList, localStorage, and design tokens. I need a metaphor that maps these programming concepts to something I already understand well โ something from my life, hobbies, or interests. The metaphor should feel personal, not generic. Ask me about my interests and help me find one that fits."
The test: Can your partner explain your metaphor back to you after hearing it once? If not, simplify.
Progressive Build Schedule
You build this project over 5 weeks. Each week adds a layer:
| Week | Focus | You Add |
|---|---|---|
| 5 | The Blueprint | Metaphor, Figma design, design system, tokens.css |
| 6 | The Rough Cut | HTML/CSS structure, content, CSS transitions |
| 7 | The Pulse | GSAP animations on 3+ sections, all content written |
| 8 | The Scroll | ScrollTrigger on all sections, scrub on 1+ |
| 9 | The Deep | Pinned section, peer review, polish, deploy |
| 10 | The Showcase | Final submission + presentation |
Weekly milestones are checked but not graded separately. The final rubric evaluates the complete site.
Evaluation
| Criteria | Weight | What We're Looking For |
|---|---|---|
| Story & Metaphor | 25% | Does the metaphor work? Is the story clear, personal, engaging? Would a non-coder understand the journey? |
| Interaction & Motion | 30% | Does scroll pacing feel right? Do animations support narrative? Is there a showpiece? Does easing have personality? |
| Technical Execution | 25% | GSAP + ScrollTrigger correct? Tokens consistent? No major bugs? Deployed? |
| Accessibility | 20% | Reduced-motion alternative? Keyboard navigable? Color contrast? Semantic HTML? |
Exemplary Work
- The metaphor is original and illuminating โ it makes code make sense
- Scroll pacing feels cinematic โ you want to keep scrolling
- Animations serve the story, not the other way around
- Technically clean โ no console errors, smooth performance
- Accessible by default โ reduced motion, keyboard, contrast all handled
Common Pitfalls
- Metaphor is too literal ("variables are like boxes") โ go deeper, make it personal
- Animation overload โ every element doesn't need to animate
- Content is an afterthought โ the story IS the project, not the animation
- Scroll pacing too fast โ test: can someone read the text before it scrolls away?
- Pinned section breaks layout โ test at multiple viewport sizes
- Forgetting
prefers-reduced-motionโ add it the same day you add GSAP
Submission
- Deploy to GitHub Pages
- Submit the live URL to Canvas
- Link from your portfolio (navigation or projects page)
- Ensure repository is public
- Present in Week 10 (5โ7 minutes):
- Live scroll-through demo
- Explain your metaphor
- Walk through ONE section's code
- What surprised you?
- What would you add with more time?
The desk critique test applies: Be ready to explain any line of code in your project.
Starter Structure
the-thread/
โโโ index.html
โโโ styles/
โ โโโ tokens.css โ design tokens (load first)
โ โโโ layout.css โ section structure, grid
โ โโโ animations.css โ motion styles
โโโ scripts/
โ โโโ main.js โ GSAP + ScrollTrigger logic
โโโ assets/
โ โโโ images/ โ visual assets for your story
โ โโโ svg/ โ any SVG graphics
โโโ README.md
Connection to Course
This project synthesizes everything you've learned:
- From Week 0: DevTools, console โ you'll explain these in your story
- From Week 1: Variables, events โ chapters in your narrative
- From Week 2: The Switch, tokens, localStorage โ the heart of the story
- From Week 3: Persistence, preferences โ the deeper meaning
- From Week 4: SVG โ visual assets for your sections
- New (Weeks 5โ9): Design systems in Figma, CSS motion, GSAP, ScrollTrigger โ how you tell the story
Everything connects. Nothing is throwaway.
Stretch Goals
For students who want to push further:
- Horizontal scroll section
- Parallax backgrounds with depth layers
- Progress indicator linked to scroll position
- Dynamic text reveals (words appearing as you scroll)
- Dark/light mode toggle integrated into the scrollytelling site
- Sound design (ambient audio that responds to scroll position)
- Mobile-optimized scroll experience
Resources
ScrollTelling Inspiration
- The Pudding โ Data-driven visual essays
- NYT Snow Fall โ The original scrollytelling piece
- Apple AirPods Pro โ Product storytelling through scroll
GSAP & ScrollTrigger
- GSAP Getting Started โ Official docs
- ScrollTrigger Docs โ Plugin reference
- GSAP Easing Visualizer โ Find your easing personality
Design Systems
- Open Props โ Token system reference
- Figma Variables Guide โ Official Figma docs
Accessibility
- web.dev: prefers-reduced-motion โ Motion accessibility
- MDN: Semantic HTML โ Structure reference