Skip to content

Commit de1bfdb

Browse files
Programcodeclaude
andcommitted
Remove the Capacitor iOS shell
The Capacitor shell never shipped. This deletes ios/, capacitor.config.ts, the eight @capacitor/* packages and the ios:build and ios:open scripts, the native runtime and app URL listener, the native branches in src/lib/native.ts, the capacitor-native CSS rules, the capacitor Vite mode, and the capacitor://localhost origin in the CORS, checkout and workspace-invite allowlists. Docs and tests that described the shell go with it. The website is unchanged: every removed branch was false on the web, so external links, OAuth and Stripe redirects, telemetry and the service worker take the same paths as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
1 parent 807ef47 commit de1bfdb

50 files changed

Lines changed: 43 additions & 1892 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎AGENTS.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ Staging E2E requires all three values together: `STAGING_SUPABASE_URL`, `STAGING
155155

156156
Open only what the task needs:
157157

158-
- [docs/architecture.md](docs/architecture.md): runtime boundaries, request flows, state, auth, billing, observability, PWA, and iOS.
158+
- [docs/architecture.md](docs/architecture.md): runtime boundaries, request flows, state, auth, billing, observability, and PWA.
159159
- [docs/development.md](docs/development.md): setup, environment behavior, worktrees, and common workflows.
160160
- [docs/testing.md](docs/testing.md): what each gate proves, browser matrices, staging, artifacts, and cleanup.
161161
- [docs/operations.md](docs/operations.md): CI, Vercel hosting, staging, deployment, rollback, and live verification.

‎README.md‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Live application: [debate.pi-stack.org](https://debate.pi-stack.org)
1111
- **Practice.** Attack finds weak points. Ask is a streaming debate coach. Crossfire drills questioning. Sparring runs a timed round against the AI and scores it.
1212
- **Library and History.** Sources and saved work, scoped to the Current Debate.
1313
- **Account.** Google, email code, and demo-code sign-in; Basic and Pro plans through Stripe; sharing; admin announcements.
14-
- **Platforms.** Web and installable PWA with an offline shell, plus a Capacitor iOS app.
14+
- **Platforms.** Web and installable PWA with an offline shell.
1515
- **Languages.** English, Spanish, and Hungarian interface and AI output.
1616

1717
Collaborative Workspace exists in the code but is hidden and on hold. Its routes appear only when `VITE_COLLABORATION_URL` is set.
@@ -53,7 +53,7 @@ npm run verify:full # adds the full desktop and mobile browser suite
5353
## How it fits together
5454

5555
```text
56-
Browser, PWA, or Capacitor iOS shell
56+
Browser or PWA
5757
-> React 18 + Vite client (Zustand stores, TanStack Query)
5858
-> Supabase Auth, PostgreSQL with RLS, Edge Functions (Deno)
5959
-> OpenRouter models, research providers, Stripe, Google APIs
@@ -79,7 +79,6 @@ supabase/ Edge Functions, migrations, pgTAP tests, local config
7979
e2e/ Playwright browser, full-stack, live, staging, and canary tests
8080
services/ Collaboration service for the hidden Workspace
8181
public/ Static pages, PWA assets, and SEO files
82-
ios/ Capacitor Xcode project
8382
scripts/ Build, docs, SEO, and test helpers
8483
.github/workflows/ Quality, live-provider, model-matrix, staging, and canary CI
8584
.superset/ Worktree dev server, port allocation, and database gate

‎capacitor.config.ts‎

Lines changed: 0 additions & 32 deletions
This file was deleted.

‎docs/README.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Start with the smallest document that answers the task instead of loading every
1111

1212
## Understand the system
1313

14-
- [Architecture](architecture.md), current. Open before changing subsystem boundaries or tracing browser, Current Debate, data, AI, auth, billing, observability, PWA, or iOS flows.
14+
- [Architecture](architecture.md), current. Open before changing subsystem boundaries or tracing browser, Current Debate, data, AI, auth, billing, observability, or PWA flows.
1515
- [Agent guide](../AGENTS.md), current. Always-loaded commands, safety rules, and routing.
1616
- [Root README](../README.md), current. Product overview and quick start.
1717

@@ -21,7 +21,7 @@ Start with the smallest document that answers the task instead of loading every
2121

2222
## Set up and develop
2323

24-
- [Development guide](development.md), current. Open for installation, environment behavior, linked worktrees, frontend, backend, database, or iOS workflows.
24+
- [Development guide](development.md), current. Open for installation, environment behavior, linked worktrees, frontend, backend, or database workflows.
2525
- [Supabase backend](../supabase/README.md), current. Open before changing Edge Functions, shared backend modules, migrations, RLS, RPCs, or backend secrets.
2626
- [Collaboration service](../services/collaboration/README.md), current. Only for the hidden Workspace.
2727

‎docs/architecture.md‎

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@
44

55
## System context
66

7-
DebateLab is a browser application with an optional Capacitor iOS shell. The client uses Supabase for sessions, persisted user data, database RPCs, and Edge Functions. Edge Functions keep privileged credentials server-side and integrate with AI providers, research services, Stripe, and Google APIs.
7+
DebateLab is a browser application. The client uses Supabase for sessions, persisted user data, database RPCs, and Edge Functions. Edge Functions keep privileged credentials server-side and integrate with AI providers, research services, Stripe, and Google APIs.
88

99
```text
10-
Browser or Capacitor
10+
Browser or PWA
1111
-> React routes, feature components, stores
1212
-> Supabase Auth, PostgreSQL, RPCs, Edge Functions
1313
-> AI providers, research, Stripe, Google Docs
1414
```
1515

1616
## Client startup and routing
1717

18-
[`src/bootstrap.ts`](../src/bootstrap.ts) imports the application entry immediately, then schedules Jam after window load and idle time. [`src/main.tsx`](../src/main.tsx) mounts the application before starting native runtime handling, observability, native URL handling, and service-worker registration. Vercel browser telemetry is disabled inside the native shell and loaded behind a separate Suspense boundary.
18+
[`src/bootstrap.ts`](../src/bootstrap.ts) imports the application entry immediately, then schedules Jam after window load and idle time. [`src/main.tsx`](../src/main.tsx) mounts the application before starting observability and service-worker registration. Vercel browser telemetry is loaded behind a separate Suspense boundary.
1919

2020
[`src/App.tsx`](../src/App.tsx) owns routes and top-level providers. Pages are lazy loaded. Public routes cover marketing, legal pages, login, sources, and shared content. `/app/*` routes pass through `RequireAuth` and include the main tools, the Current Debate dashboard (`/app/debate`), history, library, timer, sparring, flowchart, settings, and administration. The header holds only Home, the Current debate menu, Library, History, and the language, theme, and Settings controls; tools are launched from Home and the dashboard.
2121

@@ -138,12 +138,6 @@ CI and staging must not upload authenticated browser captures. Logging must not
138138

139139
The service worker and manifest provide installable web assets and an offline app shell. It precaches only the navigation shell and static identity assets; route chunks enter the runtime cache when a user visits them. On first registration, the client also reports same-origin `/assets/` resources that loaded before the worker took control so the first visited route works offline without a forced reload. Updates wait for the normal service-worker lifecycle instead of reloading an active page. Offline support does not make unvisited routes, authenticated Supabase, or AI operations available without a network.
140140

141-
## iOS shell
142-
143-
[`capacitor.config.ts`](../capacitor.config.ts) owns the native app identifier, build directory, schemes, and native plugin settings. The iOS app wraps the same Vite output using a relative asset base.
144-
145-
OAuth still travels through the provider and Supabase HTTPS callback before returning to the app callback scheme. Native URL handling lives in the client startup path.
146-
147141
## Deployment boundary
148142

149143
Vercel builds `dist/` with Node 22 and serves it. [`vercel.json`](../vercel.json) owns SPA fallback, cache policy, crawler restrictions, and response security headers. Merging to `main` deploys the frontend to production; Supabase migrations and Edge Functions deploy separately. GitHub workflow files own quality, live-provider, staging, and canary automation.

‎docs/development.md‎

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ Never overwrite unrelated changes. Do not switch to the primary checkout because
2323
- Deno 2.x for Edge Function tests
2424
- Docker and Supabase CLI 2.115 or newer for database work
2525
- Playwright browser binaries for browser gates
26-
- Xcode and CocoaPods or Swift Package Manager support for native iOS work
2726

2827
Install the locked JavaScript tree with the Node version from `.nvmrc`:
2928

@@ -152,17 +151,6 @@ Read [testing.md](testing.md) before running WebKit or staging.
152151

153152
Agentic tests (`agentic/*.e2e.ts`, the e2e runner) drive the verification stack, never a dev server you started. Run them with `.claude/skills/verify-debatelab/bin/verify.sh e2e run` after `verify.sh up`. See [testing.md](testing.md#agentic-browser-tests).
154153

155-
## iOS workflow
156-
157-
```bash
158-
npm run ios:build
159-
npm run ios:open
160-
```
161-
162-
The Capacitor build uses a relative Vite base and syncs `dist/` into the native project. [`capacitor.config.ts`](../capacitor.config.ts) owns the app ID, app name, schemes, and native settings.
163-
164-
Do not hand-edit generated package documentation. Make native configuration changes through Capacitor or Xcode as appropriate.
165-
166154
## Documentation workflow
167155

168156
Run:

‎docs/operations.md‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ Current functions mostly use local explicit origin allowlists. The exact list ca
154154

155155
Before enabling protected browser staging, verify `http://127.0.0.1:18080` for `demo-code-login`, `ai`, `ai-stream`, `admin`, and `announcements`. Do not broaden origins to `*` merely to make a test pass.
156156

157-
Native requests may use `capacitor://localhost`. Local development origins must remain bounded to intended ports and hosts.
157+
Local development origins must remain bounded to intended ports and hosts.
158158

159159
## Secrets
160160

@@ -206,6 +206,5 @@ Do not expose protected data in artifacts. Record the commit, environment, opera
206206
- New frontend errors against Supabase right after a merge: the matching migration or function may not be applied to production yet. Run `npm run backend:status` from the linked checkout.
207207
- Function returns unauthorized after deploy: check handler auth and environment propagation before changing gateway settings.
208208
- Browser works on one route only: check the `vercel.json` SPA rewrite and cache headers.
209-
- Native callback fails while web works: check Capacitor scheme and Supabase redirect allowlist.
210209

211210
Read [testing.md](testing.md) for evidence rules and [`../supabase/README.md`](../supabase/README.md) for backend ownership.

‎eslint.config.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import reactRefresh from "eslint-plugin-react-refresh";
55
import tseslint from "typescript-eslint";
66

77
export default tseslint.config(
8-
{ ignores: ["dist", "coverage", "ios/App/App/public", ".remember"] },
8+
{ ignores: ["dist", "coverage", ".remember"] },
99
{
1010
extends: [js.configs.recommended, ...tseslint.configs.recommended],
1111
files: ["**/*.{ts,tsx}"],

‎ios/.gitignore‎

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)