This is a submission for Frontend Challenge - Halloween Edition, Perfect Landing
π What I Built
Haunted Pixels is a fully interactive Halloween landing page. Part art installation, part frontend engineering showcase.
Built with React + TypeScript + Tailwind, it merges atmospheric design with smooth interactivity to create a living, breathing haunted world inside the browser.
Every layer from the fog and lightning to the crawling spiders is modular and reactive.
β¨ Core Features
- π§± Component-based horror system β Each visual effect (bats, spiders, lightning, glitch, etc.) is an independent React component.
- πΈ Dynamic Floating Entities β Animated bats and spiders drift across the viewport in organic motion loops.
- π Cinematic Parallax + Glitch FX β Multi-depth background and screen distortions amplify immersion.
- π‘ Responsive & Accessible β Smooth scroll, keyboard focus, and semantic alt tags on all visual elements.
- β° Animated Header β Real-time spooky clock, glowing logo, and smooth transitions on scroll.
- π Ambient Creepy Audio β Subtle sound layers that adapt with movement and hover.
π» Demo
π Live Demo: https://couragecodejourney.github.io/haunted-pixels-perfect/
π¦ Source: GitHub Repository
π§© Technical Breakdown
The landing page is built with:
- React + TypeScript for maintainable and modular UI.
- Tailwind CSS for scalable, token-driven theming (custom HSL palette for Halloween tones).
- Vite for lightning-fast builds and GitHub Pages deployment.
-
Custom Animation System:
Defined in
index.cssusing CSS keyframes forghost-float,blood-drip,bat-fly, andscreen-shake.
Component Example β Floating Entities
const [entities, setEntities] = useState<Entity[]>([]);
useEffect(() => {
const types = ["bat", "bat", "bat", "spider", "spider", "spider", "spider"];
setEntities(types.map((type, i) => ({
id: i,
top: Math.random() * 100,
left: Math.random() * 100,
size: 80 + Math.random() * 80,
type,
})));
}, []);
Each entity is independently animated, creating believable random movement without heavy libraries.
π― Journey
I wanted to push beyond typical Halloween themes not just spooky visuals, but a haunted atmosphere that feels alive.
I experimented with layering depth and rhythm: subtle motion, ambient flickers, and light-to-dark transitions that react to scroll and hover.
The hardest challenge was balancing performance and cinematic animation, ensuring the multiple background and entity layers ran smoothly on mobile while retaining visual fidelity.
I also implemented a minimal design system via HSL tokens, so colors, shadows, and glows could be tuned across all components consistently.
In the end, Haunted Pixels became more than a landing page, itβs a technical mood piece that fuses frontend fundamentals with Halloween storytelling.
π¦ βEnter if you dare.β

Top comments (0)