Skip to content

Conversation

@arjunkomath
Copy link
Member

@arjunkomath arjunkomath commented Dec 19, 2025

Summary by CodeRabbit

  • New Features

    • Added a public changelog page with client-side pagination.
    • Introduced versioned JSON API responses (V1/V2) with pagination support.
  • Improvements

    • Switched changelog CTA to internal routing for smoother navigation.
  • Chores

    • Renamed package scopes across the monorepo to a consolidated format.
    • Updated .gitignore to exclude build artifacts and node_modules.

✏️ Tip: You can customize this high-level summary in your review settings.

@vercel
Copy link

vercel bot commented Dec 19, 2025

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

Project Deployment Review Updated (UTC)
changes-page Ready Ready Preview Dec 19, 2025 11:01am
2 Skipped Deployments
Project Deployment Review Updated (UTC)
changes-page-docs Skipped Skipped Dec 19, 2025 11:01am
user-changes-page Skipped Skipped Dec 19, 2025 11:01am

@coderabbitai
Copy link

coderabbitai bot commented Dec 19, 2025

Walkthrough

This pull request renames package scope identifiers from @changes-page to @changespage across apps, adds dist/ and node_modules/ entries to .gitignore, implements paginated post fetching via fetchPostsWithPagination, adds V1/V2 handling to the JSON API endpoint, and introduces a new changelog page with client-side pagination.

Changes

Cohort / File(s) Summary
Package manifests & config
apps/docs/package.json, apps/page/package.json, apps/web/package.json, .gitignore
Renamed package scopes from @changes-page/* to @changespage/*; updated workspace dependencies and added dist/ and node_modules/ under a new packages section in .gitignore.
Core data & exports
apps/page/lib/data.ts
Added fetchPostsWithPagination(pageId, { limit, offset }) with limit capping, error handling, and postsCount; exported translateHostToPageIdentifier (now public); updated internal import paths to new namespace.
API — JSON endpoint
apps/page/pages/api/json.ts
Added API version routing (V1 array response, V2 object response), CORS pre-handling, V2 pagination using fetchPostsWithPagination, content/url enrichment, and distinct error paths; adjusted handler response type.
Namespace-only import updates
Many files (examples below)
Replaced import specifiers throughout the codebase from @changes-page/... to @changespage/... to match renamed packages (type, admin client, utils, UI components). Examples:
apps/page/... — components, pages, api routes (pages/_sites/**, pages/api/**)
apps/web/... — components, pages, inngest jobs, API routes, data files, tailwind config.
New page — changelog
apps/web/pages/changelog.tsx, apps/web/components/marketing/hero.tsx
Added a static-generated Changelog page with client-side "Load more" pagination (getStaticProps present); changed hero CTA from external link to internal /changelog route; updated relevant imports to new namespace.

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant NextAPI as /api/json
  participant DataLayer as fetchPostsWithPagination
  participant Database as Supabase

  Note over Client,NextAPI: Client requests posts (V2) with optional offset/limit
  Client->>NextAPI: GET /api/json (header: x-api-version: 2, query: pageId, offset, limit)
  Note right of NextAPI: CORS pre-handling runs
  NextAPI->>DataLayer: fetchPostsWithPagination(pageId, {limit, offset})
  DataLayer->>Database: query posts WHERE page_id = pageId AND published = true LIMIT/OFFSET
  Database-->>DataLayer: rows, count
  DataLayer-->>NextAPI: { posts, postsCount }
  NextAPI-->>Client: { posts: [...], totalCount: N } (V2 response)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Areas needing extra attention:
    • apps/page/lib/data.ts — correctness of pagination, limit capping, and postsCount calculation.
    • apps/page/pages/api/json.ts — version routing, response shapes (V1 vs V2), CORS placement, and error paths.
    • apps/web/pages/changelog.tsx — static props, client pagination hook usage, and SSR/ISR expectations.
    • Verify no import path was missed and workspace/package.json updates are consistent.

Possibly related PRs

Poem

🐇 A hop, a fix, a namespace cheer,
I swapped the hyphen, bright and clear.
Pages paginate with nimble spin,
Changelogs bloom and posts hop in.
From burrowed code I clap my paws—hooray, it's here! 🎉

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title 'feat: React SDK' is vague and does not accurately describe the main changes in the PR, which are primarily package namespace rebranding from @changes-page to @changespage, along with minor API enhancements. Consider revising the title to reflect the primary changes, such as 'refactor: rebrand package namespace from @changes-page to @changespage' or provide clarification on how React SDK relates to the namespace migration.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/react-sdk

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

@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: 2

Caution

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

⚠️ Outside diff range comments (7)
apps/web/pages/api/teams/invite/accept/index.ts (3)

24-27: Clarify the error message.

The error message "Team not found" is misleading when the actual issue is that the invitation wasn't found or doesn't match the user's email.

🔎 Proposed fix
       if (!invite) {
         return res.status(403).json({
-          error: { statusCode: 403, message: "Team not found" },
+          error: { statusCode: 403, message: "Invitation not found or invalid" },
         });
       }

40-43: Correct the error message.

The error message "Failed to create invitation" is incorrect since the code is creating a membership, not an invitation.

🔎 Proposed fix
       if (!membership) {
         return res.status(500).json({
-          error: { statusCode: 500, message: "Failed to create invitation" },
+          error: { statusCode: 500, message: "Failed to accept invitation" },
         });
       }

56-56: Fix the Allow header.

The Allow header lists "PUT" but the handler only implements POST.

🔎 Proposed fix
   } else {
-    res.setHeader("Allow", "POST,PUT");
+    res.setHeader("Allow", "POST");
     res.status(405).end("Method Not Allowed");
   }
apps/web/pages/api/pages/reactions.ts (1)

18-29: Critical: Missing return statement causes double response.

When !aggregate?.length is true, the code sends a response with default values but doesn't return. Execution continues to line 31, attempting to send a second response, which will throw a "Cannot set headers after they are sent to the client" error.

🔎 Proposed fix
     if (!aggregate?.length) {
-      res.status(200).json({
+      return res.status(200).json({
         ok: true,
         aggregate: {
           thumbs_up: 0,
           thumbs_down: 0,
           heart: 0,
           sad: 0,
           rocket: 0,
         },
       });
     }
apps/web/inngest/email/send-visitor-magic-link.ts (1)

19-23: Avoid logging email addresses (PII).

Logging email addresses could violate GDPR/CCPA compliance depending on your log retention policies. Consider either:

  • Removing the email from the log statement
  • Hashing/redacting the email before logging
  • Ensuring logs are retained per privacy policy requirements
🔎 Proposed fix to remove PII from logs
 console.log("Sending magic link email", {
-  email,
   page_url,
   page_id,
 });
apps/web/inngest/jobs/delete-images.ts (1)

8-57: Critical: Incomplete deletion when folder contains >100 items.

The list() call uses a fixed limit of 100 with offset 0 (line 12), without pagination. Folders with more than 100 files will only have the first 100 items processed, leaving remaining files undeleted. This causes incomplete cleanup and potential storage leaks.

🔎 Proposed fix to add pagination
 export async function deleteFolderContents(folderPath: string) {
-  // List all objects in the current folder
-  let { data, error } = await supabaseAdmin.storage
-    .from(BUCKET_NAME)
-    .list(folderPath, { limit: 100, offset: 0 });
-
-  if (error) {
-    console.error("Error listing objects:", error);
-    return;
-  }
+  let offset = 0;
+  const limit = 100;
+  let hasMore = true;
+
+  while (hasMore) {
+    // List all objects in the current folder
+    let { data, error } = await supabaseAdmin.storage
+      .from(BUCKET_NAME)
+      .list(folderPath, { limit, offset });
+
+    if (error) {
+      console.error("Error listing objects:", error);
+      return;
+    }
+
+    if (!data || data.length === 0) {
+      hasMore = false;
+      break;
+    }
 
-  const files = [];
-  const subdirectories = [];
+    const files = [];
+    const subdirectories = [];
 
-  for (const item of data) {
-    if (item.id) {
-      files.push(item.name);
-    } else {
-      subdirectories.push(item.name);
+    for (const item of data) {
+      if (item.id) {
+        files.push(item.name);
+      } else {
+        subdirectories.push(item.name);
+      }
     }
-  }
 
-  // Recursively delete contents of subdirectories
-  for (const item of subdirectories) {
-    await deleteFolderContents(`${folderPath}/${item}`);
-  }
+    // Recursively delete contents of subdirectories
+    for (const item of subdirectories) {
+      await deleteFolderContents(`${folderPath}/${item}`);
+    }
 
-  // Delete all files in the current directory
-  if (files.length > 0) {
-    const filesToRemove = files.map((x) => `${folderPath}/${x}`);
-    console.log(DELETE_IMAGES_JOB_EVENT, "Deleting files:", filesToRemove);
+    // Delete all files in the current directory
+    if (files.length > 0) {
+      const filesToRemove = files.map((x) => `${folderPath}/${x}`);
+      console.log(DELETE_IMAGES_JOB_EVENT, "Deleting files:", filesToRemove);
 
-    const { error: deleteError } = await supabaseAdmin.storage
-      .from(BUCKET_NAME)
-      .remove(filesToRemove);
+      const { error: deleteError } = await supabaseAdmin.storage
+        .from(BUCKET_NAME)
+        .remove(filesToRemove);
 
-    if (deleteError) {
-      console.error(
-        DELETE_IMAGES_JOB_EVENT,
-        "Error deleting files:",
-        deleteError
-      );
-    } else {
-      console.log(
-        DELETE_IMAGES_JOB_EVENT,
-        `Files in ${folderPath} deleted successfully`
-      );
+      if (deleteError) {
+        console.error(
+          DELETE_IMAGES_JOB_EVENT,
+          "Error deleting files:",
+          deleteError
+        );
+      } else {
+        console.log(
+          DELETE_IMAGES_JOB_EVENT,
+          `Files in ${folderPath} deleted successfully`
+        );
+      }
     }
+
+    // Check if we need to fetch more items
+    hasMore = data.length === limit;
+    offset += limit;
   }
 }
apps/page/pages/api/posts.ts (1)

15-19: Missing return after sending 400 response causes execution to continue.

After sending the 400 error response, the function continues into the try block and attempts the database query with invalid parameters. This will cause unexpected behavior and potentially a second response attempt.

🔎 Proposed fix
   if (!page_id || !offset) {
-    res
+    return res
       .status(400)
       .json({ error: { statusCode: 400, message: "Invalid request" } });
   }
🧹 Nitpick comments (4)
.gitignore (1)

47-50: Clarify and standardize gitignore patterns for consistency.

The new entries introduce a pattern inconsistency: Line 4 uses /node_modules (root-level only), while Line 50 uses node_modules/ (matches at any directory level). Both will function, but this creates:

  • Partial redundancy: Line 4 covers root node_modules; Line 50 covers all levels
  • Inconsistent organization: root-level patterns (lines 4, 16) vs. any-level patterns (lines 49–50)

For a monorepo, if the intent is to ignore package-level node_modules and dist/ directories alongside the existing root patterns, consider updating for clarity. You can either:

  1. Keep root-specific rules and append monorepo-specific patterns with clear intent, or
  2. Standardize: remove the leading slashes from lines 4 and 16 if you want all-level matching everywhere.
🔎 Option: Standardize to catch at all levels (if packages have their own node_modules and build outputs)
  # dependencies
- /node_modules
+ node_modules/
  /.pnp
  .pnp.js
  
  # production
- /build
+ build/
apps/web/components/marketing/hero.tsx (1)

77-92: Good change to internal link; consider removing unnecessary rel attribute.

Converting the external link to the internal /changelog route correctly leverages the new changelog page introduced in this PR.

The rel="noopener noreferrer" attribute is typically used for external links to prevent security issues (tabnapping) and referrer leakage. For internal Next.js Link components, this attribute is unnecessary.

🔎 Optional cleanup
 <Link
   href="/changelog"
-  rel="noopener noreferrer"
   className="inline-flex space-x-6"
 >
apps/web/pages/changelog.tsx (1)

64-65: Remove @ts-ignore and fix type issue properly.

Type suppressions hide legitimate type issues and make the code harder to maintain. The ReactMarkdown component should have proper type definitions.

🔎 Potential solutions

Solution 1: Cast children prop explicitly:

-{/* @ts-ignore */}
-<ReactMarkdown>{content}</ReactMarkdown>
+<ReactMarkdown>{content as string}</ReactMarkdown>

Solution 2: Use proper ReactMarkdown props:

-{/* @ts-ignore */}
-<ReactMarkdown>{content}</ReactMarkdown>
+<ReactMarkdown children={content} />

Choose the solution that matches your ReactMarkdown version and type definitions.

apps/page/pages/api/json.ts (1)

54-57: Unsafe optional chaining on req?.query can cause TypeError.

The static analysis correctly identifies that if req?.query short-circuits to undefined, the destructuring { limit, offset } will throw a TypeError. However, in Next.js API routes, req is always defined with a query object, so this is defensive but potentially misleading code.

For consistency with handleV1 (line 24 uses req?.query similarly), consider either:

  1. Removing the optional chaining since req is guaranteed in Next.js handlers
  2. Adding a fallback: const { limit, offset } = req?.query ?? {}
🔎 Option 1: Remove unnecessary optional chaining (preferred)
 async function handleV2(req: NextApiRequest, res: NextApiResponse<V2Response>) {
   const hostname = String(req?.headers?.host);
-  const { limit, offset } = req?.query;
+  const { limit, offset } = req.query;
🔎 Option 2: Add fallback for safety
 async function handleV2(req: NextApiRequest, res: NextApiResponse<V2Response>) {
   const hostname = String(req?.headers?.host);
-  const { limit, offset } = req?.query;
+  const { limit, offset } = req?.query ?? {};
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8b89672 and e0d38be.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (107)
  • .gitignore (1 hunks)
  • apps/docs/package.json (1 hunks)
  • apps/page/components/footer.tsx (1 hunks)
  • apps/page/components/page-header.tsx (1 hunks)
  • apps/page/components/post.tsx (2 hunks)
  • apps/page/components/reactions.tsx (1 hunks)
  • apps/page/components/seo-tags.tsx (1 hunks)
  • apps/page/components/subscribe-prompt.tsx (1 hunks)
  • apps/page/lib/data.ts (2 hunks)
  • apps/page/lib/notifications.ts (1 hunks)
  • apps/page/lib/url.ts (1 hunks)
  • apps/page/lib/visitor-auth.ts (1 hunks)
  • apps/page/package.json (2 hunks)
  • apps/page/pages/_sites/[site]/index.tsx (1 hunks)
  • apps/page/pages/_sites/[site]/notifications/confirm-email-subscription.tsx (1 hunks)
  • apps/page/pages/_sites/[site]/plain.tsx (1 hunks)
  • apps/page/pages/_sites/[site]/post/[postId]/[slug].tsx (1 hunks)
  • apps/page/pages/_sites/[site]/roadmap/[roadmap_slug].tsx (1 hunks)
  • apps/page/pages/api/auth/request-magic-link.ts (1 hunks)
  • apps/page/pages/api/auth/verify-magic-link.ts (1 hunks)
  • apps/page/pages/api/json.ts (2 hunks)
  • apps/page/pages/api/latest.ts (1 hunks)
  • apps/page/pages/api/markdown.ts (1 hunks)
  • apps/page/pages/api/pa/view.ts (1 hunks)
  • apps/page/pages/api/pinned.ts (1 hunks)
  • apps/page/pages/api/post/[id].ts (1 hunks)
  • apps/page/pages/api/post/react.ts (1 hunks)
  • apps/page/pages/api/post/reactions.ts (1 hunks)
  • apps/page/pages/api/posts.ts (1 hunks)
  • apps/page/pages/api/roadmap/submit-triage.ts (1 hunks)
  • apps/page/pages/api/roadmap/vote.ts (1 hunks)
  • apps/page/pages/api/roadmap/votes.ts (1 hunks)
  • apps/page/pages/api/rss.ts (1 hunks)
  • apps/page/tailwind.config.js (1 hunks)
  • apps/web/components/dialogs/ai-expand-concept-prompt-dialog.component.tsx (1 hunks)
  • apps/web/components/dialogs/ai-prood-read-dialog.component.tsx (1 hunks)
  • apps/web/components/dialogs/ai-suggest-title-prompt-dialog.component.tsx (1 hunks)
  • apps/web/components/dialogs/confirm-delete-dialog.component.tsx (1 hunks)
  • apps/web/components/dialogs/date-time-prompt-dialog.component.tsx (1 hunks)
  • apps/web/components/dialogs/manage-team-dialog.component.tsx (1 hunks)
  • apps/web/components/dialogs/warning-dialog.component.tsx (1 hunks)
  • apps/web/components/entity/empty-state.tsx (1 hunks)
  • apps/web/components/forms/page-form.component.tsx (1 hunks)
  • apps/web/components/forms/post-form.component.tsx (1 hunks)
  • apps/web/components/layout/blog-layout.component.tsx (1 hunks)
  • apps/web/components/marketing/changelog.tsx (1 hunks)
  • apps/web/components/marketing/hero.tsx (2 hunks)
  • apps/web/components/page-settings/custom-domain.tsx (1 hunks)
  • apps/web/components/page-settings/github-agent.tsx (1 hunks)
  • apps/web/components/page-settings/integrations.tsx (1 hunks)
  • apps/web/components/page-settings/notifications.tsx (1 hunks)
  • apps/web/components/page-settings/social-links.tsx (1 hunks)
  • apps/web/components/page-settings/style.tsx (1 hunks)
  • apps/web/components/post/post-options.tsx (1 hunks)
  • apps/web/components/post/post-status.tsx (1 hunks)
  • apps/web/components/post/post.tsx (1 hunks)
  • apps/web/components/roadmap/RoadmapBoard.tsx (1 hunks)
  • apps/web/components/roadmap/RoadmapColumn.tsx (1 hunks)
  • apps/web/components/roadmap/RoadmapItem.tsx (1 hunks)
  • apps/web/components/roadmap/RoadmapItemModal.tsx (1 hunks)
  • apps/web/components/roadmap/TriageItemCard.tsx (1 hunks)
  • apps/web/components/roadmap/TriageRow.tsx (1 hunks)
  • apps/web/components/roadmap/hooks/useRoadmapDragDrop.ts (1 hunks)
  • apps/web/components/roadmap/hooks/useRoadmapItems.ts (1 hunks)
  • apps/web/components/roadmap/types.ts (1 hunks)
  • apps/web/data/schema.ts (1 hunks)
  • apps/web/data/user.interface.ts (1 hunks)
  • apps/web/inngest/billing/report-pages-usage-invoice.ts (1 hunks)
  • apps/web/inngest/email/send-roadmap-triage-notification.ts (1 hunks)
  • apps/web/inngest/email/send-visitor-magic-link.ts (1 hunks)
  • apps/web/inngest/jobs/delete-images.ts (1 hunks)
  • apps/web/inngest/jobs/process-github-changelog.ts (1 hunks)
  • apps/web/package.json (2 hunks)
  • apps/web/pages/account/billing.tsx (1 hunks)
  • apps/web/pages/api/billing/jobs/cleanup-inactive-pages.ts (1 hunks)
  • apps/web/pages/api/billing/jobs/report-usage.ts (1 hunks)
  • apps/web/pages/api/emails/subscribers/export-csv.ts (1 hunks)
  • apps/web/pages/api/emails/subscribers/index.ts (1 hunks)
  • apps/web/pages/api/integrations/github/action-new-post.tsx (1 hunks)
  • apps/web/pages/api/integrations/github/installations.ts (1 hunks)
  • apps/web/pages/api/integrations/github/webhook.ts (1 hunks)
  • apps/web/pages/api/integrations/zapier/action-new-post.tsx (1 hunks)
  • apps/web/pages/api/integrations/zapier/trigger-new-post.tsx (1 hunks)
  • apps/web/pages/api/pages/new.ts (1 hunks)
  • apps/web/pages/api/pages/reactions.ts (1 hunks)
  • apps/web/pages/api/pages/settings/index.ts (1 hunks)
  • apps/web/pages/api/pages/settings/remove-domain.ts (1 hunks)
  • apps/web/pages/api/pages/settings/webhook.ts (1 hunks)
  • apps/web/pages/api/pages/validate-url.ts (1 hunks)
  • apps/web/pages/api/pages/webhook.ts (1 hunks)
  • apps/web/pages/api/posts/index.ts (1 hunks)
  • apps/web/pages/api/posts/webhook.ts (1 hunks)
  • apps/web/pages/api/roadmap/triage/delete.ts (1 hunks)
  • apps/web/pages/api/roadmap/triage/move-to-board.ts (1 hunks)
  • apps/web/pages/api/storage/get-mime-type.ts (1 hunks)
  • apps/web/pages/api/teams/invite/accept/index.ts (1 hunks)
  • apps/web/pages/api/teams/invite/index.ts (1 hunks)
  • apps/web/pages/api/teams/member/[id]/index.ts (1 hunks)
  • apps/web/pages/blog/index.tsx (1 hunks)
  • apps/web/pages/changelog.tsx (1 hunks)
  • apps/web/pages/free-tools/ai-changelog-generator.tsx (1 hunks)
  • apps/web/pages/onboarding/open-page.tsx (1 hunks)
  • apps/web/pages/pages/[page_id]/[post_id].tsx (1 hunks)
  • apps/web/pages/pages/[page_id]/analytics.tsx (1 hunks)
  • apps/web/pages/pages/[page_id]/audit-logs.tsx (1 hunks)
  • apps/web/pages/pages/[page_id]/edit.tsx (1 hunks)
  • apps/web/pages/pages/[page_id]/index.tsx (1 hunks)
⛔ Files not processed due to max files limit (34)
  • apps/web/pages/pages/[page_id]/new.tsx
  • apps/web/pages/pages/[page_id]/roadmap/[board_id]/settings.tsx
  • apps/web/pages/pages/[page_id]/settings/[activeTab].tsx
  • apps/web/pages/pages/index.tsx
  • apps/web/pages/teams/index.tsx
  • apps/web/tailwind.config.js
  • apps/web/utils/changelog-ai.ts
  • apps/web/utils/email.ts
  • apps/web/utils/hooks/usePage.ts
  • apps/web/utils/hooks/usePageSettings.ts
  • apps/web/utils/hooks/usePageUrl.ts
  • apps/web/utils/hooks/usePosts.ts
  • apps/web/utils/supabase/client.ts
  • apps/web/utils/supabase/middleware.ts
  • apps/web/utils/supabase/server.ts
  • apps/web/utils/supabase/withSupabase.ts
  • apps/web/utils/useDatabase.ts
  • apps/web/utils/useSSR.ts
  • apps/web/utils/useUser.tsx
  • apps/web/utils/withAuth.ts
  • packages/react-sdk/README.md
  • packages/react-sdk/package.json
  • packages/react-sdk/src/client.ts
  • packages/react-sdk/src/components/ChangelogPost.tsx
  • packages/react-sdk/src/components/index.ts
  • packages/react-sdk/src/hooks/index.ts
  • packages/react-sdk/src/hooks/usePosts.ts
  • packages/react-sdk/src/index.ts
  • packages/react-sdk/src/types.ts
  • packages/react-sdk/src/utils.ts
  • packages/react-sdk/tsconfig.json
  • packages/supabase/package.json
  • packages/ui/package.json
  • packages/utils/package.json
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-10-18T23:41:55.508Z
Learnt from: arjunkomath
Repo: techulus/changes-page PR: 101
File: packages/supabase/migrations/20_roadmap_triage_items.sql:15-25
Timestamp: 2025-10-18T23:41:55.508Z
Learning: In the changes-page codebase, roadmap triage items use service role (supabaseAdmin) for all database operations with authorization implemented at the API layer. The RLS policies on roadmap_triage_items are for page owner management only. Public INSERT happens through apps/page/pages/api/roadmap/submit-triage.ts which uses supabaseAdmin and checks board.is_public and visitor authentication. No INSERT RLS policy is needed.

Applied to files:

  • apps/web/components/roadmap/RoadmapBoard.tsx
  • apps/web/pages/api/roadmap/triage/move-to-board.ts
  • apps/web/pages/api/teams/invite/accept/index.ts
  • apps/web/inngest/email/send-roadmap-triage-notification.ts
  • apps/web/components/roadmap/types.ts
  • apps/page/pages/api/roadmap/votes.ts
  • apps/page/pages/api/roadmap/vote.ts
  • apps/web/components/roadmap/TriageItemCard.tsx
  • apps/web/components/roadmap/TriageRow.tsx
  • apps/page/pages/_sites/[site]/roadmap/[roadmap_slug].tsx
  • apps/page/lib/data.ts
  • apps/page/pages/api/pa/view.ts
  • apps/web/components/roadmap/RoadmapItemModal.tsx
  • apps/web/components/roadmap/hooks/useRoadmapItems.ts
  • apps/web/pages/api/integrations/github/installations.ts
  • apps/web/inngest/jobs/process-github-changelog.ts
  • apps/web/pages/api/teams/member/[id]/index.ts
  • apps/web/pages/api/roadmap/triage/delete.ts
  • apps/page/pages/api/roadmap/submit-triage.ts
  • apps/web/pages/api/pages/reactions.ts
📚 Learning: 2025-09-06T09:03:10.349Z
Learnt from: arjunkomath
Repo: techulus/changes-page PR: 83
File: packages/supabase/types/index.ts:561-589
Timestamp: 2025-09-06T09:03:10.349Z
Learning: The roadmap_votes table in packages/supabase/migrations/18_roadmap.sql already has a unique_item_visitor constraint on (item_id, visitor_id) and the item_id foreign key includes ON DELETE CASCADE, so suggestions about adding these constraints are redundant.

Applied to files:

  • apps/web/components/roadmap/types.ts
🧬 Code graph analysis (2)
apps/page/lib/data.ts (3)
packages/supabase/types/page.ts (1)
  • IPost (5-5)
apps/page/tests/page.spec.js (1)
  • posts (32-32)
packages/supabase/admin.ts (1)
  • supabaseAdmin (4-7)
apps/web/pages/changelog.tsx (3)
apps/web/components/layout/header.component.tsx (1)
  • HeaderComponent (20-324)
packages/ui/components/Spinner.tsx (1)
  • Spinner (3-32)
apps/web/components/layout/footer.component.tsx (1)
  • FooterComponent (80-227)
🪛 Biome (2.1.2)
apps/page/pages/api/json.ts

[error] 56-56: Unsafe usage of optional chaining.

If it short-circuits with 'undefined' the evaluation will throw TypeError here:

(lint/correctness/noUnsafeOptionalChaining)

🔇 Additional comments (108)
apps/web/components/dialogs/date-time-prompt-dialog.component.tsx (1)

1-1: Import path namespace update is consistent with PR objectives.

The import path change from @changes-page/utils to @changespage/utils aligns with the PR's namespace renaming initiative. The DateTime utility is correctly consumed on line 137.

Please confirm that @changespage/utils correctly exports the DateTime utility under the new namespace. You may want to verify this by checking the package configuration or running a build to ensure no import resolution errors occur.

apps/web/pages/free-tools/ai-changelog-generator.tsx (1)

2-2: Namespace migration looks good.

The import path has been correctly updated to reflect the package namespace change from @changes-page to @changespage. The component usage on line 167 is unaffected and remains functional.

apps/web/components/dialogs/manage-team-dialog.component.tsx (1)

1-1: Import path correctly updated to new namespace.

The ITeam type import has been properly migrated to align with the package namespace change from @changes-page to @changespage. The type is correctly used throughout the component for team data handling.

apps/web/components/page-settings/github-agent.tsx (1)

1-2: Import paths correctly updated to new namespace.

The package imports have been properly migrated from @changes-page to @changespage, aligning with the broader namespace refactoring. The types and components are used consistently throughout the component.

Please verify that the workspace packages at @changespage/supabase and @changespage/ui are correctly configured in your monorepo's package.json or tsconfig.json path aliases.

apps/web/pages/api/billing/jobs/cleanup-inactive-pages.ts (1)

1-2: LGTM!

The import path updates from @changes-page/... to @changespage/... are consistent with the package namespace rename across the repository. The relevant imports confirm other files are using the same updated paths.

apps/web/pages/api/teams/invite/accept/index.ts (1)

1-1: LGTM!

The import path update from @changes-page/supabase/admin to @changespage/supabase/admin is consistent with the package namespace refactoring described in the PR objectives.

apps/web/inngest/billing/report-pages-usage-invoice.ts (1)

1-1: LGTM! Import path migration to @changespage is complete.

The import path update from @changes-page/supabase/admin to @changespage/supabase/admin aligns with the package namespace rename objective. Verification confirms no remaining old import paths exist in the codebase.

apps/web/pages/api/pages/reactions.ts (1)

1-1: LGTM! Import path updated correctly.

The import path change from @changes-page/supabase/admin to @changespage/supabase/admin aligns with the systematic package namespace rename across the codebase.

apps/page/pages/_sites/[site]/plain.tsx (1)

7-8: LGTM! The import path updates from @changes-page/* to @changespage/* are correct and align with the PR's package namespace refactoring objective. Verification confirms all old package references have been successfully updated across the codebase.

apps/page/pages/api/pa/view.ts (1)

1-1: Import namespace update verified as complete.

The import path change from @changes-page/supabase/admin to @changespage/supabase/admin is correct. Search confirms no remaining @changes-page imports exist in the codebase—the namespace standardization is fully applied.

apps/web/pages/pages/[page_id]/analytics.tsx (1)

1-2: LGTM! Clean import path updates.

The namespace change from @changes-page to @changespage is straightforward with no behavioral changes introduced. The new @changespage package scope is properly configured across the monorepo packages.

apps/page/pages/_sites/[site]/notifications/confirm-email-subscription.tsx (1)

1-1: LGTM! Namespace update is clean.

The import path change from @changes-page to @changespage is straightforward and correctly aligned with the systematic package namespace rename. No remaining references to the old namespace exist in the codebase.

apps/web/pages/account/billing.tsx (1)

1-2: Import paths correctly updated for package namespace rename.

Both imports have been updated from @changes-page/* to @changespage/* in alignment with the package namespace refactoring. The SpinnerWithSpacing and DateTime exports are properly available in their respective packages.

apps/web/pages/api/emails/subscribers/export-csv.ts (1)

1-1: Import path update looks correct.

The namespace change is consistent with the other files in this PR and maintains the existing functionality.

apps/web/pages/api/emails/subscribers/index.ts (1)

1-1: Import path update is correct.

The namespace change from @changes-page to @changespage aligns with the PR objective. The new package exists in packages/supabase/package.json and is properly configured with the correct export paths. No remaining @changes-page imports were found in the codebase, confirming the migration is complete.

apps/web/pages/onboarding/open-page.tsx (1)

1-2: The imports are correctly configured and no action is required.

The namespace migration from @changes-page to @changespage is complete. Both imports are properly exported in their respective package.json files (@changespage/supabase with a ./admin export, and @changespage/ui), and both are actively used in the code (lines 23 and 46). Since these are npm workspace packages, they don't require tsconfig.json path mappings—the imports resolve correctly through the workspace package names.

apps/page/pages/_sites/[site]/roadmap/[roadmap_slug].tsx (1)

6-7: Package namespace rename is correct and consistent.

The import path updates from @changes-page to @changespage on lines 6-7 are syntactically correct. All referenced packages (@changespage/supabase, @changespage/utils) are properly configured in their respective package.json files with matching names and correct export mappings. The workspace dependencies in apps/page/package.json are correctly declared, and no old namespace references remain in the codebase.

apps/web/pages/api/billing/jobs/report-usage.ts (1)

1-2: Import paths updated correctly to new package namespace.

The namespace change from @changes-page to @changespage is applied correctly. The @changespage/supabase package exists with proper exports configured for both ./admin and ./types/api. No remaining old imports found in the web app—this aligns with the systematic migration across the monorepo.

apps/page/pages/_sites/[site]/post/[postId]/[slug].tsx (1)

1-2: Namespace updates from @changes-page/* to @changespage/* are correct and consistently applied.

The import path changes on lines 1–2 are accurate and align with the PR's package namespace rename. Package declarations and dependencies across the codebase have been updated to the new namespace, confirming the migration is complete.

apps/web/inngest/jobs/delete-images.ts (1)

1-1: Import path updated correctly.

The namespace change from @changes-page to @changespage has been consistently applied. Verification confirms no remaining old import paths exist in the codebase.

apps/page/pages/api/markdown.ts (1)

1-1: LGTM! Package namespace updated correctly.

The import path has been correctly updated from @changes-page/utils to @changespage/utils as part of the package namespace normalization.

apps/web/components/layout/blog-layout.component.tsx (1)

1-1: LGTM! Package namespace updated correctly.

The import path has been correctly updated from @changes-page/utils to @changespage/utils as part of the package namespace normalization.

apps/web/components/dialogs/confirm-delete-dialog.component.tsx (1)

2-2: LGTM! Package namespace updated correctly.

The import path has been correctly updated from @changes-page/ui to @changespage/ui as part of the package namespace normalization.

apps/web/components/forms/post-form.component.tsx (1)

7-9: LGTM! Package namespace updated correctly.

All import paths have been correctly updated to use the @changespage/* namespace as part of the package normalization. The changes include types, UI components, and utilities.

apps/page/components/subscribe-prompt.tsx (1)

1-2: LGTM! Package namespace updated correctly.

All import paths have been correctly updated to use the @changespage/* namespace as part of the package normalization.

apps/web/pages/api/roadmap/triage/delete.ts (1)

1-1: LGTM! Package namespace updated correctly.

The import path has been correctly updated from @changes-page/supabase/admin to @changespage/supabase/admin as part of the package namespace normalization.

apps/page/pages/api/post/reactions.ts (1)

1-1: LGTM! Package namespace updated correctly.

The import path has been correctly updated from @changes-page/supabase/admin to @changespage/supabase/admin as part of the package namespace normalization.

apps/web/pages/api/roadmap/triage/move-to-board.ts (2)

1-1: LGTM! Package namespace updated correctly.

The import path has been correctly updated from @changes-page/supabase/admin to @changespage/supabase/admin as part of the package namespace normalization.


1-1: Package namespace migration is complete.

Verification confirms zero old @changes-page references remain in the codebase, and @changespage is consistently used across 210+ locations including source files, package definitions, and configuration files. The migration is fully complete.

apps/page/pages/api/post/react.ts (1)

1-1: LGTM! Import path updated correctly.

The import path has been successfully updated to the new package namespace.

apps/page/pages/api/post/[id].ts (1)

1-3: LGTM! Import paths updated correctly.

All three import paths have been successfully updated to the new package namespace.

apps/page/pages/_sites/[site]/index.tsx (1)

1-2: LGTM! Import paths updated correctly.

Both import paths have been successfully updated to the new package namespace.

apps/web/pages/blog/index.tsx (1)

1-1: LGTM! Import path updated correctly.

The import path has been successfully updated to the new package namespace.

apps/page/pages/api/rss.ts (1)

1-4: LGTM! Import path updated correctly.

The import path has been successfully updated to the new package namespace.

apps/page/lib/visitor-auth.ts (1)

1-1: LGTM! Import path updated correctly.

The import path has been successfully updated to the new package namespace.

apps/web/data/schema.ts (1)

1-1: LGTM! Import path updated correctly.

The import path has been successfully updated to the new package namespace.

apps/web/pages/api/pages/webhook.ts (2)

1-1: LGTM! Import path updated correctly.

The import path has been successfully updated to the new package namespace.


1-1: Verify all import paths have been updated consistently across the codebase.

Ensure that no files still reference the old @changes-page namespace. Run a codebase-wide search to confirm all references have been migrated to the new @changespage namespace (without hyphen).

apps/web/components/roadmap/hooks/useRoadmapDragDrop.ts (1)

1-1: LGTM! Namespace migration complete.

The import path updates from @changes-page to @changespage are correctly applied. Verification confirms no remaining references to the old namespace exist throughout the codebase—all imports, configuration files, and package references have been successfully updated.

apps/web/inngest/jobs/process-github-changelog.ts (1)

1-2: LGTM! Import paths updated correctly.

The import path changes from @changes-page to @changespage are clean and consistent with the namespace refactoring.

apps/web/components/roadmap/TriageItemCard.tsx (1)

1-1: LGTM! Import path updated correctly.

The namespace update is consistent with the broader refactoring effort.

apps/web/pages/api/pages/validate-url.ts (1)

1-2: LGTM! Import paths updated correctly.

Both import statements have been updated consistently with the new namespace.

apps/web/components/page-settings/custom-domain.tsx (1)

1-2: LGTM! Import paths updated correctly.

The namespace updates are clean and consistent.

apps/web/components/page-settings/notifications.tsx (1)

1-2: LGTM! Import paths updated correctly.

The namespace updates are consistent with the refactoring effort.

apps/web/pages/pages/[page_id]/edit.tsx (1)

1-1: LGTM! Import path updated correctly.

The namespace update is consistent with the broader refactoring.

apps/page/pages/api/auth/request-magic-link.ts (1)

2-2: LGTM! Import path updated correctly.

The namespace update is clean and consistent.

apps/page/pages/api/auth/verify-magic-link.ts (2)

1-1: LGTM! Import path updated correctly.

The namespace update is consistent with the refactoring effort.


1-1: Package namespace migration (@changes-page → @changespage) is complete.

Verification confirms no references to the old @changes-page namespace remain in the codebase. All package.json files, internal dependencies, and imports (including the file under review) use the new @changespage namespace consistently.

apps/web/components/dialogs/ai-prood-read-dialog.component.tsx (1)

2-2: LGTM - Import path updated correctly.

The namespace change from @changes-page/ui to @changespage/ui is applied correctly.

apps/web/pages/api/integrations/zapier/trigger-new-post.tsx (1)

1-3: LGTM - Import paths updated correctly.

All three imports have been consistently updated to the new @changespage namespace.

apps/web/pages/pages/[page_id]/[post_id].tsx (1)

1-1: LGTM - Import path updated correctly.

apps/web/pages/pages/[page_id]/index.tsx (1)

1-2: LGTM - Import paths updated correctly.

Both imports have been consistently updated to use the new @changespage namespace.

apps/page/lib/url.ts (1)

1-1: LGTM - Import path updated correctly.

apps/web/components/entity/empty-state.tsx (1)

1-1: LGTM - Import path updated correctly.

apps/page/lib/notifications.ts (1)

2-3: LGTM - Import paths updated correctly.

Both imports have been consistently updated to the new @changespage namespace.

apps/web/components/page-settings/social-links.tsx (2)

4-5: LGTM - Import paths updated correctly.

Both imports have been consistently updated to use the new @changespage namespace.


4-5: Namespace rename is complete. The search for @changes-page references across the codebase returned no matches in source files (TypeScript, JavaScript, JSON). The imports in the file already reflect the new @changespage namespace, and no updates to package.json or tsconfig configurations are required.

apps/web/pages/api/integrations/github/webhook.ts (1)

22-22: LGTM! Consistent with package namespace renaming.

The bot mention string has been correctly updated to reflect the new @changespage naming convention, consistent with the broader package renaming effort across this PR.

apps/web/inngest/email/send-roadmap-triage-notification.ts (1)

1-1: LGTM! Import path updated correctly.

The import path has been correctly updated to use the new @changespage package namespace.

apps/page/pages/api/latest.ts (1)

1-2: LGTM! Import paths updated correctly.

Both import paths have been correctly updated to use the new @changespage package namespace.

apps/web/components/page-settings/integrations.tsx (1)

1-2: LGTM! Import paths updated correctly.

Both import paths have been correctly updated to use the new @changespage package namespace.

apps/web/pages/api/integrations/github/installations.ts (1)

1-2: LGTM! Import paths updated correctly.

Both import paths have been correctly updated to use the new @changespage package namespace.

apps/web/pages/api/posts/webhook.ts (1)

1-2: LGTM! Import paths updated correctly.

Both import paths have been correctly updated to use the new @changespage package namespace.

apps/web/pages/api/teams/member/[id]/index.ts (1)

1-1: LGTM! Import path updated correctly.

The import path has been correctly updated to use the new @changespage package namespace.

apps/docs/package.json (1)

2-2: Namespace refactoring verified as complete.

The package name has been correctly updated to use the new @changespage namespace. Verification confirms all internal package references have been updated accordingly and no remaining references to the old @changes-page scope exist in the codebase.

apps/page/components/seo-tags.tsx (1)

5-5: LGTM! Clean namespace migration.

The import path update from @changes-page to @changespage is correct and consistent with the broader package namespace refactoring.

apps/web/components/roadmap/TriageRow.tsx (1)

1-1: LGTM! Namespace update is correct.

The import path change aligns with the package scope migration from @changes-page to @changespage.

apps/page/components/reactions.tsx (1)

1-1: LGTM! Import path correctly updated.

The namespace change from @changes-page to @changespage is consistent with the broader refactoring.

apps/web/pages/api/pages/settings/index.ts (1)

1-1: LGTM! Namespace migration applied correctly.

The import path update is consistent with the package scope refactoring.

apps/web/pages/api/integrations/github/action-new-post.tsx (1)

1-2: LGTM! Multiple import paths updated correctly.

Both import statements have been properly migrated from @changes-page to @changespage namespace.

apps/web/pages/api/pages/settings/remove-domain.ts (1)

1-1: LGTM! Admin import path correctly updated.

The namespace change from @changes-page to @changespage is properly applied.

apps/web/pages/api/pages/new.ts (1)

1-1: LGTM! Import path correctly migrated.

The namespace update from @changes-page to @changespage is consistent with the refactoring.

apps/web/pages/pages/[page_id]/audit-logs.tsx (2)

1-3: LGTM! Multiple package imports correctly updated.

All three import statements have been properly migrated from @changes-page to @changespage namespace, covering supabase, ui, and utils packages.


1-3: Verify complete migration across the codebase.

Since this is a systematic namespace refactoring, ensure all references to the old @changes-page namespace have been updated throughout the codebase, including package.json files, tsconfig paths, and any documentation.

apps/web/components/marketing/changelog.tsx (1)

1-1: LGTM!

The import path update from @changes-page to @changespage is correct and aligns with the package namespace migration.

apps/page/components/post.tsx (1)

1-2: LGTM!

All import path updates from @changes-page to @changespage are correct and consistent across static and dynamic imports.

Also applies to: 16-17

apps/page/components/footer.tsx (1)

1-1: LGTM!

The import path update is correct and consistent with the namespace migration.

apps/web/components/roadmap/types.ts (1)

5-5: LGTM!

The import path update for the roadmap types is correct.

apps/page/tailwind.config.js (1)

8-8: LGTM!

The Tailwind content path update correctly references the renamed UI package, ensuring proper class detection during build.

apps/web/components/forms/page-form.component.tsx (1)

5-6: LGTM!

Both import path updates are correct and align with the package namespace migration.

apps/web/components/page-settings/style.tsx (1)

1-3: LGTM!

All three import path updates are correct and consistent with the package namespace migration.

apps/page/components/page-header.tsx (2)

1-1: LGTM!

The import path update is correct and consistent with the namespace migration.


1-1: Namespace migration is complete.

Verification confirms all references to the old @changes-page namespace have been successfully updated to @changespage throughout the codebase, including source files, configuration files, and package manifests.

apps/web/pages/api/pages/settings/webhook.ts (1)

1-1: LGTM! Import path updated correctly.

The namespace change from @changes-page to @changespage is applied correctly and aligns with the broader package restructuring in this PR.

apps/web/pages/api/storage/get-mime-type.ts (1)

3-3: LGTM! Import path updated correctly.

The namespace change is consistent with the package restructuring across the repository.

apps/page/pages/api/roadmap/submit-triage.ts (1)

2-2: LGTM! Import path updated correctly.

The namespace change is consistent with the package restructuring. The supabaseAdmin usage aligns with the documented pattern for roadmap triage items.

apps/page/package.json (1)

2-2: LGTM! Package renamed consistently.

The package name and all workspace dependencies have been updated correctly from @changes-page to @changespage, maintaining workspace references.

Also applies to: 15-17

apps/web/pages/api/integrations/zapier/action-new-post.tsx (1)

1-2: LGTM! Import paths updated correctly.

The namespace changes are consistent with the package restructuring across the repository.

apps/web/package.json (1)

2-2: LGTM! Package renamed and React SDK dependency added.

The package name has been updated consistently, and the new @changespage/react workspace dependency aligns with the PR's objective to introduce a React SDK. All workspace references are properly maintained.

Also applies to: 15-18

apps/web/pages/changelog.tsx (1)

20-89: Well-structured changelog page implementation.

The component properly leverages the new React SDK with:

  • SSG with ISR (24-hour revalidation) for optimal performance
  • Client-side pagination with proper loading states
  • Clean separation of concerns using the render props pattern

The implementation integrates well with existing layout components and follows Next.js best practices.

apps/web/components/roadmap/RoadmapItemModal.tsx (1)

4-4: Import path updated correctly.

The package namespace change from @changes-page to @changespage is applied correctly.

apps/web/components/post/post-status.tsx (1)

1-1: Import path updated correctly.

The package namespace change is applied correctly for the PostStatus type import.

apps/web/components/post/post.tsx (1)

9-11: Import paths updated correctly.

All three import statements have been updated consistently to use the @changespage namespace.

apps/web/components/roadmap/RoadmapColumn.tsx (1)

1-1: Import path updated correctly.

The package namespace change is applied correctly.

apps/web/components/post/post-options.tsx (1)

1-1: Import path updated correctly.

The package namespace change is applied correctly.

apps/web/components/roadmap/hooks/useRoadmapItems.ts (1)

4-4: Import path updated correctly.

The package namespace change is applied correctly.

apps/web/components/roadmap/RoadmapBoard.tsx (1)

6-6: Import path updated correctly.

The package namespace change is applied correctly for all roadmap type imports.

apps/web/components/roadmap/RoadmapItem.tsx (1)

1-1: Import path updated correctly.

The package namespace change is applied correctly for the utils import.

apps/page/pages/api/posts.ts (1)

1-3: LGTM on import path updates.

The namespace change from @changes-page to @changespage is consistent with the broader refactoring in this PR.

apps/page/pages/api/json.ts (4)

13-20: LGTM on type definitions.

Clean type definitions for the versioned API responses with proper union types for error handling in V2.


48-51: V1 silently swallows errors and returns 200 with empty array.

Returning HTTP 200 with an empty array on error makes it impossible for clients to distinguish between "no posts exist" and "something went wrong." Consider whether this is intentional for backwards compatibility or if V1 should also return proper error status codes.


65-73: Good error handling with distinct 404 responses.

V2 properly returns 404 status codes with descriptive error messages for missing page/settings, improving upon V1's approach.


97-110: LGTM on version routing logic.

Clean header-based API versioning with sensible default to V1 for backwards compatibility.

apps/page/lib/data.ts (3)

1-10: LGTM on import path updates.

The namespace change from @changes-page to @changespage is consistent across all imports.


444-469: Well-implemented pagination function.

The implementation correctly:

  • Caps the limit to PAGINATION_LIMIT to prevent excessive data fetching
  • Defaults offset to 0 for the first page
  • Uses correct inclusive range calculation for Supabase
  • Follows the same error handling pattern as fetchPosts

471-479: Verify that exposing translateHostToPageIdentifier publicly is intentional.

This function was previously internal (not exported). Exposing it as a public API increases the module's surface area. Ensure this is intentional for the React SDK use case.

apps/page/pages/api/roadmap/votes.ts (1)

1-1: LGTM! Import path updated correctly.

The import path change from @changes-page to @changespage aligns with the PR's package namespace refactor.

apps/page/pages/api/roadmap/vote.ts (1)

1-1: Import path already uses correct @changespage scope.

The file imports @changespage/supabase/admin, which matches the package definition in ./packages/supabase/package.json. Verify this file was actually modified in the PR, as no previous @changes-page references exist in the codebase to confirm an import path change occurred.

Copy link

@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: 2

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e0d38be and ac49b49.

📒 Files selected for processing (1)
  • apps/web/pages/changelog.tsx (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
apps/web/pages/changelog.tsx (3)
apps/web/components/layout/header.component.tsx (1)
  • HeaderComponent (20-324)
apps/page/tests/page.spec.js (1)
  • posts (32-32)
apps/web/components/layout/footer.component.tsx (1)
  • FooterComponent (80-227)

@vercel vercel bot temporarily deployed to Preview – changes-page-docs December 19, 2025 10:59 Inactive
@vercel vercel bot temporarily deployed to Preview – user-changes-page December 19, 2025 10:59 Inactive
@arjunkomath arjunkomath merged commit c1534db into develop Dec 19, 2025
3 of 4 checks passed
@arjunkomath arjunkomath deleted the feat/react-sdk branch December 19, 2025 10:59
@arjunkomath
Copy link
Member Author

@changespage Draft a post announcing React SDK

@changes-page
Copy link

changes-page bot commented Dec 19, 2025

📝 Changelog draft created!

Created a changelog announcing the new React SDK that provides ready-made components and hooks to embed changelogs, posts, reactions and subscriptions into React apps.

View and edit your draft →

Once you're happy with it, you can publish it from the dashboard.

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