Skip to content

chore: add iOS, server and web toolchains with CI - #2

Merged
SamGu-NRX merged 1 commit into
mainfrom
t3/setup-toolchains
Sep 26, 2026
Merged

SamGu-NRX merged 1 commit into
mainfrom
t3/setup-toolchains

Conversation

@SamGu-NRX

@SamGu-NRX SamGu-NRX commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner

What changed

Each part of the plan in docs/02-implementation-plan.md now has a starting point that builds, and a pull request that touches it runs a check.

  • ios/ holds a native Swift app. It runs ARKit world tracking without requiring LiDAR and shows the tracking state and the number of detected planes. XcodeGen generates the project from ios/project.yml, and the generated project is committed so teammates can open it without XcodeGen. Signing comes from ios/Config/Local.xcconfig, so nobody edits the project file to pick a team.
  • server/ is a uv project for the FastAPI server that lanes B and C fill in. It starts with one shared module, units.py, which converts ARKit's meters to the feet and inches that scene.json and the rules use.
  • web/ is a Vite, React and TypeScript toolchain for the reviewer view (D7) and zero-install capture experiments, with the same conversions in src/lib/units.ts.
  • sites/landing is a submodule pointing at SamGu-NRX/house-scanning-landing, where the landing page lives.
  • .github gets the label manifest, the PR template, and workflows that sync labels and label PR size. Every third-party action is pinned to a commit SHA.
  • At the root, make check runs all three suites. CONTRIBUTING.md covers branches, the public-data rules and the checks. AGENTS.md gains a section on working in the repo, and experiments/README.md sets the layout for agent-run experiments.

A Vercel project, house-scanning-web, now builds web/ for every push that changes it, and its ignore step skips the rest. It installs through corepack pnpm, because Vercel's own corepack check reads the repository root, which has no package.json. This branch's preview is https://house-scanning-nb9fnnusn-sam-gus-projects-7a4b6082.vercel.app. Vercel Authentication is on for the account, so the preview asks for a Vercel login.

scene.json and fixtures/fake-01 are not in this PR, because a teammate owns them.

Why native Swift for the capture app

docs/00-overview.md chose native Swift, and AGENTS.md left Expo open. The capture needs camera frames with pose and intrinsics, raycasts, mesh export on LiDAR phones and on-device text recognition for the meter label. Expo has no ARKit module, so that code would be Swift in a native module either way. Expo Go can't load a custom module, so the team would also run development builds and bridge tracking updates into JavaScript, with no gain for the capture. An App Clip, the way to reach iPhone owners without an install, must stay under 15 MB when opened from a QR code, which a Swift clip meets easily. Android users can get AR through Chrome's WebXR, which web/ can host. If the team keeps Expo for screens without AR, it can live beside ios/.

Verification

  • make check passes locally: 36 pytest tests; Biome, tsc, 30 Vitest tests and the Vite build; and xcodebuild for a generic iOS device on Xcode 27.0 with no Swift warnings.
  • Regenerating the Xcode project with XcodeGen 2.46.0 changes no file under ios/, which is what the CI drift check tests.
  • actionlint reports nothing on the five workflows.
  • The Vercel preview for this branch installed with pnpm 11.27.1 and passed tsc -b and vite build.
  • The unit tests catch wrong rounding: switching the server's rounding to Python's round() fails 5 tests, and truncating fails 8. Replacing rounding with floor in the web module fails 3.
  • Xcode 26.6, the version CI pins on macos-26, runs only in CI.
  • Nobody has run the app on a physical iPhone yet. It needs an ARKit iPhone, ideally one without LiDAR, to confirm the tracking text, the plane counts, the camera-denied screen and pausing.

Risk

  • The three suite checks are path-filtered. If branch rules later require them, a PR that doesn't touch that path never reports the check and stays blocked.
  • Picking a signing team in Xcode's Signing & Capabilities pane writes into project.pbxproj and fails the drift check. ios/README.md and AGENTS.md point people to Local.xcconfig instead.
  • pnpm is pinned at 11.27.1 because pnpm 12 fails under corepack. Contributors on pnpm 10 are switched to the pinned version automatically.

Checklist

  • The scope is focused; related changes belong together
  • I explained what changed and why
  • N/A: before and after images. The only screen is new, and it needs a physical iPhone; no capture was taken.
  • N/A: video, for the same reason.

🤖 Generated with Claude Code

Gives each part of the plan in docs/02 a starting point that builds and
is checked on every pull request:

- ios/: native Swift app (XcodeGen project, committed) that runs ARKit
  world tracking without requiring LiDAR and shows tracking status.
  Signing comes from ios/Config/Local.xcconfig. CI "iOS build" builds it
  with Xcode 26.6 on macos-26 and fails when the committed project
  differs from an XcodeGen 2.46.0 generation.
- server/: uv project for the FastAPI server lanes B and C will fill,
  starting with units.py (meters to feet and inches). CI "Server checks".
- web/: Vite, React and TypeScript for the reviewer view and zero-install
  capture experiments. CI "Web checks".
- sites/landing: submodule for SamGu-NRX/house-scanning-landing.
- .github: label manifest, PR template, label sync and PR size workflows,
  with actions pinned by commit SHA.
- Makefile, CONTRIBUTING.md, experiments/README.md, an AGENTS.md section
  on working in the repo, and .gitignore entries for data/ and .local/.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 26, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 39 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: c5bac810-0609-4d88-8932-8c2796fb01f8

📥 Commits

Reviewing files that changed from the base of the PR and between c99e924 and 3de08d0.

⛔ Files ignored due to path filters (3)
  • ios/HouseScan.xcodeproj/project.xcworkspace/contents.xcworkspacedata is excluded by !**/*.xcworkspace/contents.xcworkspacedata
  • server/uv.lock is excluded by !**/*.lock
  • web/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (47)
  • .github/labels.json
  • .github/pull_request_template.md
  • .github/workflows/ios.yml
  • .github/workflows/labels.yml
  • .github/workflows/pr-size.yml
  • .github/workflows/server.yml
  • .github/workflows/web.yml
  • .gitignore
  • .gitmodules
  • AGENTS.md
  • CONTRIBUTING.md
  • Makefile
  • experiments/README.md
  • ios/.gitignore
  • ios/Config/Info.plist
  • ios/Config/Local.xcconfig.example
  • ios/Config/Shared.xcconfig
  • ios/HouseScan.xcodeproj/project.pbxproj
  • ios/HouseScan.xcodeproj/xcshareddata/xcschemes/HouseScan.xcscheme
  • ios/HouseScan/ARCaptureView.swift
  • ios/HouseScan/CaptureScreen.swift
  • ios/HouseScan/CaptureSessionModel.swift
  • ios/HouseScan/HouseScanApp.swift
  • ios/HouseScan/SessionDelegate.swift
  • ios/README.md
  • ios/project.yml
  • server/.gitignore
  • server/.python-version
  • server/README.md
  • server/pyproject.toml
  • server/tests/test_units.py
  • server/units.py
  • sites/landing
  • web/.gitignore
  • web/.node-version
  • web/README.md
  • web/biome.json
  • web/index.html
  • web/package.json
  • web/src/App.tsx
  • web/src/lib/units.test.ts
  • web/src/lib/units.ts
  • web/src/main.tsx
  • web/tsconfig.app.json
  • web/tsconfig.json
  • web/tsconfig.node.json
  • web/vite.config.ts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codemetrics-ai

Copy link
Copy Markdown

Note

Review skipped

Codemetrics is installed on this repository, but it hasn't been added to your team yet.

To enable AI code reviews for this repo, go to your dashboard and add house-scanning to your team's repositories.

@vercel

vercel Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
house-scanning-web Ready Ready Preview Sep 26, 2026 2:09am UTC

@SamGu-NRX
SamGu-NRX merged commit 279588e into main Sep 26, 2026
6 checks passed
SamGu-NRX pushed a commit that referenced this pull request Oct 15, 2026
* Sync a1-classical breadth work from the Project store (no result file yet)

* Sync a1-classical breadth work from the Project store (result file A1-classical.md)
@SamGu-NRX
SamGu-NRX deleted the t3/setup-toolchains branch October 15, 2026 11:30

This branch had an error being deployed

1 failed and 1 active deployments
Preview — 3de08d00 Deployed Sep 26, 2026 by vercel[bot]
Production — 3de08d00 Deployed Sep 26, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant