Skip to content

Make the editor feel like a real IDE: live errors, shortcuts, safer saving, and a cleaner green design - #28

Merged
The1UNeed merged 5 commits into
mainfrom
t3/editor-ux-polish
Nov 5, 2026
Merged

The1UNeed merged 5 commits into
mainfrom
t3/editor-ux-polish

Conversation

@The1UNeed

@The1UNeed The1UNeed commented Nov 5, 2026 •

Copy link
Copy Markdown
Owner

The editor didn't feel like a real IDE yet. Errors only appeared after pressing Run, there were no keyboard shortcuts, switching files threw away undo and scroll position, the panels couldn't be reopened or hidden, phone and tablet layouts cut off output and settings, and autosave could wait minutes while you kept typing. The look was also two products in one: Apple blue in dark mode, forest green in light.

This makes the workspace behave and look like VS Code / JetBrains / Cursor, sized for students:

  • Errors as you type with a Problems list (click to jump), runtime errors as a linked row in Output, and a status bar (problems, save state, Ln/Col → Go to Line, exam syntax).
  • Shortcuts and command palette: Run (⌘↩ / Ctrl+Enter, F5), Save, toggle Explorer/Output, Problems, Settings, all commands, shown with Mac/Windows labels in tooltips and F1.
  • Per-file editor state: undo, cursor and scroll survive switching files and layout changes; typing right after "New file" lands in the editor.
  • Keyboard and accessibility: the explorer is a real tree (arrows, Shift-range, F2, Delete, Shift+F10 menu), tabs use arrow keys and Delete, focus rings everywhere, 44px touch targets.
  • Safer saving: device saves a second after typing stops; every mode flushes when the tab hides or closes; signed-in students get a per-account device checkpoint so a crash between account syncs loses nothing, never restored for another account on a shared computer, never overwriting an account that changed elsewhere (device versions are added as copies instead); account writes keep their sign-in and order.
  • Visual redesign: one green brand accent in both themes (Run keeps its own brighter green), cool neutrals, shared button/input/dialog/menu/tab primitives, flat IDE tabs, settings as preference rows, a start page with shortcuts, calmer flowchart, sentence-case copy, and every text/code colour at 4.5:1 or better. The new "PseudoEditor" palette is the default in the syntax colour picker from Let students pick the syntax colours they like in the editor #25; the other schemes are unchanged.

Out of scope: two tabs on the same account still overwrite each other on the server (whole-workspace last write wins); fixing that needs server-side revisions.

Proof: tsc, eslint --max-warnings 0 and vitest (288 passed) are clean; every change was checked in Chromium and WebKit with Playwright at desktop, half-width, tablet and phone sizes in both themes (screenshots per round), with regression tests that fail without each storage fix.

Council review

UX pass — Rounds: 9

Delegate R1 R2 R3 R4 R5 R6 R7 R8 R9
GPT Sol 6.5/10 8/10 8.5/10 8.6/10 9/10 9.6/10 10/10 9/10 10/10
Claude Opus no score 8/10 8.6/10 9/10 9.3/10 9.5/10 9.7/10 9.6/10 10/10

Visual design pass — Rounds: 6

Delegate R1 R2 R3 R4 R5 R6
GPT Sol 8/10 9.3/10 9.8/10 9.8/10 9.8/10 10/10
Claude Opus 8.5/10 9.2/10 9.5/10 9.7/10 9.6/10 10/10

(Opus joined from UX round 2, as requested. The design rounds scored the indigo version; the owner then chose the original green accent, which was re-checked for contrast and in the browser.)

Codex review follow-ups (fixed with regression tests): the server rejects a save whose sign-in belongs to a different account than the session; recovered device edits replay only when a fingerprint of the whole account snapshot (files, names, text, runtime data files, syntax) is unchanged. Follow-up, not in this PR: separate unsynced checkpoints per tab for two tabs on one account.

Reviewed with sol-loop: 3 rounds with gpt-6.1-sol on xhigh, plus 4 rounds on the Codex follow-ups. Sol verdict: approved

Generated by claude-opus-5-5 using the Claude Code harness.

🤖 Generated with Claude Code


Note

Medium Risk
Large surface-area UX and persistence changes plus cloud save/checkpoint and session–bearer matching on the workspace API; auth tightening is intentional but save/sync paths deserve careful regression testing.

Overview
Turns the /app workspace into an IDE-style workbench: Output / Problems bottom panel (compile diagnostics and runtime errors link into the editor), a status bar (problem counts, save state, line/column, exam syntax), and global shortcuts plus Monaco command-palette actions for run, save, toggling explorer/panel, settings, and new file/folder.

Editor and explorer behavior changes include per-document Monaco models (keepCurrentModel), an editor API for focus/reveal/go-to-line, explorer/panel visibility persisted in localStorage, IDE-style tabs (keyboard + middle-click close), explorer tree focus/keyboard selection, and an empty-state start page with shortcut hints. Run now switches to Problems on compile failure; touch layouts get panel tabs, taller output on tablets, and refined breakpoints.

Saving and auth: workspace API requests reject when a Bearer token’s user id doesn’t match the Clerk session (blocks queued saves after account switch). The session hook wiring adds device checkpoints, sync notices, and richer save indicators (including “saved on device, syncing”).

Design/copy: shared ui-* primitives, settings as preference rows, sentence-case dialogs (“New file”, “Rename”, etc.), PseudoEditor as default syntax colour scheme, refreshed Monaco/workbench colours, flowchart styling, and small public-site CTA/header tweaks. DiagnosticsPanel is removed in favour of ProblemsList; Dialog backdrop clicks ignore drags from inside the card; PostHog drops benign Monaco Canceled exceptions.

Reviewed by Cursor Bugbot for commit f07bccb. Bugbot is set up for automated code reviews on this repo. Configure here.

The1UNeed and others added 3 commits November 5, 2026 20:49
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… file

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…their account and order

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
pseudoeditor.dev Error Error Nov 5, 2026 1:50pm UTC

Request Review

@cursor

cursor Bot commented Nov 5, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: a33c2316-0128-44f3-a5c1-47bb3df3bf53)

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-05T13:53:53.704411Z f07bccb Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 66ddf3ccf7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/web/src/lib/storage.ts Resolved
Comment thread apps/web/src/lib/storage.ts Resolved
…replaying a checkpoint

The workspace API now refuses a request whose bearer token verifies to a different account than the
cookie session, so a save queued under one account can't land in another after a sign-in switch.

Device checkpoints now record a fingerprint of the account snapshot (files, names, text, syntax)
instead of its newest edit time, so a deletion, rename or syntax change made on another device is
never overwritten by replaying stale local edits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Nov 5, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: 76ee5177-60bb-4341-bc37-80056c0f0421)

@The1UNeed

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 07c02aa3ee

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/web/src/lib/storage.ts Resolved
Comment thread apps/web/src/lib/storage.ts Resolved
Comment thread apps/web/src/lib/storage.ts Resolved
…t other devices' clocks

The checkpoint's account fingerprint now covers runtime data files, so a data file changed on another
device is never overwritten by replaying stale local edits. Replay now depends only on that fingerprint,
so a device whose clock ran ahead can no longer make an unsynced local deletion come back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Nov 5, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: 9b95fd7b-e33a-4391-b697-03ea83d6708e)

@The1UNeed

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit: f07bccb9ad

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@The1UNeed
The1UNeed merged commit 4d777b9 into main Nov 5, 2026
6 of 7 checks passed

This branch had an error being deployed

1 failed deployment
Preview — f07bccb9 Deployed Nov 5, 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