← Back to Portfolio
H
Case Study4 min read

How’s the world
feeling?

A real-time emotion tracker where anyone can share how they feel and see how the world is feeling right now. Built with vanilla JavaScript, a CSS 3D globe, and Supabase real-time subscriptions.

Visit Site
8
Emotions
0
Frameworks
Yes
Real-time
100%
Privacy-First
Scroll to explore
01Architecture · Vanilla JS

No frameworks. Just JavaScript.

Most developers reach for React or Vue before writing a single line of logic. For HITWF, I chose the opposite. Vanilla JavaScript, hand-written DOM manipulation, zero dependencies.

The result is a fast, lightweight app where every line of code exists for a reason. No virtual DOM overhead, no build framework, no abstraction layers between the code and the browser. The entire front-end is under 2,000 lines of JavaScript and loads instantly. Terser and CSSO handle minification for production, deployed to Vercel.

Tech Stack
HTML5Vanilla JSCSS3TerserCSSOVercel
Approach
Zero dependencies, hand-optimized DOM manipulation
Result
Under 2,000 lines, instant page load
1realtimeChannel = supabaseClient
2.channel('emotions-realtime')
3.on('postgres_changes',
4{ event: 'INSERT', schema: 'public', table: 'emotions' },
5(payload) => {
6const newEmotion = payload.new;
7createLocationCard(newEmotion.emotion, newEmotion.location);
8debouncedRefreshStats();
9}
10)
11.subscribe((status) => {
12const statusDot = document.getElementById('statusDot');
13if (status === 'SUBSCRIBED') {
14isConnected = true;
15statusDot.className = 'status-dot connected';
16}
17});
02Real-time · WebSockets

The world updates in real time.

When someone in Tokyo shares that they’re feeling grateful, every connected user sees it immediately. Not after a refresh, not after a poll. Instantly.

Supabase Realtime handles the WebSocket layer, pushing every new emotion submission to all connected clients. Statistics reorder live using FLIP animations — smooth, staggered transitions that make the data feel alive. A debounced refresh keeps the server load manageable. Dual-layer rate limiting (client-side cooldowns plus a PostgreSQL trigger enforcing 10 submissions per hour) prevents abuse without hurting the experience.

Tech Stack
Supabase RealtimePostgreSQLWebSockets
Features
Live emotion feed, FLIP stat reordering, location cards
Approach
Supabase Realtime WebSocket subscriptions
Result
Dual-layer rate limiting, debounced stat refresh
Live Emotion Feed
Tokyo🙏
Berlin😊
São Paulo🎉
New York😌
Lagos❤️
Seoul😊
London🙏
03Privacy · Anonymous

No accounts. No tracking.

Emotions are personal. HITWF treats them that way. No accounts, no login, no email. Users share an emotion and optionally their city — nothing else.

A unified ConsentManager handles analytics and geolocation permissions with explicit opt-in. Location data comes from the BigDataCloud API with a 5-minute cache to minimize requests. Client fingerprinting uses a random UUID stored locally — only for rate limiting, never for identification. The database stores emotion, optional location, and a timestamp. That’s it.

Tech Stack
ConsentManagerBigDataCloud APIcrypto.randomUUID
Approach
Anonymous submissions, GDPR consent management
Result
Optional geolocation, zero personal data stored
Email AddressFull NameIP AddressEmotionDevice FingerprintCity (optional)CookiesBrowsing History
04Visualization · CSS 3D

A globe made of pure CSS.

The centerpiece of HITWF is a 3D wireframe globe — built entirely with CSS transforms, not WebGL or Canvas. Meridians and parallels are mathematically positioned using 3D rotation matrices, creating a smooth, continuously rotating sphere.

The globe responds to mouse movement on desktop, shifts color based on the dominant global emotion (eight distinct color schemes), and displays floating location cards as new emotions arrive from around the world. Thirty animated particles add depth to the scene. The entire visualization runs on CSS transitions and requestAnimationFrame — no 3D library required.

Tech Stack
CSS 3D TransformsrequestAnimationFrameCSS Transitions
Approach
CSS 3D transforms, mathematical wireframe construction
Result
8 mood-responsive color schemes, mouse-reactive rotation
8 Mood-Responsive Themes
Happy
Love
Excited
Calm
Anxious
Sad
Angry
Grateful
The Takeaway

No frameworks.
Full experience.

HITWF proves you don’t need a framework to build a real-time, interactive, privacy-first web application. Sometimes vanilla JavaScript, good architecture, and thoughtful design are all it takes.