DroneChatMVP is a SwiftUI iOS client for a drone-assisted photo capture workflow. The app uses a chat-first interface to start capture missions, follow live mission status, wait for AI retouching, and keep generated images in an in-app album.
| Item | Summary |
|---|---|
| Platform | SwiftUI iOS client |
| Workflow | Chat mission -> live status -> retouch wait -> image result -> album |
| Backend pattern | Submit task, poll mission state, fetch final outputs |
| User-facing focus | Mission control, progress transparency, result browsing |
| Public boundary | No private backend addresses, debug photos, or production service credentials |
- Chat-based mission control for quick, precise, and director-style capture flows.
- Live mission status cards with staged progress for flight and capture tasks.
- AI retouching wait state with staged, time-based feedback and resilient result recovery.
- Mission result cards with local-first image loading and remote fallback.
- In-app album with sandbox image caching, grouped before/after presentation, full-screen preview, swipe navigation, landscape viewing, save-to-Photos, and long-press deletion.
- Conversation persistence for recent task messages.
- Voice input powered by Apple's speech recognition APIs.
- SwiftUI
- Combine
- Swift concurrency with
async/await - URLSession
- PhotosUI and Photos
- UserDefaults + Application Support file storage
- XcodeGen
- The chat view starts quick, precise, and director-style capture requests.
- Mission cards make asynchronous backend progress visible instead of hiding long waits.
- Retouch status is treated as a first-class state, not an afterthought after capture.
- The album keeps local access to results and before/after comparisons once tasks complete.
DroneChatMVP/
App/ App entry point and orientation support
Models/ DTOs, chat models, album models
Services/ API and speech services
ViewModels/ Chat, conversation, and album state
Views/ SwiftUI screens and reusable UI
Resources/ Info.plist and asset catalog
docs/ Static frontend reference material
project.yml XcodeGen project definition
The public version uses a local placeholder backend URL:
URL(string: "http://localhost:8000")!For a real device or simulator workflow, update DroneChatMVP/Services/AppConfiguration.swift with the reachable backend host for your environment.
The app expects a backend with endpoints similar to:
POST /chat/submitGET /mission/status/{missionId}GET /mission/result/{missionId}POST /mission/terminatePOST /images/auto-retouch
Mission result payloads can include original capture URLs, final image URLs, retouched image URLs, director shots, retouch status, and retouch error fields.
-
Install XcodeGen if needed:
brew install xcodegen
-
Generate the Xcode project:
xcodegen generate
-
Open the project:
open DroneChatMVP.xcodeproj
-
Build and run with Xcode, or from the command line:
xcodebuild -quiet -project DroneChatMVP.xcodeproj -scheme DroneChatMVP -configuration Debug -sdk iphonesimulator CODE_SIGNING_ALLOWED=NO build
- The repository does not include private debug photos or device-specific backend addresses.
- The app stores album images in the app sandbox and stores only image metadata in UserDefaults.
- The default bundle identifier is
com.example.DroneChatMVP; change it before signing or distributing your own build.