Repository navigation
feat: SvelteKit web app (prod parity) - #52
Merged
Merged
Conversation
- Remove AppLayout from /app routes so login matches React (no extra chrome) - Implement BlogEditorPage with React parity (admin gate, split editor, save flows) - Add blog API client, BlogMarkdown, and markdown rendering helpers - Align AcceptInvitationPage guest state and LocalLoginForm with React - Add Playwright visual parity tests (pixelmatch) and test:parity script - Ignore Playwright output dirs; extend apps/web devDependencies Made-with: Cursor
- Replace stub ProjectsPage with GripLoader, auto-redirect to latest project, and first-project create flow (encrypted payload + ProjectsApi) - Add ProjectsApi client (list/create) and GripLoader (accent #DDA15E) - Add auth store, AuthApi, user API, and symmetric/asymmetric crypto helpers required for project creation (wrap key with user public key) Made-with: Cursor
- Add daisyui devDependency so @plugin resolves on CI (Svelte app.css). - Document Node >=20.19 via root + apps/web engines and .nvmrc files. - Set wrangler compatibility_flags to nodejs_als and nodejs_compat for SvelteKit. Made-with: Cursor
AcceptInvitationPage and auth UI import $lib/auth/after-login; the file was untracked so Vite failed on CI. Made-with: Cursor
- loadUserData returns boolean; default PUBLIC_APP_URL to dev port 9090 - ProjectsApi: getProject, updateProjectContent - ProjectsPage: load profile before projects; errors, retry, passphrase hint, create errors - SecretsEditorPage: fetch/decrypt via keystore like main app; debounced save, Save/⌘S, locked/read-only states Made-with: Cursor
# Conflicts: # AGENTS.md
- Add /app/cli-authorize in SvelteKit with cli-flow API and client-side crypto - Preserve allowlisted return path via sessionStorage through OAuth; invite still wins in gotoAfterLogin - Remove unused device-flow placeholder module - Expand visual parity routes; add MANUAL_SMOKE matrix - Document flip/rollback in docs/web-app-cutover-runbook.md; README and WEB_APP_URL defaults for Svelte dev (9090) - Add web-ci.yml for pnpm --filter web check + build Made-with: Cursor
…nav guard - Backend: ProductAnalyticsService + identify/login + project/secrets/git semantic events; POST analytics/secrets-pushed ack; Jest imports PosthogAnalyticsModule - Web: remove posthog-js; device-flow SSE + UnlockBrowserDialog + approver dialog in layout - Members: pending link/personal invitations list + revoke (admin) - Secrets editor: unsaved SPA navigation guard + beforeunload dialog - Integrations: acknowledge secrets-pushed after GitHub push; MOBILE_QA_CHECKLIST.md Made-with: Cursor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
cryptly | 241fff4 | Apr 28 2026, 08:50 AM |
# Conflicts: # backend/src/main.ts
- add cli to the workspace and drop per-package lockfiles so the root lockfile is the single source of truth - move the changesets config to the repo root (changesets resolves the workspace root) and keep private packages unversioned - build the backend image from the repo root with pnpm deploy, and point backend/cli CI at the root lockfile - split the PostHog sourcemap upload into build:release so local builds stop uploading - set the public OAuth client ids for the Cloudflare worker
- keep the secrets editor mounted across tabs so unsaved edits survive tab switches - route project switches with unsaved edits through the unsaved-changes guard instead of silently reloading the editor - reconnect the project events stream after drops (with token refresh) so external updates keep protecting edits - block pushes while the project was updated elsewhere - restore the first-run tour, drag-to-reorder projects, one-click suggested projects, and legacy search results - restore active invites (copy link, created time, refresh after invite), history author overflow, and the settings tab - match prod tooltips, toasts, dialogs, kbd hints, icons, and editor framing
- legacy-style user menu dropdowns (desktop + mobile) that are no longer hidden behind the main pane - add-people, member, integration, and create-project dialogs match prod headers, steppers, tooltips, and Tabler icons - integrations rows, suggestions, and push tip use prod icons/states; history search no longer steals focus - regression test for unsaved edits across tab and project switches
- mobile tabs use prod icons with scroll fades and the header Save/Push split button - mobile editor uses the prod font size and gutter, with the "Changed by" footer - mobile history uses the compact list + diff layout instead of the desktop panes - floating save/push pill and first-run tour stay desktop-only, like prod
Same position, overlay, spacing, Tabler icons, autofocused input, and error row as prod; the editor stays blank behind the dialog like prod.
- fix the prettier crash (prettier-plugin-tailwindcss 0.6 -> 0.7), add .prettierignore, format the app - parse TS in .svelte for eslint and fix all reported issues (resolve() navigation, keyed each blocks, real types) - run lint in web CI - delete the never-imported application/infrastructure/domain layer, dev page, and unused UI
- backend: declare 200/201 responses so OpenAPI types response bodies, fix record, optional, query, and wrong response schemas - sdk: regenerate, expose the typed openapi-fetch client plus unwrap() - web: move all API modules onto the SDK and drop hand-written DTOs; the types caught a phantom project.integrations field - web: replay the request body when retrying after a token refresh - web: close project dialogs on Escape, keep role tooltips unclipped - cli: replace axios with the SDK client, test the 401 refresh replay - ci: fail when the generated SDK is stale, check the CLI with the web app
szymeo
marked this pull request as ready for review
October 9, 2026 03:38
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
apps/web(Cloudflare Worker), at parity with what's in production today.main(PostHog sourcemaps + backend deploy changes) and fixed the code this branch added against it.Prod parity pass (this round)
Each gap was reproduced end-to-end against a local stack and checked against the React app with screenshot diffs.
Project switches with unsaved edits go through the unsaved-changes dialog instead of silently reloading the editor.
The dialog supports ⌘S, warns when the project changed elsewhere, and closes on Esc.
Push is blocked while the project was updated elsewhere.
Desktop and mobile states diff at <0.1% against prod except the intentional differences below.
Repo/CI fixes
pnpm-workspace.yamlbroke CLI releases (installs and changesets resolved the workspace root) and left the backend with a second, drifting lockfile.The repo is now one workspace with one lockfile:
clijoined it, changesets config moved to the repo root, and the backend image builds from the repo root viapnpm deploy.pnpm buildinbackend/no longer uploads sourcemaps to PostHog; the Dockerfile usesbuild:release..svelte) and runs in CI.Intentional differences from prod
/app/developerpage.Deploy notes
cryptly.devDNS currently points at Vercel (not proxied), so the Worker route takes no traffic until the cutover indocs/web-app-cutover-runbook.md.Verification
backend:pnpm test(199 passed),pnpm build; Docker image built from the repo root and booted against Mongo.apps/web:pnpm lint,pnpm check,pnpm build, Playwrightbrowser-lock(incl. new unsaved-edits regression test) and visual parity suites.frontend:pnpm build.cli:pnpm test,pnpm build, changeset dry-run bumps only@cryptly/cli.