Everyone sees the group photo before it's taken.
All Hands on Deck is an iOS-first group photo app with a live shared viewfinder. One person sets up their iPhone as the camera; everyone else sees the frame in real time on their own devices — natively on iOS/watchOS or in any browser, with no installation required.
Built and maintained by LeopardCode.AI.
This app was built end-to-end through agentic coding with Claude Code — describing intent, reviewing AI-generated implementations, and steering iteration by iteration. No Swift, TypeScript, or SQL was written by hand.
The hypothesis: can a solo developer with an idea, a capable AI coding agent, and zero infrastructure budget ship a real, multi-platform product — iOS, watchOS, and web — without a team?
Stack — 100% free and open source:
| Layer | Technology | Cost |
|---|---|---|
| iOS + Watch App | SwiftUI, Multipeer Connectivity, Vision | $0 |
| Web Viewer | Vite, React, TypeScript | $0 |
| Project Config | XcodeGen | $0 |
| Realtime Backend | Supabase (free tier) | $0 |
| Web Hosting | Vercel (free tier) | $0 |
| CI/CD | GitHub Actions | $0 |
| AI Coding Agent | Claude Code | — |
The result: a fully functional group-photo app with live viewfinder streaming, AI-powered best-shot burst capture, face-in-frame detection, Apple Watch remote control, universal links, reactions, install-free web viewers, and a complete test suite — without a backend bill.
| iOS — Home | iOS — Viewer (live frame) | Web — Captain | Web — Viewer (live frame) |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
The green surface in the two web shots is a test image, not the app. Both were taken by a scripted run against a real session, and the captain's camera in that run is Chrome's fake capture device: a plain green field with a shape drifting across it. That is what the viewer then receives, which is the point of the second picture. With a real camera the same areas show the camera.
Retake them with npm run shoot in webapp/. The script opens the captain
page, waits for the session to go live, reads the session code off the page and
joins the viewer on it, so both pictures always come from the same session. It
needs Supabase credentials in webapp/.env.local; without them the captain
page never reaches LIVE and the script stops instead of saving an empty picture.
npm run shoot -- --dry-run opens everything and writes nothing.
- Live shared viewfinder — every participant sees the camera frame in real time
- AI best-shot capture — burst capture with Vision-based selection of the best frame
- Face-in-frame detection — confirms everyone is visible before the shot
- Apple Watch remote — trigger and monitor the session from the wrist
- Install-free web viewers — join via universal link in any browser
- Reactions — real-time feedback from viewers to the photographer
# iOS
xcodegen generate
xcodebuild -project AllHandsOnDeck.xcodeproj -scheme AllHandsOnDeck \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro Max' build
# Webapp
cd webapp && npm ci && npm run dev
# Server (optional)
cd server && npm ci && npm run dev| Directory | Purpose |
|---|---|
AllHandsOnDeck/ |
iOS app (SwiftUI) |
AllHandsOnDeckTests/ |
XCTest unit tests |
AllHandsOnDeckUITests/ |
XCUITest UI tests |
AllHandsOnDeckWatch/ |
Apple Watch companion app |
webapp/ |
Vite + React web viewer |
server/ |
Node/TypeScript signaling & token server |
supabase/ |
Database migrations & configuration |
scripts/ |
E2E test & utility scripts |
docs/ |
Full documentation |
Tech stack: SwiftUI, Multipeer Connectivity, Vision, Supabase (Postgres + Realtime Broadcast), Vite/React, WebSocket relay.
Streaming (since 2026-06): Live preview frames travel over Supabase Realtime Broadcast (ephemeral pub/sub, no database writes). The events table carries only low-volume control messages, kept clean by a pg_cron job. The webapp is code-split — the landing page loads ~78 kB gzipped instead of 148 kB.
- Project Details — architecture, features, pipelines
- Setup Guide — Supabase, environment, deployment
- Contributing — coding rules & conventions
- Checklist — definition of done
- Changelog
- App Store Listing — draft for App Store Connect
Feature-complete and App Store ready. Web viewers are currently a beta feature.
Built with agentic coding by LeopardCode.AI — free & open source



