Photo: Unsplash
From Idea to Published App in a Weekend — With AI on a Mac
Let me state the title’s honest caveat upfront, because I promised no bait-and-switch: “published in a weekend” means submitted Sunday night. Apple’s App Review takes 1–3 days no matter how fast you or your AI work, and Apple Developer Program enrollment can take 24–48 hours to activate if you’re not already enrolled. If you start from zero on Saturday morning, your app goes live Tuesday or Wednesday. What the weekend genuinely delivers: a working, tested, submitted app — and a TestFlight build in friends’ hands by Sunday afternoon, which for most indie projects is the real milestone.
With that on the table: here’s how I shipped PasteClean — a menu bar utility that strips tracking parameters (utm_*, fbclid, and friends) from URLs in the clipboard — in one weekend, with an AI agent writing perhaps 85% of the code. Real project, real timeline, real numbers.
Saturday 9:00–10:00 — The brutal scoping conversation
The single highest-leverage AI hour of the weekend involves zero code. Most weekend projects die of scope, not difficulty. So before anything else, I make the AI my scope executioner with this prompt — steal it:
I want to build and submit a Mac app in one weekend (~16 working
hours). I am one developer with an AI coding assistant. Here is my
idea: [IDEA + full feature wishlist].
Your job is to be brutal:
1. Cut the feature list to what fits in 16 hours INCLUDING App Store
assets, testing, and submission overhead (~4 hours of that total).
2. For every feature you keep, state the riskiest unknown.
3. For every feature you cut, tell me why v0.2 is the right home.
4. Define "done" as a one-sentence acceptance test.
Do not be encouraging. Be a skeptical senior engineer reviewing a
junior's sprint plan.
My wishlist had nine features. The model (Claude, in this case) kept three: clipboard watching, parameter stripping with a built-in rule list, menu bar toggle. Cut: custom rules UI, history, iCloud sync, stats, launch-at-login config (it kept launch-at-login itself — one API call — but cut the settings UI). The acceptance test it wrote: “Copy a URL with utm parameters from Safari; within one second the clipboard contains the clean URL and the menu bar icon flashes.” That sentence steered the whole weekend.
The platform choice matrix, briefly, because it’s decision #2: a web app if your idea is forms-and-data (fastest agent loop, no review process, “published” Sunday is literal). A Mac SwiftUI app if it needs system access — clipboard, menu bar, files, hotkeys (my case). An iOS app only if you’ve shipped one before; provisioning and device quirks eat weekend hours. AI agents are excellent at SwiftUI in 2026, but the training data is thinner than for React, so expect slightly more babysitting.
Saturday 10:00–18:00 — Scaffold, then the loop
I ran the build with an agentic CLI tool driving Xcode-buildable sources (Claude Code in my case; Cursor or aider work the same way for this). First instruction: project skeleton — MenuBarExtra scene, an observable ClipboardMonitor polling NSPasteboard.changeCount on a 0.5s timer, a URLCleaner with the rule list, unit test target. Twenty minutes in, it compiled. Lunchtime Saturday, the acceptance test passed for simple URLs.
Then the real work: the review-and-steer loop, and here’s the part everyone glosses over. “Vibe coding” — accept whatever the agent writes, keep prompting forward — genuinely works for v0.1. The codebase fits in the model’s context, the architecture is whatever it chose, contradictions haven’t accumulated. By v0.3, vibe coding bites: the agent has three half-consistent patterns for the same problem, dead code from abandoned approaches, and it starts “fixing” bugs by adding a fourth pattern. Saturday at 16:00 I hit exactly this — clipboard handling existed in two places with subtly different rules. The fix wasn’t a cleverer prompt; it was me reading the code for 30 minutes and dictating a refactor: one URLCleaner, pure function, exhaustively unit-tested, everything else calls it.
My loop rules, earned the hard way: review every diff (skim, don’t pore — you’re checking architecture drift, not semicolons), keep tests green between every prompt (xcodebuild test after each change), and never let the agent touch more than one concern per prompt. Saturday ended at 18:00 with a working app, 14 unit tests, and edge cases handled — nested URLs, already-clean URLs, non-URL clipboard content, and a fun one the agent caught in its own test ideas: URLs where utm_source appears in the fragment, not the query.
Sunday 9:00–13:00 — Polish and the assets AI is weirdly great at
Sunday morning: app icon (30 minutes — generated concepts with an image model, rebuilt the winner as clean vectors in Sketch, because raw AI output at 16x16px is mud), empty states, a one-screen onboarding, and SMAppService for launch-at-login.
Then App Store assets, where AI saves more time than it does anywhere except code. In one session I generated: the App Store description (prompt: “Write a Mac App Store description for [app]. Hook in the first two lines — that’s all that shows uncollapsed. No hype words: revolutionary, seamless, supercharge. Feature bullets with concrete benefits”), keywords within Apple’s 100-character field, screenshot captions, and the privacy policy draft — PasteClean collects nothing, and the model produced a clean GDPR-aware no-data-collected policy I read fully and edited lightly. AI-drafted, human-owned: a privacy policy is a legal commitment, so the ten minutes reading it are not optional. Bonus for me: the model translated the description into natural Czech for localization in about a minute — my own translations always come out stiff, and Czech App Store listings are a tiny, underserved niche.
Screenshots themselves: cleaned up with the free Shottr app and a 2-minute Figma frame template. Total Sunday-morning asset time: about 2 hours, versus the full day this took me pre-AI.
Sunday 13:00–18:00 — TestFlight, then the button
The unglamorous remainder, with realistic timings:
- 13:00 — Archive in Xcode, upload to App Store Connect. First upload always finds something; mine was a missing usage description and a hardened-runtime entitlement. AI diagnosed both error messages instantly. (45 min)
- 14:00 — TestFlight build live. This is the true weekend deliverable. Four friends installed it within the hour; two bug reports by 16:00 (one real: a crash on clipboard content over 1MB — fixed, re-uploaded).
- 16:30 — App Store Connect metadata: description, keywords, screenshots, privacy nutrition labels (PasteClean: “Data Not Collected,” the nicest label there is), pricing (free), review notes explaining why a clipboard app reads the clipboard — write these carefully, they prevent rejection round-trips.
- 17:40 — Submit for review.
Status Sunday 18:00: submitted, TestFlight live, 19 unit tests, ~1,400 lines of Swift of which I personally typed maybe 200. The review came back in 41 hours — approved — and PasteClean went live Tuesday morning.
What AI compressed, and what it can’t
The honest ledger. AI compressed: scaffolding (10x faster), feature code (3–5x), App Store copywriting (5x), error diagnosis (huge — every cryptic codesigning error explained in seconds), and test writing (it suggests edge cases I’d skip). AI cannot compress: Developer Program enrollment (do it Thursday if your sprint is Saturday — $99/year, up to 48h activation), App Review (1–3 days, fixed), human taste (the icon, the empty-state wording, the decision of what not to build), and accountability — every line ships under your name.
A solo developer in 2026 with an AI agent and a Mac genuinely covers the ground a three-person team covered a few years ago. The weekend app is real. Just remember which parts of “published” run on silicon and which parts run on Cupertino’s clock — and aim your Sunday-evening victory beer at the TestFlight notification, not the App Store listing.
One email a month: the upcoming live event + free recording access for subscribers. No spam, unsubscribe anytime.

