Skip to content

Native iOS app: iPad layouts - #144

Merged
cursor[bot] merged 15 commits into
feat/native-iosfrom
native-ios/06b-ipad
Oct 22, 2026
Merged

cursor[bot] merged 15 commits into
feat/native-iosfrom
native-ios/06b-ipad

Conversation

@Programcode

@Programcode Programcode commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

iPad layouts for the iOS app, following the design Adam picked: mock A (sidebar and split views) with mock C's docked claim panel on the Flowchart.

What's in it

  • One layout hook. useLayoutClass() returns phone on every iPhone and in iPad windows under 700 points, regular from 700, and wide from 1100. Every phone layout is untouched.
  • Sidebar. NativeTabs uses sidebarAdaptable, so iPadOS 18+ shows its own sidebar in Expo Go.
  • Library. A source opens beside the list.
  • Ask. Conversations are listed beside the chat, as mock A shows.
  • Debate home. A two-column dashboard with recent sources.
  • Saved documents (case, attack, brainstorm, factoids, the Sparring scorecard). An "On this page" outline rail from a 900-point window.
  • Flowchart. The claim docks beside the map instead of opening a sheet. It closes when the debate, the map or the account changes.
  • Narrow windows. Under 700 points (Split View, Slide Over) every screen falls back to the phone layout.

Checks (local; GitHub Actions is out of minutes)

At this head, each run under the shared memory lock:

  • npm run verify: exit 0. Vitest 315, collaboration 30/30, edge tests, build, smoke 30/30.
  • Mobile typecheck, npx eslint apps/mobile and npx knip: all exit 0.

Screenshots:

  • iPad portrait, landscape and a 600-point window, in light en and dark hu.
  • Composites against the mocks, with every difference listed, in the 6b report (.verify/6b/).

iPhone pixel diff, base vs head:

  • 40 of 57 shots are identical.
  • The other 17 differ only in live data or animation: the usage counter, timestamps, a switch mid-animation, spinner frames.
  • The same regions differ between two base runs taken minutes apart.

Differences from the mocks

  • Features the mocks invent and the app doesn't have are left out: "Ask about this" and "Cited in" on Library, and "Suggest a response" on the Flowchart.
  • The Flowchart keeps its large title and map picker.
  • Documents keep their pinned actions in the bottom bar.

Not provable here

The real iPadOS sidebar (the web export draws a stand-in), rotation, Stage Manager and live Split View resizing.

Codex review rounds follow as comments.

🤖 Generated with Claude Code

iPad layouts for the iOS app, following the design Adam picked: mock A (sidebar and split views) with mock C's docked claim panel on the Flowchart.

What's in it

  • One layout hook. useLayoutClass() returns phone on every iPhone and in iPad windows under 700 points, regular from 700, and wide from 1100. Every phone layout is untouched.
  • Sidebar. NativeTabs uses sidebarAdaptable, so iPadOS 18+ shows its own sidebar in Expo Go.
  • Library. A source opens beside the list. A refresh that no longer contains that source closes the pane.
  • Ask. Conversations are listed beside the chat, as mock A shows.
  • Debate home. A two-column dashboard with recent sources. The announcement banner and the See all link to History are on this dashboard too.
  • Saved documents (case, attack, brainstorm, factoids, the Sparring scorecard). An "On this page" outline rail from a 900-point window.
  • Flowchart. The claim docks beside the map instead of opening a sheet. Switching maps, debates or accounts clears it, so coming back does not reopen it. Saving the same map does not.
  • Narrow windows. Under 700 points (Split View, Slide Over) every screen falls back to the phone layout.
  • History stays the phone-width column. Its rows open the existing document screens, which already use the outline rail.

Update onto feat/native-ios

Merged origin/feat/native-ios (through #143, History, announcements and account tools) instead of rebasing. The same files were rewritten on both sides, so one merge kept both. Head 61f87f6.

Checks on 61f87f6 (local; GitHub Actions is out of minutes)

Expo app, on Linux:

  • npm run -w @debatelab/mobile typecheck: exit 0 (app and scripts).
  • npx eslint --max-warnings 0 on the conflicted mobile sources, and root npm run lint (eslint + knip + repo rules): exit 0.
  • npx vitest run apps/mobile/src src/test/i18n.test.ts: 21 files, 79 tests, exit 0. Full npm test: 362 passed. Two tests in src/test/scripts/backend-status.test.ts hit Vitest's 10s beforeEach hook timeout while that file's git setup ran inside the full parallel suite. The file is unchanged from feat/native-ios, and those tests pass when the file is run on its own (144ms and 194ms).
  • npx expo export --platform ios and --platform web: exit 0 (iOS 3022 modules, web 52 routes).
  • Playwright against the web export, with a fake session and mocked staging responses (no demo code, no live backend): phone 390×844 and 600×1366 keep the bottom tab bar and do not show the dashboard, library split, Ask pane or document rail; 1024×1366 uses the top tab bar and the splits; 1366×1024 uses the sidebar, dashboard, library split, Ask pane and document rail. The announcement banner and See all show on the phone and the wide dashboard. History renders at both widths. No page errors or console errors. Exit 0.
  • npm run docs:check, npm run test:collaboration (30/30), npm run test:edge with Deno 2.9.6 (380 passed), npm run build, npm run test:sw, and npm run test:e2e:smoke (desktop Chromium, 30 passed): exit 0.

npx expo install --check exits 1. The installed Expo SDK 57 packages are behind the current patch line (expo@57.0.27 expected ~57.0.31, and the same drift on crypto, linking, network, notifications, router, sharing, splash-screen and widgets). apps/mobile/package.json matches feat/native-ios, so this was already on the base. Not bumped here.

The earlier npm run verify and iPhone pixel diff in this description were for 8239d2f, before this merge. They were not repeated as a pixel diff.

Differences from the mocks

  • Features the mocks invent and the app doesn't have are left out: "Ask about this" and "Cited in" on Library, and "Suggest a response" on the Flowchart.
  • The Flowchart keeps its large title and map picker.
  • Documents keep their pinned actions in the bottom bar.

Not provable here

The real iPadOS sidebar (the web export draws a stand-in), rotation, Stage Manager and live Split View resizing. useHeaderCover still assumes the translucent native header; the web preview uses 0.

Codex review rounds follow as comments.

Open in Web Open in Cursor 

Programcode and others added 13 commits October 14, 2026 13:09
…ts by screen

ONLY takes several combinations and SCREENS picks groups of screens, so a
layout change shoots only what it touched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One hook turns the window width into phone, regular (700 to 1100 points)
or wide (1100 and up); iPhones are always phone. NativeTabs becomes the
iPadOS 18 sidebar with sidebarAdaptable, and the web preview draws the
sidebar when wide and a top tab bar in between.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The source sheet's body becomes SourceView, which the sheet and the iPad
detail pane share. The selection belongs to the account and debate it was
made in, and deleting the open source clears it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The saved-chats rows move into ChatRows, shared by the phone's history
sheet and the iPad list, which reloads when the open chat is saved and
never shows another debate's chats while the next list loads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The left column keeps the side toggle, counts, Spar and Prepare; the right
lists five recent items and the three newest sources.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cases, attacks, brainstorms, factoids and Sparring scorecards list their
headed parts in an "On this page" rail from 900 points wide; tapping one
scrolls to it. Without a rail the parts register nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The claim sheet's body becomes ClaimPanel. On iPad it opens in an
inspector (360 points, 400 when wide) that stays open while the student
moves between cards, highlights the open card, and closes when the map or
debate on screen changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On a wide iPad window the run taps Case Structure in the rail, waits for it
to become the current part and shoots the scrolled case.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
React Native Web renders no aria-selected on menu items, so the run checks
that Case Structure's heading moved to the top of the case. A run that
skips the sign-in screens no longer says the demo code is missing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The iPad inspector kept a card from the debate and map it was opened on,
but not the account, while the Library's split pane checks all three.
Drafts are keyed by debate only, so check the account too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…/06b-ipad

# Conflicts:
#	src/locales/en.json
#	src/locales/es.json
#	src/locales/hu.json
Copilot AI balanced review requested due to automatic review settings October 14, 2026 21:41
@vercel

vercel Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
debate-navigator Ready Ready Preview Oct 14, 2026 9:43pm UTC
debatelab-staging Ready Ready Preview Oct 14, 2026 9:43pm UTC

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Essentials by visiting https://app.coderabbit.ai/settings/billing.

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

@Programcode

Copy link
Copy Markdown
Owner Author

Codex review r1 at 8239d2f (gpt-6.1-sol, high): 2 findings, accepted; fix in progress together with a merge of feat/native-ios (offline reading conflicts).

  1. P2 library.tsx:119: the selected source stays in the detail pane after a refreshed list no longer has it.
  2. P2 flowchart/index.tsx:155: switching maps hides the docked claim without clearing it, so returning reopens it.
    Codex found phone branches, ownership guards, width transitions and locale parity sound.

cursoragent and others added 2 commits October 22, 2026 16:08
Keep the iPad layouts together with offline reading, push, and entitlements. A refreshed library list closes a source that is no longer in it, and switching flowchart maps clears the docked claim instead of reopening it later.

Co-authored-by: Gáborjáni-Szabó Ádám <Programcode@users.noreply.github.com>
Bring in History, announcements and account tools. The iPad Debate dashboard keeps the announcement banner and the link through to History.

Co-authored-by: Gáborjáni-Szabó Ádám <Programcode@users.noreply.github.com>
@vercel

vercel Bot commented Oct 22, 2026

Copy link
Copy Markdown

Deployment failed for project debatelab-staging with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/adam-gaborjanis-projects?upgradeToPro=build-rate-limit

@vercel

vercel Bot commented Oct 22, 2026

Copy link
Copy Markdown

Deployment failed for project debate-navigator with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/adam-gaborjanis-projects?upgradeToPro=build-rate-limit

@cursor
cursor Bot merged commit 70c3ece into feat/native-ios Oct 22, 2026
3 of 12 checks passed
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.

3 participants