← Back to all cases
Mobile App · Web · iOS & Android

Wayly — explore your world

A map tracker that turns everyday walks into world exploration — on the phone and in the browser.

Wayly blends a fitness tracker with a fog-of-war map: you don't just record a run — you uncover territory, plan routes and watch a personal map of the world light up, step by step. I took it from concept to a working product on a real device and the web, solo: product strategy, design system, UI — and the Flutter and Next.js code that runs it.

Role
Product Designer & AI Design Engineer
Solo — strategy → design → code
Type
Mobile app + Web (iOS · Android · web)
Timeline
2026 — ongoing
Live
Wayly — explore the world, uncover your territory
01 — Context

The market is split in half — and nobody bridges it.

There are two camps of apps, and they don't talk to each other. Fitness trackers — Strava, Garmin, Nike Run Club — give you precise metrics, pace and social. But the moment a workout ends, the map goes dead: the run is logged, and that's it. Explorer apps — Fog of World, Jagat — have a beautiful map-reveal mechanic but a thin sport layer: no real workouts, no elevation profile, no route planning.

The insight it all started from: people who run and hike want their activity to accumulate into something visible. Not abstract kilometres in a table — a personal map of the world they slowly light up.

Discover your worldWayly — discover your world
The positioning: an app for exploring the world, not just logging kilometres.
02 — Challenge

Constraints I designed around from day one.

Building solo means every constraint is also a design decision.

01

One codebase, two platforms

Solo build → iOS and Android from a single stack. That choice (Flutter) shaped the component model before the first screen existed.

02

Background GPS eats battery

The #1 killer in this product category. It had to be a design constraint, not a bug found after launch.

03

The map must always stay primary

So the whole UI is an overlay on top of the map — never separate pages that replace it.

04

Offline is the real use case

Trails and mountains have no signal. Recording must work with no internet and sync later.

03 — My role

Not "design it, then hand it off."

This isn't a classic designer-to-developer case. The value is precisely that the line between design and implementation is erased — I designed a solution and immediately verified it in code.

The design system wasn't born in a Figma vacuum: it came to life directly as a theme config and a set of Flutter widgets. When the iOS build crashed on launch, I diagnosed and fixed it myself — which means I owned the whole path from "drawn" to "runs on a real device."

Product strategy

Concept, persona hypotheses, a four-phase roadmap and the monetization model.

UX architecture

Screen map, navigation, state machines and edge cases — specified before the UI.

Design system & UI

Tokens, typography, spacing and components — authored as a real Flutter theme, not a static library.

Interface engineering

Building the app in Flutter (Riverpod, Go Router), integrating the map, GPS and the fog layer.

04 — Key decisions

Four calls that defined the product.

Decision 01

Hexagons, not a square grid

The fog of war runs on H3 hexagons at resolution 11 — roughly a 50 m radius per cell. Every GPS point maps to a hex index and marks that cell uncovered.

Hexagons read as more organic than squares, and they scale cleanly from a single street up to a whole country — which matters when the same mechanic has to feel right at both zoom levels.

The map is the product. Everything else is an overlay on top of it.
Fog of warColour your map — the fog-of-war layer
Colour your map — the app tracks your movement and uncovers the fog as you go.
Decision 02

A track that uncovers fog

Route recording is integrated with the fog layer: every point of a tracked route reveals the map around the path. None of the reference apps do this — it fuses navigation and the explorer mechanic into a single loop, so planning a hike and uncovering the world are the same action.

Planned and tracked routesExplore the map and collect prizes
Planned and recorded routes live on one map — and exploring it earns collectibles and points.
Decision 03

The route builder as a state machine

The route mode is the deepest part of the product, so I spec'd it as a standalone UX document — modelled as a state machine, which is a design and an engineering decision at once: Idle → Planning → Calculating → Preview → Navigating.

The user moves through it linearly but can always step back. A bottom sheet with three snap points (30% / 50% / 85%) keeps the map visible at all times and lets a single gesture control how much information is on screen. In trail mode the elevation profile is shown by default, because that's the product's signature scenario.

I specified the unhappy paths up front — no GPS permission, no route found, offline without a downloaded region, signal loss mid-navigation — so they were part of the design rather than a bug discovered in production.

Decision 04

Usage rules, not just a palette

The system is dark-first, map-centric and glassmorphic: panels float over the map as translucent surfaces so the sense of space survives.

But the important part is the constraints. The accent green is used only for GPS tracks and progress — never for CTAs. The reward amber is used only for achievements — never for navigation. Rules like these are what separate a design system from a colour palette, and they resolved most downstream decisions on their own.

Progress — countries and regions exploredProfile — level, XP and awards
Progress and profile — the "% of the world uncovered" stat is the product's core retention hook.
05 — The web version

The same world, now in the browser.

An app that lives only in the stores has a ceiling: you can't link to it, search engines can't see it, and planning a big trip on a phone screen is cramped. So I built a web version of Wayly — not a marketing page, but the product itself running at wayly.cc: the map, the fog of war, route planning, your activities and stats, all in the browser.

The rule was continuity: it had to feel like the same product, not a website about it. Same account, same data, same visual language — dark-first, map-centric, glassmorphic — just re-thought for a large screen, a mouse and a keyboard. I designed and built it solo in Next.js, deployed on Cloudflare, so it stays fast and near-zero cost.

wayly.ccWayly web — landing at wayly.cc
The live web product at wayly.cc — the same map-first, dark visual language as the app.
Fog-of-war explore map on the webActivities dashboardStrava, Garmin Connect and Suunto integrations
The explored world, the activities dashboard and watch sync — Strava, Garmin Connect and Suunto — all in the browser.

One account, one world

The web reads the same Supabase backend as the app. Your fog, recorded tracks, saved places and stats are identical whether you open the phone or the browser — sign in with Google or email and it's just there.

The map stays primary — on a big screen too

The desktop layout keeps the full-bleed map with floating glass panels, the same principle as the app, adapted to pointer input: hover states, scroll-to-zoom, drag-to-pan, keyboard-reachable controls.

Planning built for pointer + keyboard

The route builder is rebuilt for precision — A→B with mode switches (walk · bike · car · trail), draggable waypoints and the elevation profile. Planning a long trip is genuinely easier on a large screen than on a phone.

Share a link, not a screenshot

The web's superpower over an app: any track or route becomes a public, shareable URL that opens in any browser — with correct OG previews — so a plan or an adventure can be sent to anyone, no install required.

Route plannerWayly web — the route planner
The route planner, rebuilt for the desktop — click to drop points that snap to trails, with distance, time and elevation live at the bottom.

What I thought through for the web.

01

Responsive, not just shrunk

Two real layouts — a desktop map-with-panels and a phone-web view — not one design squeezed. The bottom-sheet logic of the app becomes side panels on desktop.

02

Activities dashboard

Every hike and run in a sortable list — distance, time, pace, elevation — and one click replays the track on the map. Plus the "% of the world uncovered" stat as the retention hook.

03

Place & photo discovery

Geotagged photos and points of interest scattered across the explored map, AllTrails-style — a reason to zoom in and keep exploring.

04

Localised & discoverable

UK / EN / PL out of the box, real OG images and metadata for link previews, and a "download the app" bridge for visitors who land on the web first.

05

Watch & service sync

Connect Strava, Garmin Connect and Suunto so activities flow in automatically — the web is where connecting accounts actually feels comfortable.

06

Cheap and fast to run

Next.js on Cloudflare (OpenNext) — server-rendered where it helps SEO, static where it helps speed, near-zero hosting cost at this stage.

06 — Outcome

From concept to a product on a phone and the web.

✓

A working Flutter app — map with the fog layer, GPS tracking, activity recording and summary, route builder, profile and achievements.

✓

A live web version at wayly.cc — the same map, fog, route planner, activities and stats in the browser, sharing one account and design language with the app.

✓

A design system authored as code — tokens, spacing and radius scales, button variants and glass components, shipped as a Flutter theme rather than a static library.

✓

A full UX spec for route mode — four phases, edge cases and the elevation profile — written before the UI was built.

✓

An energy-aware GPS architecture — motion detection instead of constant polling, so the app isn't burning the battery while you stand still.

✓

A freemium model that keeps the user's own data free forever, with Pro and lifetime tiers on top — plus the legal package needed for the stores.

Takeaway

Design-as-code collapses the loop.

When the design system is born directly as a theme and widgets, a whole category of handoff losses simply disappears. AI was a lever here, not autopilot — it accelerated architecture, boilerplate and build debugging many times over, but the decisions that define the product (hexagons over squares, a track that uncovers fog, strict colour-usage rules) were human ones. Constraints — battery, offline, "the map is always primary" — cut off dozens of wrong directions before the first mockup existed.