DEV Community

tanizya
tanizya

Posted on

I Built an iOS Stock Prediction App with Claude Code — Here's How It Went

Introduction

Claude Code's coding ability has gotten seriously impressive. I used it to build an iOS app and ship it to the Apple App Store.

In this post, I'll walk through the development process — what prompts worked well, where the bottlenecks were, and what it's like to vibe-code an entire app.

What I Built

Stock HiLo — an iOS app where you swipe cards to predict whether a stock will go up or down.

https://apps.apple.com/us/app/stock-hilo/id6759896635

Swipe up for High, swipe down for Low. After voting, you see the community's prediction. I designed it around a card UI so you focus on one stock at a time — the swipe gesture doubles as both navigation and voting.

I built this because I wanted a quick way to check shifting Mag 7 market caps, chart patterns, and new highs.

Architecture

Here's the high-level architecture and tech stack:

Architecture

Layer Technology
Frontend SwiftUI
Charts Lightweight Charts
Backend Supabase (PostgreSQL + REST API)
Data Collection Python
Pipeline GitHub Actions (weekdays at 5 PM EST)
Ads Google AdMob

Fully serverless on free-tier plans. Data updates run via GitHub Actions cron, and the API is Supabase's built-in REST API.

Deep Dive

Development Approach

My first prompt was essentially: "Yo! Let's build an iOS app! It's a stock app, the UI should be Tinder-like with swipe to..." — dumping the entire mental image into one big prompt to get a prototype.

I considered starting with a spec-driven approach, but decided to ride the initial impulse for this side project. Pure vibes, let the AI code.

Charts: TradingView Lightweight Charts

Candlestick charts are rendered using TradingView's Lightweight Charts inside a WKWebView.

Splash Screen: HTML/CSS Animation

The splash screen uses SVG animated with HTML/CSS inside a WKWebView — an isometric animation of cards flying out of a phone.

Splash Animation

I didn't know the word "isometric" at the time, so I told Claude Code: "Make it look like that old AWS logo thing — the tilted, 3D-looking style, but make it fancy." Claude responded with: "I wrote you an isometric splash screen."

There's something called the Joshua Tree effect — once you learn the name of a street tree is a Joshua tree, you suddenly notice them everywhere. It's the "there are 200 shades of white" moment.

If you don't know the name of something, you can't write a precise, colorful prompt for it. I think the next generation of full-stack engineers will get more leverage from AI by learning design vocabulary — words like haptic, parallax, glassmorphism. You may not need to know that glassmorphism is built with blur and transparency, but you need to know what visual effect "glassmorphism" refers to.

Back to the point: while this splash screen plays, the app preloads chart data for the first tab.

Supabase

Just 2 tables and 1 view:

  • cards — stock data (price, chart data, signals)
  • votes — user votes
  • vote_counts — aggregated vote counts (database view)

The app hits Supabase's REST API directly. Just a GET request with the anon key — no SDK needed.

var request = URLRequest(url: url)
request.setValue(anonKey, forHTTPHeaderField: "apikey")
request.setValue("Bearer \(anonKey)", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
Enter fullscreen mode Exit fullscreen mode

When you create a table in Supabase, it automatically generates a REST endpoint at https://<project>.supabase.co/rest/v1/<table_name>. You get full CRUD without writing a single line of backend code.

SwiftUI: Card Swipe UI

This was the most time-consuming part, and where the most tokens were spent.

The design is inspired by playing cards — rank (A, K, Q...) and suit (♠♥♦♣) in the top-left corner, with a flipped ticker in the bottom-right.

Card UI

When you swipe up, the next card's ticker peeks out from the bottom, so in a market-cap-sorted deck, you can guess the next card and quickly browse through charts.

The header layout required meticulous tuning, even with vibe coding. AI is still weak at visual precision.

I had to specify margins in pt, and when placing the Ace of Spades rank and suit in a VStack, the second line got pushed too far down — so I suggested "try a ZStack instead" and "use a negative offset." That kind of frontend knowledge still matters when you want to nail a layout in a single turn.

App Store Connect

Claude Code can't interact with the App Store Connect website, so this was where I felt the human bottleneck most acutely.

There were hallucinations too. App Store Connect auto-publishes when the status reaches "Ready for Distribution," but Claude Code — even with Opus 4.6 — told me to wait for a "Distributing" status that doesn't exist.

Other gotchas: what AdMob calls "Developer Website" is called "Marketing URL" in App Store Connect. These kinds of platform-specific mismatches tripped up the AI frequently.

In-App Ads: Google AdMob

I used Google AdMob for in-app ads.

AdMob requires an app-ads.txt file at the root of your developer website. I hosted mine on GitHub Pages to keep costs at zero.

Google's crawler took quite a while to pick it up. Now that AI makes coding faster, waiting days for external processes felt even more painful.

Performance Optimization

The AI's first draft was painfully slow — both cold start and cached. But when I asked "list every performance improvement you can think of and implement them one by one," it spent about 20 minutes heads-down coding. This is where AI truly surpasses humans.

  1. Cache-first — Show disk cache immediately, update in background
  2. Chart preload — Load first 2 cards during splash screen
  3. Optimistic updates — Votes reflect in UI instantly
  4. Fetch cooldown — 60-second cache on vote data per tab

Reflection

The first time I tried iOS development was back in the iOS 5/6 era with Objective-C. I wanted to build culturally cool apps like RapBot or iDaft, but Xcode and Objective-C were a terrible developer experience, and my skill set — battle-hardened by legacy Struts 1.x systems at a Japanese megabank — didn't translate at all. I could barely get past a Hello World.

Even so, seeing my own creation running on a real device was thrilling. I proudly posted it on Instagram.

Old app

My programming life has been a constant battle against error messages. I failed a year in college, and I still occasionally dream about my thesis code not compiling.

Claude Code completely transformed that experience. It blew away everything I hated about programming.

AI coding tools are great for work, but I think they shine even brighter in side projects.

Happy vibe coding to you all!


Stock HiLo is live on the App Store. Give it a try — feedback is welcome!

Top comments (0)