# Cozy Corner, A Warm Third Space | Design Engineer Case Study url: https://bramha.work/work/cozy-corner route: /work/cozy-corner format: text/plain; charset=utf-8 llms-txt: https://bramha.work/llms.txt llms-full: https://bramha.work/llms-full.txt description: Design-engineer breakdown of a cozy pixel messaging app — Next.js, Supabase realtime, LiveKit voice, layered sprite avatars, and Canvas world sync. --- Next.js Pixel UI LiveKit # Cozy Corner, A Warm Third Space A design-engineer exploration of real-time social presence: chat, voice, avatars, and a shared world wrapped in a tactile pixel UI. Role Design Engineer Timeline 3 Days Team Solo ## Summary Cozy Corner is a small-group messaging app dressed like a cozy RPG village. Friends sign in, customise a pixel avatar, chat in a layered ocean scene, wander a shared top-down world, and drop into voice rooms together. The goal was not scale — it was to prove that social software can feel warm, tactile, and game-like without sacrificing real-time reliability. Every surface was designed and built end-to-end: design tokens, component library, sprite pipeline, presence model, and the realtime layers underneath. Login — animated sky scene, drifting clouds, and a wood-panel auth shell ## Tech stack A modern React stack with Supabase as the realtime backbone and LiveKit for voice. Frontend Next.js 16 · React 19 · TypeScript · CSS Modules App Router with client islands for canvas, chat, and voice. Global design tokens in globals.css — forest/moss/cream palette, 8pt grid, Press Start 2P + VT323 typography. Backend Supabase · Postgres · Realtime · Storage Auth (Google OAuth + email), profiles, messages, world positions, and session presence. Postgres changes and broadcast channels drive live updates. Voice LiveKit · livekit-server-sdk Server-minted JWT tokens via /api/livekit-token . Audio-only room with speaking-state visual feedback on avatar seats. Motion Framer Motion · Canvas 2D Spring-based tactile buttons. Raw Canvas API for world rendering and procedural emoji pixelation — no game engine in the loop. ## Design system Cozy Corner’s design system is built around a single question: what if group chat felt like a shared hangout, not filing a ticket? The answer is “Cozy Pixel UI” — warm, tactile, and game-adjacent, but still a real web app underneath. ### Design philosophy The philosophy is comfort over chrome . Social software often optimises for information density; this project optimises for emotional temperature — presence, playfulness, and the sense that a space is shared. Pixel art and wood-panel framing are not nostalgia for its own sake; they signal “third place,” the same way a café’s lighting signals “stay awhile.” Three principles run through every screen: - Tactile first — if you can click it, it should look pressable. Hover brightens, tap compresses, panels have inset depth. Feedback is physical, not abstract. - Restraint in motion — ambient layers (clouds, ocean sway, scene parallax) loop quietly in CSS; UI transitions stay short and springy. Motion supports mood without competing with readability. - One village, many rooms — auth, chat, profile, and voice are different features, but they share type, colour, border weight, and spacing so the app never breaks character when you navigate. Typography reinforces the tone: Press Start 2P for display labels (titles, nav, panel headers), VT323 for readable body and chat copy at a larger pixel scale. The split keeps headers unmistakably retro while messages stay scannable in long threads. ### Traditional web layout + 9-slice pixel art The system deliberately mixes two idioms : conventional responsive web structure on the inside, pixel-game surface treatment on the outside. The app shell is familiar web design — a 2:8:2 column grid (sidebar · main · roster), flex stacks for auth forms, scrollable chat, accessible focus states, and standard input patterns. None of that is reinvented. What is reinvented is the skin. Panels, buttons, and cards borrow from game UI via 9-slice-style borders : corner and edge slices from small PNG tiles, scaled with border-image so wood-grain frames and pixel outlines stretch to any panel width without distorting corners. PixelPanel ships wood and standard variants; PixelButton pairs with them on login and onboarding so the form reads as a carved sign, not a default HTML fieldset. The hybrid shows up everywhere: - Layout — CSS Grid and flex for structure; pixel borders and hard drop shadows for character. - Imagery — chat backgrounds and avatars are layered PNG sprites with image-rendering: pixelated ; the message list itself is still a normal scroll container with real text nodes. - Depth — PhysicalCard uses offset shadows (no blur) like inventory tiles; content inside is standard React markup. - Interaction — TactileButton wraps semantic