Work through backlog foundations#156
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Storybook Image DiffOutcome: success Changed Storybook baselines: none in this PR. This check compares design-system component screenshots against committed baselines. Inline images show only added or modified Storybook baseline PNGs. |
Storybook Component Screenshot PreviewOutcome: success Screenshots: primitive component stories captured on desktop and mobile. This lane is separate from full-route Playwright screenshots and focuses on design-system component regressions. |
Playwright Hosted Data-FlowOutcome: success This optional check runs the mutation-backed profile flow against a configured hosted dev/staging target with isolated E2E test data. |
Playwright Data-Flow PreviewOutcome: success Captured flow:
Artifacts include screenshots, traces, and recorded video for the flow run. |
Playwright Public Screenshot PreviewOutcome: success Screenshots: all public route checks passed on desktop and mobile. Full screenshot set is available in the artifact. Pixel diff baselines are handled by the separate Playwright Image Diff check. |
Playwright Image DiffOutcome: success Changed screenshot baselines: 14 Showing 12 of 14; see the artifact for the rest. This check compares public route screenshots against committed baselines. Inline images show only added or modified baseline PNGs. |
Vercel Preview DeploymentPreview: https://vr-dex-kmh32tjd7-basicbit.vercel.app |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c81f0df4e6
ℹ️ 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".
There was a problem hiding this comment.
Pull request overview
This PR batches a large set of “backlog foundations” into one integration branch, adding new platform primitives across calendar export, generated short links, seed-import review staging, Discord event-post export, owner privacy + bounded appearance controls, and initial billing-state scaffolding, while also porting/expanding planning + agentic delivery docs.
Changes:
- Add outbound public event
.icsexport (web route + serializer) and Discord-ready event post export (backend formatter + editor UI copy panel). - Introduce durable generated short links (
/l/<code>) with Convex schema + resolver, plus initial billing snapshot schema/helpers and reviewed seed-import staging workflow. - Add claimed-owner field-visibility controls and bounded public profile section ordering (backend + account UI), plus docs/skills additions and workflow gating for production auth smoke.
Reviewed changes
Copilot reviewed 70 out of 81 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/web/calendar-ics.test.ts | Adds unit coverage for ICS escaping/folding + public event export contract. |
| tests/backend/short-links.test.ts | Adds coverage for short-link code validation, reservation, and public resolution behavior. |
| tests/backend/seed-imports.test.ts | Adds coverage for fake-fixture seed imports and publication blocker rules. |
| tests/backend/event-discord-export.test.ts | Adds coverage for deterministic Discord post text export from public event projections. |
| tests/backend/billing-foundation.test.ts | Adds coverage for Stripe status normalization and entitlement derivation. |
| package.json | Adds top-level scripts for hosted production-auth smoke lane. |
| docs/README.md | Links newly added billing foundation doc in docs index. |
| docs/planning/seed-import-model.md | Documents implemented seed-import staging slice + guardrails and what remains deferred. |
| docs/planning/README.md | Adds restreaming/media-control planning doc to planning index. |
| docs/planning/product-spec.md | Expands restream direction notes and clarifies privacy/control recommendations. |
| docs/planning/dependency-map.md | Captures bounded customization baseline decision and theme preset recommendation. |
| docs/planning/calendar-integration.md | Documents first .ics export slice and scope boundaries. |
| docs/planning/architecture.md | Adds restream/media-control architecture direction notes. |
| docs/developers/public-api.md | States bounded section ordering must be known keys, not arbitrary blocks. |
| docs/deployment/vercel-preview.md | Documents optional gated production authenticated smoke lane setup. |
| docs/deployment/convex-environments.md | Documents env/secret expectations for optional production auth smoke lane. |
| docs/backend/profile-schema.md | Documents new bounded section ordering, seed-import staging, and privacy/claim nuances. |
| docs/backend/profile-access-and-claims.md | Clarifies ownership invariants, no-match claim creation, and privacy mutation expectations. |
| docs/backend/generated-short-links.md | Introduces generated short links model, resolution rules, and creation contract. |
| docs/backend/event-schema.md | Links generated short links doc and documents Discord export slice behavior. |
| docs/backend/billing-foundation.md | Documents initial Stripe billing-state direction, schema, and env variable contract. |
| docs/agentic/README.md | Adds feature-design loop + parallel worktree delivery docs to agentic index. |
| docs/agentic/parallel-worktree-delivery.md | Adds repo-local guidance for parallel worktree fanout/converge delivery. |
| docs/agentic/feature-design-loop.md | Adds repo-local guidance for holistic feature planning loops. |
| docs/agentic/codex.md | Registers new repo-local skills/wrappers. |
| convex/shortLinks.ts | Adds public resolver query and authenticated ensure mutations for short links. |
| convex/seedImports.ts | Adds internal seed-import fixture ingest, review mutations/queries, and publication queue marker. |
| convex/schema.ts | Adds billing tables, seed import staging tables, shortLinks table, and bounded section order field. |
| convex/README.md | Documents new _billing.ts and billing foundation doc location. |
| convex/profiles.ts | Adds public profile appearance projection and reserves short links during profile submission. |
| convex/profilePrivacy.ts | Adds claimed-owner field visibility mutation + owned privacy profile listing + audit/search refresh. |
| convex/profileClaims.ts | Adds explicit no-match claimed profile creation mutations for Discord-linked users. |
| convex/profileAssets.ts | Adds bounded public section ordering mutation and returns section ordering in appearance profile list. |
| convex/events.ts | Reserves short links during community event creation and returns link info in create payload. |
| convex/_shortLinks.ts | Implements short-link code generation/validation, reservation, and public target resolution helpers. |
| convex/_seedImportValidators.ts | Adds validators for seed import tables and mutation args. |
| convex/_profilePrivacy.ts | Adds helpers for listing owned privacy profiles and applying field-visibility updates. |
| convex/_profileFieldVisibility.ts | Centralizes allowed visibility keys/states and adds normalization/materialization helpers. |
| convex/_profileClaimCreation.ts | Implements Discord linked-account no-match profile creation + claim request + ownership grant + short link. |
| convex/_profileAppearance.ts | Implements bounded section ordering normalization and public appearance projection helper. |
| convex/_generated/api.d.ts | Updates generated Convex API typings to include new modules and endpoints. |
| convex/_eventDiscordExport.ts | Adds deterministic Discord event post formatter from public event projection. |
| convex/_billing.ts | Adds Stripe status normalization, entitlement derivation helpers, and Convex validators. |
| apps/web/src/lib/calendar/ics.ts | Adds ICS serializer utilities and public event ICS generator. |
| apps/web/src/convex/server.ts | Adds server helper to resolve public short-link targets via Convex. |
| apps/web/src/convex/playwright-fixtures.ts | Adds appearance section ordering to web Playwright fixtures for coverage. |
| apps/web/src/app/l/[code]/page.tsx | Adds /l/<code> short-link route that resolves and redirects or 404s. |
| apps/web/src/app/events/[slug]/edit/page.tsx | Adds Discord post export panel to event editor using server-side formatting. |
| apps/web/src/app/e/[slug]/calendar.ics/route.ts | Adds public event ICS export endpoint. |
| apps/web/src/app/account/privacy/privacy-panel.tsx | Adds claimed-owner field-visibility UI for privacy controls. |
| apps/web/src/app/account/privacy/page.tsx | Adds account privacy page route and shell around privacy panel. |
| apps/web/src/app/account/appearance/page.tsx | Updates appearance page copy to include bounded section ordering. |
| apps/web/src/app/account/appearance/appearance-panel.tsx | Adds section ordering editor UI and saves ordering via Convex mutation. |
| apps/web/src/app/account/account-panel.tsx | Adds navigation entry to the new privacy page. |
| apps/web/src/app/_components/profile-public-page.tsx | Adds bounded section-order rendering of public profile sections using projected appearance. |
| apps/web/src/app/_components/event-discord-export-panel.tsx | Adds client-side copy-to-clipboard panel for Discord post text. |
| apps/web/playwright.config.mjs | Forces next dev --webpack in Playwright webserver config. |
| apps/web/package.json | Adds hosted auth-smoke script and excludes it from generic hosted smoke. |
| apps/web/e2e/public-routes.ts | Adds demo privacy route capture and updates appearance expectations. |
| apps/web/e2e/profile-submission.flow.spec.ts | Switches flow navigation to retry helper to reduce ERR_ABORTED flake. |
| apps/web/e2e/production-auth.smoke.spec.ts | Adds gated production authenticated account smoke spec using storageState secret. |
| apps/web/e2e/flow-navigation.ts | Adds navigation helper with retry for ERR_ABORTED. |
| apps/web/e2e/auth-claim.flow.spec.ts | Makes auth-claim flow serial and adds delete retries for transient network errors. |
| .opencode/skills/vrdex-parallel-worktree-delivery/SKILL.md | Adds repo-local skill for parallel worktree delivery workflow. |
| .opencode/skills/vrdex-feature-design/SKILL.md | Adds repo-local skill for feature design loop workflow. |
| .github/workflows/deployed-health.yml | Adds gated production authenticated smoke lane wiring and summary output. |
| .codex/skills/vrdex-parallel-worktree-delivery/SKILL.md | Adds Codex wrapper for the parallel worktree delivery skill. |
| .codex/skills/vrdex-feature-design/SKILL.md | Adds Codex wrapper for the feature design skill. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Greptile SummaryThis PR adds several backlog foundation features across public exports, profile controls, auth smoke tests, billing, seed imports, and docs. The main changes are:
Confidence Score: 4/5This PR has one contained authorization issue that should be fixed before merging. Most reviewed paths are well-contained and covered by tests, but the new short-link public mutations introduce a current security-boundary bug.
What T-Rex did
Important Files Changed
Sequence Diagram%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
participant OwnerUI as Owner/UI
participant Convex as Convex mutations/queries
participant DB as Convex DB
participant PublicWeb as Public Next.js routes
participant Viewer as Viewer
OwnerUI->>Convex: create/update profile, event, or claim
Convex->>DB: insert/update target record
Convex->>DB: ensureShortLinkForTarget(target)
DB-->>Convex: shortLink code/path
Convex-->>OwnerUI: "target path + /l/{code}"
Viewer->>PublicWeb: "GET /l/{code}"
PublicWeb->>Convex: resolvePublicByCode(code)
Convex->>DB: load shortLink + target
Convex-->>PublicWeb: public target path or null
PublicWeb-->>Viewer: redirect to /p, /c, /w, or /e target
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
participant OwnerUI as Owner/UI
participant Convex as Convex mutations/queries
participant DB as Convex DB
participant PublicWeb as Public Next.js routes
participant Viewer as Viewer
OwnerUI->>Convex: create/update profile, event, or claim
Convex->>DB: insert/update target record
Convex->>DB: ensureShortLinkForTarget(target)
DB-->>Convex: shortLink code/path
Convex-->>OwnerUI: "target path + /l/{code}"
Viewer->>PublicWeb: "GET /l/{code}"
PublicWeb->>Convex: resolvePublicByCode(code)
Convex->>DB: load shortLink + target
Convex-->>PublicWeb: public target path or null
PublicWeb-->>Viewer: redirect to /p, /c, /w, or /e target
|












Summary
.icsexport, gated production auth smoke, billing schema/docs, reviewed seed imports, generated short links, Discord event-post export, Discord no-match claimed profile creation, bounded public section ordering, and owner field-visibility controls.Closes #14
Closes #15
Closes #20
Closes #27
Closes #58
Closes #92
Closes #117
Progresses #5
Progresses #121
Progresses #138
Verification
node --import file:///D:/bench/VRDex/node_modules/tsx/dist/loader.mjs --test tests/backend/*.test.tspassed: 148 tests.corepack pnpm typecheck:backendpassed.corepack pnpm --filter web lintpassed.corepack pnpm --filter web typecheckpassed.corepack pnpm --filter web exec next build --webpackpassed.corepack pnpm lint:markdownpassed.corepack pnpm --filter docs buildpassed.corepack pnpm --filter web exec playwright test --grep "@flow" --project=desktop-chromium --workers=2passed: 6 tests.git diff --checkpassed.c81f0df, includingPlaywright Data Flow,Playwright Hosted Data Flow,Playwright Image Diff,Playwright Public Preview,Build Web,Build Storybook,Storybook Image Diff, CodeQL, lint, typecheck, docs, backend, restream, and Vercel preview.Notes
pnpm --filter web buildwith default Turbopack failed only in the local integration worktree because the temporaryapps/web/node_modulesjunction points outside the repo root. The Webpack build passed, and CI uses a normal install layout.VRDEX_PRODUCTION_AUTH_SMOKE_STORAGE_STATE_B64still needs a safe dedicated production test-account storage state before that lane should be enabled.