iOS App · Full-stack

The Weather App That Tells the Truth

Designed, built, and shipped a full-stack iOS weather app from prototype to App Store in 6 weeks.

LucidSky home screen with current conditions, AI forecast, precipitation map, and hourly strip

Executive Summary · Live on the App Store

From idea to App Store in 6 weeks

I conceived, designed, and shipped LucidSky in 6 weeks. Every layer was mine: product strategy, UX design, full-stack engineering, App Store submission, and ongoing operations.

The original prototype was called ClearCast, a proof of concept to test whether forecast uncertainty felt useful. It did. Six weeks later it was on the App Store as LucidSky.

Finding the Idea

What Reddit research surfaced

  • A post about weather warnings behind paywalls got 1,148 upvotes
  • Apple killed Dark Sky in 2023 and millions of users are still looking for a replacement
  • The NWS publishes the best forecasts in the country, including uncertainty reasoning, but has no app and terrible mobile UX
  • No consumer weather app shows forecast confidence. Every app commits false precision.
  • Large language models (LLMs) can now translate technical forecast discussions into plain language at near-zero cost

The Problem

Weather apps lie. Not with wrong numbers, but with false confidence.

Forecasts produce ranges, not single numbers. That “72°” might span 65° to 79°. Meteorologists know this and write about it daily in National Weather Service (NWS) forecast discussions. No consumer app was surfacing any of it.

How might we show what forecasters actually see?

The Solution

See the range, not just the number

In Honest Mode, every forecast shows the actual range of possible outcomes. Tomorrow's high might be 42–44°. Five days out, it widens to 28–50°. That spread isn't a bug. It's the forecast telling you when to plan confidently and when to leave wiggle room.

Prefer a clean look? Classic Mode is always one tap away. LucidSky doesn't force transparency on you. It just makes it available.

Wind metric showing confidence bands on the 7-day forecast with hourly wind speed chartAir quality index (AQI) metric showing confidence bands on hourly air quality chart for Los Angeles
AI forecast discussion showing rain event with What Changed, Outlook, and Forecast Confidence sections

What your meteorologist actually thinks

The NWS publishes forecast discussions several times a day. LucidSky uses Claude AI to translate them into plain-language summaries: What Changed, Outlook, and Forecast Confidence.

Model comparison tab showing temperature, precipitation, and wind across NWS, ECMWF, GFS, ICON, and GEM models

See where 9+ models agree. And where they don't.

When the major models—ECMWF (European), GFS (American), and HRRR (hourly)—agree, plan with confidence. When they diverge, bring a backup plan. The Compare tab shows all models side by side.

Live precipitation radar showing rain across the Boston area24-hour precipitation forecast map showing rain, snow, and mixed precipitation

Watch it move in real time

Animated radar with 2 hours of history and a 30-minute look ahead, updated every 5 minutes. A 24-hour precipitation forecast map shows where rain, snow, and mixed conditions are headed next.

Minute-by-minute nowcasting shows when the rain will hit and how intense it'll be. Useful for the 15-minute window when decisions actually matter.

Plan for a specific day, then watch the forecast evolve

Pick any future date and track how the forecast changes as it gets closer. Uncertainty bars narrow as the date approaches, and AI-narrated updates explain why the prediction shifted.

Useful for weddings, trail runs, camping trips, or any plan worth tracking.

Date forecast tracker showing uncertainty bars narrowing as target date approaches with AI-narrated changes7-week seasonal outlook showing temperature ranges compared to 30-year normals
7-week seasonal outlook showing temperature ranges compared to 30-year normalsExplore tab showing river discharge, ocean conditions, and solar noon

A 7-week outlook. No other weather app does this.

Most apps stop at 10 days. LucidSky shows a 7-week seasonal outlook against 30-year historical averages. See whether you're heading into a warm stretch or a cold one.

The Explore tab adds everything else most apps skip: moon phases and planet visibility, river discharge levels, ocean swells and tides, solar noon, air quality, and celestial events. Most weather apps ignore all of it.

iPad and accessibility, done properly

iPad gets a real layout, not a stretched phone screen. Dynamic Type scales every text element with the user's accessibility settings. Light and dark modes both feel intentional.

iPad showing LucidSky in light and dark mode side by side, Portland, with precipitation forecast

Outcomes

Stay tuned

LucidSky just launched. Check back here for results as they come in.

Learnings

What building this taught me

User-oriented

Honesty is a feature. Every time I showed someone the confidence ranges, the reaction was the same: “why doesn't my weather app do this?”
Real users don't use default settings. Testing with family surfaced large font sizes I hadn't designed for. More users have accessibility settings on than you'd expect.
Most apps don't need authentication, and weather apps definitely don't. I carried authentication from web to mobile without questioning it. Users pushed back: weather apps just work. Login is now only required for email alert subscriptions.
Good ideas get validated by the market, even when that's someone else. My first commit predates Acme Weather launching. One of their top value propositions is uncertainty visualization. The problem was real, the timing just didn't go my way.

Technical

Design the API first. One backend serving both web and mobile meant iterating once and both platforms benefited.
Platform constraints force creative shipping. Apple Maps in React Native doesn't support animated layers you can pan and zoom. So I split it: animated radar on the home screen, a static pannable map when you tap in.
Sometimes the only answer is to build the infrastructure yourself. The only API with animated radar tiles covering wind, snow, and rain was RainbowAI, too expensive at scale. So I built my own: EC2 processing tiles, stored in Cloudflare R2, served through my own API.

Built with Claude Code

10 custom skills for shipping and maintaining a production app

Each skill is a reusable Claude Code command I wrote to automate quality checks, testing, compliance, and releases.

/a11y-audit

Scan UI for accessibility violations and auto-fix across mobile and web

/app-store-audit

Full audit against all 9 categories of Apple App Store Review Guidelines

/app-store-pr

Quick pre-merge check of PR changes against App Store guidelines

/arch-audit

Detect duplicated logic, shared-first violations, and architecture drift

/e2e

Run Maestro end-to-end tests on the mobile app

/gen-tests

Auto-generate Vitest/Jest test suites for specified files

/legal-audit

Audit privacy policy, ToS, and credits pages against implementation

/pre-flight

Quick review of all changes on current branch across 7 categories

/release-notes

Generate App Store release notes and copy from changes since last release

/screenshots

Automated App Store screenshot capture via Maestro

Architecture

One API. Two apps.

A Turborepo monorepo with a shared TypeScript package keeps web and mobile in sync. A single Next.js API layer orchestrates weather data from multiple sources, translates NWS discussions with Claude AI, and proxies radar tiles through Cloudflare R2.

Want to see more?

Get in touch with me to see my in-depth case studies.

to navigate projects · H for home

Streamlining DesignEarly Work at Fathom