Skip to content

feat: add dynamic published resume URLs to sitemap#963

Open
codewithchotu wants to merge 117 commits into
Muneerali199:mainfrom
codewithchotu:feature/dynamic-sitemap
Open

feat: add dynamic published resume URLs to sitemap#963
codewithchotu wants to merge 117 commits into
Muneerali199:mainfrom
codewithchotu:feature/dynamic-sitemap

Conversation

@codewithchotu

Copy link
Copy Markdown
Contributor

Summary

This PR enhances sitemap generation by including dynamically published resume URLs in addition to existing static routes.

Changes Made

  • Converted app/sitemap.ts to an async sitemap generator.
  • Retained all existing static SEO routes.
  • Added dynamic fetching of published resumes from Supabase.
  • Included /r/[subdomain] URLs in the generated sitemap.
  • Added graceful error handling so sitemap generation falls back to static routes if database access fails.

Benefits

  • Improves discoverability of public resume pages.
  • Helps search engines index user-generated public content.
  • Keeps sitemap generation resilient in case of database issues.

Testing

  • Verified application builds and runs successfully with npm run dev.
  • Confirmed sitemap generation works with static routes.
  • Verified dynamic resume URLs are included when published resume records exist.

codewithchotu and others added 30 commits May 29, 2026 16:46
…neerali199#537)

- Fixed Next.js version: 14.2 badge and tech stack table to match package.json 14.2.30
- Standardized environment file: .env to .env.local for NextAuth convention
- Clarified AI provider: Gemini marked as required, removed Mistral confusion
- Updated CONTRIBUTING.md: Next.js 15 to 14.2 and AI provider clarity
…cs exposure (Muneerali199#533)

Co-authored-by: Prapti <prapti123@gmail.com>
…Muneerali199#550) (Muneerali199#551)

Adds the missing rel attribute on 12 external links across the web app
and browser extension to mitigate reverse-tabnabbing, where an opened
page can hijack window.opener and redirect the original tab.

Affected:
- app/diagnostic/page.tsx (Stripe Dashboard link)
- components/sponsor-banner.tsx (Team Blitz sponsor link)
- extension/popup.html (footer link)
- extension/settings.html (9 API provider key/docs links)

Closes Muneerali199#550
* fix: force dynamic rendering on API routes to prevent build crash

* fix:remove duplicate dynamic export and move to top of file
* feat: add request-id tracing for API responses

* retrigger CI
* fix: resolve section label cutoff on hover in dark mode

* fix: separate export button animations for PNG and SVG

* chore: remove unrelated resume-navigation changes from export fix PR
…uneerali199#415)

- Add API route at /api/generate/cover-letter-from-resume
- Add CoverLetterFromResume UI component with resume, JD, and tone inputs
- Add page at /letter/cover-letter-from-resume
- Reuses existing lib/gemini.ts client, no new dependencies
* feat: implement consistent sanitization with reusable helper

* feat: implement standardized rate limiting utility

* fix(config): resolve TS5103 compile error and remove deprecated isolatedModules option

---------

Co-authored-by: Prapti <prapti123@gmail.com>
…199#461) (Muneerali199#475)

* fix: add authentication to unauthenticated AI routes (fixes Muneerali199#461)

- Add Bearer token auth check + supabaseAdmin.getUser() to:
  - app/api/ai/enhance-content/route.ts
  - app/api/ai/generate-template/route.ts
  - app/api/campaign/generate/route.ts
  - app/api/generate/guided-resume/route.ts
  - app/api/generate/presentation-full/route.ts
  - app/api/generate/resume-guidance/route.ts
- Add credit deduction (ACTION_COSTS.resume) to guided-resume
- Fix enhance-content catch block returning 200 on AI failure → 500
- Fix deprecated model gemini-1.5-flash → gemini-2.0-flash in enhance-content

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: distinguish upstream auth failures from invalid token errors in enhance-content

- 503 for authError with status >= 500 or network-level failures (timeout, ECONNREFUSED)
- 401 for invalid/expired token client errors
- 401 when user is null with no authError

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* Updated Syntax Issue

* Patch to Prevent ReactDevtools in Prod. Builds
…ilities Muneerali199#554 (Muneerali199#559)

* fix(security): implement targeted package overrides to patch vulnerabilities Muneerali199#554

* fix: correct override pins - lodash 4.18.1, dompurify 3.4.3, undici 6.24.0, remove all carets
…ession() (Muneerali199#558)

Both AIResumeChat and ATSScoreDisplay were reading a key
('supabase_token') that is never written anywhere in the codebase,
causing every API call to send 'Authorization: Bearer null' and
silently fail. Replaced with the project-standard supabase.auth.getSession()
pattern used across the rest of the codebase.
* Add AI resume bullet enhancer

* Address bullet enhancer review feedback

---------

Co-authored-by: Saurabh Kumar Bajpai <saurabhkumarbajpaiai@Saurabhs-MacBook-Air.local>
aaniya22 and others added 20 commits May 29, 2026 16:49
…ed promise (fixes Muneerali199#760)

* fix: await dispatchErrorAlert and captureException to handle unhandled promise (closes Muneerali199#699)

* fix: add timeout and response.ok check to Slack webhook fetch

* fix: correct indentation in Slack fetch block
fixes Muneerali199#708)

* refactor(share): extract share logic to hook and clean up debug console logs

* fix(validation): restore sanitizeObject helper function to resolve compilation errors

* fix(validation): remove duplicate sanitizeObject definition

* fix(tests): align validation tests with current schema and error message API
…hing (fixes Muneerali199#605)

* perf: add query timing instrumentation to resume generate route

* perf: add in-memory query cache and consolidate credits fetch across all generate routes

* perf: batch parallel queries with Promise.all, add DataLoader, make log writes fire-and-forget

* fix: address CodeRabbit review — enforce cache size limit, handle insert race, fix action_type column name

* fix: address remaining CodeRabbit review — missing cache invalidation, success rate masking, outlineOnly credit reconciliation

* docs: add JSDoc docstrings to exported functions in query-cache, cached-queries, batch-loader

* fix: validate standard-letter payload before credit lookup in letter route

* fix: add jest-environment node directive to query-cache tests
…i199#778)

* feat: add post-creation multi-template switcher (Muneerali199#430)

- Add new TemplateSwitcher component (components/resume/template-switcher.tsx)
  - Desktop: 4-column grid with expand/collapse toggle
  - Mobile: horizontal snap-scroll strip (compact mode)
  - Color palette dots, template name, category badge per card
  - Active template highlighted with yellow border + checkmark
  - PRO templates badged
- Integrate TemplateSwitcher in resume-generator.tsx
  - Added below ResumePreview in both Smart Builder (guided) and Quick Generate tabs
- Integrate TemplateSwitcher in mobile-resume-builder.tsx
  - Added compact strip between TextColorPanel and download buttons in preview step
- Content state (resumeData) is fully independent from selectedTemplate
  - No field loss during template switching
  - Selected template persists for exports and auto-save

Closes Muneerali199#430

* feat: animate preview with fade-in on template switch (Muneerali199#430)

- Add previewKey state (bumped on each switch) as React key on preview wrapper
- Add handleTemplateSwitch callback that updates selectedTemplate + previewKey
- Add @Keyframes fade-in and .animate-fade-in utility to globals.css
- Preview fades in smoothly (0.25s ease-out) whenever template changes
- No content loss — only presentation layer transitions

* feat: show toast confirmation on template switch (Muneerali199#430)

- Import useToast hook in TemplateSwitcher
- Add handleSelect() wrapper: fires toast then delegates to onSelectTemplate
- Toast message: 'Template applied ✨ — Switched to "{name}". Your content is unchanged.'
- No-op guard: if user clicks already-selected template, no toast fires
- Both MobileTemplateCard and DesktopTemplateCard now use handleSelect

* feat: persist selected template to localStorage in resume-generator (Muneerali199#430)

- Initialize selectedTemplate from localStorage key 'draftdeck:selectedTemplate'
- Lazy useState initializer — SSR-safe (typeof window check)
- handleTemplateSwitch now writes new id to localStorage on every switch
- Users returning to the generator keep their last-used template
- Fixes acceptance criterion: 'Selected template persists for future edits/exports'

* feat: persist selected template to localStorage in mobile-resume-builder (Muneerali199#430)

- Same localStorage key 'draftdeck:selectedTemplate' as desktop generator
- SSR-safe lazy useState initializer with typeof window guard
- setSelectedTemplate wrapper writes to localStorage on every update
- Mobile and desktop flows now share the same persisted template preference
- Returning mobile users land on their last-used template automatically

* feat: add category filter chips to desktop TemplateSwitcher (Muneerali199#430)

- Derive unique categories from RESUME_ONLY at module level (CATEGORIES constant)
- Add activeCategory state (default 'All') to TemplateSwitcher
- Render pill/chip buttons above the desktop grid for each category
- Active chip highlighted with yellow border and bg
- Selecting a chip resets isExpanded to false and filters the grid
- Compact (mobile) strip is unaffected — shows all templates as before
- Allows users to quickly narrow down templates by role/style (Tech, Academic, etc.)

* feat: add ARIA accessibility attributes to TemplateSwitcher (Muneerali199#430)

- Root div: role='region' + aria-label='Resume template switcher'
- Grid wrappers (desktop + mobile): role='listbox' + aria-label='Resume templates'
- Each template card button: role='option', aria-selected={isSelected}
- Card aria-label: '{Template Name} template (currently selected)' when active
- Category chips: aria-label='Filter by {cat} templates' + aria-pressed
- Screen readers can now announce template switching and selection state
- Full keyboard navigation preserved via existing focus-visible:ring styles

* docs: add JSDoc, architecture notes, and test matrix to TemplateSwitcher (Muneerali199#430)

- Expanded file-level JSDoc block in template-switcher.tsx
- Architecture section documents state ownership, fade-animation mechanism,
  toast wrapper, and localStorage persistence strategy
- Acceptance Criteria section maps each issue Muneerali199#430 requirement to its implementation
- Test Matrix covers 8 scenarios: switch on desktop/mobile, no-op guard, category
  filter, page reload persistence, PDF export, field edit safety, screen reader
- Fulfils PR review requirement from @Muneerali199: 'include a short test matrix
  in the PR: template switch + save + reopen + export'
…i199#779)

* fix(auth): block external redirects in callback

Signed-off-by: Prashant Parmar <prashantparmar9919@gmail.com>

* fix(test): stabilize redirect utility typings

Signed-off-by: Prashant Parmar <prashantparmar9919@gmail.com>

---------

Signed-off-by: Prashant Parmar <prashantparmar9919@gmail.com>
…uneerali199#784)

The existing in-memory BoundedCache works well for single-instance
deployments but is not shared across multiple server instances, so
cached data is duplicated or inconsistent under horizontal scaling.

This change adds an optional Redis backend powered by Upstash Redis
(serverless-friendly, no persistent connection required) while
preserving full backward compatibility via an environment-based fallback.

New files:
- lib/cache-redis.ts: RedisCache class implementing the same interface
  as BoundedCache (get, set, delete, invalidateByTag, invalidateByPrefix,
  flush). Tag-based invalidation uses Redis Sets to track which keys
  carry each tag. Prefix-based invalidation uses SCAN to avoid blocking
  the Redis server. All operations catch and log errors rather than
  crashing, so a Redis outage degrades gracefully.

Changes to lib/cache.ts:
- Imports RedisCache and isRedisConfigured() from lib/cache-redis.ts.
- Exports distributedCache: when UPSTASH_REDIS_URL and UPSTASH_REDIS_TOKEN
  are both present it returns a RedisCache instance; otherwise it falls
  back to the existing in-memory cache singleton.

Changes to .env.example:
- Documents UPSTASH_REDIS_URL and UPSTASH_REDIS_TOKEN with setup
  instructions and a note that they are optional.

Dependencies:
- Adds @upstash/redis (the official Upstash REST-API client).

Closes Muneerali199#724
Adds 84 tests across 5 new test files to increase coverage of core lib
utilities that previously had no direct test coverage.

File-by-file breakdown:
- __tests__/lib/cache.test.ts (17 tests): BoundedCache get/set/delete,
  TTL expiry with fake timers, invalidateByTag (single and multi-tag),
  invalidateByPrefix, LRU eviction at max capacity, flush, size tracking,
  and memoizeAsync (cache hits, different keys, TTL re-execution).
- __tests__/lib/logger.test.ts (13 tests): test-mode suppression, dev-mode
  per-level console routing (info/warn/error/debug), context serialization,
  Error object serialization, production JSON-structured output, debug
  suppression in prod, and withContext() binding.
- __tests__/lib/security.test.ts (19 tests): checkRateLimit allow/block/
  sliding-window reset, independent identifier tracking, isAllowedOrigin
  (null, same-host, draftdeckai.com, untrusted, localhost in dev),
  getSecurityHeaders (CSP directives form-action and frame-ancestors,
  HSTS presence in prod vs dev), and validateEnvironmentVariables.
- __tests__/lib/error-handler.test.ts (17 tests): AppError subclass
  hierarchy (status codes, isOperational), captureException (return shape,
  count accumulation, recent errors list, plain Error fallback),
  dispatchErrorAlert, getEndpointSummaries, and resetDashboardStats.
- __tests__/lib/api-handler.test.ts (18 tests): AppError subclass hierarchy,
  apiHandler wrapper success path (response passthrough, X-Request-Id header,
  preset header passthrough), and error-path status code mapping for all
  error types.

Closes Muneerali199#733
…Muneerali199#782)

Before this change, the Content-Security-Policy was defined in three
separate places -- next.config.js, middleware.ts (missing entirely),
and netlify.toml -- with inconsistent directive sets. This created
security gaps depending on which layer processed a given request.

Changes:
- lib/csp.ts: canonical TypeScript module exporting CSP_DIRECTIVES
  (array) and CSP_HEADER (joined string). Each directive is documented
  with an inline comment explaining why it is needed.
- lib/csp.mjs: JavaScript ES-module companion so next.config.js (which
  runs in Node.js before TS compilation) can import the same values.
- next.config.js: imports CSP_HEADER from lib/csp.mjs instead of
  defining an inline string.
- middleware.ts: imports CSP_HEADER from lib/csp.ts and adds it to the
  secHdrs() helper, so page routes now receive the same policy that
  next.config.js delivers for static routes.
- netlify.toml: CSP value synced to match lib/csp.ts; added a comment
  marking the block as a manual mirror of the canonical module.

Directives added vs. the previous next.config.js CSP:
- form-action 'self': prevents reflected-input attacks via form redirect.
- frame-ancestors 'none': blocks clickjacking (equivalent to X-Frame-Options DENY).
- https://plausible.io in script-src: Plausible analytics script was
  already loaded in layout.tsx but was not whitelisted.

Closes Muneerali199#735
@netlify

netlify Bot commented Jun 6, 2026

Copy link
Copy Markdown

👷 Deploy request for docmagic1 pending review.

Visit the deploys page to approve it

Name Link
🔨 Latest commit 9af737e

@netlify

netlify Bot commented Jun 6, 2026

Copy link
Copy Markdown

👷 Deploy request for docmagic-muneer pending review.

Visit the deploys page to approve it

Name Link
🔨 Latest commit 9af737e

@vercel

vercel Bot commented Jun 6, 2026

Copy link
Copy Markdown

@codewithchotu is attempting to deploy a commit to the muneerali199's projects Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai

coderabbitai Bot commented Jun 6, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 300 files, which is 150 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 04db9c5d-39ad-40cb-9d92-221c97242a58

📥 Commits

Reviewing files that changed from the base of the PR and between e576101 and 9af737e.

📒 Files selected for processing (300)
  • .dockerignore
  • .env.example
  • .eslintrc.json
  • .gitguardian.yml
  • .github/pull_request_template.md
  • .gitignore
  • CONTRIBUTING.md
  • Dockerfile
  • ERROR_HANDLING.md
  • FAQ.md
  • IMPLEMENTATION_SUMMARY.md
  • README.md
  • SUPPORT.md
  • __tests__/api-versioning/deprecation.test.ts
  • __tests__/api-versioning/version-router.test.ts
  • __tests__/lib/api-handler.test.ts
  • __tests__/lib/cache.test.ts
  • __tests__/lib/credit-operations.test.ts
  • __tests__/lib/error-handler.test.ts
  • __tests__/lib/logger.test.ts
  • __tests__/lib/security.test.ts
  • __tests__/lib/validation.test.ts
  • app/about/page.tsx
  • app/api/__tests__/auth-regression.test.ts
  • app/api/ai/enhance-content/route.ts
  • app/api/ai/generate-template/route.ts
  • app/api/ai/text-to-latex/route.ts
  • app/api/analytics/[documentId]/route.ts
  • app/api/analytics/route.ts
  • app/api/analytics/track/route.ts
  • app/api/analyze-ats/route.ts
  • app/api/analyze/resume/route.ts
  • app/api/auth/register/route.ts
  • app/api/campaign/extract-brand/route.ts
  • app/api/campaign/generate/route.ts
  • app/api/credits/route.ts
  • app/api/documents/[id]/improve/route.ts
  • app/api/documents/[id]/route.ts
  • app/api/documents/[id]/versions/route.ts
  • app/api/documents/create-from-template/route.ts
  • app/api/documents/export/route.ts
  • app/api/documents/latex/route.ts
  • app/api/documents/route.ts
  • app/api/error-dashboard/route.ts
  • app/api/error-test/route.ts
  • app/api/extract-job/route.ts
  • app/api/extract-resume-text/route.ts
  • app/api/fetch-url-content/route.ts
  • app/api/generate-presentation-stream/route.ts
  • app/api/generate/cover-letter-from-resume/route.ts
  • app/api/generate/diagram/route.ts
  • app/api/generate/guided-resume/route.ts
  • app/api/generate/letter/route.ts
  • app/api/generate/modify-presentation/route.ts
  • app/api/generate/presentation-full/route.ts
  • app/api/generate/presentation-outline/route.ts
  • app/api/generate/presentation/route.ts
  • app/api/generate/resume-guidance/route.ts
  • app/api/generate/resume/route.ts
  • app/api/generate/slide-image/route.ts
  • app/api/generate/website/route.ts
  • app/api/health/route.ts
  • app/api/jobs/ranking/route.ts
  • app/api/latex/compile/route.ts
  • app/api/linkedin/import-pdf/route.ts
  • app/api/linkedin/import-url/route.ts
  • app/api/linkedin/parse-profile/route.ts
  • app/api/linkedin/parse-text/route.ts
  • app/api/logs/errors/route.ts
  • app/api/metrics/route.ts
  • app/api/pdf-preview/[filename]/route.ts
  • app/api/pdf-to-image/route.ts
  • app/api/portfolio-hub/route.ts
  • app/api/presentations/[id]/route.ts
  • app/api/presentations/regenerate-image/route.ts
  • app/api/presentations/route.ts
  • app/api/proxy-image/route.ts
  • app/api/referral/route.ts
  • app/api/resume/ats-score/route.ts
  • app/api/resume/enhance-bullet/route.ts
  • app/api/resume/generate-smart/route.ts
  • app/api/resume/improve/route.ts
  • app/api/resume/publish/route.ts
  • app/api/resumes/route.ts
  • app/api/search/route.ts
  • app/api/send-email/route.ts
  • app/api/showcase/[id]/engage/route.ts
  • app/api/showcase/[id]/report/route.ts
  • app/api/showcase/[id]/route.ts
  • app/api/showcase/feed/route.ts
  • app/api/showcase/publish/route.ts
  • app/api/stripe/create-checkout-session/route.ts
  • app/api/stripe/create-checkout/route.ts
  • app/api/stripe/create-payment-intent/route.ts
  • app/api/stripe/create-portal-session/route.ts
  • app/api/stripe/create-portal/route.ts
  • app/api/stripe/webhook/route.ts
  • app/api/template-preview/[id]/route.ts
  • app/api/templates/[id]/route.ts
  • app/api/templates/[id]/shares/[shareId]/route.ts
  • app/api/templates/[id]/shares/route.ts
  • app/api/templates/route.ts
  • app/api/v1/documents/route.ts
  • app/api/v1/generate/resume/route.ts
  • app/api/v1/health/route.ts
  • app/api/v2/documents/route.ts
  • app/api/v2/generate/resume/route.ts
  • app/api/v2/health/route.ts
  • app/api/webhooks/stripe/route.ts
  • app/auth/callback/route.ts
  • app/auth/register/page.tsx
  • app/dashboard/analytics/page.tsx
  • app/diagnostic/page.tsx
  • app/diagram/page.tsx
  • app/documentation/page.tsx
  • app/editor/[type]/[id]/page.tsx
  • app/editor/page.tsx
  • app/email-preview/page.tsx
  • app/error.tsx
  • app/global-error.tsx
  • app/globals.css
  • app/layout.tsx
  • app/letter/cover-letter-from-resume/page.tsx
  • app/letter/page.tsx
  • app/page.tsx
  • app/presentation/page.tsx
  • app/presentation/view/[id]/page.tsx
  • app/pricing/page.tsx
  • app/providers.tsx
  • app/r/[subdomain]/page.tsx
  • app/r/[subdomain]/public-resume-client.tsx
  • app/resume-builder/page.tsx
  • app/resume-editor/resume-editor-content.tsx
  • app/resume/page.tsx
  • app/robots.ts
  • app/showcase/page.tsx
  • app/sitemap.ts
  • app/templates/[id]/edit/page.tsx
  • app/templates/[id]/use/page.tsx
  • app/templates/layout.tsx
  • app/templates/page.tsx
  • app/test-ats/page.tsx
  • archive/EXACT_CODE_TO_ADD.txt
  • archive/hii.txt
  • archive/url-feature.patch
  • components/PortfolioHub.tsx
  • components/__tests__/example.test.tsx
  • components/dashboard/analytics-dashboard.tsx
  • components/dashboard/analytics/document-heatmap.tsx
  • components/dashboard/analytics/edit-timeline.tsx
  • components/dashboard/analytics/engagement-table.tsx
  • components/dashboard/analytics/stat-cards.tsx
  • components/dashboard/analytics/suggestions-panel.tsx
  • components/dashboard/analytics/views-chart.tsx
  • components/dashboard/history-dashboard.tsx
  • components/delete-dialog.tsx
  • components/deployment-status-banner.tsx
  • components/diagram/diagram-generator.test.tsx
  • components/diagram/diagram-generator.tsx
  • components/editor/editor-toolbar.tsx
  • components/editor/enhanced-toolbar.test.tsx
  • components/editor/enhanced-toolbar.tsx
  • components/emails/password-reset.tsx
  • components/emails/welcome-email.tsx
  • components/feedback-popup.tsx
  • components/hero-section.tsx
  • components/letter/CoverLetterFromResume.tsx
  • components/letter/letter-dashboard.tsx
  • components/letter/letter-generator.tsx
  • components/letter/letter-preview.tsx
  • components/presentation/presentation-generator.tsx
  • components/presentation/presentation-viewer.tsx
  • components/presentation/real-time-generator.tsx
  • components/pricing/pricing-plans.tsx
  • components/pwa-install-button.tsx
  • components/pwa-update-prompt.tsx
  • components/resume-templates/EditableResume.tsx
  • components/resume/ATSScoreDisplay.tsx
  • components/resume/ai-resume-chat.tsx
  • components/resume/ats-analyzer.tsx
  • components/resume/ats-score-display.tsx
  • components/resume/linkedin-import.tsx
  • components/resume/mobile-resume-builder.tsx
  • components/resume/resume-generator.tsx
  • components/resume/resume-navigation.tsx
  • components/resume/resume-preview.tsx
  • components/resume/template-switcher.tsx
  • components/resume/text-color-panel.tsx
  • components/search/SearchBar.tsx
  • components/showcase/publish-modal.tsx
  • components/showcase/showcase-card.tsx
  • components/showcase/showcase-feed.tsx
  • components/simple-theme-toggle.tsx
  • components/site-header.tsx
  • components/sponsor-banner.tsx
  • components/templates/capability-badge.tsx
  • components/templates/collaboration-panel.tsx
  • components/templates/resume-template-gallery.tsx
  • components/templates/share-template-dialog.tsx
  • components/templates/template-card.tsx
  • components/templates/template-form.tsx
  • components/templates/template-preview-fullscreen.tsx
  • components/testimonials-section.tsx
  • components/theme-toggle.tsx
  • components/ui/Footer.tsx
  • components/ui/button.tsx
  • components/ui/error-boundary.tsx
  • docker-compose.override.yml
  • docker-compose.yml
  • docs/CHANGELOG.md
  • docs/CONTRIBUTING.md
  • docs/Code_of_Conduct.md
  • docs/DEV_CHANGELOG_PDF_FIXES.md
  • docs/FAQ.md
  • docs/SECURITY.md
  • docs/SETUP.md
  • docs/api-versioning.md
  • docs/architecture/ARCHITECTURE_DIAGRAM_FEATURE.md
  • docs/architecture/ARCHITECTURE_IMPROVEMENTS.md
  • docs/architecture/SYSTEM_ARCHITECTURE.md
  • docs/database-setup-guide.md
  • docs/error-tracking-alerting.md
  • docs/features/EnhancedPreview.md
  • docs/features/FixHistoryRevamp.md
  • docs/features/Latex-Integration.md
  • docs/features/PromptAllowAllEmails.md
  • docs/features/Rebranding.md
  • docs/migration-v1-v2.md
  • extension/popup.html
  • extension/settings.html
  • hooks/use-document-analytics.ts
  • hooks/use-engage.ts
  • hooks/use-feed.ts
  • hooks/use-share.ts
  • hooks/use-usage-stats.ts
  • hooks/useErrorHandler.ts
  • hooks/useStreamingPresentation.ts
  • hooks/useTrackEvent.ts
  • hooks/useUTMCapture.ts
  • jest.config.mjs
  • jest.polyfills.cjs
  • lib/__tests__/api-handler.test.ts
  • lib/__tests__/query-cache.test.ts
  • lib/__tests__/redirect-utils.test.ts
  • lib/__tests__/share.test.ts
  • lib/__tests__/validation.test.ts
  • lib/analytics-service.ts
  • lib/api-handler.ts
  • lib/api-versioning/deprecation.ts
  • lib/api-versioning/index.ts
  • lib/api-versioning/types.ts
  • lib/api-versioning/version-router.ts
  • lib/async-utils.ts
  • lib/batch-loader.ts
  • lib/cache-redis.ts
  • lib/cache.ts
  • lib/cached-queries.ts
  • lib/collaboration-service.ts
  • lib/color-contrast.ts
  • lib/credits-service.ts
  • lib/csp.mjs
  • lib/csp.ts
  • lib/documents/export.ts
  • lib/email.ts
  • lib/env.ts
  • lib/error-handler.ts
  • lib/flux-image-generator.ts
  • lib/gemini.ts
  • lib/logger.ts
  • lib/mistral.ts
  • lib/performance-optimizer.ts
  • lib/presentation-export.ts
  • lib/query-cache.ts
  • lib/redirect-utils.ts
  • lib/request-id.ts
  • lib/resource-manager.ts
  • lib/resume-style-colors.ts
  • lib/resume/__tests__/bullet-enhancer.test.ts
  • lib/resume/bullet-enhancer.ts
  • lib/resume/latex-exporter.ts
  • lib/resume/pdf-exporter.tsx
  • lib/search-engine.ts
  • lib/security.ts
  • lib/seo-routes.ts
  • lib/share.ts
  • lib/showcase/cursor.ts
  • lib/showcase/ip.ts
  • lib/showcase/quality.ts
  • lib/showcase/ranking.config.ts
  • lib/showcase/ranking.ts
  • lib/stripe.ts
  • lib/supabase.ts
  • lib/supabase/client.ts
  • lib/supabase/migrations/20260526000000_add_soft_delete_support.sql
  • lib/supabase/server.ts
  • lib/templateCompatibility.ts
  • lib/validate-fetch-url.ts
  • lib/validation.ts
  • lib/validators/aiRequestValidator.ts
  • lib/version-history-service.ts

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@gitguardian

gitguardian Bot commented Jun 6, 2026

Copy link
Copy Markdown

⚠️ GitGuardian has uncovered 4 secrets following the scan of your pull request.

Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.

Since your pull request originates from a forked repository, GitGuardian is not able to associate the secrets uncovered with secret incidents on your GitGuardian dashboard.
Skipping this check run and merging your pull request will create secret incidents on your GitGuardian dashboard.

🔎 Detected hardcoded secrets in your pull request
GitGuardian id GitGuardian status Secret Commit Filename
33098201 Triggered Generic Password 1726fdf lib/tests/validation.test.ts View secret
33127064 Triggered Generic Password 8a796f2 tests/lib/validation.test.ts View secret
33127065 Triggered Generic Password 8a796f2 tests/lib/validation.test.ts View secret
33127066 Triggered Generic Password 8a796f2 tests/lib/validation.test.ts View secret
🛠 Guidelines to remediate hardcoded secrets
  1. Understand the implications of revoking this secret by investigating where it is used in your code.
  2. Replace and store your secrets safely. Learn here the best practices.
  3. Revoke and rotate these secrets.
  4. If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.

To avoid such incidents in the future consider


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

@Muneerali199 Muneerali199 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Review: PR #963 — Sitemap + Massive Unrelated Changes

⚠️ This PR has fundamental issues:

1. Unrelated changes mixed together
The PR title says "sitemap" but it modifies 300+ files adding everything from new API routes (/api/search, /api/portfolio-hub, /api/jobs/ranking, /api/error-dashboard), new tests, new docs (ERROR_HANDLING.md, IMPLEMENTATION_SUMMARY.md), Dockerfile, and more. This should be split into at least 10 separate PRs.

2. Has merge conflicts
Cannot be merged without resolving conflicts first.

3. Deletes FAQ.md and app/api/documents/latex/route.ts
Removing existing files should be justified and done in a separate PR.

4. Too large for meaningful review
27k additions across 100+ files cannot be reviewed properly. Please split into focused, atomic PRs.

Verdict: Changes requested — split into focused PRs and resolve conflicts.

@Muneerali199 Muneerali199 added type:feature PR type: feature level:advanced GSSoC difficulty: advanced gssoc:approved Required GSSoC approval label mentor:muneerali199 Reviewed by mentor muneerali199 labels Jun 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gssoc:approved Required GSSoC approval label level:advanced GSSoC difficulty: advanced mentor:muneerali199 Reviewed by mentor muneerali199 type:feature PR type: feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.