Enhance 3D Foot Scan iOS App (Swift)
Budget / Salary$10–30
TypeFreelance project
LocationRemote
Posted49 minutes ago
Full-foot 3D scanning - multi-position capture & merge
Thank you for taking the time to work on this exercise. You are receiving a partially finished iOS app used to
capture 3D models of a human foot with an iPhone TrueDepth camera. Your job is to understand the existing
system, improve or complete the multi-position full-foot scanning pipeline, and produce usable 3D foot models.
You may keep the current approach or redesign parts of it if you believe a better approach is justified - either way,
you must explain what you did and why.
1. Goal
Demonstrate that you can work inside a real, half-finished scanning codebase and ship a credible path from
multi-position TrueDepth captures to a merged 3D foot model.
- Primary outcome: a workflow that captures multiple views of a foot and produces a usable 3D model (point
cloud / mesh) per foot.
- You may refine the existing FullFoot pipeline, replace pieces of it, or take a different technical approach - as
long as the result is 3D foot models from multi-point scanning on device.
- Required deliverable: working code (or clear demo artifacts) plus a written explanation of how the system
works and the approach you took.
2. What we are evaluating
- Engineering judgment inside an existing iOS / 3D capture codebase
- Ability to diagnose and improve capture UX, alignment, and merge quality
- Clarity of written explanation: architecture, tradeoffs, and your changes
- Practicality: can a user (or reviewer) run through the flow and understand results
We are not grading pixel-perfect UI polish, backend/auth work, or production App Store readiness. Focus on the
scanning / reconstruction problem.
3. Setup (get running first)
- macOS with a recent Xcode that can build iOS 15+ projects.
- A physical iPhone with TrueDepth (Face ID class) for real scans. Simulator is fine for navigating
non-camera UI only.
- Open the project at the repo root: ANDBOUNDS.xcodeproj (not nested copies).
- Select the ANDBOUNDS target -> Signing & Capabilities -> Automatically manage signing -> choose your
Personal Team.
- Bundle ID is com.andbounds.candidate. Change it only if Xcode reports a conflict (e.g.
com.yourname.andbounds).
- Build & run. The app opens on Welcome - no login, no backend account, no questionnaire.
If codesign asks for your Mac login keychain password, enter it and choose Always Allow.
4. What is already in the app
Intentionally disabled for this take-home
- Login / registration / Sign in with Apple
- Strapi API uploads and mail (offline mode)
Page 1/3
ANDBOUNDS iOS - Candidate Take-Home
- Post-scan questionnaire (Summary ends with Done -> Welcome)
Flags live in ANDBOUNDS/Globals.swift -> AppConfig (skipsAuthentication, skipsQuestionnaire).
Working reference: insole (plantar) flow
Welcome -> "Scan for insole" -> onboarding -> Lets Scan -> single plantar TrueDepth capture (CoreML-assisted)
-> preview -> Summary. Treat this as the known-good end-to-end reference for capture -> preview -> summary.
Candidate focus: full-foot multi-position flow
Welcome -> "Scan full foot" -> same onboarding -> Lets Scan hands off to the FullFoot sequencer. Code lives
under:
ANDBOUNDS/ViewControllers/Scanning/FullFoot/
Main pieces (high level)
- FootScanPosition.swift - position definitions (plantar, inner, outer, front, back x L/R)
- FootScanSequencer.swift - order of captures, previews, when merge runs
- FullFootPlantarScanViewController.swift - position 1 (plantar) using the insole-style path
- WeightBearingScanViewController.swift - positions 2-5 (tilt / align / capture)
- FootTiltMonitor / FootGeometryGate / FootSilhouetteTemplate / FootScanGuideViews - guidance & gates
- FullFootPositionPreviewVC.swift - inspect a capture before continuing
- FootICPMerger.swift - align / merge captures into a per-foot model
- FootScanDevConfig.swift - dev toggles to skip positions and replay merges
Dev helpers
- On Welcome, a circular button (bottom-right) opens Dev Positions: enable/skip positions, and
replay/preview merges from saved captures while testing.
- You can disable individual positions to iterate faster (e.g. only plantar + one side view)
Thank you for taking the time to work on this exercise. You are receiving a partially finished iOS app used to
capture 3D models of a human foot with an iPhone TrueDepth camera. Your job is to understand the existing
system, improve or complete the multi-position full-foot scanning pipeline, and produce usable 3D foot models.
You may keep the current approach or redesign parts of it if you believe a better approach is justified - either way,
you must explain what you did and why.
1. Goal
Demonstrate that you can work inside a real, half-finished scanning codebase and ship a credible path from
multi-position TrueDepth captures to a merged 3D foot model.
- Primary outcome: a workflow that captures multiple views of a foot and produces a usable 3D model (point
cloud / mesh) per foot.
- You may refine the existing FullFoot pipeline, replace pieces of it, or take a different technical approach - as
long as the result is 3D foot models from multi-point scanning on device.
- Required deliverable: working code (or clear demo artifacts) plus a written explanation of how the system
works and the approach you took.
2. What we are evaluating
- Engineering judgment inside an existing iOS / 3D capture codebase
- Ability to diagnose and improve capture UX, alignment, and merge quality
- Clarity of written explanation: architecture, tradeoffs, and your changes
- Practicality: can a user (or reviewer) run through the flow and understand results
We are not grading pixel-perfect UI polish, backend/auth work, or production App Store readiness. Focus on the
scanning / reconstruction problem.
3. Setup (get running first)
- macOS with a recent Xcode that can build iOS 15+ projects.
- A physical iPhone with TrueDepth (Face ID class) for real scans. Simulator is fine for navigating
non-camera UI only.
- Open the project at the repo root: ANDBOUNDS.xcodeproj (not nested copies).
- Select the ANDBOUNDS target -> Signing & Capabilities -> Automatically manage signing -> choose your
Personal Team.
- Bundle ID is com.andbounds.candidate. Change it only if Xcode reports a conflict (e.g.
com.yourname.andbounds).
- Build & run. The app opens on Welcome - no login, no backend account, no questionnaire.
If codesign asks for your Mac login keychain password, enter it and choose Always Allow.
4. What is already in the app
Intentionally disabled for this take-home
- Login / registration / Sign in with Apple
- Strapi API uploads and mail (offline mode)
Page 1/3
ANDBOUNDS iOS - Candidate Take-Home
- Post-scan questionnaire (Summary ends with Done -> Welcome)
Flags live in ANDBOUNDS/Globals.swift -> AppConfig (skipsAuthentication, skipsQuestionnaire).
Working reference: insole (plantar) flow
Welcome -> "Scan for insole" -> onboarding -> Lets Scan -> single plantar TrueDepth capture (CoreML-assisted)
-> preview -> Summary. Treat this as the known-good end-to-end reference for capture -> preview -> summary.
Candidate focus: full-foot multi-position flow
Welcome -> "Scan full foot" -> same onboarding -> Lets Scan hands off to the FullFoot sequencer. Code lives
under:
ANDBOUNDS/ViewControllers/Scanning/FullFoot/
Main pieces (high level)
- FootScanPosition.swift - position definitions (plantar, inner, outer, front, back x L/R)
- FootScanSequencer.swift - order of captures, previews, when merge runs
- FullFootPlantarScanViewController.swift - position 1 (plantar) using the insole-style path
- WeightBearingScanViewController.swift - positions 2-5 (tilt / align / capture)
- FootTiltMonitor / FootGeometryGate / FootSilhouetteTemplate / FootScanGuideViews - guidance & gates
- FullFootPositionPreviewVC.swift - inspect a capture before continuing
- FootICPMerger.swift - align / merge captures into a per-foot model
- FootScanDevConfig.swift - dev toggles to skip positions and replay merges
Dev helpers
- On Welcome, a circular button (bottom-right) opens Dev Positions: enable/skip positions, and
replay/preview merges from saved captures while testing.
- You can disable individual positions to iterate faster (e.g. only plantar + one side view)
Apply on Freelancer →
Project sourced from Freelancer.com. Applications happen directly on the original platform — we never collect your data.