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:
| 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.
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)
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.
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.
- Cache-first — Show disk cache immediately, update in background
- Chart preload — Load first 2 cards during splash screen
- Optimistic updates — Votes reflect in UI instantly
- 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.
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)