NOT SHIPPING. This is a separately gated experimental architecture for a future Client Preview consultation tool, tracked by issue #111. PR #118 contains no ARCore, ARKit, Flutter AR plugin, video encoder, or AR camera-session code.
The current beta recommends a U.S. quarter for quick still-photo scale. A future AR session needs a trackable image anchor, so Client Preview would instead use the feature-rich TatMapper Placement Card as its known-size marker. That AR-only choice does not make the card the recommended scale method in the current app.
Client Preview would overlay the artist’s own uploaded design during a consultation. It would not replace still-photo calibration, the final stencil PDF, Print Setup correction, or physical ruler verification. A captured preview is a visual consultation artifact, never an accuracy certificate.
No generic flash library, client account, cloud upload, network lookup, body average, or automatic design generation is in scope.
Use the feature-rich TM-CAL-1 Placement Card as a known-size image anchor.
The measurement square remains authoritative. Marker detection requires:
The marker must remain visible long enough for initial detection. The UI must distinguish searching, limited tracking, tracked, and lost using text/icons rather than color alone.
Apple’s native prototype would use a known-size ARKit reference image. Android would use a known-size ARCore Augmented Image. The exact SDK/API and privacy requirements must be reverified from official platform documentation when the prototype begins.
Flutter Client Preview UI
-> typed platform API
-> iOS ARKit image-tracking + capture session
-> Android ARCore Augmented Images + capture session
<- capability, permission, tracking, anchor pose, capture state
Flutter owns design selection, opacity, artist controls, guidance, feature flag, preview gallery metadata, and share intent. Native modules own camera/session lifecycle, reference-image registration, anchor pose, interruptions, support checks, render compositing, and still/video capture. Typed data crosses the boundary; native SDK objects do not.
Still capture must produce the same composited frame the artist saw. Video capture must be audio-free by default, must never request microphone permission, and must expose recording duration/storage/thermal failures explicitly.
Required states:
Unsupported or failed AR returns to the still-photo workflow without modifying the calibrated project. No AR SDK initializes when the feature flag is off.
Camera frames, design artwork, captured photos, and captured videos remain on-device unless the artist deliberately uses the operating-system share sheet. There is no marker lookup, analytics endpoint, cloud processing, face/body recognition, generic flash library, or client identity. Captures must avoid embedding project paths or internal identifiers. Privacy manifests and store disclosures must be reassessed after the exact native SDK graph is known.
Do not create an implementation branch until: