Primo Surf Forecasts
Surf forecasting for San Diego, Ca

SnapshotROLE SCOPE OUTCOME STACK | ||
Solo-built a native iOS surf forecasting app, marketing website, cartoon characters and comic strips.

AI enabled workflow
Primo was designed & built using AI tools first, then I filled in any gaps using traditional design tools.
Using AI tools expanded my capabilities, as well as optimized the entire design & build workflow
Using my new AI enabled workflow has made it possible for me to ship a production iOS app by myself, in about 1/2 the time it would take a team to do it using a traditional workflow, at a fraction of the cost.
Traditional Workflow
| AI Enabled Workflow
|
Every AI tool earned its spot in the workflow. Enabling capabilities and/or compressing timelines at every stage.
Research
Perplexity
Product strategy, system design, software architecture, prediction models, code generation, code review
Claude, Claude Code, Gemini
UX, UI, design system
Claude, Claude Design, Lovable
Visual design
Midjourney, Gemini, Lovable
Data & processing pipelines
Claude, Claude Code, Make.com
Database & backend
Claude, Claude Code, Gemini, Supabase
Marketing Website
Framer, Gemini
Product design
Primo centers on three views that aligns with how surfers actually think about surf checks.
Map, Break Detail, Lineup

Map
What's happening everywhere, right now
Break Detail
Everything about one spot, today and over the next 7 days
Lineup
Favorite breaks at a glance, today and over the next 7 days
Native iOS design
The iOS app is really a web app in a Capacitor wrapper. Enabling native iOS features that make it look & feel native.
Haptics feedback on key interactions
Geolocation
Bottom sheet UI
Universal Links and Open Graph previews for sharing
Alignment with Apple Glass design system
Data
Primo runs on four data pipelines, four proprietary prediction models, and a data processing pipeline. All processing happens upstream, amd displayed data is simply pulled from the database. So, no device resources required. And load times are laser fast.
Data pipelines

Each pipeline is its own Make.com scenario. I broke them into small, chained flows on purpose. So, if one fails it doesn't bring everything down. Also, troubleshooting and remediation is faster/easier.
Prediction models
I created four proprietary prediction models that generate 40,000+ predictions for 68 surf breaks throughout San Diego County every day.
Wave Energy
How much energy is transferred from a wave when it breaks on the shore. Measured in kilojoules (kJ).Wave Height
How tall the waves are. Measured from the front (face) of the wave.Surf Conditions
Wave shape quality (Poor, Poor-Fair, Fair, Fair-Good, etc).Beach Water Quality
How much bacteria/pollution is in the water.
Data processing pipeline

Wave energy and surf condition prediction values are processed sequentially once all pipelines execute.
All data and processing pipelines are fully automated and execute at predefined times daily. I also developed a custom monitoring and observability layer that alerts me of any errors/incidences.
Apple App Store
Using Claude, I was able to gain App Store approval upon the first attempt. Product page content was produced mostly using Claude. Product page images where designed manually in Figma.
Product page images

Creating a cartoon character

To give Primo it's own personality, and bring a human element to the product I created Bodhi, The Bodhisattva. A personal surf sherpa. Bodhi can be found in app providing users with recommendations, with a SoCal vibe.
I created Bodhi using both Midjourney and Nano Banana. He was created using AI, but his recommendations and phrases are powered by traditional algorithms (for now).
Comic strip content pipeline
Primo has TikTok, Instagram and Facebook accounts. Based upon data analysis I was able to determine what type of content gets the most views/interactions, which resulted in the creation of comic strips.
I created Rush, a protagonist to counter balance Bodhi's wisdom and mindfulness. Comic strip scenarios are based on true life stories (some my own, some from surfer interviews).
I then created an AI generation pipeline that automatically produces 3 layout variations of a single scenario for use across the marketing website and social media accounts.
5 frame (16:9) for the primo.surf website
3 frame (4:5) for Instagram and Facebook feeds
3 frame (9:16) for Instagram Reels, TikTok, and Facebook Reels
One pipeline, four channels, minimal work.
Same characters, same world, same look. Built using Nano Banana and orchestrated end-to-end so I can type in a scenario and get all outputs back automatically…on demand…in minutes.

Locking in the comic strip universe

Generative image models can, and do, hallucinate & drift. Eyes drift, age changes, outfits warp, environments don't match between panels.
For a recurring character-driven comic, that's a death sentence, Rush has to look like Rush, Bodhi has to look like Bodhi, the beach has to look like the same beach.
I built a local, layered prompt system using Claude & Gemini that locks the entire cartoon universe.

Character locks
For Rush and Bodhi, defining facial structure, build, hair, signature outfits, and aesthetic, reused on every generationEnvironment lock
That holds the visual world consistent across episodes, the same San Diego coast, the same lineup, the same moodStyle anchor
For line work, color palette, lighting, and texture, so every panel reads as part of the same comicTypography lock
For dialogue and captions, consistent fonts and treatment across all panelsPer-panel layer
For pose, expression, scene, and lightingNegative constraints
To prevent unwanted artifacts, no logos, no extra characters, nothing random
A scenario goes in. Three channel-ready comics come out. Effectively creating an entire creative and marketing team that scales.
Marketing website

www.primo.surf is a conversion engine for the iOS app. Built using Claude Code and Lovable, the site does three jobs:
App Store Product CTAs
Funneling visitors to the Primo product page in the App StoreApp preview
A light version of the iOS map experience + break detail pages.Stories section
A permanent home for every Bodhi & Rush comic episode, indexed and SEO friendly.
This is a deliberate funnel. SEO and social media bring people in. And the free preview gives visitors genuine utility on day one.
Marketing campaigns
I designed Primo's Summer 2026 marketing plan and recruited a small team to help execute it.
As the founder, I'm both the product designer/engineer and marketing director. Building the systems for both halves of the business.
Marketing goal: User Acquisition
Three coordinated pillars:
Drive Engagement
Weekly comic strips built from real local surf stories. The team conducts and films field interviews with San Diego surfers; the best stories become comic strip episodes through the content pipeline.
Build Trust
Forecast accuracy validation. Field interviews paired with Primo screenshots comparing predictions against actual observed conditions.
Promote Downloads
A RUSTY SD surfboard giveaway. In-app entry form went live May 12, winner announced July 19.

Outcome
Native iOS app launched in the Apple App Store in March 2026. Available for both iPhone and iPad
4.2 star rating in App Store
68 surf breaks covered across San Diego County
40,000+ predictions generated daily, fully automated
Comic strip content pipeline is performing as expected
Summer 2026 marketing campaign just kicked off
What I'd do differently
I would have written the app in Swift, to save the capacitor wrapper, and gain full access to all native iOS features.
Wish I could have extended beta testing to tune the prediction models further before launch.
I would have started development using Claude Code instead of Lovable. Lovable doesn't support native app development, just web apps.
Why this matters
Primo is a proof point. A lead designer with AI capabilites, automation chops, and 20+ years of product sense can now ship a production quality, consumer app.
Design, frontend, backend, data pipelines, marketing automation. All achieved solo in 9 months. Not because AI replaces the craft. Because it compresses the execution gap between good idea and live product. That's the real case study.

