Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@steven-tey
Copy link
Collaborator

@steven-tey steven-tey commented Oct 15, 2025

Summary by CodeRabbit

  • New Features
    • Group branding updates now auto-upload external lander images and replace links for consistent hosting.
  • Documentation
    • Updated FAQ: conversions now count within a fixed 90-day window.
  • Refactor
    • Streamlined program settings: removed obsolete options (cookie window, link configuration, primary domain, lander data, application form fields), reducing complexity in the dashboard.
    • Simplified program retrieval flows for a leaner experience.
  • Chores
    • Migration scripts stabilized with minor maintenance updates.

@vercel
Copy link
Contributor

vercel bot commented Oct 15, 2025

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

Project Deployment Preview Updated (UTC)
dub Ready Ready Preview Oct 15, 2025 7:58pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 15, 2025

Walkthrough

Removes lander- and cookieLength-related fields and logic across schemas, APIs, actions, and UI types; simplifies get-program API to a single path; updates analytics hook to use program.domain; adjusts Prisma relations and cascade behaviors; converts delete-program script to a single transaction; adds ts-nocheck to legacy migration scripts; updates an FAQ to fixed 90 days.

Changes

Cohort / File(s) Summary
FAQ conversion window
apps/web/app/(ee)/app.dub.co/embed/referrals/faq.tsx
Change conversion window description to fixed 90 days (was program.cookieLength).
Dashboard analytics guide hook
apps/web/app/app.dub.co/(dashboard)/[slug]/settings/analytics/use-dynamic-guide.ts
Replace useDomains/primaryDomain with useProgram/program.domain; update dependencies and string replacements.
Partner actions — program update
apps/web/lib/actions/partners/update-program.ts
Remove cookieLength and all landerData handling; drop image upload helper; return ProgramSchema.
Partner actions — group branding
apps/web/lib/actions/partners/update-group-branding.ts
Add uploadLanderDataImages; transform and persist landerData/landerPublishedAt; propagate transformed data; switch to ProgramSchema.
Program schemas (Zod)
apps/web/lib/zod/schemas/programs.ts
Remove cookieLength; drop ProgramWithLanderDataSchema and getProgramQuerySchema; update updateProgramSchema.
Program API (route + getter)
apps/web/app/(ee)/api/programs/[programId]/route.ts, apps/web/lib/api/programs/get-program-or-throw.ts
Remove includeLanderData and query schema; collapse getter signature; always return ProgramSchema.
Types and UI props
apps/web/lib/types.ts, apps/web/ui/partners/lander/blocks/earnings-calculator-block.tsx, apps/web/ui/partners/groups/design/lander/modals/earnings-calculator-block-modal.tsx
Remove ProgramWithLanderDataProps; use ProgramProps; drop landerData from modal program prop.
Prisma schema — Program and related
packages/prisma/schema/program.prisma
Remove fields: urlValidationMode, linkStructure, linkParameter, maxPartnerLinks, cookieLength, landerData, landerPublishedAt, applicationFormData, primaryDomain; remove ProgramApplication.proposal/comments.
Prisma schema — Relations/cascade
packages/prisma/schema/campaign.prisma, packages/prisma/schema/discount.prisma, packages/prisma/schema/reward.prisma, packages/prisma/schema/domain.prisma
Adjust cascade: Campaign.program now onDelete: Cascade; Campaign.workflow drops onDelete; Discount.program removes cascades; DiscountCode.program adds onDelete: Cascade; Reward.program removes onDelete; Domain removes programs relation.
Scripts — delete program
apps/web/scripts/partners/delete-program.ts
Replace scattered deletes with a single extended transaction deleting related records, nulling links/project refs; keep logo deletion post-transaction.
Legacy migrations — ts-nocheck/env
apps/web/scripts/migrations/backfill-group-links-settings.ts, .../migrate-application-formdata.ts, .../migrate-application-submissions.ts, .../migrate-lander-data.ts
Add // @ts-nocheck headers; add dotenv-flow/config and uuid import where noted; no logic changes.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Client
  participant Route as GET /api/programs/[programId]
  participant Svc as getProgramOrThrow
  participant DB

  Client->>Route: HTTP GET
  Route->>Svc: getProgramOrThrow({ workspaceId, programId })
  Svc->>DB: Query program by IDs
  DB-->>Svc: Program
  Svc-->>Route: ProgramSchema.parse(program)
  Route-->>Client: 200 JSON (program)
Loading
sequenceDiagram
  autonumber
  participant Dev as Script
  participant DB as Prisma.$transaction
  participant Storage as Logo Storage

  Dev->>DB: Begin transaction (extended timeouts)
  DB->>DB: Delete commissions, payouts, rewards, discounts, partner groups
  DB->>DB: Delete enrollments, default folder
  DB->>DB: Update links (programId = null)
  DB->>DB: Update project (defaultProgramId = null)
  DB-->>Dev: Commit
  Dev->>Storage: Delete program logo
  Storage-->>Dev: OK
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • devkiran

Poem

I thump my paws, tidy the fields,
Cookies crumble, ninety-day yields.
Lander leaves with a whisper light,
Schemas slim for a nimbler night.
One big hop through a single txn—done!
Burrow cleaned, I bask in sun. 🐇✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title succinctly captures the core purpose of the pull request, which is to clean up and simplify the Prisma schemas by removing outdated fields and relations and updating dependent code, making it both concise and directly related to the main change.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch prisma-cleanup

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (4)
apps/web/scripts/migrations/backfill-group-links-settings.ts (1)

1-1: Use @ts-nocheck for file-wide suppression instead of @ts-ignore.

@ts-ignore only affects the next line. If you intend to disable type checks for this legacy script, switch to @ts-nocheck.

Also confirm program.url and program.domain are guaranteed non-null for the paths you touch (you use non-null assertions several times). If not, either filter in the query or guard before use.

Apply:

-// @ts-ignore - old migration script
+// @ts-nocheck // old migration script
apps/web/app/(ee)/app.dub.co/embed/referrals/faq.tsx (1)

42-42: Avoid hard-coding 90 days; centralize the attribution window.

If 90 days is the global, export it from a shared constant (e.g., ATTRIBUTION_WINDOW_DAYS) and reference it here to prevent drift from backend logic.

Confirm backend attribution also uses 90 days universally after removing cookieLength. If not universal, consider deriving this from program/embed config instead.

packages/prisma/schema/discount.prisma (1)

31-31: Add onUpdate: Cascade to Discount.program relation
At packages/prisma/schema/discount.prisma:31, include onUpdate: Cascade to match the existing ProgramDiscounts relation and prevent FK update inconsistencies.

packages/prisma/schema/payout.prisma (1)

31-31: Cascade delete on Payout.program approved; Commission.payout back-relation exists. Optional: add onUpdate: Cascade on these relations for symmetry.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ee7d693 and 0fe39c8.

📒 Files selected for processing (13)
  • apps/web/app/(ee)/app.dub.co/embed/referrals/faq.tsx (1 hunks)
  • apps/web/app/app.dub.co/(dashboard)/[slug]/settings/analytics/use-dynamic-guide.ts (4 hunks)
  • apps/web/lib/actions/partners/update-program.ts (0 hunks)
  • apps/web/lib/zod/schemas/programs.ts (0 hunks)
  • apps/web/scripts/migrations/backfill-group-links-settings.ts (1 hunks)
  • apps/web/scripts/partners/delete-program.ts (1 hunks)
  • packages/prisma/schema/campaign.prisma (1 hunks)
  • packages/prisma/schema/commission.prisma (1 hunks)
  • packages/prisma/schema/discount.prisma (1 hunks)
  • packages/prisma/schema/domain.prisma (0 hunks)
  • packages/prisma/schema/invoice.prisma (1 hunks)
  • packages/prisma/schema/payout.prisma (1 hunks)
  • packages/prisma/schema/program.prisma (1 hunks)
💤 Files with no reviewable changes (3)
  • apps/web/lib/zod/schemas/programs.ts
  • packages/prisma/schema/domain.prisma
  • apps/web/lib/actions/partners/update-program.ts
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: TWilson023
PR: dubinc/dub#2935
File: packages/prisma/schema/workspace.prisma:21-36
Timestamp: 2025-10-06T15:48:45.956Z
Learning: In the Dub repository (dubinc/dub), Prisma schema changes are not managed with separate migration files. Do not flag missing Prisma migration files when schema changes are made to files like `packages/prisma/schema/workspace.prisma` or other schema files.
🧬 Code graph analysis (1)
apps/web/app/app.dub.co/(dashboard)/[slug]/settings/analytics/use-dynamic-guide.ts (1)
apps/web/lib/swr/use-program.ts (1)
  • useProgram (6-40)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (4)
packages/prisma/schema/campaign.prisma (1)

27-28: LGTM!

The cascade delete behavior changes are appropriate:

  • Adding onDelete: Cascade to the program relation ensures campaigns are cleaned up when a program is deleted, which makes sense since campaigns are program-specific.
  • Removing onDelete: Cascade from the workflow relation is safer - since workflowId is optional, it will default to SetNull behavior when a workflow is deleted.
apps/web/app/app.dub.co/(dashboard)/[slug]/settings/analytics/use-dynamic-guide.ts (1)

2-2: LGTM!

The refactor from useDomains to useProgram correctly updates the domain sourcing:

  • Import and hook call properly switched (lines 2, 15)
  • Domain reference changed from primaryDomain to program?.domain with appropriate optional chaining (lines 30-31)
  • Dependency array correctly updated (line 75)
  • Logic remains consistent: replaces placeholder domain with actual program domain

This aligns with the PR objective to source domain from the program configuration.

Also applies to: 15-15, 30-31, 75-75

packages/prisma/schema/program.prisma (1)

143-143: LGTM!

Adding onDelete: Cascade to the ProgramApplication.program relation is appropriate. Applications are enrollment requests specific to a program, so deleting them when the program is deleted maintains referential integrity and cleans up orphaned data.

packages/prisma/schema/invoice.prisma (1)

40-40: Review cascade delete on Invoice.program relation
onDelete: Cascade will remove all Invoice records when a Program is deleted, risking loss of financial/audit data and potential compliance violations. Use Restrict to block Program deletion when invoices exist or change to SetNull to preserve invoice history.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
apps/web/lib/actions/partners/update-program.ts (1)

88-93: Avoid deleting non-R2 URLs

Guard deletes with isStored to prevent attempting to delete external URLs as R2 keys.

-        ...(logoUrl && program.logo
-          ? [storage.delete(program.logo.replace(`${R2_URL}/`, ""))]
+        ...(logoUrl && program.logo && isStored(program.logo)
+          ? [storage.delete(program.logo.replace(`${R2_URL}/`, ""))]
           : []),
-        ...(wordmarkUrl && program.wordmark
-          ? [storage.delete(program.wordmark.replace(`${R2_URL}/`, ""))]
+        ...(wordmarkUrl && program.wordmark && isStored(program.wordmark)
+          ? [storage.delete(program.wordmark.replace(`${R2_URL}/`, ""))]
           : []),
apps/web/lib/actions/partners/update-group-branding.ts (1)

197-203: Null-safe parsing for response data

If no update was supplied and DB fields are null, parse() will throw. Return null when absent.

-      applicationFormData: programApplicationFormSchema.parse(
-        updatedGroup.applicationFormData,
-      ),
-      landerData: programLanderSchema.parse(updatedGroup.landerData),
+      applicationFormData: updatedGroup.applicationFormData
+        ? programApplicationFormSchema.parse(updatedGroup.applicationFormData)
+        : null,
+      landerData: updatedGroup.landerData
+        ? programLanderSchema.parse(updatedGroup.landerData)
+        : null,
       program: ProgramSchema.parse(updatedProgram),
apps/web/lib/api/programs/get-program-or-throw.ts (1)

13-18: Fix invalid prisma.program.findUnique call
Prisma’s findUnique only accepts unique fields; including workspaceId will error. Either use:

  • findUnique({ where: { id: programId } })
  • or findFirst({ where: { id: programId, workspaceId } }) for workspace scoping.
🧹 Nitpick comments (5)
apps/web/scripts/migrations/migrate-application-formdata.ts (1)

15-40: Consider documenting the purpose of generated field IDs.

The uuid() calls generate unique identifiers for form fields, which is appropriate. However, it's unclear whether these IDs need to be stable across runs or if they're ephemeral.

If this migration has already been executed in production, consider adding a comment at the top of the file indicating its status (e.g., "Legacy migration - executed on YYYY-MM-DD") to clarify that it's no longer actively used.

apps/web/lib/actions/partners/update-program.ts (2)

7-7: Remove unused landerData from schema and destructuring

This action no longer processes lander data. Keeping it in the schema/input is confusing and increases surface area.

Apply:

-import { programLanderSchema } from "@/lib/zod/schemas/program-lander";
@@
-const schema = updateProgramSchema.partial().extend({
+const schema = updateProgramSchema.partial().extend({
   workspaceId: z.string(),
   logo: z.string().nullish(),
   wordmark: z.string().nullish(),
   brandColor: z.string().nullish(),
-  landerData: programLanderSchema.nullish(),
 });
@@
-    const {
+    const {
       name,
       logo,
       wordmark,
       brandColor,
-      landerData: landerDataInput,
       domain,
       url,
       supportEmail,
       helpUrl,
       termsUrl,
       holdingPeriodDays,
       minPayoutAmount,
       messagingEnabledAt,
     } = parsedInput;

Also applies to: 17-23, 30-43


102-106: Tighten revalidation conditions to avoid false positives

name and brandColor may be undefined. Current check can revalidate when nothing changed.

-        ...(name !== program.name ||
-        logoUrl ||
-        wordmarkUrl ||
-        brandColor !== program.brandColor
+        ...(((typeof name !== "undefined" && name !== program.name) ||
+          Boolean(logoUrl) ||
+          Boolean(wordmarkUrl) ||
+          (typeof brandColor !== "undefined" &&
+            brandColor !== program.brandColor))
           ? [
apps/web/lib/actions/partners/update-group-branding.ts (2)

54-57: brandColorUpdated may be true when input is undefined

Guard on defined input to avoid unnecessary revalidation and work.

-    const brandColorUpdated = brandColor !== program.brandColor;
+    const brandColorUpdated =
+      typeof brandColor !== "undefined" && brandColor !== program.brandColor;

219-229: Deduplicate foreignImageUrls and enforce HTTP(S) only
Replace your current map + filter with:

const foreignImageUrls = Array.from(
  new Set(
    landerData.blocks
      .filter((b) => b.type === "image")
      .map((b) => b.data.url),
  ),
).filter((url) => {
  const isHttp = /^https?:\/\//i.test(url);
  const isOwnProgramAsset = url.startsWith(`${R2_URL}/programs/${programId}/lander/`);
  return isHttp && !isOwnProgramAsset;
});

Optionally swap the own-asset check for isStored(url) && url.includes("/programs/${programId}/lander/").

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0fe39c8 and 5373649.

📒 Files selected for processing (12)
  • apps/web/app/(ee)/api/programs/[programId]/route.ts (1 hunks)
  • apps/web/lib/actions/partners/update-group-branding.ts (7 hunks)
  • apps/web/lib/actions/partners/update-program.ts (3 hunks)
  • apps/web/lib/api/programs/get-program-or-throw.ts (2 hunks)
  • apps/web/lib/types.ts (0 hunks)
  • apps/web/lib/zod/schemas/programs.ts (0 hunks)
  • apps/web/scripts/migrations/backfill-group-links-settings.ts (1 hunks)
  • apps/web/scripts/migrations/migrate-application-formdata.ts (1 hunks)
  • apps/web/scripts/migrations/migrate-application-submissions.ts (1 hunks)
  • apps/web/scripts/migrations/migrate-lander-data.ts (1 hunks)
  • apps/web/ui/partners/groups/design/lander/modals/earnings-calculator-block-modal.tsx (1 hunks)
  • apps/web/ui/partners/lander/blocks/earnings-calculator-block.tsx (2 hunks)
💤 Files with no reviewable changes (2)
  • apps/web/lib/types.ts
  • apps/web/lib/zod/schemas/programs.ts
✅ Files skipped from review due to trivial changes (1)
  • apps/web/scripts/migrations/migrate-application-submissions.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/web/scripts/migrations/backfill-group-links-settings.ts
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: TWilson023
PR: dubinc/dub#2935
File: packages/prisma/schema/workspace.prisma:21-36
Timestamp: 2025-10-06T15:48:45.956Z
Learning: In the Dub repository (dubinc/dub), Prisma schema changes are not managed with separate migration files. Do not flag missing Prisma migration files when schema changes are made to files like `packages/prisma/schema/workspace.prisma` or other schema files.
🧬 Code graph analysis (5)
apps/web/ui/partners/lander/blocks/earnings-calculator-block.tsx (1)
apps/web/lib/types.ts (1)
  • ProgramProps (470-470)
apps/web/lib/actions/partners/update-program.ts (1)
apps/web/lib/zod/schemas/programs.ts (1)
  • ProgramSchema (22-48)
apps/web/app/(ee)/api/programs/[programId]/route.ts (2)
apps/web/lib/auth/workspace.ts (1)
  • withWorkspace (42-436)
apps/web/lib/api/programs/get-program-or-throw.ts (1)
  • getProgramOrThrow (6-28)
apps/web/lib/actions/partners/update-group-branding.ts (3)
apps/web/lib/zod/schemas/programs.ts (1)
  • ProgramSchema (22-48)
apps/web/lib/types.ts (1)
  • ProgramLanderData (472-472)
apps/web/lib/zod/schemas/program-lander.ts (1)
  • programLanderImageBlockSchema (9-18)
apps/web/lib/api/programs/get-program-or-throw.ts (1)
apps/web/lib/zod/schemas/programs.ts (1)
  • ProgramSchema (22-48)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (10)
apps/web/ui/partners/groups/design/lander/modals/earnings-calculator-block-modal.tsx (1)

202-202: LGTM! Type refactor aligns with broader cleanup.

The removal of landerData from the program prop is consistent with the type change from ProgramWithLanderDataProps to ProgramProps in the consuming component. The program object is correctly composed with brandColor, rewards, and discounts from their respective sources.

apps/web/ui/partners/lander/blocks/earnings-calculator-block.tsx (1)

4-4: LGTM! Clean type refactor.

The import and parameter type updates from ProgramWithLanderDataProps to ProgramProps are correct. The component doesn't reference landerData, so the type change is safe and aligns with the broader cleanup effort to remove lander-specific data from the program model.

Also applies to: 20-20

apps/web/scripts/migrations/migrate-lander-data.ts (2)

1-2: LGTM! Appropriate handling of legacy migration.

The @ts-nocheck directive correctly suppresses type errors for this historical migration script that references removed schema fields (e.g., landerData, landerPublishedAt). This preserves the script for documentation purposes while preventing build failures.


7-7: dotenv-flow dependency verified
Found in apps/web/package.json at ^4.1.0; side-effect import is appropriate.

apps/web/scripts/migrations/migrate-application-formdata.ts (3)

1-2: LGTM: Appropriate use of @ts-nocheck for legacy migration.

The directive correctly allows this script to reference old schema types that are being removed in this PR cleanup. This is a valid approach for maintaining backward compatibility in migration scripts.


6-6: uuid dependency verified
Found uuid in apps/web/package.json at version ^11.0.3.


45-90: Archive one-time migration script
Confirm this script (it uses @ts-nocheck and touches removed schema fields) has already run in production. If so, move it to apps/web/scripts/migrations/archived/, add execution metadata (date, status) in a header comment, and document the process for archiving executed migrations.

apps/web/lib/api/programs/get-program-or-throw.ts (1)

6-12: Simpler signature and unified return look good

Lean param shape and single ProgramSchema.parse return is cleaner.

Also applies to: 27-27

apps/web/lib/actions/partners/update-group-branding.ts (1)

231-241: Consider input size/validation before fetching remote images

If storage.upload performs server-side fetches, cap image size and timeouts to avoid abuse.

Please verify upload() enforces size/timeouts. If not, add fetch options/streaming with limits.

apps/web/app/(ee)/api/programs/[programId]/route.ts (1)

6-13: LGTM: simpler GET path
Delegating to getProgramOrThrow and returning JSON directly is clean; no occurrences of includeLanderData found.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5373649 and 870a90d.

📒 Files selected for processing (3)
  • packages/prisma/schema/discount.prisma (2 hunks)
  • packages/prisma/schema/program.prisma (0 hunks)
  • packages/prisma/schema/reward.prisma (1 hunks)
💤 Files with no reviewable changes (1)
  • packages/prisma/schema/program.prisma
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/prisma/schema/discount.prisma
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: TWilson023
PR: dubinc/dub#2935
File: packages/prisma/schema/workspace.prisma:21-36
Timestamp: 2025-10-06T15:48:45.956Z
Learning: In the Dub repository (dubinc/dub), Prisma schema changes are not managed with separate migration files. Do not flag missing Prisma migration files when schema changes are made to files like `packages/prisma/schema/workspace.prisma` or other schema files.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build

updatedAt DateTime @updatedAt
program Program @relation(fields: [programId], references: [id], onDelete: Cascade)
program Program @relation(fields: [programId], references: [id])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Do not drop the cascade delete without replacing the cleanup.

Reward.program is required, so removing onDelete: Cascade reverts the FK to RESTRICT. Any code that deletes a Program (e.g., the delete-program script/API) will now fail once rewards exist unless they are deleted first. Previously the cascade handled this automatically. Please either keep the cascade or add explicit reward deletions wherever programs are removed so the operation still succeeds.

@steven-tey steven-tey merged commit 0ed9c00 into main Oct 15, 2025
7 of 8 checks passed
@steven-tey steven-tey deleted the prisma-cleanup branch October 15, 2025 20:25
This was referenced Nov 3, 2025
This was referenced Nov 15, 2025
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.

2 participants