[CI] (6b2dc8b) react-router/saas-template - #3743
Closed
wizard-ci-bot[bot] wants to merge 1 commit into
Closed
Conversation
Author
|
Now I have all the information I need. Let me produce the evaluation. PR Evaluation ReportSummaryThis PR integrates PostHog into a React Router v7 (framework mode) SaaS template application. It adds the
Confidence score: 4/5 👍
File changes
App sanity check
|
| Criteria | Result | Description |
|---|---|---|
| App builds and runs | Yes | Syntax is valid, dependencies added correctly. The SSR noExternal issue may cause runtime errors but the app should still build. |
| Preserves existing env vars & configs | Yes | All existing configurations preserved; PostHog additions are additive. |
| No syntax or type errors | Yes | All changed files use valid TypeScript/TSX syntax. |
| Correct imports/exports | Yes | All imports resolve correctly; posthog-js is the correct browser SDK package. |
| Minimal, focused changes | Yes | All changes relate to PostHog integration. No unnecessary modifications. |
| Pre-existing issues | None |
Issues
- Missing
ssr.noExternalfor posthog-js: The React Router v7 framework mode docs require addingposthog-jstossr.noExternalinvite.config.tsto prevent SSR bundling errors. The_authenticated-routes-layout.tsxfile importsposthog.client.tsdirectly and also exports a serverloader, which means Vite may try to bundleposthog-jsfor the server. Addssr: { noExternal: ['posthog-js'] }tovite.config.ts. [MEDIUM]
Other completed criteria
- Environment variables documented in
.env.example - Build configuration valid (package.json properly updated)
- CSP headers updated for PostHog compatibility (connect-src, script-src, worker-src)
PostHog implementation ⚠️
| Criteria | Result | Description |
|---|---|---|
| PostHog SDKs installed | Yes | posthog-js ^1.424.0 added to package.json dependencies |
| PostHog client initialized | Yes | Initialized in app/lib/posthog.client.ts with posthog.init(), imported from entry.client.tsx |
| capture() | Yes | 12+ meaningful capture calls across billing, org management, team invites, and account settings |
| identify() | Yes | posthog.identify(posthogUser.id, { email, name }) called in authenticated layout using stable database user ID |
| Error tracking | Yes | captureException via error boundary in root.tsx; capture_exceptions config with unhandled errors and rejections |
| Reverse proxy | No | No reverse proxy configured; client-side events may be blocked by ad blockers |
Issues
- No reverse proxy: No Next.js rewrites, Vercel rewrites, or other reverse proxy configuration is set up. Client-side PostHog requests go directly to
us.i.posthog.com(or whatever host is configured), which ad blockers may intercept. [MEDIUM]
Other completed criteria
- API key loaded from environment variable (
VITE_PUBLIC_POSTHOG_PROJECT_TOKEN) - Host correctly configured from environment variable (
VITE_PUBLIC_POSTHOG_HOST) posthog.reset()called on logout innav-user.tsx- User identification uses stable database ID (
user.id), not email - Person properties (email, name) correctly passed to
identify() - Error boundary uses dynamic import to avoid SSR issues in root error boundary
PostHog insights and events ✅
| Filename | PostHog events | Description |
|---|---|---|
cancel-or-modify-subscription-modal-content.tsx |
subscription_change_requested, subscription_cancellation_requested |
Tracks subscription modifications and cancellations with price lookup key |
create-subscription-modal-content.tsx |
checkout_started |
Tracks checkout initiation with price lookup key |
create-organization-form-card.tsx |
organization_creation_submitted |
Tracks org creation |
nav-user.tsx |
posthog.reset() |
Resets identity on logout |
organization-switcher.tsx |
organization_switched |
Tracks org switching with org ID |
danger-zone.tsx |
organization_deletion_submitted |
Tracks org deletion |
general-organization-settings.tsx |
organization_settings_update_submitted |
Tracks settings updates with org ID |
invite-by-email-card.tsx |
organization_invitation_email_submitted |
Tracks email invitations |
invite-link-card.tsx |
invite_link_copied, invite_link_management_submitted |
Tracks link copying and management (create/regenerate/deactivate) |
account-settings.tsx |
user_account_update_submitted |
Tracks account profile updates |
root.tsx |
captureException |
Captures route-level errors |
_authenticated-routes-layout.tsx |
posthog.identify() |
Identifies authenticated users |
Issues
No issues.
Other completed criteria
- Events represent real user actions across the full SaaS lifecycle (signup, billing, team management, settings)
- Events enable product insights: can build funnels (org creation → subscription → team invite), retention, and billing analytics
- Events include relevant properties (organization_id, price_lookup_key, action type)
- No PII in event properties (email/name only in identify call as person properties)
- Event names use consistent snake_case convention with descriptive action names
Reviewed by wizard workbench PR evaluator
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.
Automated wizard CI run
Source: wizard-pr
Trigger ID:
6b2dc8bApp:
react-router/saas-templateApp directory:
apps/react-router/saas-templateWorkbench branch:
wizard-ci-6b2dc8b-react-router-saas-templateWizard branch:
release-please--branches--main--components--wizardContext Mill branch:
mainPostHog (MCP) branch:
masterTimestamp: 2026-09-01T16:04:50.858Z
Duration: 655.2s
YARA Scanner