Project not found.
Ship Paldocs to App Store via TestFlight
story: Ship Paldocs to App Store via TestFlight
Role
Sprint Manager (Lucas)
Key
ios-testflight
Want
As a sprint manager, I want to access paldocs from my iPhone via a native App Store install
So That
So that I can manage sprints, review boards, and check project status without opening a browser
Acceptance Criteria
- paldocs.app resolves in a browser and shows the Rails app (authenticated via Keycloak)
- Keycloak login page renders with a paldocs-branded CSS theme
- turbo-ios app loads paldocs.app in a native WebView, handles the Keycloak login flow, and navigates between pages
- TestFlight build installs on iPhone and functions identically to the web app
- Sprint board is viewable and interactive from the iOS app
- Most Rails changes ship to the iOS app on next launch without requiring an App Store rebuild
Success Metric
TestFlight build installs and loads the sprint board within 5 seconds of app launch. Auth persists across app restarts (refresh token session). No App Store review needed for server-side changes.
Related Architecture
arch-infra-- Public domain (paldocs.app) is required; App Store apps cannot require Tailscalearch-keycloak-- OIDC client with refresh tokens enabled for long-lived mobile sessionsarch-k8s-- Deployment overlay and CI/CD pipeline that serves the iOS apparch-rails-db-- Database backing the sprint board data
Related
- pal-e-platform #490 -- DNS + Caddy for paldocs.app (sprint 3)
- paldocs #26 -- Keycloak TF client creation (sprint 3)
- paldocs #82 -- Login theme (sprint 3)
- pal-e-deployments #224 -- KEYCLOAK env vars in deployment overlay (sprint 3)
- paldocs #83 -- turbo-ios native shell (sprint 4, 8pt)
- paldocs #84 -- Fastlane + TestFlight pipeline (sprint 4, 3pt)
- paldocs #46 -- iOS App Store epic tracker
landscaping-assistant/docs/pipeline.md-- Reference: complete pipeline diagram (web + iOS)landscaping-assistant/docs/keycloak-setup.md-- Reference: Keycloak client creation walkthroughlandscaping-assistant/docs/ios-dev-builds.md-- Reference: turbo-ios project setup and Fastlane config
Critical Path
Four dependencies in order:
- Domain (paldocs.app): DNS A record + Caddy reverse proxy on Hetzner edge VPS. Without a public URL, the iOS app has no server to connect to.
- Auth (Keycloak OIDC): Confidential client with Auth Code + PKCE (S256). OmniAuth in Rails. Refresh tokens for persistent mobile sessions. CSS login theme.
- turbo-ios shell: Xcode project wrapping paldocs.app in a Turbo Native WebView. Path configuration JSON for native vs web presentation. Cookie-based session via Rails session cookie.
- Fastlane pipeline:
ssh macbook "cd ~/paldocs-ios && fastlane beta"builds, signs, and uploads to TestFlight. Requires $99/year Apple Developer enrollment. Builds last 90 days.
Update Lifecycle
Most changes ship through the Rails deploy pipeline (git push to Woodpecker CI to Harbor to ArgoCD) and are picked up by the iOS app on next launch -- no App Store review. The iOS shell only needs a rebuild when native capabilities change (push notifications, camera, app icon).
Sprint Mapping
| Sprint | Items |
|---|---|
| Sprint 3 | Domain + DNS (#490), Keycloak client (#26), login theme (#82), deployment env vars (#224) |
| Sprint 4 | turbo-ios project (#83, 8pt), Fastlane pipeline (#84, 3pt) |