You are browsing as a guest. Sign up (or log in) to start making projects!

darshjain

@darshjain

Joined June 6th, 2026

  • 32Devlogs
  • 6Projects
  • 2Ships
  • 30Votes
High school nerd interested in shipping software
Open comments for this post

4h 6m 57s logged

starwick - the run finally means something

been turning the flow runner from a pile of systems sitting next to each other into a loop u actually wanna repeat.

what i built

routes arent just colors anymore. the eclipse path pays way more but the dark creeps in and might swallow u whole. the safe one keeps u calm. bond literally pulls ur companion in to cover ur misses. picking a line feels like picking a mood now instead of a number.

then the companions got personalities. vesp gives u a wider grace window, corvel just hands u steady starlight, mara makes the eclipse burn brighter but runs u way hotter, ash leaves a relic every flight. ur not collecting skins anymore, ur picking how the run feels.

and the hearth actually grows. spend starlight, a room wakes up, and it changes what ur next run can do. come back a few runs later and the place looks different.

the part that broke me

the end of run ceremony kept rendering pure black. spent forever convinced the camera was aimed wrong. it wasnt. the hearth was dropping its stars in world space and ignoring where i actually put them so they floated off in the void lol. fixed that and it was STILL black bc the ritual camera was fighting the render pipeline. ended up pointing it at its own texture and feeding that to the screen. finally bloomed.

where its at

cold open -> run -> route choice -> a small ceremony that hands u back a memory seed -> hearth grows -> next run. it loops now. still rough but it finally has a soul.

0
0
6
Open comments for this post

5h 12m 8s logged

starwick - the runner finally feels like a game

quick update on the flow runner. it went from a gray ribbon in the dark to something that actually reads.

what i built

the constellation gates branch now and the branches actually mean something. safe path glows calm blue, the memory one goes violet, eclipse is angry red, and the bond route literally takes on ur companions color. picking a line feels like picking a mood instead of picking a number.

speaking of, i ripped all the score numbers out. no more x12 combo text floating around. its diegetic now - a thread weaves up the side as u travel, a little star leans toward the next gate to guide u, and the whole screen cools and dims when pressure builds. perfect hits snap the gate ring inward with a tiny punch and a note. feels good fr.

the part that ate my night

the end of run ritual kept rendering pure black. i was so sure the camera was pointed wrong. it wasnt. turned out the hearth was placing its stars in world space and ignoring where i actually dropped it, so they floated 40 units off in the void lol. fixed that and it STILL went black bc that camera just refuses to draw the way i wanted. framed it with a seperate cam and it finally bloomed.

where its at

boot into a run, weave the sky, then a small ceremony hands u back ur starlight and a memory seed u can share. notch safe areas handled too. still rough but it feels like a place now.

0
0
2
Open comments for this post

3h 14m 59s logged

starwick - the run learned to sing

picked flow run back up. it worked but lowkey looked like a gray triangle in black and felt like nothing. so this stretch was jus making it feel expensive.

what i did

killed teh plain blue gate spheres. gates are glowing stars now joined by a thread u light as u trace it. gave track a glowing center seam and a starfield behind it so u ride through space not a void. every gate plays a note now. finishing one fires a chord. a harmony pad swells the longer u stay clean so ur kinda composing the sky instead of scoring points. pressure used to flash red like damage which felt cheap tbh. now dark just creeps in and ur trail frays and ur light goes cold. also added a companion that rides with u and leads to next gate and speeds up as ur combo climbs and curls up scared when dark rises. shareable run codes like CORVEL-60H-LUMEN so u can hand someone ur exact run. an auto postcard at results. an intro with no menu where u touch to light the wick drag a thread and let go to open the gate. and failure isnt a game over fr. companion catches u and run ends as a memory u keep.

what broke

spent a whole evening on a landing that wouldnt register as bad. u could dive straight into the ground and the game just shrugged. turned out air drag was bleeding off fall speed faster than i thought so the hit came in under my bad-landing cutoff. sometimes soft enough to read as a perfect landing which is kinda hilarious. so i stopped tuning the number and changed the rule. if ur diving when u hit the floor thats bad. felt right instantly.

where it stands

ngl the run finally reads like a thread of light through a nebula now. music building as u chain. dark creeping when u slip. companion reacting the whole way. playable start to finish. still uncommitted tho. and “it works” vs “it feels great on a phone” are two diff things i still gotta settle on device.

0
0
6
Open comments for this post

7h 26m 50s logged

starwick - making the run mode feel expensive

starwick has two modes: a walkable cosmos and a flow-run (think endless ride through the weave). the run worked a while ago - track, gates, combo, a
relight finale - but it looked like a gray triangle floating in black. this stretch was about making it premium instead of just functional.

glyph gates and a track that glows

the gates used to be plain blue spheres. you weren’t weaving a constellation, you were hitting balls. now each gate is soft-dot stars joined by a glowing
thread that brightens as you trace it - it finally reads like you’re drawing the sky.

composing the sky, not collecting points

every gate node now plays a note (pentatonic, climbs with your chain), completing a gate fires a chord, and a harmony pad swells the longer you hold a run clean. the goal was for it to feel like you’re playing the weave, not racking up a score.

pressure used to flash the screen red like generic damage. hated it. now pressure is darkness - your trail frays, the wick dims and goes cold, the music
narrows, the frame creeps dark. failure as atmosphere, not a buzzer.

and the hearth (your home) now reacts when you get back: starlight motes flow in, the next thing you can afford to restore pulses, and restoring it moves the pulse to the next. it feels like a place that responds instead of an upgrade menu.

0
0
6
Open comments for this post

7h 31m 31s logged

starwick - i rebuilt the core as a flow runner

big swing this stretch. the free-roam build was pretty but aimless so i pivoted the core into a flow runner. u ride a procedural ribbon, charge and release to glide, trace constellations as gates at speed. kept the old explore mode intact, this is a second mode built from scratch beside it.

what i built

the whole loop as systems. a deterministic flow motor, auto-run, hold to charge, release to lift into a glide, swipe to drift lanes, pure kinematics so its predictable. a seeded ribbon track with height and width curves, built in chunks ahead and recycled behind so it streams forever. gates that detect by path intersection not a button press. a combo system that chains hits into a rising harmony meter, Soft Trace up to Perfect Weave. a run director that ties it into a real ~90 second run with a relight setpiece near the end. plus a save profile and a hearth where u spend starlight to restore nodes, expression not wait-timers.

the save that lied to me

wiring the meta screen, it proudly told me id restored 4,244 stars across 9 journeys. id never finished a single run. my headless dev runs were writing straight to the real profile and it had been quietly inflating for days. fix was a dev-only backend, in headless mode the save lives in memory and never touches the real file. round-trips and version migration still work and ur real profile is yours again. made it a hard rule for the save system from the start.

where it stands

honest version, its systems-complete but not visually playable yet. no wick model, no gate glow, no hud, no hearth view. i built the whole core and havent really watched it move. next pass is pure presentation, give the runner a body, light the gates, show the hud, wire mode select so u can press play and ride. skeleton’s real, now it needs skin.

0
0
7
Open comments for this post

3h 56m 31s logged

Starwick - making it look and feel premium

Spent this stretch on two things: making the realm look premium, and making it feel premium.

The realm became a journey

You now relight several star-sites in a row - a companion leads you to each, you trace its constellation, the ground warms, a new light calls you onward. Restore the whole sky, then make the choice. And there’s a roster of companions: the one you carry seeds the world - different terrain, layout, palette, color, even the music. Replay and you’re somewhere new with someone new.

Looks premium

No new art, just rendering: a filmic color grade with glowy bloom, a horizon haze with a richer nebula, crystals that went from flat cutouts to lit glass that catches light, and a focus-pull that softly blurs the world behind dialogue. Aiming at the Sky / Gris look, not photoreal - the right call for a game built entirely from code.

Feels premium

Everything reacts: a screen-punch and crystal pop on relight, buttons that pop in, a counter that punches when it ticks. Every tap, trace, and relight makes a synthesized sound, with matching haptics on a phone. None of the audio is recorded.

The day it went black

Reached for ACES tonemapping plus heavy contrast and vignette, and the whole scene crushed to near-black - nebula and terrain just gone. Swapped to a gentler tonemap, lifted exposure, dropped the bloom threshold so things glow instead of clip, and it came back better than before. Bonus near-miss: I wanted horizon fog but fog eats a star field - turns out the sky’s shader ignores scene fog, so the land hazes while the stars stay crisp. Accidentally perfect.

Where it stands

Looks and feels like a real game now Caveats: no title screen yet, and it doesn’t remember you between runs - a persistent sky and a collection screen are next.

0
0
4
Open comments for this post

4h 50m 48s logged

starwick - you can walk it now

big one. til now starwick was a sky in front of ur face, a floating eyeball. now its a place u stand in and walk, where relighting a star changes the ground around u and the music shifts with where u are.

what i built

the realm is procedural. terrain is a seeded heightfield, no file, jus noise sampled into a mesh, and the same function feeds the walk code so u follow the slopes instead of clipping through em. first-person now, joystick to move, drag to look, a lantern, ground-snap. the camera stopped flying and started walking, sounds small but was secretly half the work. crystals mark each star-site, a constellation hangs above one, trace it to relight and the crystals warm blue to gold while a beacon lights toward the next.

the bar that refused to be a circle

the relight fires a shockwave ring out from the star. except it kept rendering as a flat white bar, like a highlighter line drawn across the screen. took me a while to clock it, the torus mesh sits in one plane and i was aiming the wrong axis at the camera so the ring was permanently edge-on. point its actual face at the cam and it pops into a clean expanding circle. one line. i stared at that strip way too long.

sound that follows u

the score’s layered now, a drone underneath, a pad that swells near a site, a motif while u trace, tension on a choice, full bloom on relight. the stars pulse in time, brighter when it swells. nones recorded, all synthesized in code and mixed live by where u are.

where it stands

u can walk the realm, find a site, trace the constellation, watch it warm the world, and the score moves with u. still one realm for now, more biomes next.

0
0
3
Open comments for this post

2h 7m 8s logged

starwick - the whole loop finally runs

quick one. the vertical slice plays end to end now and for the first time it feels like the thing i pitched myself, not a pile of systems that happen to compile.

the loop

you’re a wick, a lil candle-soul who relights dying stars. the slice is one star. u drag across five dim points to trace the constellation, it catches, and the star reignites. motes spiral in, a core lights, a shockwave ring pushes out, ur companion reacts, the camera breathes. then the sky asks what u wanna do. let it rest or send it onward. u pick and the world shifts to match, warm gold if u send it on, colder dim if u rest it. ending plays, then it offers to begin again.

the bug that mattered

the choice screen looked done before it was. the constellation and companion both live in the world behind it and they were still listening. so a tap meant for “send it onward” also poked the companion, and a stray drag re-traced stars that were alr lit. the ui was a sheet of glass with holes in it. fix was boring and correct. one bit of state that says something modal is up, dialogue journal or a choice, and everything that reads input checks it first and shuts up. taps stopped leaking and the choice felt like a choice instead of a coincidence.

where it stands

trace, relight, choose, branch, two endings, restart, and the sky remembers the run. whats not there yet, its still a sky in front of u not a place u walk through. next is lifting the constellation into the world and building the first realm u can move around in. thats the jump from pretty to somewhere.

0
0
4
Open comments for this post

4h 57m 23s logged

starwick - it moves now, and it remembers

big stretch of work. the cosmos went from “pretty to look at” to a place that tells you something and actually feels alive. three threads landed: the story shows up on screen, everything became real crafted 3d, and i finally taught my tests to see motion.

the story shows up

relight a constellation now and it speaks. a line types out across the bottom - “a star has gone dark. you feel the absence before you see it.” - the stars flare, and a memory surfaces: the ferryman’s lantern, someone who lit the way for others and got forgotten the moment they weren’t needed. those memories collect in a journal you can open. it’s the first time starwick has felt like it’s about something, not just nice to drift through.

everything got crafted

i ripped out the “glowing blobs of particles” look. the companion and the thing you carry are real 3d now - a glowing core wrapped in actual orbiting rings (generated the ring meshes in code). the lantern is an ember inside three tilted rings spinning at different speeds, like a little orrery of light. vesp got a proper body too and now spring-follows you with a bit of lag and overshoot instead of sliding around on rails - it reads as a thing with weight that’s choosing to keep up with you.

making the relight a moment

the relight used to be a flat on/off. now it’s staged: the star contracts, motes spiral inward, the core ignites, a shockwave ring blows outward, the companion reacts, and the camera breathes back. small thing, couple seconds, but it turns “i pressed the thing” into “something happened.”

where it stands

a flyable procedural cosmos, a companion that follows and sings and reacts, the relight-a-constellation loop with a real cinematic beat, and a story that surfaces as you go .

0
0
3
Open comments for this post

1h 34m 58s logged

starwick - relighting the sky

third devlog. the cosmos isnt just something to look at now. u can fly through it, trace a dead constellation to bring it back, and poke the companion to get a reaction. the core thing u actually do finally exists.

the verb

dead constellations hang in the sky as dim blue stars. u drag across em in order, a line of light links each one, and when the shape closes it relights. stars flare gold, sparks burst, a star reborn. the game counts how many u’ve brought back. small moment but it feels good and its what everything else hangs off.

moving + vesp

input’s online. u can fly around, move and look, keyboard at the desk, thumbstick + drag on a phone, same code. and vesp the companion now answers a tap. it pulses and its lil tune swells for a sec. went from “thing floating near u” to “thing that notices u.”

the fight

none of my input worked and the whole thing threw on launch. turns out the project’s on the new input system only and i was calling the old input api which just throws. rebuilt it on one input layer that handles mouse and touch the same. instantly alive.

where it stands

fly through a glowing procedural cosmos, trace constellations to relight em, a companion that follows sings and reacts. all generated in code, no art or audio files.

0
0
1
Open comments for this post

2h 29m 23s logged

starwick - the void gets a roommate

second devlog. last time starwick was an empty glowing void. now it’s got soft twinkling stars a proper wispy nebula and a little companion floating next to u humming its own tune. starting to feel like a place not a screensaver.

the cosmos got real

the stars used to be blocky squares. default particle no texture, looked rough. swapped em for soft round points i generate in code, basically a radial gradient sprite, plus a twinkle layer that fades stars in and out so the whole field shimmers. bumped bloom so the bright ones actually glow.

nebula was the real fight tho. first pass was a few clean soft blobs and it jus looked like lens flares lol. so i went noise based, fractal perlin clouds with a soft falloff, and overshot the other way. came out dark and basically invisible. third try i dropped the noise threshold and roughly doubled color and alpha and now its vivid purple-and-blue wisps sweeping across the sky. took three goes to land that one.

vesp

the companion. small violet mote that orbits near u, bobs around, plays a soft little bell arpeggio that layers over the ambient drone. no samples, melody’s built from sine waves like everything else.

first attempt vesp came out as a giant white sun lmao. i’d picked a bright purple but cranked the hdr way too high so between that and bloom the core blew out to pure white and it hogged the whole frame like a second star. dialed the color back, shrank it, pushed it further out, rebuilt it from a hard sphere into a cluster of soft glowing dots. now it reads like a tiny spirit drifting with u instead of a death star.

where it stands

empty void -> twinkling stars + vivid nebula -> a companion that floats beside u and sings. still all procedural, no art or audio files anywhere.

0
0
2
Open comments for this post

2h 12m 58s logged

Starwick - a cosmos

first devlog. starwick’s a procedural cosmic adventure i’m building

what’s in it so far

right now it’s just the bootable cosmos. no art, no audio files, nothing downloaded, it’s all generated in code. 700 stars on a sphere around the camera, bloom and vignette, and an ambient drone synthesized at runtime (few detuned sines + a slow lfo).

0
0
2
Ship

Wanderpin is a 3D-globe trip planner where the journey is the product, not the spreadsheet. Drop pins on a spinning night-earth, watch your route stitch together, then hit Play and fly the whole trip as a cinematic reel - gliding across the globe for long hops and dropping into real 3D terrain when two stops are close.

The hardest part was making the globe-to-3D handoff feel continuous. Two heavy engines (three.js for the globe, MapLibre for terrain) had to crossfade without a tile-load flash, so I warm the 3D view in the background and only commit once it's actually ready. I also caught the play-through reel re-rendering the entire app - globe included - on every caption tick; moving the caption into its own useSyncExternalStore so only it updates made the fly-through visibly smoother.

I'm proud that it feels like a journey instead of a form: the cinematic reel, ~40k curated places that each carry a vibe and a fun fact, and one-tap sharing as a postcard, a public link, or an embeddable live globe.

To try it: open the live link, search a city or just click the globe to drop pins (or start from a template like India's Golden Triangle), then hit Play. Zoom all the way into a pin to watch it cross into street-level 3D. Built with React 19 + TypeScript, three.js, MapLibre GL, and Vercel serverless.

  • 9 devlogs
  • 40h
  • 18.23x multiplier
  • 735 Stardust
Try project → See source code →
Open comments for this post

3h 56m 5s logged

Wanderpin - the first five seconds, final touchups

Everything in this batch is about the moment someone lands: a blank globe is intimidating, so I built a real first-run, made it personal, and fixed a jank I’d been ignoring.

A front door instead of an empty globe

New visitors get a welcome dialog: Plan a trip, or Remember one you took. Either way there are starter templates (a week in Italy, around the world, a California road trip) you can drop in with one tap and start dragging stops around.

Coachmarks that follow the actual UI

A short guided tour spotlights real elements: search, the view toggle, Play. It measures each target’s live bounding rect, re-measures on resize and focus, flips above/below by screen half, and hides itself the moment you focus the search box so it never fights you while typing. Dismissals persist so it doesn’t nag on return visits.

Where it stands

Build’s green, all staged, not yet committed. Next: watch real first sessions, do people tap through a template or skip straight to search?

0
1
208
Open comments for this post

4h 1m 2s logged

Wanderpin - getting routes to leave the ground

Live: https://wanderpin-ecru.vercel.app/

One update, mostly one stubborn visual I’d twice given up on: real lifted route arcs on the 3D map.

Arcs that finally hug the globe

deck.gl’s ArcLayer drifts on a MapLibre globe (it only knows Web Mercator), and my earlier hand-rolled layer compiled, ran, threw zero errors, and painted nothing. The fix came from reading MapLibre’s own shaders: inject its projection prelude and call projectTileFor3D(pos, elevation).

The thing I’d missed every time - elevation is in meters above the sphere, fed through five per-frame uniforms, not a raw matrix. Then the polish fights: a z-fight speckle (fixed by not writing depth), a 50 km minimum lift that made short hops launch like fireworks, and a fat vertical wall at city zoom (now fades out past ~zoom 10).

An optional day timeline

New “Days” view in the trip panel. Weekend trip? You’ll never see it. Month-long? Hit “Organize into days” and stops group into collapsible days you can split, reorder, fit the globe to, or play one at a time. A day is a contiguous slice of the route, so “move to Day 3” repositions the stop and re-normalizes - the route and itinerary stay honest. Days travel on share links too.

Where it stands

Live at site, (Also squashed a deploy bug: one .tsx API route made Vercel type-check the whole api/ folder with no tsconfig - a tiny api/tsconfig.json fixed it.)

0
0
17
Open comments for this post

5h 0m 49s logged

Wanderpin - the globe looked dumb on a 20 km hop, so I taught it to zoom

This batch turns a Wanderpin trip from a thing on your screen into a thing you can send to a friend - with a real link preview, an embeddable globe, and a reel that finally looks good on short hops.

Share a journey, for real

Hit Share and you get a public link (/t/slug) in a box, plus Copy, the native share sheet, and WhatsApp / Instagram / X buttons. The interesting part is what happens when someone opens that link:

  • /t/:slug is server-rendered (api/share.ts) and serves a dynamically generated Open Graph image (api/og.tsx via @vercel/og) - so pasting a Wanderpin link into a chat unfurls into a proper preview card instead of a blank rectangle.
  • There’s an embeddable globe too: /embed/:slug renders just the spinning globe (a tiny route check in main.tsx swaps the whole app for EmbedView), and the share dialog hands you the <iframe> snippet.
  • Shared trips auto-expire after 7 days via a pg_cron job, so the table stays small and old links quietly die.

The reel got smarter - 3D for the short hops

The globe fly-through looks flat when two stops are 20 km apart - the arc is a stub and the camera barely moves. So now the Play reel checks each leg: anything under 200 km crosses into the 3D map (terrain + buildings) with a zoom picked from the distance, longer legs stay as globe arcs. It asks once before playing, and video recording stays globe-only so captures never go blank.

What bit me

  • Instagram has no web “share a link” intent (unlike WhatsApp/X). So the IG button copies the link and opens Instagram - the native share sheet handles it properly on phones.
  • The slug kept vanishing from the URL. A shared trip was calling replaceState("/") the instant it loaded, so /t/slug disappeared mid-playback and you couldn’t re-share what you were watching. Moved that reset onto the “Create yourslongs.
  • The reel switch reused the globe↔3D handoff plumbing, and the type-checker caught a flyTo signature mismatch before it shipped - the map handle wants { zoom }, not a bare number.

Where it stands

It all builds clean, Try it: https://wanderpin-ecru.vercel.app/

0
0
7
Open comments for this post

6h 9m 57s logged

Wanderpin - zoom into the world

Two big things landed this week: the map went from 26 hand-picked places to ~40,000, and zooming into the globe now drops you into a real 3D city.

From 26 places to 40,000 - and they all have a vibe

Wanderpin used to know about 26 famous spots. Now it knows ~40k: cities, towns, UNESCO sites, landmarks, and the world’s most-visited attractions - each tagged with a one-word vibe (Coastal, Alpine, Arid, Heritage, Sacred, Volcanic…).

The fun part is the vibes aren’t hand-typed. They’re derived at build time from real data: a Köppen climate raster (so Cairo reads “Arid” and Athens “Mediterranean”), distance to an actual coastline for “Coastal”, GeoNames elevation/feature codes for peaks and castles, and Wikidata’s annual-visitor numbers to rank “most visited”. Facts come from Wikipedia and UNESCO descriptions. Search is now instant and offline - type “Firenze” and Florence shows up.

The fun part: zoom in and the globe becomes a city

The home view is a space globe (three.js). The close-up is a different engine entirely - maplibre with 3D terrain and buildings. I wired up a level-of-detail handoff between them: zoom into a pin and it crosses from globe to 3D automatically, and zoom back out and it returns to the globe.

The trick to making it not feel janky: when you start zooming in, it quietly mounts the 3D map hidden and lets it pull tiles in the background. Only once the tiles are warm does it crossfade. No blank loading flash.

What broke (twice)

  1. It hung forever in preload. The crossfade waited on maplibre’s idle event to know tiles were ready - but that event sometimes never fires. The globe just kept zooming into black. Fix: commit after a 2.2s fallback even if idle is silent.
  2. The way back never worked. Zooming out in 3D wouldn’t return to the globe. Turned out map.on("zoom") captured the callback once at mount - back when the view was still “globe” - so its if (view !== "3d") return guard killed every event forever. Fix: call the latest callback through a ref.

Both are real bugs that would’ve bitten actual users on slow connections, not just test artifacts.

Where it stands

Globe -> 3D -> globe round-trips cleanly on both laptop and mobile, with zero console errors. Try it: https://wanderpin-ecru.vercel.app/

0
0
7
Open comments for this post

3h 18m 50s logged

Wanderpin - Blog 5 - Update press play, watch your trip turn into a movie

Live: https://wanderpin-ecru.vercel.app/

You drop a few pins on a globe and hit Play - and instead of a checklist, you get a cinematic fly-through you can actually share. This update was about chasing one idea until the app felt alive: the journey is the hero, the logistics hide in a drawer.

The payoff

Play used to just stop. Now it lands: the camera pulls back to frame the route, the arcs light up, and a date-stamped card counts up your distance, stops, countries and time. A little classifier scores the trip and picks the camera - a city hop zooms in, a round-the-world trip shows the marble. You also pick how you travel each leg (walk/train/flight…), which bends both the arc shape and the trip’s duration.

Then three swings: export the fly-through as a video (recorded straight off the globe canvas, no server), “been there” pins that glow gold once visited, and a living globe - a warm daylight terminator plus each stop’s local time and current weather.

What broke

Geocode 500’d in prod, every call. Not a geocoding bug at all: type: "module" means Vercel runs the API as native ESM, and Node demands file extensions on imports. from "./_nominatim" crashed at load. One .js fixed it.

The terminator looked gloomy. Darkening the night side just made an already-night map muddy. I flipped it - glow the sunlit side instead - and it finally read as “half the globe is lit.”

Two suns. Every clear-sky stop showed ☀️ 06:28 · ☀️ 15° - my day marker next to the weather glyph.

ngl used AI to build this image 😛

0
0
23
Open comments for this post

4h 33m 56s logged

Wanderpin - I deleted the spreadsheet

You open the app or you can :) (check it out - https://wanderpin-ecru.vercel.app/ ). A night-side Earth, city lights glowing, a slow spin. You drop a pin in Paris. Another in Tokyo. The arc draws across the globe, and right next to all of that, a panel quietly tells you your dream weighs 2.2 tonnes of CO₂.

That panel was killing the magic. This phase was about fixing it.

The shift

I stopped showing the numbers on the dream surface. Same numbers, just hidden one click deep behind a “Trip details” disclosure. In their place: one warm line that grows with the trip - “4 stops · 4 countries · An adventure taking shape.” You build a journey. The app reacts like it’s excited about it.

Surprise me, the most fun thing the app could do, was buried under a dice icon. It’s the front door now: Take me somewhere. The empty state stopped being homework - “Your map’s a blank canvas, click to start” - and became an invitation: “Where are you dreaming of?”

Drop your very first pin and the app whispers back: “Your journey begins in Santorini ✨”. Hover over a stop and a small card appears: “Why go - its iconic caldera is the rim of a colossal volcanic eruption.” Hit Play and the screen goes cinematic. Full-screen overlay, place name, vibe, progress dots, the route lighting up beneath.

The trip used to be a spreadsheet. Now it’s a memory you haven’t made yet.

The mobile catch

Almost shipped a bug that would’ve made this look broken. On a phone, the empty-state “Take me somewhere” lives inside a bottom sheet. Tap it, and the surprise card was rendering behind the still-open sheet. To the user, nothing happened. To me, a testing pass on an iPhone-shaped viewport caught it the morning of. One-line fix. The kind that disappears in the diff but would have left every mobile user thinking the button was broken.

Where it stands

Empty state, surprise card, first pin, the reel - all warm now. The numbers are still there for the planners, behind one small toggle. The dreamers don’t see them at all.

When Play ends, the camera pulls back, the whole route lights up, and the same numbers I just buried come surging back as a celebration - “You crossed 4 countries. Today, that’s a journey.” Same data, different feeling. The closing frame becomes a postcard you can share.

The whole phase is one belief: people don’t open a travel app because they want to know how many kilometres a trip is. They open it because they want, for a minute, to imagine going somewhere. So show them the somewhere.

0
0
18
Open comments for this post

5h 20m 45s logged

Wanderpin - phase 3: real sharing, and the bug that ate an afternoon

This update gave Wanderpin proper short links, a saved-trips library, and a route optimizer. But the part I’ll remember is a 100 KB mystery.

Short links + a trip library

Sharing used to cram the whole trip into a giant #... URL. Now there’s a tiny Supabase backend: hit Share and you get a clean …/t/aB3xY9 link that anyone can open, no login. Reads come straight from the browser (a public read policy), and writes go through a serverless function with the secret key, so nobody can scribble on the database from the client. When someone opens a shared link, the route flies stop to stop and a little “Make your own” card invites them to start their own.

Click polish

Spinning the globe was dropping stray pins, because react-globe.gl fires a click even at the end of a drag. Added a pointer-distance guard (under ~5px = a real click). Clicking open ocean now offers an “Add anyway” instead of a useless pin, and there’s an “Optimize route” button that reorders stops with nearest-neighbour + 2-opt to cut total distance.

The bug: a 5-stop trip that was 400 KB

Share kept failing in the browser with a 413 (payload too large). But the function worked fine when I hit it with curl. Same 5-stop trip, totally different size.

I had the user dump their saved trip in the console. Five stops. 403,682 characters. Each stop had two mystery keys: __threeObjPoint and __threeObjLabel, ~100 KB each.

Turns out react-globe.gl mutates the data objects you hand it - it bolts the entire Three.js render object (meshes, geometry, materials) straight onto your data. I was passing my live trip array to the globe, so it was quietly fattening every stop by 100 KB, which then got saved to localStorage and sent on publish. The hash link looked fine only because it re-packs specific fields, so it never saw the junk.

Fix was two-fold: hand the globe throwaway copies so it scribbles on those instead of my real data, and sanitize trips to known fields on save/load (which also cleans up the bloated localStorage on next visit). Back to ~1 KB per trip.

Where it stands

Live at https://wanderpin-ecru.vercel.app/ - build a trip, optimize it, save it, share a short link, watch it fly.

Honest caveats: shared trips are snapshots (open a link, get a copy - not live collaboration), and the globe’s three.js bundle is still the heavy chunk (lazy-loaded, so it only hits the 3D view). Lesson logged: never trust a viz library not to mutate your state.

1
0
720
Loading more…

Followers

Loading…