404 Museum – Designing and Coding an Interactive 404 Web Experience

404 Museum – Designing and Coding an Interactive 404 Web Experience

404 Museum – Designing and Coding an Interactive 404 Web Experience

A solo design–development experiment that turns being “lost” into discovery through interactive storytelling.

A solo design–development experiment that turns being “lost” into discovery through interactive storytelling.

A solo design–development experiment that turns being “lost” into discovery through interactive storytelling.

Role

Role

Role

Solo Designer & Developer

Solo Designer & Developer

Solo Designer & Developer

Timeline

Timeline

Timeline

Mar 2025 – May 2025

Mar 2025 – May 2025

Mar 2025 – May 2025

Tools & Tech

Tools & Tech

Tools & Tech

HTML, CSS, JavaScript, Leaflet.js, GSAP, JSON, Zeabur

HTML, CSS, JavaScript, Leaflet.js, GSAP, JSON, Zeabur

HTML, CSS, JavaScript, Leaflet.js, GSAP, JSON, Zeabur

1. Project Context

1. Project Context

This project was created for Programming Human-Centered Interfaces at the University of Maryland — a course focused on building interactive web interfaces that combine usability, creativity, and technical implementation.

This project was created for Programming Human-Centered Interfaces at the University of Maryland — a course focused on building interactive web interfaces that combine usability, creativity, and technical implementation.

I’ve always loved how well-designed 404 pages turn an error into a delightful, meaningful moment. Different brands express their personality through these small “lost” spaces —

  • Figma makes it feel like you’re editing the 404 inside a canvas,

  • ChatGPT turns it into a poetic line of text,

  • Dribble lets you play with colors and compositions, and

  • Pixar uses its characters to turn anxiety into reassurance.

Each example reflects its brand’s identity — transforming a moment of error into a moment of connection.

I’ve always loved how well-designed 404 pages turn an error into a delightful, meaningful moment. Different brands express their personality through these small “lost” spaces —

  • Figma makes it feel like you’re editing the 404 inside a canvas,

  • ChatGPT turns it into a poetic line of text,

  • Dribble lets you play with colors and compositions, and

  • Pixar uses its characters to turn anxiety into reassurance.

Each example reflects its brand’s identity — transforming a moment of error into a moment of connection.

Inspired by that, I wanted to design my own interactive 404 page — not just as a single screen, but as a small museum of lostness, where people can explore the feeling of being “lost” through playful, personal interactions.

Inspired by that, I wanted to design my own interactive 404 page — not just as a single screen, but as a small museum of lostness, where people can explore the feeling of being “lost” through playful, personal interactions.

1. Project Context

This project was created for Programming Human-Centered Interfaces at the University of Maryland — a course focused on building interactive web interfaces that combine usability, creativity, and technical implementation.

I’ve always loved how well-designed 404 pages turn an error into a delightful, meaningful moment. Different brands express their personality through these small “lost” spaces —

  • Figma makes it feel like you’re editing the 404 inside a canvas,

  • ChatGPT turns it into a poetic line of text,

  • Dribble lets you play with colors and compositions, and

  • Pixar uses its characters to turn anxiety into reassurance.

Each example reflects its brand’s identity — transforming a moment of error into a moment of connection.

Inspired by that, I wanted to design my own interactive 404 page — not just as a single screen, but as a small museum of lostness, where people can explore the feeling of being “lost” through playful, personal interactions.

2. Demo & Concept

2. Demo & Concept

Every missing page has a story. When people land on a 404 page, it’s usually by accident — a small digital detour. I wanted to turn that moment of being lost into something playful and reflective, where every interaction reveals a different way of interpreting “404.”

Every missing page has a story. When people land on a 404 page, it’s usually by accident — a small digital detour. I wanted to turn that moment of being lost into something playful and reflective, where every interaction reveals a different way of interpreting “404.”

Every missing page has a story. When people land on a 404 page, it’s usually by accident — a small digital detour. I wanted to turn that moment of being lost into something playful and reflective, where every interaction reveals a different way of interpreting “404.”

You can explore the live demo below — an interactive web experience that reimagines what a “404” can feel like, from a playful slot machine to a personal map of memories.

You can explore the live demo below — an interactive web experience that reimagines what a “404” can feel like, from a playful slot machine to a personal map of memories.

You can explore the live demo below — an interactive web experience that reimagines what a “404” can feel like, from a playful slot machine to a personal map of memories.

The 404 Museum unfolds in three short journeys, each turning the feeling of being lost into a different kind of discovery. Together, they explore randomness, reinterpretation, and personal connection.

The 404 Museum unfolds in three short journeys, each turning the feeling of being lost into a different kind of discovery. Together, they explore randomness, reinterpretation, and personal connection.

The 404 Museum unfolds in three short journeys, each turning the feeling of being lost into a different kind of discovery. Together, they explore randomness, reinterpretation, and personal connection.

01 Slot Machine — The randomness of being lost

01 Slot Machine — The randomness of being lost

01 Slot Machine — The randomness of being lost

The experience begins with a slot machine, symbolizing the unpredictability of errors. Like pulling a lever without knowing what will happen, users never expect to “spin” into a 404 — it’s a fun, unexpected start that sets the tone for the rest of the journey.

The experience begins with a slot machine, symbolizing the unpredictability of errors. Like pulling a lever without knowing what will happen, users never expect to “spin” into a 404 — it’s a fun, unexpected start that sets the tone for the rest of the journey.

The experience begins with a slot machine, symbolizing the unpredictability of errors. Like pulling a lever without knowing what will happen, users never expect to “spin” into a 404 — it’s a fun, unexpected start that sets the tone for the rest of the journey.

02 Cocktail Maker — Mixing meaning from mistakes

02 Cocktail Maker — Mixing meaning from mistakes

02 Cocktail Maker — Mixing meaning from mistakes

A 404 can be frustrating, but it can also spark creativity. This section lets users mix their own “404 cocktail,” combining random fruits to create new colors and flavors. It represents how people reinterpret meaningless moments into something personal — just like mixing ingredients to craft your own taste.

A 404 can be frustrating, but it can also spark creativity. This section lets users mix their own “404 cocktail,” combining random fruits to create new colors and flavors. It represents how people reinterpret meaningless moments into something personal — just like mixing ingredients to craft your own taste.

A 404 can be frustrating, but it can also spark creativity. This section lets users mix their own “404 cocktail,” combining random fruits to create new colors and flavors. It represents how people reinterpret meaningless moments into something personal — just like mixing ingredients to craft your own taste.

03 Photo Map — A personal geography of lostness

03 Photo Map — A personal geography of lostness

03 Photo Map — A personal geography of lostness

The journey ends with a world map that forms the shape of “404,” built from photos I took in Taiwan (where I was born), Europe (where I studied abroad), and the U.S. (where I’m pursuing my master’s degree). It’s a personal touch — showing that even in being lost, we leave traces of who we are and where we’ve been.

The journey ends with a world map that forms the shape of “404,” built from photos I took in Taiwan (where I was born), Europe (where I studied abroad), and the U.S. (where I’m pursuing my master’s degree). It’s a personal touch — showing that even in being lost, we leave traces of who we are and where we’ve been.

The journey ends with a world map that forms the shape of “404,” built from photos I took in Taiwan (where I was born), Europe (where I studied abroad), and the U.S. (where I’m pursuing my master’s degree). It’s a personal touch — showing that even in being lost, we leave traces of who we are and where we’ve been.

3. What went wrong

3. What went wrong

01 Page transitions in a single-page setup

01 Page transitions in a single-page setup

My site was built as a one-page app, with button clicks triggering each section. Initially, clicking “Next” didn’t actually move to the next section because I hadn’t properly updated visibility states. Later, I found another issue — when going back to the start, some elements didn’t reset correctly and stayed visible.

My site was built as a one-page app, with button clicks triggering each section. Initially, clicking “Next” didn’t actually move to the next section because I hadn’t properly updated visibility states. Later, I found another issue — when going back to the start, some elements didn’t reset correctly and stayed visible.

02 Slot machine 3D layout complexity

02 Slot machine 3D layout complexity

I originally wanted a 3D-style slot machine with layered reels and shadows. But aligning every layer and keeping animations consistent became too hard to maintain, so I simplified it to a flat, minimal look that still felt satisfying.

I originally wanted a 3D-style slot machine with layered reels and shadows. But aligning every layer and keeping animations consistent became too hard to maintain, so I simplified it to a flat, minimal look that still felt satisfying.

03 Map responsiveness issues

03 Map responsiveness issues

The “404” photo map was hardcoded with pixel coordinates for each photo tile. It worked great on desktop, but broke on smaller screens. Without dynamic scaling or relative positioning, responsiveness became a major limitation.

The “404” photo map was hardcoded with pixel coordinates for each photo tile. It worked great on desktop, but broke on smaller screens. Without dynamic scaling or relative positioning, responsiveness became a major limitation.

3. What went wrong

01 Page transitions in a single-page setup

My site was built as a one-page app, with button clicks triggering each section. Initially, clicking “Next” didn’t actually move to the next section because I hadn’t properly updated visibility states. Later, I found another issue — when going back to the start, some elements didn’t reset correctly and stayed visible.

02 Slot machine 3D layout complexity

I originally wanted a 3D-style slot machine with layered reels and shadows. But aligning every layer and keeping animations consistent became too hard to maintain, so I simplified it to a flat, minimal look that still felt satisfying.

03 Map responsiveness issues

The “404” photo map was hardcoded with pixel coordinates for each photo tile. It worked great on desktop, but broke on smaller screens. Without dynamic scaling or relative positioning, responsiveness became a major limitation.

3. What went right

3. What went right

01 Slot machine randomness and animation timing

01 Slot machine randomness and animation timing

Even without GSAP, I created a smooth spinning effect using setInterval and setTimeout. Each reel stopped one by one with slight delays, giving it a natural, game-like rhythm that felt surprisingly polished.

Even without GSAP, I created a smooth spinning effect using setInterval and setTimeout. Each reel stopped one by one with slight delays, giving it a natural, game-like rhythm that felt surprisingly polished.

02 Cocktail drag-and-drop interaction

02 Cocktail drag-and-drop interaction

I separated the cup and liquid into two SVG layers, allowing the liquid to appear behind the cup and dynamically change color when users dropped fruits (🍓🍋🍇). It was tricky to coordinate drag events and color blending, but visually it worked well.

I separated the cup and liquid into two SVG layers, allowing the liquid to appear behind the cup and dynamically change color when users dropped fruits (🍓🍋🍇). It was tricky to coordinate drag events and color blending, but visually it worked well.

03 Optimized 404 photo map performance

03 Optimized 404 photo map performance

Despite loading multiple small images, performance stayed smooth because I pre-resized them to 100×150px and kept file sizes small. The map loaded faster than I expected and gave users instant visual feedback.

Despite loading multiple small images, performance stayed smooth because I pre-resized them to 100×150px and kept file sizes small. The map loaded faster than I expected and gave users instant visual feedback.

3. What went right

01 Slot machine randomness and animation timing

Even without GSAP, I created a smooth spinning effect using setInterval and setTimeout. Each reel stopped one by one with slight delays, giving it a natural, game-like rhythm that felt surprisingly polished.

02 Cocktail drag-and-drop interaction

I separated the cup and liquid into two SVG layers, allowing the liquid to appear behind the cup and dynamically change color when users dropped fruits (🍓🍋🍇). It was tricky to coordinate drag events and color blending, but visually it worked well.

03 Optimized 404 photo map performance

Despite loading multiple small images, performance stayed smooth because I pre-resized them to 100×150px and kept file sizes small. The map loaded faster than I expected and gave users instant visual feedback.

4. Reflection

4. Reflection

4. Reflection

This project was one of my most exploratory works — I stepped away from structured UX processes and focused on building something expressive through code. It reminded me that experimentation is also part of good design, especially when bridging creativity and implementation.

This project was one of my most exploratory works — I stepped away from structured UX processes and focused on building something expressive through code. It reminded me that experimentation is also part of good design, especially when bridging creativity and implementation.

This project was one of my most exploratory works — I stepped away from structured UX processes and focused on building something expressive through code. It reminded me that experimentation is also part of good design, especially when bridging creativity and implementation.

1

1

1

When Code Shapes Design

When Code Shapes Design

When Code Shapes Design

Building every interaction by hand helped me see how front-end mechanics shape user experience. Concepts like Flexbox, viewport height (VH), and responsive layout stopped feeling like “developer terms” — they became design tools that influence hierarchy, flow, and balance.

Building every interaction by hand helped me see how front-end mechanics shape user experience. Concepts like Flexbox, viewport height (VH), and responsive layout stopped feeling like “developer terms” — they became design tools that influence hierarchy, flow, and balance.

Building every interaction by hand helped me see how front-end mechanics shape user experience. Concepts like Flexbox, viewport height (VH), and responsive layout stopped feeling like “developer terms” — they became design tools that influence hierarchy, flow, and balance.

2

2

2

Learning Through Play

Learning Through Play

Learning Through Play

Letting myself experiment without overplanning gave me space to play and learn. I realized that coding isn’t just execution — it’s a way to prototype emotion, to see how motion, timing, and interactivity can make even a simple 404 feel alive.

Letting myself experiment without overplanning gave me space to play and learn. I realized that coding isn’t just execution — it’s a way to prototype emotion, to see how motion, timing, and interactivity can make even a simple 404 feel alive.

Letting myself experiment without overplanning gave me space to play and learn. I realized that coding isn’t just execution — it’s a way to prototype emotion, to see how motion, timing, and interactivity can make even a simple 404 feel alive.

Let's connect

hanshin.shing.917@gmail.com

www.linkedin.com/in/hanshin-shing-bba992249

© Hannah Shing 2025

Let's connect

hanshin.shing.917@gmail.com

www.linkedin.com/in/hanshin-shing-bba992249

© Hannah Shing 2025

Let's connect

hanshin.shing.917@gmail.com

www.linkedin.com/in/hanshin-shing-bba992249

© Hannah Shing 2025