Skip to content

feat: scaffold DIH apps/* on shared @optimitron/db - #195

Open
mikepsinn wants to merge 14 commits into
mainfrom
apps-dih-split
Open

feat: scaffold DIH apps/* on shared @optimitron/db#195
mikepsinn wants to merge 14 commits into
mainfrom
apps-dih-split

Conversation

@mikepsinn

Copy link
Copy Markdown
Owner

Summary

  • Introduce apps/* single-brand Next apps (warondisease, dfda, dih, wishocracy, survey, curedao, acceleratedmedicine) from dih-neobrutalist UI; leave packages/web untouched.
  • Wire all apps to monorepo @optimitron/db (drop per-app Prisma clients); treaty YES/NO goes through Referendum slug one-percent-treaty + ReferendumVote.
  • Map referrals, org membership, email logs, and dashboards to real Optimitron models; remove crowdfunding Campaign product routes; Stripe webhook verify-only until TaskFundingPayment metadata.
  • Optional compatibility migration/schema for legacy campaign columns/tables — app paths prefer ReferendumVote / OrganizationMember / EmailLog (see apps/SCHEMA-GAPS.md).

Test plan

  • pnpm install at monorepo root
  • pnpm --filter @optimitron/db exec prisma generate
  • Ensure DB has Referendum slug one-percent-treaty (ACTIVE)
  • cd apps/warondisease && pnpm exec tsc --noEmit (expect clean)
  • pnpm dev:warondisease — vote flow localStorage → auth → /api/votes/sync writes ReferendumVote
  • Dashboard loads (referrals/invites, no campaign tiles)
  • Optional: apply 20260807180000_campaign_apps_compatibility only if env still needs those columns
  • Confirm packages/web still builds independently

Copilot AI lite review requested due to automatic review settings August 7, 2026 18:21
@vercel

vercel Bot commented Aug 7, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
optimitron-web Skipped Skipped Aug 8, 2026 8:40am

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 wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 941 files, which is 841 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 00b01e8e-4826-4817-a3ea-a0cab35843fe

📥 Commits

Reviewing files that changed from the base of the PR and between d0199a9 and 270bc09.

⛔ Files ignored due to path filters (145)
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/android-chrome-192x192.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/android-chrome-512x512.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/apple-touch-icon.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/favicon-16x16.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/favicon-32x32.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/favicon-48x48.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/favicon.ico is excluded by !**/*.ico
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/iam-icon-master.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/iam-og-1200x630.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/icon-128x128.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/icon-144x144.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/icon-152x152.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/icon-256x256.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/icon-384x384.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/icon-72x72.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/icon-96x96.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/assets/acceleratedmedicine/institute-for-accelerated-medicine-icon.jpg is excluded by !**/*.jpg
  • apps/acceleratedmedicine/public/favicon.ico is excluded by !**/*.ico
  • apps/acceleratedmedicine/public/favicon.png is excluded by !**/*.png
  • apps/acceleratedmedicine/public/professional-headshot.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/android-chrome-192x192.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/android-chrome-512x512.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/apple-touch-icon.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/curedao-icon-master.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/curedao-icon-square.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/curedao-og-1200x630.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/favicon-16x16.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/favicon-32x32.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/favicon-48x48.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/favicon.ico is excluded by !**/*.ico
  • apps/curedao/public/assets/curedao/icon-128x128.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/icon-144x144.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/icon-152x152.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/icon-256x256.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/icon-384x384.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/icon-72x72.png is excluded by !**/*.png
  • apps/curedao/public/assets/curedao/icon-96x96.png is excluded by !**/*.png
  • apps/curedao/public/favicon.ico is excluded by !**/*.ico
  • apps/curedao/public/favicon.png is excluded by !**/*.png
  • apps/curedao/public/professional-headshot.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/android-chrome-192x192.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/android-chrome-512x512.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/apple-touch-icon.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/dfda-icon-square.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/dfda-logo.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/dfda-og-1200x630.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/dih-icon-32x32.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/favicon-16x16.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/favicon-32x32.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/favicon-48x48.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/favicon.ico is excluded by !**/*.ico
  • apps/dfda/public/assets/dfda/icon-128x128.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/icon-144x144.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/icon-152x152.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/icon-256x256.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/icon-384x384.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/icon-72x72.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/icon-96x96.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/mega-studies-og.png is excluded by !**/*.png
  • apps/dfda/public/assets/dfda/observational-studies-og.png is excluded by !**/*.png
  • apps/dfda/public/favicon.ico is excluded by !**/*.ico
  • apps/dfda/public/favicon.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/android-chrome-192x192.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/android-chrome-512x512.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/apple-touch-icon.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/favicon-16x16.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/favicon-32x32.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/favicon-48x48.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/favicon.ico is excluded by !**/*.ico
  • apps/trialabundancesurvey/public/assets/survey/icon-128x128.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/icon-144x144.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/icon-152x152.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/icon-256x256.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/icon-384x384.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/icon-72x72.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/icon-96x96.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/survey-icon-master.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/survey-icon-square.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/assets/survey/survey-og-1200x630.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/favicon.ico is excluded by !**/*.ico
  • apps/trialabundancesurvey/public/favicon.png is excluded by !**/*.png
  • apps/trialabundancesurvey/public/professional-headshot.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/android-chrome-192x192.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/android-chrome-512x512.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/apple-touch-icon.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/favicon-16x16.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/favicon-32x32.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/favicon-48x48.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/favicon.ico is excluded by !**/*.ico
  • apps/warondisease/public/assets/warondisease/icon-128x128.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/icon-144x144.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/icon-152x152.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/icon-256x256.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/icon-384x384.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/icon-72x72.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/icon-96x96.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/war-on-disease-icon-square.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/war-on-disease-icon-square2.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/war-on-disease-og-1200x630-2.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/war-on-disease-og-1200x630.jpg is excluded by !**/*.jpg
  • apps/warondisease/public/assets/warondisease/war-on-disease-og-1200x630.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/war-on-disease-og-twitter-1200x675.jpg is excluded by !**/*.jpg
  • apps/warondisease/public/assets/warondisease/war-on-disease-propaganda-poster.jpeg is excluded by !**/*.jpeg
  • apps/warondisease/public/assets/warondisease/war-on-disease-propaganda-poster.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/warondisease-android-chrome-192x192.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/warondisease-android-chrome-512x512.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/warondisease-apple-touch-icon.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/warondisease-favicon-32x32.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/warondisease-favicon-master.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/warondisease-favicon.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/warondisease-icon-master.png is excluded by !**/*.png
  • apps/warondisease/public/assets/warondisease/warondisease-og-1200x630.png is excluded by !**/*.png
  • apps/warondisease/public/broad-institute-genomics.jpg is excluded by !**/*.jpg
  • apps/warondisease/public/duke-clinical-research.jpg is excluded by !**/*.jpg
  • apps/warondisease/public/favicon.ico is excluded by !**/*.ico
  • apps/warondisease/public/favicon.png is excluded by !**/*.png
  • apps/warondisease/public/johns-hopkins-medical-research.jpg is excluded by !**/*.jpg
  • apps/warondisease/public/nih-research-program.jpg is excluded by !**/*.jpg
  • apps/warondisease/public/oxford-university-clinical-research.jpg is excluded by !**/*.jpg
  • apps/warondisease/public/placeholder.svg is excluded by !**/*.svg
  • apps/warondisease/public/professional-headshot.png is excluded by !**/*.png
  • apps/warondisease/public/stanford-medical-research.jpg is excluded by !**/*.jpg
  • apps/wishocracy/public/assets/wishocracy/android-chrome-192x192.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/android-chrome-512x512.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/apple-touch-icon.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/favicon-16x16.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/favicon-32x32.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/favicon-48x48.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/favicon.ico is excluded by !**/*.ico
  • apps/wishocracy/public/assets/wishocracy/icon-128x128.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/icon-144x144.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/icon-152x152.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/icon-256x256.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/icon-384x384.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/icon-72x72.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/icon-96x96.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/wishocracy-icon-master.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/wishocracy-icon-square.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/wishocracy-og-1200x630-2.png is excluded by !**/*.png
  • apps/wishocracy/public/assets/wishocracy/wishocracy-og-1200x630.png is excluded by !**/*.png
  • apps/wishocracy/public/favicon.ico is excluded by !**/*.ico
  • apps/wishocracy/public/favicon.png is excluded by !**/*.png
  • apps/wishocracy/public/placeholder.svg is excluded by !**/*.svg
  • apps/wishocracy/public/professional-headshot.png is excluded by !**/*.png
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (941)
  • .github/workflows/ci.yml
  • apps/DEPLOYMENT.md
  • apps/README.md
  • apps/SCHEMA-GAPS.md
  • apps/SURVEY-AND-SATELLITES.md
  • apps/acceleratedmedicine/.env.example
  • apps/acceleratedmedicine/.env.test
  • apps/acceleratedmedicine/.gitignore
  • apps/acceleratedmedicine/README.md
  • apps/acceleratedmedicine/app/about/page.tsx
  • apps/acceleratedmedicine/app/api/stripe/create-checkout/route.ts
  • apps/acceleratedmedicine/app/api/stripe/session/route.ts
  • apps/acceleratedmedicine/app/api/stripe/webhook/route.test.ts
  • apps/acceleratedmedicine/app/api/stripe/webhook/route.ts
  • apps/acceleratedmedicine/app/donate/layout.tsx
  • apps/acceleratedmedicine/app/donate/page.tsx
  • apps/acceleratedmedicine/app/donate/success/page.tsx
  • apps/acceleratedmedicine/app/global-error.tsx
  • apps/acceleratedmedicine/app/globals.css
  • apps/acceleratedmedicine/app/layout.tsx
  • apps/acceleratedmedicine/app/not-found.tsx
  • apps/acceleratedmedicine/app/page.tsx
  • apps/acceleratedmedicine/app/privacy/page.tsx
  • apps/acceleratedmedicine/app/terms/page.tsx
  • apps/acceleratedmedicine/components.json
  • apps/acceleratedmedicine/components/layout.tsx
  • apps/acceleratedmedicine/components/providers.tsx
  • apps/acceleratedmedicine/components/sentry-404-reporter.tsx
  • apps/acceleratedmedicine/components/theme-provider.tsx
  • apps/acceleratedmedicine/eslint.config.mjs
  • apps/acceleratedmedicine/instrumentation-client.ts
  • apps/acceleratedmedicine/instrumentation.ts
  • apps/acceleratedmedicine/middleware.ts
  • apps/acceleratedmedicine/next.config.mjs
  • apps/acceleratedmedicine/package.json
  • apps/acceleratedmedicine/postcss.config.mjs
  • apps/acceleratedmedicine/sentry.edge.config.ts
  • apps/acceleratedmedicine/sentry.server.config.ts
  • apps/acceleratedmedicine/styles/globals.css
  • apps/acceleratedmedicine/tests/README.md
  • apps/acceleratedmedicine/tests/e2e/donate.spec.ts
  • apps/acceleratedmedicine/tests/e2e/helpers/auth.ts
  • apps/acceleratedmedicine/tests/fixtures/stripe.ts
  • apps/acceleratedmedicine/tests/setup.ts
  • apps/acceleratedmedicine/tests/utils/db-test-utils.ts
  • apps/acceleratedmedicine/tests/utils/server-only-shim.ts
  • apps/acceleratedmedicine/tests/utils/test-env.ts
  • apps/acceleratedmedicine/tsconfig.json
  • apps/acceleratedmedicine/types/next-auth.d.ts
  • apps/acceleratedmedicine/vercel.json
  • apps/acceleratedmedicine/vitest.config.ts
  • apps/curedao/.env.example
  • apps/curedao/.env.test
  • apps/curedao/.gitignore
  • apps/curedao/README.md
  • apps/curedao/app/about/page.tsx
  • apps/curedao/app/global-error.tsx
  • apps/curedao/app/globals.css
  • apps/curedao/app/layout.tsx
  • apps/curedao/app/not-found.tsx
  • apps/curedao/app/page.tsx
  • apps/curedao/app/privacy/page.tsx
  • apps/curedao/app/terms/page.tsx
  • apps/curedao/components.json
  • apps/curedao/components/layout.tsx
  • apps/curedao/components/providers.tsx
  • apps/curedao/components/sentry-404-reporter.tsx
  • apps/curedao/components/theme-provider.tsx
  • apps/curedao/eslint.config.mjs
  • apps/curedao/instrumentation-client.ts
  • apps/curedao/instrumentation.ts
  • apps/curedao/middleware.ts
  • apps/curedao/next.config.mjs
  • apps/curedao/package.json
  • apps/curedao/postcss.config.mjs
  • apps/curedao/sentry.edge.config.ts
  • apps/curedao/sentry.server.config.ts
  • apps/curedao/styles/globals.css
  • apps/curedao/tsconfig.json
  • apps/curedao/types/next-auth.d.ts
  • apps/curedao/vercel.json
  • apps/curedao/vitest.config.ts
  • apps/dfda/.env.example
  • apps/dfda/.env.test
  • apps/dfda/.gitignore
  • apps/dfda/README.md
  • apps/dfda/app/about/page.tsx
  • apps/dfda/app/api/auth/[...nextauth]/route.ts
  • apps/dfda/app/api/auth/complete-signup/route.ts
  • apps/dfda/app/api/auth/signup/route.ts
  • apps/dfda/app/auth/complete-signup/page.tsx
  • apps/dfda/app/auth/error/error-content.tsx
  • apps/dfda/app/auth/error/page.tsx
  • apps/dfda/app/auth/signin/loading.tsx
  • apps/dfda/app/auth/signin/page.tsx
  • apps/dfda/app/auth/signup/loading.tsx
  • apps/dfda/app/auth/verify-request/page.tsx
  • apps/dfda/app/conditions/[conditionSlug]/page.tsx
  • apps/dfda/app/conditions/[conditionSlug]/treatments/[treatmentSlug]/components/treatment-report.tsx
  • apps/dfda/app/conditions/[conditionSlug]/treatments/[treatmentSlug]/components/treatment-trials.tsx
  • apps/dfda/app/conditions/[conditionSlug]/treatments/[treatmentSlug]/page.tsx
  • apps/dfda/app/conditions/conditions-list.tsx
  • apps/dfda/app/conditions/page.tsx
  • apps/dfda/app/contact/page.tsx
  • apps/dfda/app/dfda/components/DfdaLandingContent.tsx
  • apps/dfda/app/dfda/components/ExternalLinksSection.tsx
  • apps/dfda/app/dfda/components/FeaturedConditions.tsx
  • apps/dfda/app/dfda/components/FeaturedTreatments.tsx
  • apps/dfda/app/dfda/components/PopularConditions.tsx
  • apps/dfda/app/dfda/components/UniversalSearchBox.tsx
  • apps/dfda/app/dfda/page.tsx
  • apps/dfda/app/faq/page.tsx
  • apps/dfda/app/find-trials/components/ConditionSuggestInput.tsx
  • apps/dfda/app/find-trials/components/InterventionSuggestInput.tsx
  • apps/dfda/app/find-trials/components/find-trials-form.tsx
  • apps/dfda/app/find-trials/components/trial-results-display.tsx
  • apps/dfda/app/find-trials/page.test.ts
  • apps/dfda/app/find-trials/page.tsx
  • apps/dfda/app/global-error.tsx
  • apps/dfda/app/globals.css
  • apps/dfda/app/layout.tsx
  • apps/dfda/app/mega-studies/mega-studies-list.tsx
  • apps/dfda/app/mega-studies/page.tsx
  • apps/dfda/app/not-found.tsx
  • apps/dfda/app/observational-studies/observational-studies-list.tsx
  • apps/dfda/app/observational-studies/page.tsx
  • apps/dfda/app/page.tsx
  • apps/dfda/app/privacy/page.tsx
  • apps/dfda/app/references/page.tsx
  • apps/dfda/app/references/references-list.tsx
  • apps/dfda/app/research/page.tsx
  • apps/dfda/app/sitemap.xml/route.ts
  • apps/dfda/app/terms/page.tsx
  • apps/dfda/app/treatments/[treatmentSlug]/page.tsx
  • apps/dfda/app/treatments/page.tsx
  • apps/dfda/app/treatments/treatments-list.tsx
  • apps/dfda/components.json
  • apps/dfda/components/condition/TreatmentRankings.tsx
  • apps/dfda/components/how-it-works/HowItWorksStep.tsx
  • apps/dfda/components/how-it-works/PatientHowItWorks.tsx
  • apps/dfda/components/how-it-works/PatientSteps.tsx
  • apps/dfda/components/how-it-works/ProviderHowItWorks.tsx
  • apps/dfda/components/how-it-works/ProviderSteps.tsx
  • apps/dfda/components/how-it-works/ResearchPartnerHowItWorks.tsx
  • apps/dfda/components/how-it-works/ResearchPartnerStep.tsx
  • apps/dfda/components/how-it-works/ResearchPartnerSteps.tsx
  • apps/dfda/components/how-it-works/provider-steps/Step1ReviewPatientMatches.tsx
  • apps/dfda/components/how-it-works/provider-steps/Step2AssignIntervention.tsx
  • apps/dfda/components/how-it-works/provider-steps/Step3MonitorProgress.tsx
  • apps/dfda/components/how-it-works/steps/Step1FindTrials.tsx
  • apps/dfda/components/how-it-works/steps/Step2ViewOutcomeLabels.tsx
  • apps/dfda/components/how-it-works/steps/Step3JoinTrial.tsx
  • apps/dfda/components/how-it-works/steps/Step4CoordinateCare.tsx
  • apps/dfda/components/how-it-works/steps/Step5TrackData.tsx
  • apps/dfda/components/how-it-works/steps/Step6GainInsights.tsx
  • apps/dfda/components/how-it-works/steps/Step7FDAiAgent.tsx
  • apps/dfda/components/landing/ClinicalStudyCitationDisplay.tsx
  • apps/dfda/components/landing/OutcomeLabel.tsx
  • apps/dfda/components/layout.tsx
  • apps/dfda/components/providers.tsx
  • apps/dfda/components/sentry-404-reporter.tsx
  • apps/dfda/components/shared/InterventionCard.tsx
  • apps/dfda/components/shared/TrialCard.tsx
  • apps/dfda/components/theme-provider.tsx
  • apps/dfda/components/treatment/HealthEconomicsDisplay.test.tsx
  • apps/dfda/components/treatment/HealthEconomicsDisplay.tsx
  • apps/dfda/components/treatment/SafetyScale.tsx
  • apps/dfda/components/treatment/TreatmentMetricsGrid.tsx
  • apps/dfda/data/conditions.json
  • apps/dfda/data/references.json
  • apps/dfda/data/treatments.json
  • apps/dfda/data/treatments/acne.json
  • apps/dfda/data/treatments/acute-glomerulonephritis.json
  • apps/dfda/data/treatments/acute-hepatitis-a.json
  • apps/dfda/data/treatments/acute-hepatitis-b.json
  • apps/dfda/data/treatments/acute-hepatitis-c.json
  • apps/dfda/data/treatments/acute-hepatitis-e.json
  • apps/dfda/data/treatments/acute-lymphoid-leukemia.json
  • apps/dfda/data/treatments/acute-myeloid-leukemia.json
  • apps/dfda/data/treatments/addisons-disease.json
  • apps/dfda/data/treatments/adhd.json
  • apps/dfda/data/treatments/african-trypanosomiasis.json
  • apps/dfda/data/treatments/alcohol-use-disorders.json
  • apps/dfda/data/treatments/alcoholic-cardiomyopathy.json
  • apps/dfda/data/treatments/allergic-rhinitis.json
  • apps/dfda/data/treatments/alzheimers-disease.json
  • apps/dfda/data/treatments/amphetamine-use-disorders.json
  • apps/dfda/data/treatments/ankylosing-spondylitis.json
  • apps/dfda/data/treatments/anorexia-nervosa.json
  • apps/dfda/data/treatments/anxiety-disorder.json
  • apps/dfda/data/treatments/appendicitis.json
  • apps/dfda/data/treatments/asbestosis.json
  • apps/dfda/data/treatments/ascariasis.json
  • apps/dfda/data/treatments/asthma.json
  • apps/dfda/data/treatments/atrial-fibrillation.json
  • apps/dfda/data/treatments/benign-prostatic-hyperplasia.json
  • apps/dfda/data/treatments/bipolar-disorder.json
  • apps/dfda/data/treatments/bladder-cancer.json
  • apps/dfda/data/treatments/brain-and-central-nervous-system-cancer.json
  • apps/dfda/data/treatments/breast-cancer.json
  • apps/dfda/data/treatments/burkitt-lymphoma.json
  • apps/dfda/data/treatments/carpal-tunnel-syndrome.json
  • apps/dfda/data/treatments/celiac-disease.json
  • apps/dfda/data/treatments/cellulitis.json
  • apps/dfda/data/treatments/cervical-cancer.json
  • apps/dfda/data/treatments/chagas-disease.json
  • apps/dfda/data/treatments/chlamydia.json
  • apps/dfda/data/treatments/chlamydial-infection.json
  • apps/dfda/data/treatments/chronic-bronchitis.json
  • apps/dfda/data/treatments/chronic-fatigue-syndrome.json
  • apps/dfda/data/treatments/chronic-kidney-disease-due-to-diabetes-mellitus-type-1.json
  • apps/dfda/data/treatments/chronic-kidney-disease-due-to-diabetes-mellitus-type-2.json
  • apps/dfda/data/treatments/chronic-kidney-disease-due-to-glomerulonephritis.json
  • apps/dfda/data/treatments/chronic-kidney-disease-due-to-hypertension.json
  • apps/dfda/data/treatments/chronic-lymphoid-leukemia.json
  • apps/dfda/data/treatments/chronic-myeloid-leukemia.json
  • apps/dfda/data/treatments/chronic-sinusitis.json
  • apps/dfda/data/treatments/cluster-headache.json
  • apps/dfda/data/treatments/coal-workers-pneumoconiosis.json
  • apps/dfda/data/treatments/cocaine-use-disorders.json
  • apps/dfda/data/treatments/colon-and-rectum-cancer.json
  • apps/dfda/data/treatments/congenital-heart-anomalies.json
  • apps/dfda/data/treatments/congenital-musculoskeletal-and-limb-anomalies.json
  • apps/dfda/data/treatments/copd.json
  • apps/dfda/data/treatments/coronary-artery-disease.json
  • apps/dfda/data/treatments/covid-19.json
  • apps/dfda/data/treatments/crohns-disease.json
  • apps/dfda/data/treatments/cushings-syndrome.json
  • apps/dfda/data/treatments/cystic-echinococcosis.json
  • apps/dfda/data/treatments/cysticercosis.json
  • apps/dfda/data/treatments/decubitus-ulcer.json
  • apps/dfda/data/treatments/dengue.json
  • apps/dfda/data/treatments/depression.json
  • apps/dfda/data/treatments/diabetes-mellitus-type-1.json
  • apps/dfda/data/treatments/diabetes-mellitus-type-2.json
  • apps/dfda/data/treatments/diarrheal-diseases.json
  • apps/dfda/data/treatments/digestive-congenital-anomalies.json
  • apps/dfda/data/treatments/dilated-cardiomyopathy.json
  • apps/dfda/data/treatments/diphtheria.json
  • apps/dfda/data/treatments/diverticulitis.json
  • apps/dfda/data/treatments/down-syndrome.json
  • apps/dfda/data/treatments/drug-susceptible-tuberculosis.json
  • apps/dfda/data/treatments/dry-eye-disease.json
  • apps/dfda/data/treatments/ectopic-pregnancy.json
  • apps/dfda/data/treatments/eczema.json
  • apps/dfda/data/treatments/emphysema.json
  • apps/dfda/data/treatments/encephalitis.json
  • apps/dfda/data/treatments/endocarditis.json
  • apps/dfda/data/treatments/endometriosis.json
  • apps/dfda/data/treatments/esophageal-cancer.json
  • apps/dfda/data/treatments/extensively-drug-resistant-tuberculosis.json
  • apps/dfda/data/treatments/fibromyalgia.json
  • apps/dfda/data/treatments/frontotemporal-dementia.json
  • apps/dfda/data/treatments/g6pd-deficiency.json
  • apps/dfda/data/treatments/gallbladder-and-biliary-diseases.json
  • apps/dfda/data/treatments/gallbladder-and-biliary-tract-cancer.json
  • apps/dfda/data/treatments/gastritis-and-duodenitis.json
  • apps/dfda/data/treatments/genital-herpes.json
  • apps/dfda/data/treatments/genital-prolapse.json
  • apps/dfda/data/treatments/gerd.json
  • apps/dfda/data/treatments/gingivitis.json
  • apps/dfda/data/treatments/glaucoma.json
  • apps/dfda/data/treatments/gonococcal-infection.json
  • apps/dfda/data/treatments/gonorrhea.json
  • apps/dfda/data/treatments/gout.json
  • apps/dfda/data/treatments/hashimotos-thyroiditis.json
  • apps/dfda/data/treatments/heart-failure.json
  • apps/dfda/data/treatments/hemophilia.json
  • apps/dfda/data/treatments/hemorrhoids.json
  • apps/dfda/data/treatments/hepatoblastoma.json
  • apps/dfda/data/treatments/hiv-aids-drug-susceptible-tuberculosis.json
  • apps/dfda/data/treatments/hiv-aids-extensively-drug-resistant-tuberculosis.json
  • apps/dfda/data/treatments/hiv-aids-multidrug-resistant-tuberculosis-without-extensive-drug-resistance.json
  • apps/dfda/data/treatments/hodgkin-lymphoma.json
  • apps/dfda/data/treatments/hpv-infection.json
  • apps/dfda/data/treatments/hypertension.json
  • apps/dfda/data/treatments/hypertensive-heart-disease.json
  • apps/dfda/data/treatments/hyperthyroidism.json
  • apps/dfda/data/treatments/hypertrophic-cardiomyopathy.json
  • apps/dfda/data/treatments/hypothyroidism.json
  • apps/dfda/data/treatments/idiopathic-epilepsy.json
  • apps/dfda/data/treatments/index.json
  • apps/dfda/data/treatments/inflammatory-bowel-disease.json
  • apps/dfda/data/treatments/inguinal-femoral-and-abdominal-hernia.json
  • apps/dfda/data/treatments/insomnia.json
  • apps/dfda/data/treatments/interstitial-cystitis.json
  • apps/dfda/data/treatments/interstitial-lung-disease-and-pulmonary-sarcoidosis.json
  • apps/dfda/data/treatments/intracerebral-hemorrhage.json
  • apps/dfda/data/treatments/invasive-non-typhoidal-salmonella-ints.json
  • apps/dfda/data/treatments/iron-deficiency-anemia.json
  • apps/dfda/data/treatments/irritable-bowel-syndrome.json
  • apps/dfda/data/treatments/ischemic-heart-disease.json
  • apps/dfda/data/treatments/ischemic-stroke.json
  • apps/dfda/data/treatments/kidney-cancer.json
  • apps/dfda/data/treatments/kidney-stones.json
  • apps/dfda/data/treatments/larynx-cancer.json
  • apps/dfda/data/treatments/lewy-body-dementia.json
  • apps/dfda/data/treatments/lip-and-oral-cavity-cancer.json
  • apps/dfda/data/treatments/liver-cancer-due-to-alcohol-use.json
  • apps/dfda/data/treatments/liver-cancer-due-to-hepatitis-b.json
  • apps/dfda/data/treatments/liver-cancer-due-to-hepatitis-c.json
  • apps/dfda/data/treatments/liver-cancer-due-to-nash.json
  • apps/dfda/data/treatments/long-covid.json
  • apps/dfda/data/treatments/lower-extremity-peripheral-arterial-disease.json
  • apps/dfda/data/treatments/lower-respiratory-infections.json
  • apps/dfda/data/treatments/lupus.json
  • apps/dfda/data/treatments/macular-degeneration.json
  • apps/dfda/data/treatments/malaria.json
  • apps/dfda/data/treatments/malignant-neoplasm-of-bone-and-articular-cartilage.json
  • apps/dfda/data/treatments/malignant-skin-melanoma.json
  • apps/dfda/data/treatments/maternal-hypertensive-disorders.json
  • apps/dfda/data/treatments/measles.json
  • apps/dfda/data/treatments/menieres-disease.json
  • apps/dfda/data/treatments/meningitis.json
  • apps/dfda/data/treatments/menopause.json
  • apps/dfda/data/treatments/mesothelioma.json
  • apps/dfda/data/treatments/metabolic-syndrome.json
  • apps/dfda/data/treatments/migraine.json
  • apps/dfda/data/treatments/motor-neuron-disease.json
  • apps/dfda/data/treatments/multidrug-resistant-tuberculosis-without-extensive-drug-resistance.json
  • apps/dfda/data/treatments/multiple-myeloma.json
  • apps/dfda/data/treatments/multiple-sclerosis.json
  • apps/dfda/data/treatments/myocarditis.json
  • apps/dfda/data/treatments/nasopharynx-cancer.json
  • apps/dfda/data/treatments/neural-tube-defects.json
  • apps/dfda/data/treatments/non-melanoma-skin-cancer-squamous-cell-carcinoma.json
  • apps/dfda/data/treatments/non-rheumatic-calcific-aortic-valve-disease.json
  • apps/dfda/data/treatments/non-rheumatic-degenerative-mitral-valve-disease.json
  • apps/dfda/data/treatments/opioid-use-disorders.json
  • apps/dfda/data/treatments/orofacial-clefts.json
  • apps/dfda/data/treatments/osteoarthritis.json
  • apps/dfda/data/treatments/osteoporosis.json
  • apps/dfda/data/treatments/otitis-media.json
  • apps/dfda/data/treatments/ovarian-cancer.json
  • apps/dfda/data/treatments/pancreatic-cancer.json
  • apps/dfda/data/treatments/pancreatitis.json
  • apps/dfda/data/treatments/paralytic-ileus-and-intestinal-obstruction.json
  • apps/dfda/data/treatments/paratyphoid-fever.json
  • apps/dfda/data/treatments/parkinson-s-disease.json
  • apps/dfda/data/treatments/peptic-ulcer-disease.json
  • apps/dfda/data/treatments/peripheral-neuropathy.json
  • apps/dfda/data/treatments/pertussis.json
  • apps/dfda/data/treatments/polycystic-ovary-syndrome.json
  • apps/dfda/data/treatments/premenstrual-syndrome.json
  • apps/dfda/data/treatments/prostate-cancer.json
  • apps/dfda/data/treatments/protein-energy-malnutrition.json
  • apps/dfda/data/treatments/psoriasis.json
  • apps/dfda/data/treatments/pulmonary-arterial-hypertension.json
  • apps/dfda/data/treatments/pyoderma.json
  • apps/dfda/data/treatments/restless-legs-syndrome.json
  • apps/dfda/data/treatments/retinoblastoma.json
  • apps/dfda/data/treatments/rheumatic-heart-disease.json
  • apps/dfda/data/treatments/rheumatoid-arthritis.json
  • apps/dfda/data/treatments/rosacea.json
  • apps/dfda/data/treatments/schistosomiasis.json
  • apps/dfda/data/treatments/shingles.json
  • apps/dfda/data/treatments/sickle-cell-disorders.json
  • apps/dfda/data/treatments/silicosis.json
  • apps/dfda/data/treatments/sleep-apnea.json
  • apps/dfda/data/treatments/stomach-cancer.json
  • apps/dfda/data/treatments/subarachnoid-hemorrhage.json
  • apps/dfda/data/treatments/syphilis.json
  • apps/dfda/data/treatments/tension-headache.json
  • apps/dfda/data/treatments/testicular-cancer.json
  • apps/dfda/data/treatments/tetanus.json
  • apps/dfda/data/treatments/thalassemias.json
  • apps/dfda/data/treatments/thyroid-cancer.json
  • apps/dfda/data/treatments/tinnitus.json
  • apps/dfda/data/treatments/tracheal-bronchus-and-lung-cancer.json
  • apps/dfda/data/treatments/typhoid-fever.json
  • apps/dfda/data/treatments/ulcerative-colitis.json
  • apps/dfda/data/treatments/upper-respiratory-infections.json
  • apps/dfda/data/treatments/urinary-tract-infection.json
  • apps/dfda/data/treatments/urinary-tract-infections-and-interstitial-nephritis.json
  • apps/dfda/data/treatments/urogenital-congenital-anomalies.json
  • apps/dfda/data/treatments/urolithiasis.json
  • apps/dfda/data/treatments/uterine-cancer.json
  • apps/dfda/data/treatments/uterine-fibroids.json
  • apps/dfda/data/treatments/varicella-and-herpes-zoster.json
  • apps/dfda/data/treatments/varicose-veins.json
  • apps/dfda/data/treatments/vascular-dementia.json
  • apps/dfda/data/treatments/vascular-intestinal-disorders.json
  • apps/dfda/data/treatments/vertigo.json
  • apps/dfda/data/treatments/visceral-leishmaniasis.json
  • apps/dfda/data/treatments/vitamin-b12-deficiency.json
  • apps/dfda/data/treatments/vitiligo.json
  • apps/dfda/data/treatments/yellow-fever.json
  • apps/dfda/data/treatments/zika-virus.json
  • apps/dfda/eslint.config.mjs
  • apps/dfda/instrumentation-client.ts
  • apps/dfda/instrumentation.ts
  • apps/dfda/lib/actions/conditions.ts
  • apps/dfda/lib/actions/generate-outcomes-ai.ts
  • apps/dfda/lib/actions/get-clinical-trials.ts
  • apps/dfda/lib/actions/get-condition-suggestions.ts
  • apps/dfda/lib/actions/get-intervention-suggestions.ts
  • apps/dfda/lib/actions/google-grounded-search.ts
  • apps/dfda/lib/actions/hybrid-treatment-data.ts
  • apps/dfda/lib/actions/treatment-comparisons.ts
  • apps/dfda/lib/actions/treatment-rankings.ts
  • apps/dfda/lib/actions/treatments.ts
  • apps/dfda/lib/actions/universal-search.ts
  • apps/dfda/lib/ai/google.ts
  • apps/dfda/lib/clinical-trials-gov.ts
  • apps/dfda/lib/conditions.ts
  • apps/dfda/lib/constants/clinical-trial-filters.ts
  • apps/dfda/lib/fetch-trial-results.ts
  • apps/dfda/lib/genai-image.ts
  • apps/dfda/lib/schemas/clinical-trial-suggestion.schema.ts
  • apps/dfda/lib/schemas/clinical-trial.schema.ts
  • apps/dfda/lib/treatments.ts
  • apps/dfda/lib/types/clinical-study-citation.ts
  • apps/dfda/middleware.ts
  • apps/dfda/next.config.mjs
  • apps/dfda/package.json
  • apps/dfda/postcss.config.mjs
  • apps/dfda/sentry.edge.config.ts
  • apps/dfda/sentry.server.config.ts
  • apps/dfda/styles/globals.css
  • apps/dfda/tests/setup.ts
  • apps/dfda/tests/utils/db-test-utils.ts
  • apps/dfda/tests/utils/server-only-shim.ts
  • apps/dfda/tests/utils/test-env.ts
  • apps/dfda/tsconfig.json
  • apps/dfda/types/condition.ts
  • apps/dfda/types/dashboard.ts
  • apps/dfda/types/general-research-citation.ts
  • apps/dfda/types/next-auth.d.ts
  • apps/dfda/types/treatment.ts
  • apps/dfda/vitest.config.ts
  • apps/trialabundancesurvey/.env.example
  • apps/trialabundancesurvey/.env.test
  • apps/trialabundancesurvey/.gitignore
  • apps/trialabundancesurvey/README.md
  • apps/trialabundancesurvey/app/about/page.tsx
  • apps/trialabundancesurvey/app/api/auth/[...nextauth]/route.ts
  • apps/trialabundancesurvey/app/api/auth/complete-signup/route.ts
  • apps/trialabundancesurvey/app/api/auth/signup/route.ts
  • apps/trialabundancesurvey/app/api/share/route.ts
  • apps/trialabundancesurvey/app/api/votes/sync/route.ts
  • apps/trialabundancesurvey/app/auth/complete-signup/page.tsx
  • apps/trialabundancesurvey/app/auth/error/error-content.tsx
  • apps/trialabundancesurvey/app/auth/error/page.tsx
  • apps/trialabundancesurvey/app/auth/signin/loading.tsx
  • apps/trialabundancesurvey/app/auth/signin/page.tsx
  • apps/trialabundancesurvey/app/auth/verify-request/page.tsx
  • apps/trialabundancesurvey/app/contact/page.tsx
  • apps/trialabundancesurvey/app/dashboard/actions.ts
  • apps/trialabundancesurvey/app/dashboard/page.tsx
  • apps/trialabundancesurvey/app/embed/page.tsx
  • apps/trialabundancesurvey/app/faq/page.tsx
  • apps/trialabundancesurvey/app/global-error.tsx
  • apps/trialabundancesurvey/app/globals.css
  • apps/trialabundancesurvey/app/layout.tsx
  • apps/trialabundancesurvey/app/not-found.tsx
  • apps/trialabundancesurvey/app/page.tsx
  • apps/trialabundancesurvey/app/privacy/page.tsx
  • apps/trialabundancesurvey/app/terms/page.tsx
  • apps/trialabundancesurvey/components.json
  • apps/trialabundancesurvey/components/layout.tsx
  • apps/trialabundancesurvey/components/providers.tsx
  • apps/trialabundancesurvey/components/sentry-404-reporter.tsx
  • apps/trialabundancesurvey/components/theme-provider.tsx
  • apps/trialabundancesurvey/eslint.config.mjs
  • apps/trialabundancesurvey/instrumentation-client.ts
  • apps/trialabundancesurvey/instrumentation.ts
  • apps/trialabundancesurvey/middleware.ts
  • apps/trialabundancesurvey/next.config.mjs
  • apps/trialabundancesurvey/package.json
  • apps/trialabundancesurvey/postcss.config.mjs
  • apps/trialabundancesurvey/public/embed.js
  • apps/trialabundancesurvey/sentry.edge.config.ts
  • apps/trialabundancesurvey/sentry.server.config.ts
  • apps/trialabundancesurvey/styles/globals.css
  • apps/trialabundancesurvey/tests/README.md
  • apps/trialabundancesurvey/tests/integration/votes-sync-referral-invitation.test.ts
  • apps/trialabundancesurvey/tests/setup.ts
  • apps/trialabundancesurvey/tests/utils/db-test-utils.ts
  • apps/trialabundancesurvey/tests/utils/server-only-shim.ts
  • apps/trialabundancesurvey/tests/utils/test-env.ts
  • apps/trialabundancesurvey/tsconfig.json
  • apps/trialabundancesurvey/types/next-auth.d.ts
  • apps/trialabundancesurvey/vercel.json
  • apps/trialabundancesurvey/vitest.config.ts
  • apps/warondisease/.env.example
  • apps/warondisease/.env.test
  • apps/warondisease/.gitignore
  • apps/warondisease/README.md
  • apps/warondisease/app/about/page.tsx
  • apps/warondisease/app/admin/layout.tsx
  • apps/warondisease/app/admin/organizations/admin-organizations-client.tsx
  • apps/warondisease/app/admin/organizations/page.tsx
  • apps/warondisease/app/admin/page-scorecard/page.tsx
  • apps/warondisease/app/admin/users/admin-users-client.tsx
  • apps/warondisease/app/admin/users/page.tsx
  • apps/warondisease/app/api/admin/organizations/[id]/route.ts
  • apps/warondisease/app/api/admin/organizations/route.ts
  • apps/warondisease/app/api/admin/users/[id]/route.ts
  • apps/warondisease/app/api/admin/users/route.ts
  • apps/warondisease/app/api/auth/[...nextauth]/route.ts
  • apps/warondisease/app/api/auth/complete-signup/route.ts
  • apps/warondisease/app/api/auth/signup/route.ts
  • apps/warondisease/app/api/cron/scheduled-emails/route.ts
  • apps/warondisease/app/api/cron/weekly-emails/route.ts
  • apps/warondisease/app/api/email/unsubscribe/route.ts
  • apps/warondisease/app/api/institutes/apply/route.ts
  • apps/warondisease/app/api/og/organization/route.tsx
  • apps/warondisease/app/api/og/vote/route.tsx
  • apps/warondisease/app/api/referral-invitations/nudge-opt-in/route.ts
  • apps/warondisease/app/api/referral-invitations/route.ts
  • apps/warondisease/app/api/share/route.ts
  • apps/warondisease/app/api/social-accounts/disconnect/route.ts
  • apps/warondisease/app/api/stripe/create-checkout/route.ts
  • apps/warondisease/app/api/stripe/session/route.ts
  • apps/warondisease/app/api/stripe/webhook/route.test.ts
  • apps/warondisease/app/api/stripe/webhook/route.ts
  • apps/warondisease/app/api/user/visibility/route.ts
  • apps/warondisease/app/api/user/vote-status/route.ts
  • apps/warondisease/app/api/votes/sync/route.ts
  • apps/warondisease/app/auth/complete-signup/page.tsx
  • apps/warondisease/app/auth/error/error-content.tsx
  • apps/warondisease/app/auth/error/page.tsx
  • apps/warondisease/app/auth/signin/loading.tsx
  • apps/warondisease/app/auth/signin/page.tsx
  • apps/warondisease/app/auth/signup/loading.tsx
  • apps/warondisease/app/auth/verify-request/page.tsx
  • apps/warondisease/app/contact/page.tsx
  • apps/warondisease/app/dashboard/actions.ts
  • apps/warondisease/app/dashboard/dashboard-client.tsx
  • apps/warondisease/app/dashboard/page.tsx
  • apps/warondisease/app/dashboard/settings/page.tsx
  • apps/warondisease/app/dashboard/settings/settings-client.tsx
  • apps/warondisease/app/donate/layout.tsx
  • apps/warondisease/app/donate/page.tsx
  • apps/warondisease/app/donate/success/page.tsx
  • apps/warondisease/app/faq/page.tsx
  • apps/warondisease/app/global-error.tsx
  • apps/warondisease/app/globals.css
  • apps/warondisease/app/institutes/page.tsx
  • apps/warondisease/app/institutes/success/page.tsx
  • apps/warondisease/app/layout.tsx
  • apps/warondisease/app/not-found.tsx
  • apps/warondisease/app/organizations/[slug]/page.tsx
  • apps/warondisease/app/page.tsx
  • apps/warondisease/app/privacy/page.tsx
  • apps/warondisease/app/profile/actions.ts
  • apps/warondisease/app/profile/edit/page.tsx
  • apps/warondisease/app/profile/edit/profile-edit-client.tsx
  • apps/warondisease/app/profile/edit/sections/basic-info-section.tsx
  • apps/warondisease/app/profile/edit/sections/links-section.tsx
  • apps/warondisease/app/profile/edit/sections/skills-section.tsx
  • apps/warondisease/app/send/page.tsx
  • apps/warondisease/app/send/send-referral-invitation-client.tsx
  • apps/warondisease/app/sitemap.xml/route.ts
  • apps/warondisease/app/soldiers/loading.tsx
  • apps/warondisease/app/soldiers/page.tsx
  • apps/warondisease/app/soldiers/soldiers-leaderboard.tsx
  • apps/warondisease/app/survey/[slug]/layout.tsx
  • apps/warondisease/app/survey/[slug]/not-found.tsx
  • apps/warondisease/app/survey/[slug]/page.tsx
  • apps/warondisease/app/survey/demo/page.tsx
  • apps/warondisease/app/terms/page.tsx
  • apps/warondisease/app/the-plan/page.tsx
  • apps/warondisease/app/u/[username]/page.tsx
  • apps/warondisease/components.json
  • apps/warondisease/components/dashboard/ActivityFeed.tsx
  • apps/warondisease/components/dashboard/AllocationBar.tsx
  • apps/warondisease/components/dashboard/BadgesSection.tsx
  • apps/warondisease/components/dashboard/CampaignsCard.tsx
  • apps/warondisease/components/dashboard/ConnectedAccountsCard.tsx
  • apps/warondisease/components/dashboard/EmailPreferencesCard.tsx
  • apps/warondisease/components/dashboard/EmailSignatureCard.tsx
  • apps/warondisease/components/dashboard/GlobalProgressCard.tsx
  • apps/warondisease/components/dashboard/ImpactLedgerCard.tsx
  • apps/warondisease/components/dashboard/ImpactTreeCard.tsx
  • apps/warondisease/components/dashboard/LeaderboardCard.tsx
  • apps/warondisease/components/dashboard/MilitaryVsClinicalTrialsAllocationCard.tsx
  • apps/warondisease/components/dashboard/OrganizationEmailSignatureCard.tsx
  • apps/warondisease/components/dashboard/OrganizationSelector.tsx
  • apps/warondisease/components/dashboard/OrganizationsCard.tsx
  • apps/warondisease/components/dashboard/PrivacyToggle.tsx
  • apps/warondisease/components/dashboard/ProfileCard.tsx
  • apps/warondisease/components/dashboard/ReferralGoalCard.tsx
  • apps/warondisease/components/dashboard/ReferralInvitationsCard.tsx
  • apps/warondisease/components/dashboard/StatsOverview.tsx
  • apps/warondisease/components/dashboard/StickyShareFooter.tsx
  • apps/warondisease/components/institutes/BecomePartnerCTA.tsx
  • apps/warondisease/components/institutes/CapacityMultiplierProof.tsx
  • apps/warondisease/components/institutes/CoalitionBenefits.tsx
  • apps/warondisease/components/institutes/ConcreteInstituteBenefits.tsx
  • apps/warondisease/components/institutes/DataAssetValue.tsx
  • apps/warondisease/components/institutes/FutureGrants.tsx
  • apps/warondisease/components/institutes/HowItWorks.tsx
  • apps/warondisease/components/institutes/InstituteBecomePartnerSection.tsx
  • apps/warondisease/components/institutes/InstituteBenefits.tsx
  • apps/warondisease/components/institutes/InstituteHero.tsx
  • apps/warondisease/components/institutes/InstituteShowcaseCard.tsx
  • apps/warondisease/components/institutes/InstituteStats.tsx
  • apps/warondisease/components/institutes/InstitutesShowcase.tsx
  • apps/warondisease/components/institutes/SafeForCharities.tsx
  • apps/warondisease/components/institutes/SurveyImplementationGuide.tsx
  • apps/warondisease/components/institutes/TheBrutalTruth.tsx
  • apps/warondisease/components/institutes/TheTippingPoint.tsx
  • apps/warondisease/components/institutes/WhatOnePercentChanges.tsx
  • apps/warondisease/components/institutes/WhatPartnerInstituteMeans.tsx
  • apps/warondisease/components/institutes/WhatTheSurveyMeasures.tsx
  • apps/warondisease/components/institutes/WhoShouldApply.tsx
  • apps/warondisease/components/institutes/ZeroSumValueProposition.tsx
  • apps/warondisease/components/institutes/ZeroSumVisualization.tsx
  • apps/warondisease/components/layout.tsx
  • apps/warondisease/components/organizations/OrganizationForm.tsx
  • apps/warondisease/components/providers.tsx
  • apps/warondisease/components/sentry-404-reporter.tsx
  • apps/warondisease/components/theme-provider.tsx
  • apps/warondisease/data/references.json
  • apps/warondisease/emails/campaign-pledge.tsx
  • apps/warondisease/emails/campaign-update.tsx
  • apps/warondisease/emails/components/CTAButton.tsx
  • apps/warondisease/emails/components/EmailFooter.tsx
  • apps/warondisease/emails/components/ManualPromoSection.tsx
  • apps/warondisease/emails/components/ReferralLinkBox.tsx
  • apps/warondisease/emails/components/SocialShareButtons.tsx
  • apps/warondisease/emails/donation-thank-you.tsx
  • apps/warondisease/emails/partner-approval.tsx
  • apps/warondisease/emails/partner-rejection.tsx
  • apps/warondisease/emails/referral-motivation.tsx
  • apps/warondisease/emails/referral-sequence.tsx
  • apps/warondisease/emails/signup-confirmation.tsx
  • apps/warondisease/emails/weekly-update.tsx
  • apps/warondisease/emails/welcome-impact.tsx
  • apps/warondisease/eslint.config.mjs
  • apps/warondisease/instrumentation-client.ts
  • apps/warondisease/instrumentation.ts
  • apps/warondisease/lib/email.ts
  • apps/warondisease/middleware.ts
  • apps/warondisease/next.config.mjs
  • apps/warondisease/package.json
  • apps/warondisease/postcss.config.mjs
  • apps/warondisease/scripts/smoke-treaty-db.ts
  • apps/warondisease/sentry.edge.config.ts
  • apps/warondisease/sentry.server.config.ts
  • apps/warondisease/styles/globals.css
  • apps/warondisease/tests/README.md
  • apps/warondisease/tests/e2e/donate.spec.ts
  • apps/warondisease/tests/e2e/helpers/auth.ts
  • apps/warondisease/tests/e2e/referral-flow.spec.ts
  • apps/warondisease/tests/fixtures/stripe.ts
  • apps/warondisease/tests/integration/database.test.ts
  • apps/warondisease/tests/integration/organization-persistence.test.ts
  • apps/warondisease/tests/integration/referral-invitations-api.test.ts
  • apps/warondisease/tests/integration/referral-tree.test.ts
  • apps/warondisease/tests/integration/votes-sync-referral-invitation.test.ts
  • apps/warondisease/tests/setup.ts
  • apps/warondisease/tests/utils/db-test-utils.ts
  • apps/warondisease/tests/utils/server-only-shim.ts
  • apps/warondisease/tests/utils/test-env.ts
  • apps/warondisease/tsconfig.json
  • apps/warondisease/types/condition.ts
  • apps/warondisease/types/dashboard.ts
  • apps/warondisease/types/general-research-citation.ts
  • apps/warondisease/types/next-auth.d.ts
  • apps/warondisease/types/treatment.ts
  • apps/warondisease/vercel.json
  • apps/warondisease/vitest.config.ts
  • apps/wishocracy/.env.example
  • apps/wishocracy/.env.test
  • apps/wishocracy/.gitignore
  • apps/wishocracy/README.md
  • apps/wishocracy/app/about/page.tsx
  • apps/wishocracy/app/api/auth/[...nextauth]/route.ts
  • apps/wishocracy/app/api/auth/complete-signup/route.ts
  • apps/wishocracy/app/api/auth/signup/route.ts
  • apps/wishocracy/app/api/wishocracy/allocation/route.ts
  • apps/wishocracy/app/api/wishocracy/allocations/route.ts
  • apps/wishocracy/app/api/wishocracy/average-allocations/route.ts
  • apps/wishocracy/app/api/wishocracy/category-selections/route.ts
  • apps/wishocracy/app/api/wishocracy/sync/route.ts
  • apps/wishocracy/app/auth/complete-signup/page.tsx
  • apps/wishocracy/app/auth/error/error-content.tsx
  • apps/wishocracy/app/auth/error/page.tsx
  • apps/wishocracy/app/auth/signin/loading.tsx
  • apps/wishocracy/app/auth/signin/page.tsx
  • apps/wishocracy/app/auth/signup/loading.tsx
  • apps/wishocracy/app/auth/verify-request/page.tsx
  • apps/wishocracy/app/contact/page.tsx
  • apps/wishocracy/app/dashboard/actions.ts
  • apps/wishocracy/app/dashboard/dashboard-client.tsx
  • apps/wishocracy/app/dashboard/page.tsx
  • apps/wishocracy/app/dashboard/settings/page.tsx
  • apps/wishocracy/app/dashboard/settings/settings-client.tsx
  • apps/wishocracy/app/faq/page.tsx
  • apps/wishocracy/app/global-error.tsx
  • apps/wishocracy/app/globals.css
  • apps/wishocracy/app/layout.tsx
  • apps/wishocracy/app/not-found.tsx
  • apps/wishocracy/app/page.tsx
  • apps/wishocracy/app/privacy/page.tsx
  • apps/wishocracy/app/sitemap.xml/route.ts
  • apps/wishocracy/app/terms/page.tsx
  • apps/wishocracy/app/wishocracy/page.tsx
  • apps/wishocracy/components.json
  • apps/wishocracy/components/dashboard/ActivityFeed.tsx
  • apps/wishocracy/components/dashboard/AllocationBar.tsx
  • apps/wishocracy/components/dashboard/BadgesSection.tsx
  • apps/wishocracy/components/dashboard/CampaignsCard.tsx
  • apps/wishocracy/components/dashboard/ConnectedAccountsCard.tsx
  • apps/wishocracy/components/dashboard/EmailPreferencesCard.tsx
  • apps/wishocracy/components/dashboard/EmailSignatureCard.tsx
  • apps/wishocracy/components/dashboard/GlobalProgressCard.tsx
  • apps/wishocracy/components/dashboard/ImpactLedgerCard.tsx
  • apps/wishocracy/components/dashboard/ImpactTreeCard.tsx
  • apps/wishocracy/components/dashboard/LeaderboardCard.tsx
  • apps/wishocracy/components/dashboard/MilitaryVsClinicalTrialsAllocationCard.tsx
  • apps/wishocracy/components/dashboard/OrganizationEmailSignatureCard.tsx
  • apps/wishocracy/components/dashboard/OrganizationSelector.tsx
  • apps/wishocracy/components/dashboard/OrganizationsCard.tsx
  • apps/wishocracy/components/dashboard/PrivacyToggle.tsx
  • apps/wishocracy/components/dashboard/ProfileCard.tsx
  • apps/wishocracy/components/dashboard/ReferralGoalCard.tsx
  • apps/wishocracy/components/dashboard/ReferralInvitationsCard.tsx
  • apps/wishocracy/components/dashboard/StatsOverview.tsx
  • apps/wishocracy/components/dashboard/StickyShareFooter.tsx
  • apps/wishocracy/components/layout.tsx
  • apps/wishocracy/components/organizations/OrganizationForm.tsx
  • apps/wishocracy/components/providers.tsx
  • apps/wishocracy/components/sentry-404-reporter.tsx
  • apps/wishocracy/components/theme-provider.tsx
  • apps/wishocracy/components/wishocracy/BudgetAllocationBars.tsx
  • apps/wishocracy/components/wishocracy/WishocracyAllocationCard.tsx
  • apps/wishocracy/components/wishocracy/WishocracyAuthPromptCard.tsx
  • apps/wishocracy/components/wishocracy/WishocracyCategorySelection.tsx
  • apps/wishocracy/components/wishocracy/WishocracyCompletionCard.tsx
  • apps/wishocracy/components/wishocracy/WishocracyEditSection.tsx
  • apps/wishocracy/components/wishocracy/WishocracyIntroCard.tsx
  • apps/wishocracy/components/wishocracy/WishocracyLoadingCard.tsx
  • apps/wishocracy/components/wishocracy/WishocracyResetButton.tsx
  • apps/wishocracy/components/wishocracy/WishocracyStatusBar.tsx
  • apps/wishocracy/components/wishocracy/budget-pair-slider.tsx
  • apps/wishocracy/components/wishocracy/category-card.tsx
  • apps/wishocracy/components/wishocracy/progress-indicator.tsx
  • apps/wishocracy/components/wishocracy/wishocracy-section.tsx
  • apps/wishocracy/eslint.config.mjs
  • apps/wishocracy/hooks/useWishocracyState.ts
  • apps/wishocracy/instrumentation-client.ts
  • apps/wishocracy/instrumentation.ts
  • apps/wishocracy/lib/wishocracy-calculations.ts
  • apps/wishocracy/lib/wishocracy-data.ts
  • apps/wishocracy/lib/wishocracy-item-ids.ts
  • apps/wishocracy/lib/wishocracy-utils.ts
  • apps/wishocracy/middleware.ts
  • apps/wishocracy/next.config.mjs
  • apps/wishocracy/package.json
  • apps/wishocracy/postcss.config.mjs
  • apps/wishocracy/sentry.edge.config.ts
  • apps/wishocracy/sentry.server.config.ts
  • apps/wishocracy/styles/globals.css
  • apps/wishocracy/tsconfig.json
  • apps/wishocracy/types/condition.ts
  • apps/wishocracy/types/dashboard.ts
  • apps/wishocracy/types/general-research-citation.ts
  • apps/wishocracy/types/next-auth.d.ts
  • apps/wishocracy/types/treatment.ts
  • apps/wishocracy/vitest.config.ts
  • docker-compose.yml
  • docker/postgres-init/01-create-test-db.sql
  • eslint.config.mjs
  • package.json
  • packages/data/package.json
  • packages/data/src/__tests__/wishocratic-dih-aliases.test.ts
  • packages/data/src/index.ts
  • packages/data/src/wishocratic-dih-aliases.ts
  • packages/db/src/index.ts
  • packages/db/src/wishocracy-catalog.ts
  • packages/impact-params/package.json
  • packages/impact-params/src/format-parameter.test.ts
  • packages/impact-params/src/format-parameter.ts
  • packages/impact-params/src/index.ts
  • packages/impact-params/src/parameters-calculations-citations.ts
  • packages/impact-params/tsconfig.json
  • packages/neobrutalist-ui/package.json
  • packages/neobrutalist-ui/src/cn.ts
  • packages/neobrutalist-ui/src/index.ts
  • packages/neobrutalist-ui/src/react-katex.d.ts
  • packages/neobrutalist-ui/src/ui/accordion.tsx
  • packages/neobrutalist-ui/src/ui/alert-card.tsx
  • packages/neobrutalist-ui/src/ui/alert-dialog.tsx
  • packages/neobrutalist-ui/src/ui/amount-selector.tsx
  • packages/neobrutalist-ui/src/ui/badge.tsx
  • packages/neobrutalist-ui/src/ui/brutal-card.tsx
  • packages/neobrutalist-ui/src/ui/button.tsx
  • packages/neobrutalist-ui/src/ui/card.tsx
  • packages/neobrutalist-ui/src/ui/checkbox.tsx
  • packages/neobrutalist-ui/src/ui/checkmark-list.tsx
  • packages/neobrutalist-ui/src/ui/command.tsx
  • packages/neobrutalist-ui/src/ui/comparison-card.tsx
  • packages/neobrutalist-ui/src/ui/container.tsx
  • packages/neobrutalist-ui/src/ui/cta-section.tsx
  • packages/neobrutalist-ui/src/ui/dialog.tsx
  • packages/neobrutalist-ui/src/ui/dropdown-menu.tsx
  • packages/neobrutalist-ui/src/ui/feature-list.tsx
  • packages/neobrutalist-ui/src/ui/featured-info-card.tsx
  • packages/neobrutalist-ui/src/ui/form-field.tsx
  • packages/neobrutalist-ui/src/ui/icon-box-card.tsx
  • packages/neobrutalist-ui/src/ui/icon-card.tsx
  • packages/neobrutalist-ui/src/ui/icon-heading.tsx
  • packages/neobrutalist-ui/src/ui/input.tsx
  • packages/neobrutalist-ui/src/ui/label.tsx
  • packages/neobrutalist-ui/src/ui/latex.tsx
  • packages/neobrutalist-ui/src/ui/loading-button.tsx
  • packages/neobrutalist-ui/src/ui/neobrutalist-loader.tsx
  • packages/neobrutalist-ui/src/ui/numbered-step-card.tsx
  • packages/neobrutalist-ui/src/ui/popover.tsx
  • packages/neobrutalist-ui/src/ui/progress.tsx
  • packages/neobrutalist-ui/src/ui/radio-group.tsx
  • packages/neobrutalist-ui/src/ui/section-container.tsx
  • packages/neobrutalist-ui/src/ui/section-header.tsx
  • packages/neobrutalist-ui/src/ui/select.tsx
  • packages/neobrutalist-ui/src/ui/sheet.tsx
  • packages/neobrutalist-ui/src/ui/skeleton.tsx
  • packages/neobrutalist-ui/src/ui/stat-card.tsx
  • packages/neobrutalist-ui/src/ui/tabs.tsx
  • packages/neobrutalist-ui/src/ui/textarea.tsx
  • packages/neobrutalist-ui/src/ui/toggle-button-group.tsx
  • packages/neobrutalist-ui/src/ui/tooltip.tsx
  • packages/neobrutalist-ui/tsconfig.json
  • packages/site-kit/package.json
  • packages/site-kit/src/components/auth/AuthForm.tsx
  • packages/site-kit/src/components/landing/PragmaticTrialsDialog.tsx
  • packages/site-kit/src/components/landing/ReferralSendLoop.tsx
  • packages/site-kit/src/components/landing/SystemProblemsSection.tsx
  • packages/site-kit/src/components/landing/TreatyPostVoteFlow.tsx
  • packages/site-kit/src/components/landing/bottleneck-proof-section.tsx
  • packages/site-kit/src/components/landing/call-to-action.tsx
  • packages/site-kit/src/components/landing/death-clock.tsx
  • packages/site-kit/src/components/landing/decentralized-fda-section.tsx
  • packages/site-kit/src/components/landing/final-cta.tsx
  • packages/site-kit/src/components/landing/funding-impact-breakdown-section.tsx
  • packages/site-kit/src/components/landing/hero-section.tsx
  • packages/site-kit/src/components/landing/infinite-roi-card.tsx
  • packages/site-kit/src/components/landing/pragmatic-trial-cost-proof-section.tsx
  • packages/site-kit/src/components/landing/problem-statement.tsx
  • packages/site-kit/src/components/landing/roi-card.tsx
  • packages/site-kit/src/components/landing/societal-benefits-concise.tsx
  • packages/site-kit/src/components/landing/solution-bridge-section.tsx
  • packages/site-kit/src/components/landing/survey-hero-section.tsx
  • packages/site-kit/src/components/landing/timeline-scrolly.tsx
  • packages/site-kit/src/components/landing/treaty-visualization.tsx
  • packages/site-kit/src/components/landing/treaty-vote-section.tsx
  • packages/site-kit/src/components/landing/war-vs-cures-chart.tsx
  • packages/site-kit/src/components/landing/your-impact-section.tsx
  • packages/site-kit/src/components/layout.tsx
  • packages/site-kit/src/components/providers.tsx
  • packages/site-kit/src/components/sentry-404-reporter.tsx
  • packages/site-kit/src/components/shared/GeneralResearchCitationCard.tsx
  • packages/site-kit/src/components/shared/ImpactExplainer.tsx
  • packages/site-kit/src/components/shared/ManualPromoCard.tsx
  • packages/site-kit/src/components/shared/ParameterEquation.tsx
  • packages/site-kit/src/components/shared/ParameterValue.tsx
  • packages/site-kit/src/components/shared/ReferralLinkCard.tsx
  • packages/site-kit/src/components/shared/SearchableList.tsx
  • packages/site-kit/src/components/shared/TreatyWarningBox.tsx
  • packages/site-kit/src/components/shared/VoteOrShareButton.tsx
  • packages/site-kit/src/components/shared/impact-math.tsx
  • packages/site-kit/src/components/sharing/copy-link-button.tsx
  • packages/site-kit/src/components/sharing/index.ts
  • packages/site-kit/src/components/sharing/social-share-buttons.tsx
  • packages/site-kit/src/components/theme-provider.tsx
  • packages/site-kit/src/data/references.json
  • packages/site-kit/src/lib/activity-descriptions.ts
  • packages/site-kit/src/lib/analytics.ts
  • packages/site-kit/src/lib/app-brand.ts
  • packages/site-kit/src/lib/auth-adapter.ts
  • packages/site-kit/src/lib/auth-utils.ts
  • packages/site-kit/src/lib/auth.ts
  • packages/site-kit/src/lib/canonical-routes.ts
  • packages/site-kit/src/lib/constants.ts
  • packages/site-kit/src/lib/db-safety.test.ts
  • packages/site-kit/src/lib/db-safety.ts
  • packages/site-kit/src/lib/db.ts
  • packages/site-kit/src/lib/economist-survey.ts
  • packages/site-kit/src/lib/email-urls.ts
  • packages/site-kit/src/lib/email-utils.ts
  • packages/site-kit/src/lib/email.ts
  • packages/site-kit/src/lib/env.ts
  • packages/site-kit/src/lib/external-links.ts
  • packages/site-kit/src/lib/faq.ts
  • packages/site-kit/src/lib/formatters.ts
  • packages/site-kit/src/lib/impact-ledger.test.ts
  • packages/site-kit/src/lib/impact-ledger.ts
  • packages/site-kit/src/lib/logger.ts
  • packages/site-kit/src/lib/majority-humanity-target.ts
  • packages/site-kit/src/lib/manual-links.ts
  • packages/site-kit/src/lib/messaging.ts
  • packages/site-kit/src/lib/nav-items.ts
  • packages/site-kit/src/lib/normalize.ts
  • packages/site-kit/src/lib/org-categories.ts
  • packages/site-kit/src/lib/organizations.ts
  • packages/site-kit/src/lib/path-helpers.ts
  • packages/site-kit/src/lib/person.server.ts
  • packages/site-kit/src/lib/prisma.ts
  • packages/site-kit/src/lib/referral-invitations.ts
  • packages/site-kit/src/lib/referral.client.ts
  • packages/site-kit/src/lib/referral.server.ts
  • packages/site-kit/src/lib/routes.ts
  • packages/site-kit/src/lib/share-copy.ts
  • packages/site-kit/src/lib/site-config.ts
  • packages/site-kit/src/lib/site-variant-types.ts
  • packages/site-kit/src/lib/sitemap-routes.ts
  • packages/site-kit/src/lib/slug.ts
  • packages/site-kit/src/lib/storage.ts
  • packages/site-kit/src/lib/stripe-config.ts
  • packages/site-kit/src/lib/stripe-payment-links.ts
  • packages/site-kit/src/lib/stripe.ts
  • packages/site-kit/src/lib/treaty-votes.server.ts
  • packages/site-kit/src/lib/treaty.ts
  • packages/site-kit/src/lib/types/navigation.ts
  • packages/site-kit/src/lib/url.test.ts
  • packages/site-kit/src/lib/url.ts
  • packages/site-kit/src/lib/user-display.ts
  • packages/site-kit/src/lib/user.ts
  • packages/site-kit/src/lib/username.test.ts
  • packages/site-kit/src/lib/username.ts
  • packages/site-kit/src/lib/utils/json-utils.ts
  • packages/site-kit/src/lib/utils/monitoring-costs.ts
  • packages/site-kit/src/lib/utils/strip-html.ts
  • packages/site-kit/src/lib/vote-utils.ts
  • packages/site-kit/src/lib/voting.ts
  • packages/site-kit/src/shims/dashboard-actions.ts
  • packages/site-kit/src/types/condition.ts
  • packages/site-kit/src/types/dashboard.ts
  • packages/site-kit/src/types/general-research-citation.ts
  • packages/site-kit/src/types/next-auth.d.ts
  • packages/site-kit/src/types/treatment.ts
  • packages/site-kit/tsconfig.json
  • packages/survey-embed/package.json
  • packages/survey-embed/public/embed.js
  • packages/survey-embed/src/SurveyEmbed.tsx
  • packages/survey-embed/src/index.ts
  • packages/survey-embed/tsconfig.json
  • packages/web/src/lib/wishocracy-catalog.server.ts
  • pnpm-workspace.yaml

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

@chatgpt-codex-connector

Copy link
Copy Markdown

💡 Codex Review

// NextAuth provider names match Prisma SocialPlatform enum (both lowercase)
const platform = account.provider as SocialPlatform

P1 Badge Map OAuth providers to generated SocialPlatform values

When GitHub, Twitter, Discord, or Google OAuth completes, account.provider is lowercase, but the shared schema defines uppercase SocialPlatform values and has no GOOGLE member. This cast therefore lets an invalid value reach socialAccount.upsert, causing the JWT callback—and consequently OAuth sign-in/linking—to fail at runtime in every copied app. Use an explicit provider-to-enum mapping and skip unsupported providers.

AGENTS.md reference: apps/warondisease/AGENTS.md:L33-L36


return prisma.referralInvitation.findUnique({
where: { inviteToken },

P1 Badge Reject reused referral invitation tokens

When a converted, cancelled, or soft-deleted invitation token is submitted by another signed-in voter, this lookup still returns its referrer, so the new vote receives referredByUserId and increments referral counts and badge progress; only the later conversion update notices that the invitation was already used. Filter to live, unconverted invitation states before using the token for attribution so a single shared token cannot manufacture unlimited referrals.


user: {
OR: [{ person: { isPublic: true } }, { username: { not: null } }],
},

P1 Badge Honor profile privacy when exposing referral identities

For a referred user who has chosen a handle but left the dashboard privacy toggle off, this username != null branch still returns their ID, name, handle, and image in the referrer's named recruit list. getPublicUserProfile treats User.isPublic as the privacy gate, so this query should use that same field rather than treating possession of a username as consent to disclose the profile.


await sendSignupConfirmationEmail({
to: identifier,
url,
userName: existingUser?.name || userName,
orgName,
})

P2 Badge Propagate magic-link delivery failures

When Resend rejects a magic-link email—for example because of a transient provider error, quota, or invalid sender—sendSignupConfirmationEmail catches the exception and returns { success: false }, but this callback ignores that result. NextAuth consequently reports that the verification email was sent even though the voter has no link and cannot finish signing in; throw when the returned result is unsuccessful.


const top = await prisma.referendumVote.groupBy({
by: ["referredByUserId"],
where: {
referredByUserId: { not: null },
deletedAt: null,

P2 Badge Scope the referrer leaderboard to the treaty

When the shared database contains referrals for any referendum besides one-percent-treaty, this grouping includes those votes in the campaign leaderboard. Other treaty counters already resolve and filter by the treaty referendum, so the displayed rankings and referral totals can disagree; add the same referendum ID/slug predicate here.

ℹ️ 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".

@mikepsinn

Copy link
Copy Markdown
Owner Author

Follow-up: pruned for reviewability

  • Kept apps: warondisease, dfda, wishocracy only
  • Removed forks: dih, survey, curedao, acceleratedmedicine (use redirects / WoD routes)
  • Added: @optimitron/campaign-core (treaty slug only — no shared UI package yet)
  • Still no @optimitron/campaign-ui; extract when two apps share a component

@mikepsinn

Copy link
Copy Markdown
Owner Author

Ready state after this push

Done

  • 3 apps only (warondisease, dfda, wishocracy)
  • No campaign-core — treaty slug from @optimitron/db
  • CI job apps-warondisease-validate: typechecks WoD when apps/** or packages/db/** change
  • core-validate excludes @apps/* so package CI does not next build brand apps
  • Docs: apps/DEPLOYMENT.md (do not repoint existing Vercel project away from packages/web)

Vercel mess — intentional boundary

Project Root Status
Existing optimitron packages/web Leave alone (prod CI + smoke-deploy)
Future warondisease apps/warondisease New project later; not this PR

Smoke strategy

  1. Now: CI typecheck (hard) + local vote smoke with DATABASE_URL
  2. Later: second Vercel project + extend deploy smoke when a preview URL exists
  3. Not yet: full Playwright suite for brand apps (unit suite may still be DIH-shaped; continue-on-error for unit)

When you want review, PR is #195; treat as architecture + WoD gate, not production cutover.

@claude

claude Bot commented Aug 7, 2026

Copy link
Copy Markdown

Code review

Reviewed via local checkout (origin/mainHEAD merge preview) since this PR's diff exceeds GitHub's API size limit (3,131 files, +1.07M/−11.7K lines — gh pr diff returns 406: diff too large). Focused on the new Prisma schema/migration, treaty-vote/referral business logic, and the new per-app CLAUDE.md/AGENTS.md docs. Every finding below was independently re-verified against the actual files before being included. Links use the PR head commit b9cbfb7.

Bugs

1. Referral invite send returns 500 on every user's 2nd invite

await prisma.emailLog.create({
data: {
userId,
toAddress: emailContact,
templateId: "referral-invite-share",
subject: `${senderName} wants you to not die of a horrible disease`,
status: EmailLogStatus.SENT,
providerMessageId: emailResultId(result.data),
dedupeKey: `referral-invite:${invitation.id}`,
},
})
}

(byte-identical in apps/wishocracy/app/api/referral-invitations/route.ts#L180-L192 — not present in apps/dfda)

await prisma.emailLog.create({
  data: { userId, toAddress: emailContact, templateId: "referral-invite-share", ... },
})

EmailLog declares @@unique([userId, templateId]):

taskCommunications TaskCommunication[] @relation("EmailLogTaskCommunications")
@@unique([userId, templateId])
@@index([userId])
@@index([templateId])

templateId is a hardcoded literal and userId is the authenticated user, so this pair is constant per user. The create isn't wrapped in try/catch, so the 2nd time any user sends an invite (the daily cap is 25, so this is expected to happen), Prisma throws P2002 and the route returns HTTP 500 — after the email was already sent (line 153) and the ReferralInvitation was already created and marked SENT (line 173-179). The user sees a failure for a request that actually succeeded.

2. Stripe webhook test file doesn't match the route it tests — all 7 tests fail

import { describe, it, expect, vi, beforeEach } from "vitest"
import { POST, GET } from "./route"
import { mockCheckoutSession, mockSubscriptionSession, mockInvoice } from "@/tests/fixtures/stripe"
import type Stripe from "stripe"

import { POST, GET } from "./route" — the actual route only exports runtime and POST:

import { NextRequest, NextResponse } from "next/server"
import { headers } from "next/headers"
import Stripe from "stripe"
import { createLogger } from "@/lib/logger"
import { env } from "@/lib/env"
export const runtime = "nodejs"
const log = createLogger("stripe-webhook")
/**
* Stripe webhook for campaign apps.
*
* Crowdfunding (Campaign*) is retired — use Task + TaskFunding* on optimitron web
* for funded tasks. This handler verifies signatures and acknowledges events so
* Stripe does not disable the endpoint. Wire TaskFundingPayment here when donate
* checkout is reconnected to @optimitron/db task targets.
*/
export async function POST(req: NextRequest) {
const body = await req.text()

GET is undefined, so await GET() throws. The test also mocks @/lib/stripe's getStripe and @/lib/prisma, but the rewritten route constructs new Stripe(...) directly and never touches Prisma (it's verify-only), so the mocks never apply and the Prisma assertions check calls that never happen. This file is included in vitest's default run (vitest.config.ts only excludes node_modules/.next/tests/e2e/**).

3. New migration omits ~18 foreign keys and most indexes for 12 new tables

DO $$ BEGIN
ALTER TABLE "Vote" ADD CONSTRAINT "Vote_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
EXCEPTION WHEN duplicate_object THEN null; END $$;
DO $$ BEGIN
ALTER TABLE "Vote" ADD CONSTRAINT "Vote_referredByUserId_fkey" FOREIGN KEY ("referredByUserId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
EXCEPTION WHEN duplicate_object THEN null; END $$;
DO $$ BEGIN
ALTER TABLE "Vote" ADD CONSTRAINT "Vote_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE SET NULL ON UPDATE CASCADE;
EXCEPTION WHEN duplicate_object THEN null; END $$;

The only ADD CONSTRAINT ... FOREIGN KEY statements in the whole migration are these 3, all on Vote. Campaign, CampaignPledge, CampaignTeamMember, CampaignUpdate, Donation, UserSkill, UserLink, WishocraticCategorySelection, WishocraticPairAllocation, etc. get zero FKs, even though schema.prisma declares explicit onDelete: Cascade/SetNull relations for them, e.g.:

model Campaign {
id String @id @default(cuid())

No relationMode override is set, so Postgres's default foreignKeys mode applies — the declared cascades never fire at the DB level, and deleting a User silently orphans rows in these tables. Most @@index declarations from schema.prisma are also missing from the SQL (e.g. Campaign declares 11, the migration creates 2).

4. Referral-tree privacy filter checks the wrong field — leaks private users

referendumId,
deletedAt: null,
user: {
OR: [{ person: { isPublic: true } }, { username: { not: null } }],
},
},
take: limit,

(byte-identical in apps/dfda/lib/referral.server.ts and apps/wishocracy/lib/referral.server.ts)

user: {
  OR: [{ person: { isPublic: true } }, { username: { not: null } }],
},

This checks Person.isPublic (defaults to false, and ensurePersonForUser in lib/person.server.ts never sets it), not User.isPublic — the field /api/user/visibility actually writes and lib/user.ts uses to gate the public profile page. Since the Person.isPublic branch is always false, the OR collapses to username != null: any user who picked a username is exposed by name/photo/profile-link in another user's referral dashboard tree, regardless of their actual privacy setting. The PR's own apps/warondisease/tests/integration/referral-tree.test.ts seeds exactly this case (private user + username) and asserts they're excluded — that test fails against the shipped code.

5. publicRecruits hardcodes depth: 1 and returns direct recruits only

const maxDepth = depthRows[0]?.max_depth ?? 0
const publicRecruits = await prisma.referendumVote.findMany({
where: {
referredByUserId: userId,
referendumId,
deletedAt: null,
user: {
OR: [{ person: { isPublic: true } }, { username: { not: null } }],
},
},
take: limit,
orderBy: { createdAt: "desc" },
select: {
user: {
select: {
id: true,
name: true,
username: true,
image: true,
},
},
},
})
return {
directCount,
totalDownstreamCount,
maxDepth,
publicRecruits: publicRecruits.map((row) => ({
id: row.user.id,
name: row.user.name,
username: row.user.username,
image: row.user.image,
depth: 1,
})),
}

The recursive CTE above this (lines 69-90) correctly computes multi-generation depth for the counts, but the separate publicRecruits query filters referredByUserId: userId (direct only, line 98) and hardcodes depth: 1 on every row (line 128) — the CTE result is never joined in. ImpactTreeCard.tsx's gen-2/gen-3 styling branches (recruit.depth === 2, === 3) can therefore never execute, and two more cases in referral-tree.test.ts (which expect multi-gen names/depths) fail against this.

6. Recursive referral CTE has no cycle guard

>`
WITH RECURSIVE tree AS (
SELECT v."userId" AS voter_id, 1 AS depth
FROM "ReferendumVote" v
WHERE v."referredByUserId" = ${userId}
AND v."referendumId" = ${referendumId}
AND v."deletedAt" IS NULL
UNION ALL
SELECT v."userId" AS voter_id, t.depth + 1
FROM "ReferendumVote" v
INNER JOIN tree t ON v."referredByUserId" = t.voter_id
WHERE v."referendumId" = ${referendumId}
AND v."deletedAt" IS NULL
AND t.depth < 20
)
SELECT COUNT(*)::bigint AS total, COALESCE(MAX(depth), 0)::int AS max_depth
FROM tree
`

WITH RECURSIVE tree unions rows with no visited-node/path guard — the only stop condition is t.depth < 20. apps/warondisease/app/api/votes/sync/route.ts only blocks self-referral, not mutual referral between two different users, and schema.prisma's only uniqueness on votes is @@unique([referendumId, personId]) — nothing prevents A referring B and B referring A. Two users doing this makes the CTE loop A→B→A→B... until it hits the depth cap, reporting totalDownstreamCount = 20, maxDepth = 20 on the dashboard, while the separately-computed directCount correctly shows 1 — a visibly contradictory pair of numbers on the same card.

CLAUDE.md / AGENTS.md compliance

7. New per-app docs mandate the opposite of root AGENTS.md's UI Style rule

## Neobrutalist Design Rules (CRITICAL - ALWAYS FOLLOW)
- **Borders**: ALWAYS `border-4 border-primary` (4px black borders, never border-2)
- **Shadows**: ONLY hard shadows `shadow-[8px_8px_0px_0px_rgba(0,0,0,1)]`
- **Colors**: Use SOLID colors only - NEVER use opacity variants
- ✅ Correct: `bg-brutal-pink`, `bg-brutal-cyan`, `bg-brutal-yellow`, `bg-background`, `bg-foreground`, `bg-primary`
- ❌ Wrong: `bg-brutal-pink/10`, `bg-brutal-yellow/30`, `bg-foreground/20` (NO opacity!)
- Pink = CTA/emphasis, Cyan = accent, Yellow = highlight/warning
- **Typography**: Bold/Black weights, UPPERCASE for section headers
- **Forbidden**: NO subtle effects, NO opacity variations, NO gradients, NO soft shadows, NO pastel colors
- **Card components**: Use `Card` component with `border-4 border-primary` and hard shadow
- **Minimalism**: Keep design bold and simple - fewer colors create stronger impact

(same text also added at apps/warondisease/AGENTS.md, apps/dfda/CLAUDE.md/AGENTS.md, apps/wishocracy/CLAUDE.md/AGENTS.md)

This PR adds a "Neobrutalist Design Rules (CRITICAL - ALWAYS FOLLOW)" section mandating border-4, hard shadow-[8px_8px_0px_0px_rgba(0,0,0,1)], and bg-brutal-pink/cyan/yellow. Root AGENTS.md says the opposite for this exact app: "New components default to treaty style. The simple black-and-white style used by the warondisease.org variant... is the default for all new public UI" and "Do not add neobrutalist styling to public UI: avoid brutal-* color fills, hard shadows... unless the user explicitly asks for them." Root CLAUDE.md directs agents working in apps/warondisease to treat that package's own AGENTS.md/CLAUDE.md as canonical for that directory, so this new doc actively steers future edits (by humans or agents) toward the style root explicitly bans. This is very likely the root cause of finding below and of the 500+ brutal-*/hard-shadow instances across the new apps/warondisease/** components.

8. Banned MLM term shipped verbatim

{[
{ milestone: 1, label: "FIRST RECRUIT", icon: "🎯" },
{ milestone: 2, label: "GOAL MET", icon: "✅" },
{ milestone: 5, label: "POWER RECRUITER", icon: "💪" },
{ milestone: 10, label: "SUPER SPREADER", icon: "🚀" },

{ milestone: 5, label: "POWER RECRUITER", icon: "💪" } — root AGENTS.md's Public Copy Rules: "No MLM copy. Ban recruit/downline/power-recruiter/keep-going/your-job-is/build-your-team hierarchy language on public surfaces." "POWER RECRUITER" is a direct match. (Same file also has "FIRST RECRUIT" at line 30 and "LEGENDARY recruiter" at line 55.)

9. Banned "movement" campaign-identity language

) : (
<p className="text-center text-muted-foreground py-8 col-span-3">
No medals earned yet. Keep recruiting for {showPoliticalContent ? "the movement" : "the study"}.
</p>
)}

"Keep recruiting for {showPoliticalContent ? "the movement" : "the study"}." — root AGENTS.md: "Ban "movement" as campaign identity language." Same pattern repeats at line 53 ("Your contributions to the movement").

10. Referral tree rendered as an MLM downline

<div className="grid grid-cols-3 gap-3 sm:gap-6 mb-6">
<div className="border-4 border-primary bg-brutal-yellow p-4 shadow-[4px_4px_0px_0px_rgba(0,0,0,1)]">
<div className="text-3xl sm:text-5xl font-black">{directCount}</div>
<div className="text-xs sm:text-sm font-black uppercase mt-1">Direct Recruits</div>
</div>
<div className="border-4 border-primary bg-brutal-pink p-4 shadow-[4px_4px_0px_0px_rgba(0,0,0,1)]">
<div className="text-3xl sm:text-5xl font-black">{indirectCount}</div>
<div className="text-xs sm:text-sm font-black uppercase mt-1">Downstream</div>
</div>
<div className="border-4 border-primary bg-brutal-cyan p-4 shadow-[4px_4px_0px_0px_rgba(0,0,0,1)]">
<div className="text-3xl sm:text-5xl font-black">{maxDepth}</div>
<div className="text-xs sm:text-sm font-black uppercase mt-1">Generations</div>
</div>
</div>

Stat blocks labeled "Direct Recruits" / "Downstream" / "Generations", plus per-person "Gen {depth}" badges further down (lines 93-98, 111) and "Every recruit counts — even the ones your recruits recruit" (line 147). This is direct recruit/downline/generation hierarchy framing, which the same Public Copy Rules quoted above ban on public surfaces.


🤖 Generated with automated code review

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

PR review packet

Start here

  • 🖼️ Visual review
  • 📏 Screenshot baseline: exact PR base main@d0199a916e7f from CI run 31231109963.
  • 🚀 Preview deployment
  • ☝️ Cmd/Ctrl-click review links to keep this PR open.
  • 🔑 ?login=demo signs in as the demo user; ?logout=1 clears the session.
  • 💬 For a visual problem, use the comment button in latest.html or reply here with @claude and the checklist item.

No user-facing page or component changes were inferred from changed files or the visual review manifest.

Changed files considered
  • .github/workflows/ci.yml
  • apps/DEPLOYMENT.md
  • apps/README.md
  • apps/SCHEMA-GAPS.md
  • apps/SURVEY-AND-SATELLITES.md
  • apps/acceleratedmedicine/.env.example
  • apps/acceleratedmedicine/.env.test
  • apps/acceleratedmedicine/.gitignore
  • apps/acceleratedmedicine/README.md
  • apps/acceleratedmedicine/app/about/page.tsx
  • apps/acceleratedmedicine/app/api/auth/[...nextauth]/route.ts
  • apps/acceleratedmedicine/app/api/auth/complete-signup/route.ts
  • apps/acceleratedmedicine/app/api/auth/signup/route.ts
  • apps/acceleratedmedicine/app/api/stripe/create-checkout/route.ts
  • apps/acceleratedmedicine/app/api/stripe/session/route.ts
  • apps/acceleratedmedicine/app/api/stripe/webhook/route.test.ts
  • apps/acceleratedmedicine/app/api/stripe/webhook/route.ts
  • apps/acceleratedmedicine/app/auth/complete-signup/page.tsx
  • apps/acceleratedmedicine/app/auth/error/error-content.tsx
  • apps/acceleratedmedicine/app/auth/error/page.tsx
  • apps/acceleratedmedicine/app/auth/signin/loading.tsx
  • apps/acceleratedmedicine/app/auth/signin/page.tsx
  • apps/acceleratedmedicine/app/auth/verify-request/page.tsx
  • apps/acceleratedmedicine/app/contact/page.tsx
  • apps/acceleratedmedicine/app/donate/layout.tsx
  • apps/acceleratedmedicine/app/donate/page.tsx
  • apps/acceleratedmedicine/app/donate/success/page.tsx
  • apps/acceleratedmedicine/app/faq/page.tsx
  • apps/acceleratedmedicine/app/global-error.tsx
  • apps/acceleratedmedicine/app/globals.css
  • apps/acceleratedmedicine/app/layout.tsx
  • apps/acceleratedmedicine/app/not-found.tsx
  • apps/acceleratedmedicine/app/page.tsx
  • apps/acceleratedmedicine/app/privacy/page.tsx
  • apps/acceleratedmedicine/app/terms/page.tsx
  • apps/acceleratedmedicine/components.json
  • apps/acceleratedmedicine/components/layout.tsx
  • apps/acceleratedmedicine/components/providers.tsx
  • apps/acceleratedmedicine/components/sentry-404-reporter.tsx
  • apps/acceleratedmedicine/components/theme-provider.tsx
  • ...and 1056 more

Updated automatically when this PR's preview or visual review reruns.

Introduce neobrutalist-ui, impact-params, site-kit, and survey-embed,
wire apps/* into the workspace, and add campaign compatibility schema.
CI excludes @apps/* from package jobs until brand apps land in stacked PRs.

Co-authored-by: Cursor <cursoragent@cursor.com>
@mikepsinn

Copy link
Copy Markdown
Owner Author

Split into stacked PRs for reviewable diffs (umbrella branch kept as recovery):

  1. feat(packages): brand shared packages + campaign DB schema #198 — shared packages + DB/workspace
  2. feat(apps): add @apps/warondisease #199@apps/warondisease
  3. feat(apps): add @apps/dfda #200@apps/dfda
  4. feat(apps): add @apps/wishocracy #201@apps/wishocracy
  5. feat(apps): add survey + CureDAO + Accelerated Medicine #202 — survey + CureDAO + IAM (auth stripped on CureDAO/IAM)

Merge bottom-up: 198 → 199 → 200 → 201 → 202.

mikepsinn and others added 2 commits August 7, 2026 22:30
Existing Optimitron schema is sufficient. Remove Vote/Campaign/Donation
and duplicate Wishocratic pair tables. Site-kit identity maps to
Person.handle/displayName and User.referralCode.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@mikepsinn

Copy link
Copy Markdown
Owner Author

Follow-up: stripped DIH compatibility schema from the stack (existing Optimitron schema only). Latest tip is on the stacked PRs ending at #202

Move DIH→item id aliases into @optimitron/data and upsert WishocraticItem
rows from the canonical catalog (no packages/web imports, no invented names).

Co-authored-by: Cursor <cursoragent@cursor.com>
claude and others added 9 commits August 8, 2026 00:48
Track visited voter ids through the recursive CTE so a referral cycle
(A refers B, B refers A) can no longer be re-walked to the depth-20
cutoff, which was inflating totalDownstreamCount and maxDepth.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Full War on Disease Next entrypoint on shared Neon schema, with CI
apps-warondisease-validate typecheck against the same Postgres pattern.

Co-authored-by: Cursor <cursoragent@cursor.com>
Skills/links stubbed; soldiers and dashboard use Person.handle/displayName.

Co-authored-by: Cursor <cursoragent@cursor.com>
Display name lives on Person after DIH schema strip.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
- signup: stop marking credentials accounts emailVerified on creation;
  matches packages/web's signup route and closes an account-takeover
  path via OAuth email linking.
- weekly-emails cron: use the existing calculateUserRank() helper
  instead of a query that assigned every recipient the same count.
- stripe session route: return only the fields the success page
  renders instead of full customer_details/metadata (billing address,
  phone, arbitrary metadata) to an unauthenticated lookup.
- sitemap.xml: generate from the existing getSitemapRoutesForVariant()
  route registry instead of reading a public/sitemaps/*.xml file that
  is never generated or committed, which made the route always 404.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Includes PR review follow-ups (auth pages, sitemap, vitest setup).

Co-authored-by: Cursor <cursoragent@cursor.com>
Uses shared DIH aliases + db ensureWishocraticItemsExist; includes PR review allocation write-path fixes.

Co-authored-by: Cursor <cursoragent@cursor.com>
Thin satellites with verify-only Stripe tests, Person auth, and per-app build/embed defaults.

Co-authored-by: Cursor <cursoragent@cursor.com>
pnpm install --frozen-lockfile failed in CI because the lockfile
predated apps/dfda's test-setup dependencies (vite-tsconfig-paths etc.)
added in a later commit on this stack.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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