Full Code of vercel/next-forge for AI

main 9aad7123ef8a cached
611 files
1.3 MB
377.5k tokens
783 symbols
1 requests
Download .txt
Showing preview only (1,512K chars total). Download the full file or copy to clipboard to get everything.
Repository: vercel/next-forge
Branch: main
Commit: 9aad7123ef8a
Files: 611
Total size: 1.3 MB

Directory structure:
gitextract_l86r4jct/

├── .autorc
├── .cursorrules.example
├── .github/
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── SECURITY.md
│   ├── copilot-instructions.md.example
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   └── workflows/
│       └── release.yml
├── .gitignore
├── .vscode/
│   ├── extensions.json
│   ├── launch.json
│   └── settings.json
├── CHANGELOG.md
├── README.md
├── apps/
│   ├── api/
│   │   ├── .gitignore
│   │   ├── __tests__/
│   │   │   └── health.test.ts
│   │   ├── app/
│   │   │   ├── cron/
│   │   │   │   └── keep-alive/
│   │   │   │       └── route.ts
│   │   │   ├── global-error.tsx
│   │   │   ├── health/
│   │   │   │   └── route.ts
│   │   │   ├── layout.tsx
│   │   │   └── webhooks/
│   │   │       ├── auth/
│   │   │       │   └── route.ts
│   │   │       └── payments/
│   │   │           └── route.ts
│   │   ├── env.ts
│   │   ├── instrumentation-client.ts
│   │   ├── instrumentation.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── skip-ci.js
│   │   ├── sentry.edge.config.ts
│   │   ├── sentry.server.config.ts
│   │   ├── tsconfig.json
│   │   ├── vercel.json
│   │   └── vitest.config.mts
│   ├── app/
│   │   ├── .gitignore
│   │   ├── __tests__/
│   │   │   ├── sign-in.test.tsx
│   │   │   └── sign-up.test.tsx
│   │   ├── app/
│   │   │   ├── (authenticated)/
│   │   │   │   ├── components/
│   │   │   │   │   ├── avatar-stack.tsx
│   │   │   │   │   ├── collaboration-provider.tsx
│   │   │   │   │   ├── cursors.tsx
│   │   │   │   │   ├── header.tsx
│   │   │   │   │   ├── notifications-provider.tsx
│   │   │   │   │   ├── search.tsx
│   │   │   │   │   └── sidebar.tsx
│   │   │   │   ├── layout.tsx
│   │   │   │   ├── page.tsx
│   │   │   │   ├── search/
│   │   │   │   │   └── page.tsx
│   │   │   │   └── webhooks/
│   │   │   │       └── page.tsx
│   │   │   ├── (unauthenticated)/
│   │   │   │   ├── layout.tsx
│   │   │   │   ├── sign-in/
│   │   │   │   │   └── [[...sign-in]]/
│   │   │   │   │       └── page.tsx
│   │   │   │   └── sign-up/
│   │   │   │       └── [[...sign-up]]/
│   │   │   │           └── page.tsx
│   │   │   ├── .well-known/
│   │   │   │   └── vercel/
│   │   │   │       └── flags/
│   │   │   │           └── route.ts
│   │   │   ├── actions/
│   │   │   │   └── users/
│   │   │   │       ├── get.ts
│   │   │   │       └── search.ts
│   │   │   ├── api/
│   │   │   │   └── collaboration/
│   │   │   │       └── auth/
│   │   │   │           └── route.ts
│   │   │   ├── global-error.tsx
│   │   │   ├── layout.tsx
│   │   │   └── styles.css
│   │   ├── env.ts
│   │   ├── instrumentation-client.ts
│   │   ├── instrumentation.ts
│   │   ├── liveblocks.config.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── proxy.ts
│   │   ├── scripts/
│   │   │   └── skip-ci.js
│   │   ├── sentry.edge.config.ts
│   │   ├── sentry.server.config.ts
│   │   ├── tsconfig.json
│   │   ├── vercel.json
│   │   └── vitest.config.mts
│   ├── docs/
│   │   ├── api-reference/
│   │   │   ├── endpoint/
│   │   │   │   ├── create.mdx
│   │   │   │   ├── delete.mdx
│   │   │   │   └── get.mdx
│   │   │   ├── introduction.mdx
│   │   │   └── openapi.json
│   │   ├── development.mdx
│   │   ├── essentials/
│   │   │   ├── code.mdx
│   │   │   ├── images.mdx
│   │   │   ├── markdown.mdx
│   │   │   ├── navigation.mdx
│   │   │   ├── reusable-snippets.mdx
│   │   │   └── settings.mdx
│   │   ├── introduction.mdx
│   │   ├── mint.json
│   │   ├── package.json
│   │   ├── quickstart.mdx
│   │   └── snippets/
│   │       └── snippet-intro.mdx
│   ├── email/
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── storybook/
│   │   ├── .storybook/
│   │   │   ├── main.ts
│   │   │   ├── preview-head.html
│   │   │   └── preview.tsx
│   │   ├── README.md
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── scripts/
│   │   │   └── skip-ci.js
│   │   ├── stories/
│   │   │   ├── accordion.stories.tsx
│   │   │   ├── alert-dialog.stories.tsx
│   │   │   ├── alert.stories.tsx
│   │   │   ├── aspect-ratio.stories.tsx
│   │   │   ├── avatar.stories.tsx
│   │   │   ├── badge.stories.tsx
│   │   │   ├── breadcrumb.stories.tsx
│   │   │   ├── button.stories.tsx
│   │   │   ├── calendar.stories.tsx
│   │   │   ├── card.stories.tsx
│   │   │   ├── carousel.stories.tsx
│   │   │   ├── chart.stories.tsx
│   │   │   ├── checkbox.stories.tsx
│   │   │   ├── collapsible.stories.tsx
│   │   │   ├── command.stories.tsx
│   │   │   ├── context-menu.stories.tsx
│   │   │   ├── dialog.stories.tsx
│   │   │   ├── drawer.stories.tsx
│   │   │   ├── dropdown-menu.stories.tsx
│   │   │   ├── form.stories.tsx
│   │   │   ├── hover-card.stories.tsx
│   │   │   ├── input-otp.stories.tsx
│   │   │   ├── input.stories.tsx
│   │   │   ├── label.stories.tsx
│   │   │   ├── menubar.stories.tsx
│   │   │   ├── navigation-menu.stories.tsx
│   │   │   ├── pagination.stories.tsx
│   │   │   ├── popover.stories.tsx
│   │   │   ├── progress.stories.tsx
│   │   │   ├── radio-group.stories.tsx
│   │   │   ├── resizable.stories.tsx
│   │   │   ├── scroll-area.stories.tsx
│   │   │   ├── select.stories.tsx
│   │   │   ├── separator.stories.tsx
│   │   │   ├── sheet.stories.tsx
│   │   │   ├── sidebar.stories.tsx
│   │   │   ├── skeleton.stories.tsx
│   │   │   ├── slider.stories.tsx
│   │   │   ├── sonner.stories.tsx
│   │   │   ├── switch.stories.tsx
│   │   │   ├── table.stories.tsx
│   │   │   ├── tabs.stories.tsx
│   │   │   ├── textarea.stories.tsx
│   │   │   ├── toggle-group.stories.tsx
│   │   │   ├── toggle.stories.tsx
│   │   │   └── tooltip.stories.tsx
│   │   ├── tsconfig.json
│   │   └── vercel.json
│   ├── studio/
│   │   ├── package.json
│   │   └── tsconfig.json
│   └── web/
│       ├── .gitignore
│       ├── app/
│       │   ├── .well-known/
│       │   │   └── vercel/
│       │   │       └── flags/
│       │   │           └── route.ts
│       │   └── [locale]/
│       │       ├── (home)/
│       │       │   ├── components/
│       │       │   │   ├── cases.tsx
│       │       │   │   ├── cta.tsx
│       │       │   │   ├── faq.tsx
│       │       │   │   ├── features.tsx
│       │       │   │   ├── hero.tsx
│       │       │   │   ├── stats.tsx
│       │       │   │   └── testimonials.tsx
│       │       │   └── page.tsx
│       │       ├── blog/
│       │       │   ├── [slug]/
│       │       │   │   └── page.tsx
│       │       │   └── page.tsx
│       │       ├── components/
│       │       │   ├── footer.tsx
│       │       │   └── header/
│       │       │       ├── index.tsx
│       │       │       └── language-switcher.tsx
│       │       ├── contact/
│       │       │   ├── actions/
│       │       │   │   └── contact.tsx
│       │       │   ├── components/
│       │       │   │   └── contact-form.tsx
│       │       │   └── page.tsx
│       │       ├── global-error.tsx
│       │       ├── layout.tsx
│       │       ├── legal/
│       │       │   ├── [slug]/
│       │       │   │   └── page.tsx
│       │       │   └── layout.tsx
│       │       ├── pricing/
│       │       │   └── page.tsx
│       │       ├── robots.ts
│       │       ├── sitemap.ts
│       │       └── styles.css
│       ├── components/
│       │   └── sidebar.tsx
│       ├── env.ts
│       ├── instrumentation-client.ts
│       ├── instrumentation.ts
│       ├── next.config.ts
│       ├── package.json
│       ├── postcss.config.mjs
│       ├── proxy.ts
│       ├── scripts/
│       │   └── skip-ci.js
│       ├── sentry.edge.config.ts
│       ├── sentry.server.config.ts
│       ├── tsconfig.json
│       └── vercel.json
├── biome.jsonc
├── docs/
│   ├── .gitignore
│   ├── README.md
│   ├── app/
│   │   ├── [lang]/
│   │   │   ├── (home)/
│   │   │   │   ├── components/
│   │   │   │   │   ├── apps/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── cta.tsx
│   │   │   │   │   ├── demo.tsx
│   │   │   │   │   ├── features/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── hero.tsx
│   │   │   │   │   ├── installer.tsx
│   │   │   │   │   ├── social.tsx
│   │   │   │   │   └── video.tsx
│   │   │   │   ├── layout.tsx
│   │   │   │   └── page.tsx
│   │   │   ├── docs/
│   │   │   │   ├── [[...slug]]/
│   │   │   │   │   └── page.tsx
│   │   │   │   └── layout.tsx
│   │   │   ├── layout.tsx
│   │   │   ├── llms.mdx/
│   │   │   │   └── [[...slug]]/
│   │   │   │       └── route.ts
│   │   │   ├── llms.txt/
│   │   │   │   └── route.ts
│   │   │   ├── og/
│   │   │   │   └── [...slug]/
│   │   │   │       └── route.tsx
│   │   │   ├── rss.xml/
│   │   │   │   └── route.ts
│   │   │   └── sitemap.md/
│   │   │       └── route.ts
│   │   ├── actions/
│   │   │   └── feedback/
│   │   │       ├── emotions.ts
│   │   │       └── index.ts
│   │   ├── api/
│   │   │   ├── chat/
│   │   │   │   ├── route.ts
│   │   │   │   ├── tools.ts
│   │   │   │   ├── types.ts
│   │   │   │   └── utils.ts
│   │   │   └── search/
│   │   │       └── route.ts
│   │   ├── global.css
│   │   ├── robots.ts
│   │   ├── sitemap.ts
│   │   └── styles/
│   │       └── geistdocs.css
│   ├── components/
│   │   ├── ai-elements/
│   │   │   ├── code-block.tsx
│   │   │   ├── conversation.tsx
│   │   │   ├── message.tsx
│   │   │   ├── open-in-chat.tsx
│   │   │   ├── prompt-input.tsx
│   │   │   ├── shimmer.tsx
│   │   │   ├── sources.tsx
│   │   │   └── suggestion.tsx
│   │   ├── geistdocs/
│   │   │   ├── ask-ai.tsx
│   │   │   ├── callout.tsx
│   │   │   ├── chat.tsx
│   │   │   ├── code-block-tabs.tsx
│   │   │   ├── code-block.tsx
│   │   │   ├── copy-chat.tsx
│   │   │   ├── copy-page.tsx
│   │   │   ├── desktop-menu.tsx
│   │   │   ├── docs-layout.tsx
│   │   │   ├── docs-page.tsx
│   │   │   ├── edit-source.tsx
│   │   │   ├── feedback.tsx
│   │   │   ├── footer.tsx
│   │   │   ├── github-button.tsx
│   │   │   ├── home-layout.tsx
│   │   │   ├── icons.tsx
│   │   │   ├── installer.tsx
│   │   │   ├── language-selector.tsx
│   │   │   ├── mdx-components.tsx
│   │   │   ├── mermaid.tsx
│   │   │   ├── message-metadata.tsx
│   │   │   ├── mobile-menu.tsx
│   │   │   ├── navbar.tsx
│   │   │   ├── open-in-chat.tsx
│   │   │   ├── provider.tsx
│   │   │   ├── rss-button.tsx
│   │   │   ├── scroll-top.tsx
│   │   │   ├── search.tsx
│   │   │   ├── sidebar.tsx
│   │   │   ├── theme-toggle.tsx
│   │   │   └── video.tsx
│   │   ├── ui/
│   │   │   ├── badge.tsx
│   │   │   ├── button-group.tsx
│   │   │   ├── button.tsx
│   │   │   ├── card.tsx
│   │   │   ├── collapsible.tsx
│   │   │   ├── command.tsx
│   │   │   ├── dialog.tsx
│   │   │   ├── drawer.tsx
│   │   │   ├── dropdown-menu.tsx
│   │   │   ├── hover-card.tsx
│   │   │   ├── input-group.tsx
│   │   │   ├── input.tsx
│   │   │   ├── kbd.tsx
│   │   │   ├── navigation-menu.tsx
│   │   │   ├── popover.tsx
│   │   │   ├── scroll-area.tsx
│   │   │   ├── select.tsx
│   │   │   ├── separator.tsx
│   │   │   ├── sheet.tsx
│   │   │   ├── sonner.tsx
│   │   │   ├── spinner.tsx
│   │   │   ├── textarea.tsx
│   │   │   └── tooltip.tsx
│   │   └── vercel.tsx
│   ├── components.json
│   ├── content/
│   │   └── docs/
│   │       ├── addons/
│   │       │   ├── c15t.mdx
│   │       │   ├── dub.mdx
│   │       │   ├── fuse.mdx
│   │       │   ├── joyful.mdx
│   │       │   ├── metabase.mdx
│   │       │   ├── motion.mdx
│   │       │   ├── next-safe-action.mdx
│   │       │   ├── nuqs.mdx
│   │       │   ├── react-wrap-balancer.mdx
│   │       │   ├── trunk.mdx
│   │       │   └── zustand.mdx
│   │       ├── apps/
│   │       │   ├── api.mdx
│   │       │   ├── app.mdx
│   │       │   ├── docs.mdx
│   │       │   ├── email.mdx
│   │       │   ├── storybook.mdx
│   │       │   ├── studio.mdx
│   │       │   └── web.mdx
│   │       ├── deployment/
│   │       │   ├── docker.mdx
│   │       │   ├── netlify.mdx
│   │       │   └── vercel.mdx
│   │       ├── examples/
│   │       │   └── ai-chatbot.mdx
│   │       ├── faq.mdx
│   │       ├── index.mdx
│   │       ├── meta.json
│   │       ├── migrations/
│   │       │   ├── authentication/
│   │       │   │   ├── appwrite.mdx
│   │       │   │   ├── authjs.mdx
│   │       │   │   ├── better-auth.mdx
│   │       │   │   └── supabase.mdx
│   │       │   ├── cms/
│   │       │   │   └── content-collections.mdx
│   │       │   ├── database/
│   │       │   │   ├── appwrite.mdx
│   │       │   │   ├── convex.mdx
│   │       │   │   ├── drizzle.mdx
│   │       │   │   ├── edgedb.mdx
│   │       │   │   ├── planetscale.mdx
│   │       │   │   ├── prisma-postgres.mdx
│   │       │   │   ├── supabase.mdx
│   │       │   │   └── turso.mdx
│   │       │   ├── documentation/
│   │       │   │   └── fumadocs.mdx
│   │       │   ├── flags/
│   │       │   │   └── hypertune.mdx
│   │       │   ├── formatting/
│   │       │   │   └── eslint.mdx
│   │       │   ├── notifications/
│   │       │   │   └── novu.mdx
│   │       │   ├── payments/
│   │       │   │   ├── lemon-squeezy.mdx
│   │       │   │   └── paddle.mdx
│   │       │   └── storage/
│   │       │       ├── appwrite.mdx
│   │       │       └── upload-thing.mdx
│   │       ├── packages/
│   │       │   ├── analytics/
│   │       │   │   ├── product.mdx
│   │       │   │   └── web.mdx
│   │       │   ├── authentication.mdx
│   │       │   ├── cms/
│   │       │   │   ├── components.mdx
│   │       │   │   ├── meta.json
│   │       │   │   ├── metadata.mdx
│   │       │   │   └── overview.mdx
│   │       │   ├── collaboration.mdx
│   │       │   ├── cron.mdx
│   │       │   ├── database.mdx
│   │       │   ├── design-system/
│   │       │   │   ├── colors.mdx
│   │       │   │   ├── components.mdx
│   │       │   │   ├── dark-mode.mdx
│   │       │   │   ├── meta.json
│   │       │   │   ├── provider.mdx
│   │       │   │   └── typography.mdx
│   │       │   ├── email.mdx
│   │       │   ├── flags.mdx
│   │       │   ├── formatting.mdx
│   │       │   ├── internationalization.mdx
│   │       │   ├── meta.json
│   │       │   ├── next-config/
│   │       │   │   ├── bundle-analysis.mdx
│   │       │   │   ├── meta.json
│   │       │   │   └── overview.mdx
│   │       │   ├── notifications.mdx
│   │       │   ├── observability/
│   │       │   │   ├── debugging.mdx
│   │       │   │   ├── error-capture.mdx
│   │       │   │   ├── logging.mdx
│   │       │   │   └── uptime.mdx
│   │       │   ├── payments.mdx
│   │       │   ├── security/
│   │       │   │   ├── application.mdx
│   │       │   │   ├── dependencies.mdx
│   │       │   │   ├── headers.mdx
│   │       │   │   ├── ip-geolocation.mdx
│   │       │   │   └── rate-limiting.mdx
│   │       │   ├── seo/
│   │       │   │   ├── json-ld.mdx
│   │       │   │   ├── meta.json
│   │       │   │   ├── metadata.mdx
│   │       │   │   └── sitemap.mdx
│   │       │   ├── storage.mdx
│   │       │   ├── toolbar.mdx
│   │       │   └── webhooks/
│   │       │       ├── inbound.mdx
│   │       │       └── outbound.mdx
│   │       ├── philosophy.mdx
│   │       ├── setup/
│   │       │   ├── env.mdx
│   │       │   ├── installation.mdx
│   │       │   ├── meta.json
│   │       │   ├── prerequisites.mdx
│   │       │   └── quickstart.mdx
│   │       ├── structure.mdx
│   │       └── updates.mdx
│   ├── geistdocs.tsx
│   ├── hooks/
│   │   ├── geistdocs/
│   │   │   ├── use-chat.ts
│   │   │   └── use-sidebar.ts
│   │   └── use-mobile.ts
│   ├── lib/
│   │   ├── geistdocs/
│   │   │   ├── db.ts
│   │   │   ├── fonts.ts
│   │   │   ├── i18n.ts
│   │   │   ├── md-tracking.ts
│   │   │   └── source.ts
│   │   └── utils.ts
│   ├── next.config.ts
│   ├── package.json
│   ├── postcss.config.mjs
│   ├── proxy.ts
│   ├── source.config.ts
│   ├── tsconfig.json
│   └── turbo.json
├── license.md
├── package.json
├── packages/
│   ├── ai/
│   │   ├── components/
│   │   │   ├── message.tsx
│   │   │   └── thread.tsx
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── lib/
│   │   │   ├── models.ts
│   │   │   └── react.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── analytics/
│   │   ├── index.ts
│   │   ├── instrumentation-client.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── provider.tsx
│   │   ├── server.ts
│   │   └── tsconfig.json
│   ├── auth/
│   │   ├── client.ts
│   │   ├── components/
│   │   │   ├── sign-in.tsx
│   │   │   └── sign-up.tsx
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── provider.tsx
│   │   ├── proxy.ts
│   │   ├── server.ts
│   │   └── tsconfig.json
│   ├── cms/
│   │   ├── basehub-types.d.ts
│   │   ├── basehub.config.ts
│   │   ├── components/
│   │   │   ├── body.tsx
│   │   │   ├── code-block.tsx
│   │   │   ├── feed.tsx
│   │   │   ├── image.tsx
│   │   │   ├── toc.tsx
│   │   │   └── toolbar.tsx
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── next-config.ts
│   │   ├── package.json
│   │   ├── tsconfig.json
│   │   └── typescript-config.json
│   ├── collaboration/
│   │   ├── auth.ts
│   │   ├── config.ts
│   │   ├── hooks.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── room.tsx
│   │   └── tsconfig.json
│   ├── database/
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   └── schema.prisma
│   │   ├── prisma.config.ts
│   │   └── tsconfig.json
│   ├── design-system/
│   │   ├── components/
│   │   │   ├── mode-toggle.tsx
│   │   │   └── ui/
│   │   │       ├── accordion.tsx
│   │   │       ├── alert-dialog.tsx
│   │   │       ├── alert.tsx
│   │   │       ├── aspect-ratio.tsx
│   │   │       ├── avatar.tsx
│   │   │       ├── badge.tsx
│   │   │       ├── breadcrumb.tsx
│   │   │       ├── button-group.tsx
│   │   │       ├── button.tsx
│   │   │       ├── calendar.tsx
│   │   │       ├── card.tsx
│   │   │       ├── carousel.tsx
│   │   │       ├── chart.tsx
│   │   │       ├── checkbox.tsx
│   │   │       ├── collapsible.tsx
│   │   │       ├── command.tsx
│   │   │       ├── context-menu.tsx
│   │   │       ├── dialog.tsx
│   │   │       ├── drawer.tsx
│   │   │       ├── dropdown-menu.tsx
│   │   │       ├── empty.tsx
│   │   │       ├── field.tsx
│   │   │       ├── form.tsx
│   │   │       ├── hover-card.tsx
│   │   │       ├── input-group.tsx
│   │   │       ├── input-otp.tsx
│   │   │       ├── input.tsx
│   │   │       ├── item.tsx
│   │   │       ├── kbd.tsx
│   │   │       ├── label.tsx
│   │   │       ├── menubar.tsx
│   │   │       ├── navigation-menu.tsx
│   │   │       ├── pagination.tsx
│   │   │       ├── popover.tsx
│   │   │       ├── progress.tsx
│   │   │       ├── radio-group.tsx
│   │   │       ├── resizable.tsx
│   │   │       ├── scroll-area.tsx
│   │   │       ├── select.tsx
│   │   │       ├── separator.tsx
│   │   │       ├── sheet.tsx
│   │   │       ├── sidebar.tsx
│   │   │       ├── skeleton.tsx
│   │   │       ├── slider.tsx
│   │   │       ├── sonner.tsx
│   │   │       ├── spinner.tsx
│   │   │       ├── switch.tsx
│   │   │       ├── table.tsx
│   │   │       ├── tabs.tsx
│   │   │       ├── textarea.tsx
│   │   │       ├── toggle-group.tsx
│   │   │       ├── toggle.tsx
│   │   │       └── tooltip.tsx
│   │   ├── components.json
│   │   ├── hooks/
│   │   │   └── use-mobile.ts
│   │   ├── index.tsx
│   │   ├── lib/
│   │   │   ├── fonts.ts
│   │   │   └── utils.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── providers/
│   │   │   └── theme.tsx
│   │   ├── styles/
│   │   │   └── globals.css
│   │   └── tsconfig.json
│   ├── email/
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── templates/
│   │   │   └── contact.tsx
│   │   └── tsconfig.json
│   ├── feature-flags/
│   │   ├── access.ts
│   │   ├── components/
│   │   │   └── toolbar.tsx
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── lib/
│   │   │   ├── create-flag.ts
│   │   │   └── toolbar.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── internationalization/
│   │   ├── dictionaries/
│   │   │   ├── de.json
│   │   │   ├── en.json
│   │   │   ├── es.json
│   │   │   ├── fr.json
│   │   │   ├── pt.json
│   │   │   └── zh.json
│   │   ├── index.ts
│   │   ├── languine.json
│   │   ├── package.json
│   │   ├── proxy.ts
│   │   └── tsconfig.json
│   ├── next-config/
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── notifications/
│   │   ├── components/
│   │   │   ├── provider.tsx
│   │   │   └── trigger.tsx
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── styles.css
│   │   └── tsconfig.json
│   ├── observability/
│   │   ├── client.ts
│   │   ├── edge.ts
│   │   ├── error.ts
│   │   ├── instrumentation.ts
│   │   ├── keys.ts
│   │   ├── log.ts
│   │   ├── next-config.ts
│   │   ├── package.json
│   │   ├── server.ts
│   │   ├── status/
│   │   │   ├── index.tsx
│   │   │   └── types.ts
│   │   └── tsconfig.json
│   ├── payments/
│   │   ├── ai.ts
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── rate-limit/
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   └── package.json
│   ├── security/
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── proxy.ts
│   │   └── tsconfig.json
│   ├── seo/
│   │   ├── json-ld.tsx
│   │   ├── metadata.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── storage/
│   │   ├── client.ts
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── typescript-config/
│   │   ├── base.json
│   │   ├── nextjs.json
│   │   ├── package.json
│   │   └── react-library.json
│   └── webhooks/
│       ├── index.ts
│       ├── keys.ts
│       ├── lib/
│       │   └── svix.ts
│       ├── package.json
│       └── tsconfig.json
├── scripts/
│   ├── index.ts
│   ├── initialize.ts
│   ├── update.ts
│   └── utils.ts
├── skills/
│   └── next-forge/
│       ├── SKILL.md
│       └── references/
│           ├── architecture.md
│           ├── customization.md
│           ├── packages.md
│           └── setup.md
├── tsconfig.json
├── tsup.config.ts
├── turbo/
│   └── generators/
│       ├── config.ts
│       ├── package.json
│       └── templates/
│           ├── package.json.hbs
│           └── tsconfig.json.hbs
└── turbo.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .autorc
================================================
{
  "plugins": [["npm", { "setRcToken": false }], "first-time-contributor", "released"],
  "owner": "vercel",
  "repo": "next-forge",
  "name": "Hayden Bleasel",
  "email": "hello@haydenbleasel.com"
}


================================================
FILE: .cursorrules.example
================================================
# [PROJECT NAME]

## PROJECT DESCRIPTION
- [PROJECT DESCRIPTION - What is the goal of the project? What is the purpose of the project?]

## AI AGENT ROLE
- [AI AGENT ROLE - What is the role of the AI agent? What is the goal of the AI agent? Example ↴]
- You are a senior software engineer with great experience in [PROJECT LANGUAGE] and [PROJECT TECHNOLOGY].
- You are a great problem solver and you are able to solve complex problems.

## CODING STYLE AND STRUCTURE
- [How do you want the agent to write the code? What is the coding style and structure?]
- Prefer iteration and modularization over code duplication
- Use descriptive variable names with auxiliary verbs
- Write concise, technical TypeScript code with accurate examples

## Error Handling
- [How do you want the agent to handle errors?]
- Implement proper error boundaries
- Log errors appropriately for debugging
- Provide user-friendly error messages
- Handle network failures gracefully

## Testing
- [How do you want the agent to handle testing?]
- Write unit tests for utilities and components
- Implement E2E tests for critical flows
- Test across different Chrome versions
- Test memory usage and performance

## Security
- [How do you want the agent to handle security?]
- Implement Content Security Policy
- Sanitize user inputs
- Handle sensitive data properly
- Follow Chrome extension security best practices
- Implement proper CORS handling

================================================
FILE: .github/CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
  overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
  advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
vercel.com/contact.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior,  harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.


================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing to This Project

Thank you for your interest in contributing! This document outlines the process for contributing to our project.

## Getting Started

1. Fork the repository
2. Create a new branch for your feature or bug fix: `git checkout -b feature/your-feature-name`
3. Make your changes
4. Test your changes thoroughly
5. Commit your changes with clear, descriptive commit messages
6. Push to your fork
7. Submit a Pull Request

## Pull Request Guidelines

- Ensure your PR addresses a specific issue or adds value to the project
- Include a clear description of the changes
- Keep changes focused and atomic
- Follow existing code style and conventions
- Include tests if applicable
- Update documentation as needed
- Ensure your PR follows the [project's philosophy](/docs/overview.mdx)

## Code Style

- Follow the existing code formatting in the project (ensure you have Biome installed)
- Write clear, self-documenting code
- Add comments only when necessary to explain complex logic
- Use meaningful variable and function names

## Reporting Issues

- Use the GitHub issue tracker
- Check if the issue already exists before creating a new one
- Provide a clear description of the issue
- Include steps to reproduce if applicable
- Add relevant labels

## Questions or Need Help?

Feel free to open an issue for questions or join our discussions. We're here to help!

## Code of Conduct

Please note that this project follows a Code of Conduct. By participating, you are expected to uphold this code.

Thank you for contributing!


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**next-forge version**
I am using version ...

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Desktop (please complete the following information):**
 - OS: [e.g. MacOS]
 - Browser [e.g. chrome v130, safari]


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.


================================================
FILE: .github/SECURITY.md
================================================
# Security Policy

## Supported Versions

Currently, only the latest on `main` branch is supported with security updates.

## Reporting a Vulnerability

To report a vulnerability, open a new issue.


================================================
FILE: .github/copilot-instructions.md.example
================================================
# Copilot Guidelines

This project <PROJECT_NAME> uses <TECH_STACK>.

## Project Structure
Structure of how project files are setup. Making changes to files should be in their respected file.
```
| App       | Description                                                                 |
|-----------|-----------------------------------------------------------------------------|
| api       | Contains serverless functions designed to run separately from the main app e.g. webhooks and cron jobs. |
| app       | The main application, featuring a shadcn/ui template.                      |
| docs      | The documentation, which contains the documentation for the app e.g. guides and tutorials. |
| email     | The email preview server from react.email.                                 |
| storybook | The storybook, which contains the storybook for the app.                   |
| studio    | Prisma Studio, which is a graphical editor for the database.              |
| web       | The website, featuring a twblocks template.                                |
```

## Nesting
- Avoid deeply nested code. Break down logic into smaller functions.
- Opening curly braces should be on the same line as the statement.

## Error Handling
- Always catch a specific error instead of a generic one.
- Log the error message and stack trace.



================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:

  # Maintain dependencies for GitHub Actions
  - package-ecosystem: "github-actions"
    directory: "/"
    open-pull-requests-limit: 10
    schedule:
      interval: "monthly"

  # Maintain dependencies for npm
  - package-ecosystem: "npm"
    directories:
      - "/"
      - "/apps/*"
      - "/packages/*"
    open-pull-requests-limit: 10
    schedule:
      interval: "monthly"


================================================
FILE: .github/pull_request_template.md
================================================
## Description

Please provide a brief description of the changes introduced in this pull request.

## Related Issues

Closes #<issue_number>

## Checklist

- [ ] My code follows the code style of this project.
- [ ] I have performed a self-review of my code.
- [ ] I have commented my code, particularly in hard-to-understand areas.
- [ ] I have updated the documentation, if necessary.
- [ ] I have added tests that prove my fix is effective or my feature works.
- [ ] New and existing tests pass locally with my changes.

## Screenshots (if applicable)

<!-- Add screenshots to help explain your changes, especially if this is a UI-related PR. -->

## Additional Notes

<!-- Add any additional information or context about the pull request here. -->


================================================
FILE: .github/workflows/release.yml
================================================
name: Release

on:
  push:
    branches: [main]

permissions:
  contents: write
  pull-requests: write
  id-token: write

jobs:
  release:
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message, 'ci skip') && !contains(github.event.head_commit.message, 'skip ci')"
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Prepare repository
        run: git fetch --unshallow --tags

      - name: Install Node.js
        uses: actions/setup-node@v6
        with:
          node-version: '22'
          registry-url: 'https://registry.npmjs.org'

      - name: Update npm
        run: npm install -g npm@latest

      - name: Setup Bun
        uses: oven-sh/setup-bun@v2

      - name: Install dependencies
        run: bun install

      - name: Build CLI
        run: bunx tsup

      - name: Create Release
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: npx auto shipit


================================================
FILE: .gitignore
================================================
# Created by https://www.toptal.com/developers/gitignore/api/macos,windows,node,nextjs,vercel,turbo,storybookjs,react
# Edit at https://www.toptal.com/developers/gitignore?templates=macos,windows,node,nextjs,vercel,turbo,storybookjs,react

### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon


# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

### macOS Patch ###
# iCloud generated files
*.icloud

### NextJS ###
# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# local env files
.env*.local

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts

### Node ###
# Logs
logs
*.log
lerna-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# Snowpack dependency directory (https://snowpack.dev/)
web_modules/

# TypeScript cache

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional stylelint cache
.stylelintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache

# Next.js build output
.next
out

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# vuepress v2.x temp and cache directory
.temp

# Docusaurus cache and generated files
.docusaurus

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

# Stores VSCode versions used for testing VSCode extensions
.vscode-test

# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*

### Node Patch ###
# Serverless Webpack directories
.webpack/

# Optional stylelint cache

# SvelteKit build / generate output
.svelte-kit

### react ###
.DS_*
**/*.backup.*
**/*.back.*

node_modules

*.sublime*

psd
thumb
sketch

### StorybookJs ###
# gitignore template for the Storybook, UI guide for front apps
# website: https://storybook.js.org/

storybook-static/

### Turbo ###
# Turborepo task cache
.turbo

### Vercel ###

### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db

# Dump file
*.stackdump

# Folder config file
[Dd]esktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp

# Windows shortcuts
*.lnk

# End of https://www.toptal.com/developers/gitignore/api/macos,windows,node,nextjs,vercel,turbo,storybookjs,react

# Sentry Config File
.env.sentry-build-plugin

# AI Rules
.cursorrules
.github/copilot-instructions.md

# Database
packages/database/generated

# react.email
.react-email

# Sentry
.sentryclirc

# Documentation
.contentlayer
.content-collections
.source

================================================
FILE: .vscode/extensions.json
================================================
{
  "recommendations": [
    "biomejs.biome",
    "bradlc.vscode-tailwindcss",
    "Prisma.prisma",
    "unifiedjs.vscode-mdx",
    "mikestead.dotenv",
    "christian-kohler.npm-intellisense"
  ]
}


================================================
FILE: .vscode/launch.json
================================================
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Next.js: debug server-side",
      "type": "node-terminal",
      "request": "launch",
      "command": "bun dev"
    },
    {
      "name": "Next.js: debug client-side (app)",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:3000"
    },
    {
      "name": "Next.js: debug client-side (web)",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:3001"
    },
    {
      "name": "Next.js: debug client-side (api)",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:3002"
    },
    {
      "name": "Next.js: debug client-side (email)",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:3003"
    },
    {
      "name": "Next.js: debug client-side (app)",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:3004"
    },
    {
      "name": "Next.js: debug client-side (studio)",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:3005"
    },
    {
      "name": "Next.js: debug full stack",
      "type": "node",
      "request": "launch",
      "program": "${workspaceFolder}/node_modules/.bin/next",
      "runtimeArgs": ["--inspect"],
      "skipFiles": ["<node_internals>/**"],
      "serverReadyAction": {
        "action": "debugWithEdge",
        "killOnServerStop": true,
        "pattern": "- Local:.+(https?://.+)",
        "uriFormat": "%s",
        "webRoot": "${workspaceFolder}"
      }
    }
  ]
}


================================================
FILE: .vscode/settings.json
================================================
{
  "[javascript]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[json]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[jsonc]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[typescript]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[typescriptreact]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "editor.codeActionsOnSave": {
    "source.fixAll.biome": "explicit"
  },
  "editor.defaultFormatter": "biomejs.biome",
  "editor.formatOnPaste": true,
  "editor.formatOnSave": true,
  "emmet.showExpandedAbbreviation": "never",
  "prettier.enable": false,
  "typescript.tsdk": "node_modules/typescript/lib",
  "tailwindCSS.experimental.configFile": "packages/design-system/styles/globals.css"
}


================================================
FILE: CHANGELOG.md
================================================
# v6.0.2 (Fri Mar 20 2026)

:tada: This release contains work from a new contributor! :tada:

Thank you, Sam Gutentag ([@samgutentag](https://github.com/samgutentag)), for all your work!

#### 🐛 Bug Fix

- Feat/trunk integration [#735](https://github.com/vercel/next-forge/pull/735) ([@samgutentag](https://github.com/samgutentag) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Sam Gutentag ([@samgutentag](https://github.com/samgutentag))

---

# v6.0.1 (Mon Mar 16 2026)

:tada: This release contains work from new contributors! :tada:

Thanks for all your work!

:heart: Kaylee ([@KayleeWilliams](https://github.com/KayleeWilliams))

:heart: James Singleton ([@JamesSingleton](https://github.com/JamesSingleton))

#### 🐛 Bug Fix

- Add c15t addon [#728](https://github.com/vercel/next-forge/pull/728) ([@KayleeWilliams](https://github.com/KayleeWilliams))
- chore(docs): update and rename friendlier-words.mdx to joyful.mdx [#731](https://github.com/vercel/next-forge/pull/731) ([@JamesSingleton](https://github.com/JamesSingleton))

#### Authors: 2

- James Singleton ([@JamesSingleton](https://github.com/JamesSingleton))
- Kaylee ([@KayleeWilliams](https://github.com/KayleeWilliams))

---

# v6.0.0 (Fri Mar 13 2026)

:tada: This release contains work from new contributors! :tada:

Thanks for all your work!

:heart: Travis Butler ([@dexsnake](https://github.com/dexsnake))

:heart: Rich Haines ([@molebox](https://github.com/molebox))

#### 💥 Breaking Change

- V6 [#688](https://github.com/vercel/next-forge/pull/688) ([@haydenbleasel](https://github.com/haydenbleasel))

#### 🐛 Bug Fix

- fix(docs): use /docs prefix for Supabase Auth migration links in data… [#684](https://github.com/vercel/next-forge/pull/684) ([@dexsnake](https://github.com/dexsnake))
- Add sitemap.md route [#687](https://github.com/vercel/next-forge/pull/687) ([@molebox](https://github.com/molebox))
- Fix React Server Components CVE vulnerabilities [#676](https://github.com/vercel/next-forge/pull/676) ([@vercel[bot]](https://github.com/vercel[bot]) [@haydenbleasel](https://github.com/haydenbleasel))
- Fix React Server Components CVE vulnerabilities [#675](https://github.com/vercel/next-forge/pull/675) ([@vercel[bot]](https://github.com/vercel[bot]) [@haydenbleasel](https://github.com/haydenbleasel))

#### ⚠️ Pushed to `main`

- Remove sed step, setup-node handles OIDC exchange ([@haydenbleasel](https://github.com/haydenbleasel))
- Add registry-url back, update npm, strip authToken for OIDC ([@haydenbleasel](https://github.com/haydenbleasel))
- Remove registry-url to let npm use OIDC directly ([@haydenbleasel](https://github.com/haydenbleasel))
- Normalize repository URL format ([@haydenbleasel](https://github.com/haydenbleasel))
- Add publishConfig for npm OIDC provenance ([@haydenbleasel](https://github.com/haydenbleasel))
- Fix release CI for npm OIDC trusted publishing ([@haydenbleasel](https://github.com/haydenbleasel))
- Update release.yml ([@haydenbleasel](https://github.com/haydenbleasel))
- Update index.ts ([@haydenbleasel](https://github.com/haydenbleasel))

#### 🔩 Dependency Updates

- Bump actions/cache from 4 to 5 [#681](https://github.com/vercel/next-forge/pull/681) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 5

- [@dependabot[bot]](https://github.com/dependabot[bot])
- [@vercel[bot]](https://github.com/vercel[bot])
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Rich Haines ([@molebox](https://github.com/molebox))
- Travis Butler ([@dexsnake](https://github.com/dexsnake))

---

# v5.3.2 (Sat Dec 06 2025)

#### ⚠️ Pushed to `main`

- Update page.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v5.3.1 (Sat Dec 06 2025)

#### ⚠️ Pushed to `main`

- Update page.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v5.3.0 (Sat Dec 06 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Dmytro Pletenskyi ([@ph1losof](https://github.com/ph1losof)), for all your work!

#### 🚀 Enhancement

- Update dependencies [#670](https://github.com/vercel/next-forge/pull/670) ([@haydenbleasel](https://github.com/haydenbleasel))

#### 🐛 Bug Fix

- docs(migrations): fixes middleware configuration for better-auth [#667](https://github.com/vercel/next-forge/pull/667) ([@ph1losof](https://github.com/ph1losof) [@haydenbleasel](https://github.com/haydenbleasel))
- fix: update prisma to 7.0.0 and use prisma-client generator [#663](https://github.com/vercel/next-forge/pull/663) ([@ph1losof](https://github.com/ph1losof))

#### Authors: 2

- Dmytro Pletenskyi ([@ph1losof](https://github.com/ph1losof))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v5.2.4 (Fri Dec 05 2025)

#### 🐛 Bug Fix

- Update packages for React Flight RCE advisory [#669](https://github.com/vercel/next-forge/pull/669) ([@vercel[bot]](https://github.com/vercel[bot]))

#### Authors: 1

- [@vercel[bot]](https://github.com/vercel[bot])

---

# v5.2.3 (Tue Nov 25 2025)

#### 🐛 Bug Fix

- fix: email pkg tsconfig to encompass .ts(x) files [#660](https://github.com/vercel/next-forge/pull/660) ([@karelvuong](https://github.com/karelvuong))

#### Authors: 1

- Karel Vuong ([@karelvuong](https://github.com/karelvuong))

---

# v5.2.2 (Sun Nov 23 2025)

#### ⚠️ Pushed to `main`

- Migrate from React-Markdown to Streamdown ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v5.2.1 (Mon Oct 27 2025)

#### 🐛 Bug Fix

- Bump deps [#648](https://github.com/vercel/next-forge/pull/648) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v5.2.0 (Sat Oct 25 2025)

:tada: This release contains work from new contributors! :tada:

Thanks for all your work!

:heart: Kuizuo ([@kuizuo](https://github.com/kuizuo))

:heart: Ryan ([@rnwolfe](https://github.com/rnwolfe))

:heart: Lakshya Thakur ([@lakbychance](https://github.com/lakbychance))

#### 🚀 Enhancement

- Use improved colors and font for react-tweet [#599](https://github.com/vercel/next-forge/pull/599) ([@lakbychance](https://github.com/lakbychance) [@haydenbleasel](https://github.com/haydenbleasel))

#### 🐛 Bug Fix

- Update Storybook to the latest version [#645](https://github.com/vercel/next-forge/pull/645) ([@kuizuo](https://github.com/kuizuo))
- fix: Refactor PrismaNeon initialization to use PoolConfig instead of Pool directly [#644](https://github.com/vercel/next-forge/pull/644) ([@rnwolfe](https://github.com/rnwolfe))

#### Authors: 4

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Kuizuo ([@kuizuo](https://github.com/kuizuo))
- Lakshya Thakur ([@lakbychance](https://github.com/lakbychance))
- Ryan ([@rnwolfe](https://github.com/rnwolfe))

---

# v5.1.1 (Wed Oct 08 2025)

#### 🐛 Bug Fix

- Update Analytics package [#640](https://github.com/vercel/next-forge/pull/640) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v5.1.0 (Tue Oct 07 2025)

#### 🚀 Enhancement

- Update README.md [#639](https://github.com/vercel/next-forge/pull/639) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v5.0.7 (Tue Oct 07 2025)

#### 🐛 Bug Fix

- 5.1 [#637](https://github.com/vercel/next-forge/pull/637) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v5.0.6 (Mon Oct 06 2025)

#### 🐛 Bug Fix

- fix: knock provider theme [#566](https://github.com/vercel/next-forge/pull/566) ([@jpvalery](https://github.com/jpvalery) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Jp ([@jpvalery](https://github.com/jpvalery))

---

# v5.0.5 (Mon Oct 06 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, null[@jonathanagustin](https://github.com/jonathanagustin), for all your work!

#### 🐛 Bug Fix

- fix: better dark/light support on unauthenticated [#567](https://github.com/vercel/next-forge/pull/567) ([@jpvalery](https://github.com/jpvalery))
- Fix badge image in Metabase docs [#603](https://github.com/vercel/next-forge/pull/603) ([@matthewhefferon](https://github.com/matthewhefferon))
- fix: add missing --dir flag to email build and export scripts [#620](https://github.com/vercel/next-forge/pull/620) ([@jonathanagustin](https://github.com/jonathanagustin))
- upgrade basehub to v9 [#606](https://github.com/vercel/next-forge/pull/606) ([@julianbenegas](https://github.com/julianbenegas))

#### Authors: 4

- [@jonathanagustin](https://github.com/jonathanagustin)
- Jp ([@jpvalery](https://github.com/jpvalery))
- Julian Benegas ([@julianbenegas](https://github.com/julianbenegas))
- Matthew Hefferon ([@matthewhefferon](https://github.com/matthewhefferon))

---

# v5.0.4 (Tue Jul 15 2025)

#### 🐛 Bug Fix

- Improve Metabase integration instructions [#601](https://github.com/vercel/next-forge/pull/601) ([@matthewhefferon](https://github.com/matthewhefferon))

#### Authors: 1

- Matthew Hefferon ([@matthewhefferon](https://github.com/matthewhefferon))

---

# v5.0.3 (Mon Jul 14 2025)

:tada: This release contains work from new contributors! :tada:

Thanks for all your work!

:heart: Karel Vuong ([@karelvuong](https://github.com/karelvuong))

:heart: Choco ([@chocochu](https://github.com/chocochu))

#### 🐛 Bug Fix

- fix: correct google analytics env [#600](https://github.com/vercel/next-forge/pull/600) ([@karelvuong](https://github.com/karelvuong))
- add mobile menu [#574](https://github.com/vercel/next-forge/pull/574) ([@chocochu](https://github.com/chocochu))

#### Authors: 2

- Choco ([@chocochu](https://github.com/chocochu))
- Karel Vuong ([@karelvuong](https://github.com/karelvuong))

---

# v5.0.2 (Thu Jun 05 2025)

#### ⚠️ Pushed to `main`

- Update meta.json ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v5.0.1 (Mon Jun 02 2025)

#### ⚠️ Pushed to `main`

- Fix min-widths ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v5.0.0 (Mon Jun 02 2025)

#### 💥 Breaking Change

- ▲ [#561](https://github.com/vercel/next-forge/pull/561) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.4.5 (Sun Jun 01 2025)

#### ⚠️ Pushed to `main`

- Remove redundant email component ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.4.4 (Mon May 26 2025)

#### ⚠️ Pushed to `main`

- Roll back Prisma updates ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.4.3 (Mon May 26 2025)

#### ⚠️ Pushed to `main`

- Resolves #537 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.4.2 (Sun May 25 2025)

#### ⚠️ Pushed to `main`

- Fix broken links in code ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.4.1 (Sun May 25 2025)

#### ⚠️ Pushed to `main`

- Add link validation script ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #369 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.4.0 (Sun May 25 2025)

#### 🚀 Enhancement

- Migrate docs and landing page to Fumadocs [#548](https://github.com/haydenbleasel/next-forge/pull/548) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.3.2 (Sun May 25 2025)

#### ⚠️ Pushed to `main`

- Update api.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.3.1 (Sun May 25 2025)

#### ⚠️ Pushed to `main`

- Resolves #352 ([@haydenbleasel](https://github.com/haydenbleasel))
- Make webhook endpoint names provider agnostic ([@haydenbleasel](https://github.com/haydenbleasel))
- Skip CI builds ([@haydenbleasel](https://github.com/haydenbleasel))
- Build fixes ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.3.0 (Sun May 25 2025)

#### 🚀 Enhancement

- Bump @prisma/nextjs-monorepo-workaround-plugin from 6.6.0 to 6.7.0 [#534](https://github.com/haydenbleasel/next-forge/pull/534) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @liveblocks/react from 2.22.3 to 2.24.1 [#536](https://github.com/haydenbleasel/next-forge/pull/536) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### 🐛 Bug Fix

- Bump @next/third-parties from 15.3.0 to 15.3.1 [#530](https://github.com/haydenbleasel/next-forge/pull/530) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump recharts from 2.15.2 to 2.15.3 [#532](https://github.com/haydenbleasel/next-forge/pull/532) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @radix-ui/react-menubar from 1.1.7 to 1.1.12 [#535](https://github.com/haydenbleasel/next-forge/pull/535) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 1

- [@dependabot[bot]](https://github.com/dependabot[bot])

---

# v4.2.16 (Tue May 20 2025)

#### ⚠️ Pushed to `main`

- Resolves #516 ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #527 ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #543 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.2.15 (Tue May 20 2025)

#### ⚠️ Pushed to `main`

- Revert Clerk keyless change (not ready for prod) ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #544 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.2.14 (Tue May 20 2025)

#### ⚠️ Pushed to `main`

- Misc fixes ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.2.13 (Tue May 20 2025)

#### ⚠️ Pushed to `main`

- Update vercel.mdx ([@haydenbleasel](https://github.com/haydenbleasel))
- Implement Clerk keyless mode ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.2.12 (Tue May 20 2025)

#### 🐛 Bug Fix

- fix(web): add missing 'mx-auto' on container in BlogPost page - fix #545 [#547](https://github.com/haydenbleasel/next-forge/pull/547) ([@QuentinFrc](https://github.com/QuentinFrc))

#### Authors: 1

- Quentin ([@QuentinFrc](https://github.com/QuentinFrc))

---

# v4.2.11 (Sun May 18 2025)

#### 🐛 Bug Fix

- fix: language switcher [#541](https://github.com/haydenbleasel/next-forge/pull/541) ([@jpvalery](https://github.com/jpvalery))

#### Authors: 1

- Jp ([@jpvalery](https://github.com/jpvalery))

---

# v4.2.10 (Sat May 10 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Quentin ([@QuentinFrc](https://github.com/QuentinFrc)), for all your work!

#### 🐛 Bug Fix

- Enhanced better-auth migration docs [#542](https://github.com/haydenbleasel/next-forge/pull/542) ([@QuentinFrc](https://github.com/QuentinFrc))

#### Authors: 1

- Quentin ([@QuentinFrc](https://github.com/QuentinFrc))

---

# v4.2.9 (Fri May 09 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Jp ([@jpvalery](https://github.com/jpvalery)), for all your work!

#### 🐛 Bug Fix

- fix: metadataBase [#540](https://github.com/haydenbleasel/next-forge/pull/540) ([@jpvalery](https://github.com/jpvalery) [@haydenbleasel](https://github.com/haydenbleasel))
- fix: add success color variable [#538](https://github.com/haydenbleasel/next-forge/pull/538) ([@jpvalery](https://github.com/jpvalery) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Jp ([@jpvalery](https://github.com/jpvalery))

---

# v4.2.8 (Wed Apr 23 2025)

#### 🐛 Bug Fix

- Update Turborepo documentation link. [#526](https://github.com/haydenbleasel/next-forge/pull/526) ([@anthonyshew](https://github.com/anthonyshew))

#### Authors: 1

- Anthony Shew ([@anthonyshew](https://github.com/anthonyshew))

---

# v4.2.7 (Tue Apr 22 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Uma Shankar ([@maverickdude](https://github.com/maverickdude)), for all your work!

#### 🐛 Bug Fix

- Fix a typo in debugging.mdx [#524](https://github.com/haydenbleasel/next-forge/pull/524) ([@maverickdude](https://github.com/maverickdude))

#### Authors: 1

- Uma Shankar ([@maverickdude](https://github.com/maverickdude))

---

# v4.2.6 (Tue Apr 15 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Jan Kuppens ([@JanKups](https://github.com/JanKups)), for all your work!

#### 🐛 Bug Fix

- Fixed Build fails (Storybook) - fresh install #517 [#520](https://github.com/haydenbleasel/next-forge/pull/520) ([@JanKups](https://github.com/JanKups))

#### Authors: 1

- Jan Kuppens ([@JanKups](https://github.com/JanKups))

---

# v4.2.5 (Mon Apr 14 2025)

#### ⚠️ Pushed to `main`

- Update pnpm-lock.yaml ([@haydenbleasel](https://github.com/haydenbleasel))
- Build fixes ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.2.4 (Mon Apr 14 2025)

#### ⚠️ Pushed to `main`

- Remove Prisma client from app ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps except Prisma ([@haydenbleasel](https://github.com/haydenbleasel))
- Update structure.mdx ([@haydenbleasel](https://github.com/haydenbleasel))
- Upgrade shadcn/ui ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.2.3 (Sun Apr 06 2025)

#### ⚠️ Pushed to `main`

- Merge branch 'main' of https://github.com/haydenbleasel/next-forge ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #499 ([@haydenbleasel](https://github.com/haydenbleasel))
- Update shadcn CSS, resolved #438 ([@haydenbleasel](https://github.com/haydenbleasel))
- Fix typo ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.2.2 (Sun Apr 06 2025)

#### ⚠️ Pushed to `main`

- Resolves #501 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v4.2.1 (Sun Apr 06 2025)

#### 🐛 Bug Fix

- Fixed Issue #500 [#513](https://github.com/haydenbleasel/next-forge/pull/513) ([@mathewlewallen](https://github.com/mathewlewallen) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- mathewlewallen ([@mathewlewallen](https://github.com/mathewlewallen))

---

# v4.2.0 (Wed Apr 02 2025)

#### 🚀 Enhancement

- Bump vitest from 3.0.7 to 3.1.1 [#503](https://github.com/haydenbleasel/next-forge/pull/503) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 1

- [@dependabot[bot]](https://github.com/dependabot[bot])

---

# v4.1.0 (Tue Apr 01 2025)

#### 🚀 Enhancement

- Bump shiki from 3.1.0 to 3.2.1 [#504](https://github.com/haydenbleasel/next-forge/pull/504) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 1

- [@dependabot[bot]](https://github.com/dependabot[bot])

---

# v4.0.0 (Tue Apr 01 2025)

#### 💥 Breaking Change

- Bump react-email from 3.0.7 to 4.0.2 [#507](https://github.com/haydenbleasel/next-forge/pull/507) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### 🚀 Enhancement

- Bump @liveblocks/node from 2.20.0 to 2.22.2 [#502](https://github.com/haydenbleasel/next-forge/pull/502) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump react-markdown from 10.0.1 to 10.1.0 [#505](https://github.com/haydenbleasel/next-forge/pull/505) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump fumadocs-core from 15.0.15 to 15.2.1 [#510](https://github.com/haydenbleasel/next-forge/pull/510) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### 🐛 Bug Fix

- Bump @types/node from 22.13.9 to 22.13.14 [#506](https://github.com/haydenbleasel/next-forge/pull/506) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @tailwindcss/postcss from 4.0.12 to 4.0.17 [#508](https://github.com/haydenbleasel/next-forge/pull/508) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @storybook/blocks from 8.6.4 to 8.6.11 [#509](https://github.com/haydenbleasel/next-forge/pull/509) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### ⚠️ Pushed to `main`

- Update pnpm-lock.yaml ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- [@dependabot[bot]](https://github.com/dependabot[bot])
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.3.9 (Tue Mar 25 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, mathewlewallen ([@mathewlewallen](https://github.com/mathewlewallen)), for all your work!

#### 🐛 Bug Fix

- feat: amend internationalization middleware and index. Still uses nex… [#491](https://github.com/haydenbleasel/next-forge/pull/491) ([@mathewlewallen](https://github.com/mathewlewallen) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- mathewlewallen ([@mathewlewallen](https://github.com/mathewlewallen))

---

# v3.3.8 (Wed Mar 19 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Buns Enchantress ([@BunsDev](https://github.com/BunsDev)), for all your work!

#### 🐛 Bug Fix

- fix error: build script in /packages/cms [#492](https://github.com/haydenbleasel/next-forge/pull/492) ([@BunsDev](https://github.com/BunsDev))

#### Authors: 1

- Buns Enchantress ([@BunsDev](https://github.com/BunsDev))

---

# v3.3.7 (Sat Mar 08 2025)

#### ⚠️ Pushed to `main`

- Resolves #316 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.3.6 (Sat Mar 08 2025)

#### 🐛 Bug Fix

- Tailwind 4 [#425](https://github.com/haydenbleasel/next-forge/pull/425) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.3.5 (Sat Mar 08 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, David Bonachera ([@davidbonachera](https://github.com/davidbonachera)), for all your work!

#### 🐛 Bug Fix

- docs: add link to Prisma Database Configuration Guide [#478](https://github.com/haydenbleasel/next-forge/pull/478) ([@haydenbleasel](https://github.com/haydenbleasel) [@davidbonachera](https://github.com/davidbonachera))

#### Authors: 2

- David Bonachera ([@davidbonachera](https://github.com/davidbonachera))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.3.4 (Thu Mar 06 2025)

#### ⚠️ Pushed to `main`

- Fix languages ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.3.3 (Thu Mar 06 2025)

#### 🐛 Bug Fix

- Add more Languine keys [#475](https://github.com/haydenbleasel/next-forge/pull/475) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.3.2 (Thu Mar 06 2025)

#### ⚠️ Pushed to `main`

- For #474 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.3.1 (Wed Mar 05 2025)

#### ⚠️ Pushed to `main`

- Update overview.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.3.0 (Wed Mar 05 2025)

#### 🚀 Enhancement

- Internationalization and Languine [#473](https://github.com/haydenbleasel/next-forge/pull/473) ([@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- Dub [#455](https://github.com/haydenbleasel/next-forge/pull/455) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.28 (Mon Mar 03 2025)

#### 🐛 Bug Fix

- Upgrade deps [#470](https://github.com/haydenbleasel/next-forge/pull/470) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.27 (Wed Feb 26 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Andrés Filoso ([@andresfiloso](https://github.com/andresfiloso)), for all your work!

#### 🐛 Bug Fix

- Add Knock environment variables to .env.example [#457](https://github.com/haydenbleasel/next-forge/pull/457) ([@andresfiloso](https://github.com/andresfiloso))

#### Authors: 1

- Andrés Filoso ([@andresfiloso](https://github.com/andresfiloso))

---

# v3.2.26 (Mon Feb 17 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Justin Barsketis ([@barsketis](https://github.com/barsketis)), for all your work!

#### 🐛 Bug Fix

- Prisma fixes [#452](https://github.com/haydenbleasel/next-forge/pull/452) ([@haydenbleasel](https://github.com/haydenbleasel) [@barsketis](https://github.com/barsketis))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Justin Barsketis ([@barsketis](https://github.com/barsketis))

---

# v3.2.25 (Sun Feb 16 2025)

#### ⚠️ Pushed to `main`

- Update next-config.ts ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.24 (Fri Feb 14 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Dan Billson ([@danbillson](https://github.com/danbillson)), for all your work!

#### 🐛 Bug Fix

- Add 'Switch to Paddle Billing' migration guide [#450](https://github.com/haydenbleasel/next-forge/pull/450) ([@danbillson](https://github.com/danbillson) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Dan Billson ([@danbillson](https://github.com/danbillson))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.23 (Mon Feb 10 2025)

#### ⚠️ Pushed to `main`

- Fix client-side posthog implementation ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.22 (Mon Feb 10 2025)

#### 🐛 Bug Fix

- Upgrade [#447](https://github.com/haydenbleasel/next-forge/pull/447) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.21 (Sun Feb 09 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, YuCheng Chen ([@shamenchens](https://github.com/shamenchens)), for all your work!

#### 🐛 Bug Fix

- feat: Use Link component for sidebar links [#441](https://github.com/haydenbleasel/next-forge/pull/441) ([@shamenchens](https://github.com/shamenchens))

#### ⚠️ Pushed to `main`

- Update to pnpm 10 ([@haydenbleasel](https://github.com/haydenbleasel))

#### 🔩 Dependency Updates

- Bump @storybook/nextjs from 8.5.0 to 8.5.3 [#444](https://github.com/haydenbleasel/next-forge/pull/444) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @radix-ui/react-dropdown-menu from 2.1.5 to 2.1.6 [#445](https://github.com/haydenbleasel/next-forge/pull/445) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the npm_and_yarn group with 2 updates [#446](https://github.com/haydenbleasel/next-forge/pull/446) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump recharts from 2.15.0 to 2.15.1 [#430](https://github.com/haydenbleasel/next-forge/pull/430) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump chromatic from 11.25.0 to 11.25.2 [#428](https://github.com/haydenbleasel/next-forge/pull/428) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @clerk/themes from 2.2.9 to 2.2.16 [#429](https://github.com/haydenbleasel/next-forge/pull/429) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump require-in-the-middle from 7.4.0 to 7.5.0 [#431](https://github.com/haydenbleasel/next-forge/pull/431) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump turbo from 2.3.3 to 2.4.0 [#432](https://github.com/haydenbleasel/next-forge/pull/432) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @next/bundle-analyzer from 15.1.5 to 15.1.6 [#433](https://github.com/haydenbleasel/next-forge/pull/433) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @radix-ui/react-dropdown-menu from 2.1.4 to 2.1.5 [#435](https://github.com/haydenbleasel/next-forge/pull/435) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump basehub from 8.1.1 to 8.1.9 [#436](https://github.com/haydenbleasel/next-forge/pull/436) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @prisma/client from 6.2.1 to 6.3.0 [#437](https://github.com/haydenbleasel/next-forge/pull/437) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 3

- [@dependabot[bot]](https://github.com/dependabot[bot])
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- YuCheng Chen ([@shamenchens](https://github.com/shamenchens))

---

# v3.2.20 (Mon Feb 03 2025)

#### ⚠️ Pushed to `main`

- For #367 ([@haydenbleasel](https://github.com/haydenbleasel))

#### 🔩 Dependency Updates

- Bump the npm_and_yarn group with 2 updates [#423](https://github.com/haydenbleasel/next-forge/pull/423) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 2

- [@dependabot[bot]](https://github.com/dependabot[bot])
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.19 (Tue Jan 28 2025)

:tada: This release contains work from new contributors! :tada:

Thanks for all your work!

:heart: Michal Bock ([@SpeedyCoder](https://github.com/SpeedyCoder))

:heart: Miraan Tabrez ([@miraan](https://github.com/miraan))

#### 🐛 Bug Fix

- Add 'Switch to Hypertune' migration guide [#422](https://github.com/haydenbleasel/next-forge/pull/422) ([@SpeedyCoder](https://github.com/SpeedyCoder) [@miraan](https://github.com/miraan))

#### ⚠️ Pushed to `main`

- Compress images ([@haydenbleasel](https://github.com/haydenbleasel))
- Update hypertune.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 3

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Michal Bock ([@SpeedyCoder](https://github.com/SpeedyCoder))
- Miraan Tabrez ([@miraan](https://github.com/miraan))

---

# v3.2.18 (Tue Jan 21 2025)

#### ⚠️ Pushed to `main`

- Bump deps, fix lockfiles ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.17 (Tue Jan 21 2025)

#### ⚠️ Pushed to `main`

- Resolves #411 ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.16 (Fri Jan 17 2025)

#### 🐛 Bug Fix

- Enhance CLI command - Update [#406](https://github.com/haydenbleasel/next-forge/pull/406) ([@carvillanueva](https://github.com/carvillanueva) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Carlos Villanueva ([@carvillanueva](https://github.com/carvillanueva))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.15 (Thu Jan 16 2025)

#### ⚠️ Pushed to `main`

- Create supportedPackageManagers const ([@haydenbleasel](https://github.com/haydenbleasel))
- Update initialize.ts ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.14 (Thu Jan 16 2025)

#### ⚠️ Pushed to `main`

- For #394 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.13 (Thu Jan 16 2025)

#### ⚠️ Pushed to `main`

- Update website ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.12 (Thu Jan 16 2025)

#### ⚠️ Pushed to `main`

- Misc CLI fixes and improvements ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.11 (Thu Jan 16 2025)

#### 🐛 Bug Fix

- Upgrade cli [#404](https://github.com/haydenbleasel/next-forge/pull/404) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.10 (Wed Jan 15 2025)

#### ⚠️ Pushed to `main`

- Move search package to addon ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.9 (Wed Jan 15 2025)

#### ⚠️ Pushed to `main`

- Merge branch 'main' of https://github.com/haydenbleasel/next-forge ([@haydenbleasel](https://github.com/haydenbleasel))
- Create basic search package ([@haydenbleasel](https://github.com/haydenbleasel))
- Update schema.prisma ([@haydenbleasel](https://github.com/haydenbleasel))
- Fix button hydration issue ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.8 (Wed Jan 15 2025)

#### ⚠️ Pushed to `main`

- Redesign CLI with Ora, fix maxBuffer issue on diff ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.7 (Tue Jan 14 2025)

#### ⚠️ Pushed to `main`

- Fix typo ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.6 (Tue Jan 14 2025)

#### ⚠️ Pushed to `main`

- Resolves #394 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.5 (Tue Jan 14 2025)

#### ⚠️ Pushed to `main`

- Simplify run command ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.4 (Tue Jan 14 2025)

#### ⚠️ Pushed to `main`

- Fix typo, update workspace config in root package.json ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.3 (Tue Jan 14 2025)

#### ⚠️ Pushed to `main`

- Remove CLI defaults, update docs ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.2 (Tue Jan 14 2025)

#### ⚠️ Pushed to `main`

- Fix exists import typo ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.1 (Tue Jan 14 2025)

#### ⚠️ Pushed to `main`

- Resolves #402 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.2.0 (Tue Jan 14 2025)

#### 🚀 Enhancement

- 240 setup cli [#344](https://github.com/haydenbleasel/next-forge/pull/344) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.1.13 (Tue Jan 14 2025)

#### 🐛 Bug Fix

- add basehub to turbo.json's build outputs, plus reorder toolbar [#401](https://github.com/haydenbleasel/next-forge/pull/401) ([@julianbenegas](https://github.com/julianbenegas) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Julian Benegas ([@julianbenegas](https://github.com/julianbenegas))

---

# v3.1.12 (Tue Jan 14 2025)

#### ⚠️ Pushed to `main`

- Restore notification count ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.1.11 (Tue Jan 14 2025)

#### ⚠️ Pushed to `main`

- Merge provider into models ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.1.10 (Tue Jan 14 2025)

#### ⚠️ Pushed to `main`

- Create models file ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.1.9 (Tue Jan 14 2025)

#### 🐛 Bug Fix

- upgrade basehub + hook up legal pages [#400](https://github.com/haydenbleasel/next-forge/pull/400) ([@julianbenegas](https://github.com/julianbenegas))

#### Authors: 1

- Julian Benegas ([@julianbenegas](https://github.com/julianbenegas))

---

# v3.1.8 (Mon Jan 13 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Kuizuo ([@kuizuo](https://github.com/kuizuo)), for all your work!

#### 🐛 Bug Fix

- Imporve document for ESLint configuration [#397](https://github.com/haydenbleasel/next-forge/pull/397) ([@kuizuo](https://github.com/kuizuo) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Kuizuo ([@kuizuo](https://github.com/kuizuo))

---

# v3.1.7 (Sun Jan 12 2025)

#### ⚠️ Pushed to `main`

- Resolves #300 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.1.6 (Sun Jan 12 2025)

#### ⚠️ Pushed to `main`

- For #389 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.1.5 (Sun Jan 12 2025)

#### ⚠️ Pushed to `main`

- For #394 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.1.4 (Sun Jan 12 2025)

#### ⚠️ Pushed to `main`

- For #394 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.1.3 (Sun Jan 12 2025)

#### 🐛 Bug Fix

- Fix installation for non-pnpm package managers [#395](https://github.com/haydenbleasel/next-forge/pull/395) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.1.2 (Sun Jan 12 2025)

#### ⚠️ Pushed to `main`

- Fix typo ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.1.1 (Sun Jan 12 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Carlos Villanueva ([@carvillanueva](https://github.com/carvillanueva)), for all your work!

#### 🐛 Bug Fix

- Adding AI Agent Rules (Cursor + Copilot) [#371](https://github.com/haydenbleasel/next-forge/pull/371) ([@carvillanueva](https://github.com/carvillanueva) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Carlos Villanueva ([@carvillanueva](https://github.com/carvillanueva))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.1.0 (Sun Jan 12 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Jeff Everhart ([@JEverhart383](https://github.com/JEverhart383)), for all your work!

#### 🚀 Enhancement

- Add Notifications [#161](https://github.com/haydenbleasel/next-forge/pull/161) ([@haydenbleasel](https://github.com/haydenbleasel) [@JEverhart383](https://github.com/JEverhart383))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Jeff Everhart ([@JEverhart383](https://github.com/JEverhart383))

---

# v3.0.19 (Thu Jan 09 2025)

#### ⚠️ Pushed to `main`

- Remove unused dep ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.18 (Thu Jan 09 2025)

#### ⚠️ Pushed to `main`

- Update shadcn/ui ([@haydenbleasel](https://github.com/haydenbleasel))

#### 🔩 Dependency Updates

- Bump next from 15.1.3 to 15.1.4 in the npm_and_yarn group [#392](https://github.com/haydenbleasel/next-forge/pull/392) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 2

- [@dependabot[bot]](https://github.com/dependabot[bot])
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.17 (Thu Jan 09 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Trevor Pfizenmaier ([@trevorpfiz](https://github.com/trevorpfiz)), for all your work!

#### 🐛 Bug Fix

- Fix: cron jobs must use GET on Vercel [#391](https://github.com/haydenbleasel/next-forge/pull/391) ([@trevorpfiz](https://github.com/trevorpfiz))

#### Authors: 1

- Trevor Pfizenmaier ([@trevorpfiz](https://github.com/trevorpfiz))

---

# v3.0.16 (Thu Jan 09 2025)

#### ⚠️ Pushed to `main`

- for #389 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.15 (Thu Jan 09 2025)

#### ⚠️ Pushed to `main`

- Resolves #390 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.14 (Mon Jan 06 2025)

#### ⚠️ Pushed to `main`

- Update pnpm-lock.yaml ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.13 (Sun Jan 05 2025)

#### ⚠️ Pushed to `main`

- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.12 (Sat Jan 04 2025)

#### ⚠️ Pushed to `main`

- Resolves #381 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.11 (Sat Jan 04 2025)

#### ⚠️ Pushed to `main`

- Merge commit from fork ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.10 (Sat Jan 04 2025)

#### ⚠️ Pushed to `main`

- Resolves #386 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.9 (Fri Jan 03 2025)

#### ⚠️ Pushed to `main`

- Remove all-contributors ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.8 (Thu Jan 02 2025)

#### ⚠️ Pushed to `main`

- Update edgedb.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.7 (Thu Jan 02 2025)

:tada: This release contains work from a new contributor! :tada:

Thank you, Aleksandra ([@beerose](https://github.com/beerose)), for all your work!

#### 🐛 Bug Fix

- Add EdgeDB migration guide [#383](https://github.com/haydenbleasel/next-forge/pull/383) ([@beerose](https://github.com/beerose) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Aleksandra ([@beerose](https://github.com/beerose))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.5 (Thu Jan 02 2025)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #378 ([@haydenbleasel](https://github.com/haydenbleasel))

#### 🔩 Dependency Updates

- Bump @types/node from 22.9.4 to 22.10.3 [#380](https://github.com/haydenbleasel/next-forge/pull/380) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 2

- [@dependabot[bot]](https://github.com/dependabot[bot])
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.4 (Wed Jan 01 2025)

#### ⚠️ Pushed to `main`

- Update Stripe API version ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.3 (Wed Jan 01 2025)

#### ⚠️ Pushed to `main`

- Use keys for DSN ([@haydenbleasel](https://github.com/haydenbleasel))
- Fix vitest command ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.2 (Tue Dec 31 2024)

#### ⚠️ Pushed to `main`

- Build out stub doc files, update images ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.1 (Tue Dec 31 2024)

#### ⚠️ Pushed to `main`

- Fix usage of VERCEL_PROJECT_PRODUCTION_URL ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v3.0.0 (Tue Dec 31 2024)

#### 💥 Breaking Change

- Composable environment variables [#332](https://github.com/haydenbleasel/next-forge/pull/332) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.21.11 (Tue Dec 17 2024)

#### ⚠️ Pushed to `main`

- Disable git for create-next-app ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.21.10 (Tue Dec 17 2024)

#### 🐛 Bug Fix

- Docs - next safe action Addon [#348](https://github.com/haydenbleasel/next-forge/pull/348) ([@pedrocarlo](https://github.com/pedrocarlo) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Pedro Muniz ([@pedrocarlo](https://github.com/pedrocarlo))

---

# v2.21.9 (Tue Dec 17 2024)

#### 🐛 Bug Fix

- add info about getting basehub set up in the intstallation doc [#361](https://github.com/haydenbleasel/next-forge/pull/361) ([@julianbenegas](https://github.com/julianbenegas))

#### Authors: 1

- Julian Benegas ([@julianbenegas](https://github.com/julianbenegas))

---

# v2.21.8 (Sun Dec 15 2024)

#### ⚠️ Pushed to `main`

- For #359 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.21.7 (Fri Dec 13 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Donovan Dikaio ([@dikaio](https://github.com/dikaio)), for all your work!

#### 🐛 Bug Fix

- Fix: This fixes the bun install failure when opting for bun [#355](https://github.com/haydenbleasel/next-forge/pull/355) ([@dikaio](https://github.com/dikaio))

#### Authors: 1

- Donovan Dikaio ([@dikaio](https://github.com/dikaio))

---

# v2.21.6 (Fri Dec 13 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Mike Keating ([@mikerkeating](https://github.com/mikerkeating)), for all your work!

#### 🐛 Bug Fix

- Change Cron to daily to allow vercel hobby projects [#354](https://github.com/haydenbleasel/next-forge/pull/354) ([@mikerkeating](https://github.com/mikerkeating))

#### Authors: 1

- Mike Keating ([@mikerkeating](https://github.com/mikerkeating))

---

# v2.21.5 (Fri Dec 13 2024)

#### ⚠️ Pushed to `main`

- Fix format and lint commands ([@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- Add uploadthing migration guide [#353](https://github.com/haydenbleasel/next-forge/pull/353) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.21.4 (Fri Dec 13 2024)

#### ⚠️ Pushed to `main`

- Move metabase to addons ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.21.3 (Fri Dec 13 2024)

#### ⚠️ Pushed to `main`

- Fix last typos ([@haydenbleasel](https://github.com/haydenbleasel))
- Fix more typos ([@haydenbleasel](https://github.com/haydenbleasel))
- Fix typos ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.21.2 (Fri Dec 13 2024)

#### ⚠️ Pushed to `main`

- Misc fixes ([@haydenbleasel](https://github.com/haydenbleasel))
- Update better-auth.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.21.1 (Thu Dec 12 2024)

#### ⚠️ Pushed to `main`

- Attempt to fix Mintlify image issue ([@haydenbleasel](https://github.com/haydenbleasel))
- Update rate-limiting.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.21.0 (Thu Dec 12 2024)

#### 🚀 Enhancement

- Release 2.21 w/ Rate Limiting package [#349](https://github.com/haydenbleasel/next-forge/pull/349) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.31 (Thu Dec 12 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Fahreddin Özcan ([@fahreddinozcan](https://github.com/fahreddinozcan)), for all your work!

#### 🐛 Bug Fix

- feat: Upstash Redis and Upstash Ratelimit [#328](https://github.com/haydenbleasel/next-forge/pull/328) ([@fahreddinozcan](https://github.com/fahreddinozcan) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Fahreddin Özcan ([@fahreddinozcan](https://github.com/fahreddinozcan))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.30 (Thu Dec 12 2024)

:tada: This release contains work from new contributors! :tada:

Thanks for all your work!

:heart: null[@pedrocarlo](https://github.com/pedrocarlo)

:heart: Simon ([@simon-v-swyftx](https://github.com/simon-v-swyftx))

#### 🐛 Bug Fix

- fix: clean tasks needed to be added to turbo.json [#346](https://github.com/haydenbleasel/next-forge/pull/346) ([@pedrocarlo](https://github.com/pedrocarlo))
- docs: add context to better-auth migration [#347](https://github.com/haydenbleasel/next-forge/pull/347) ([@simon-v-swyftx](https://github.com/simon-v-swyftx))

#### 🔩 Dependency Updates

- Bump zod from 3.24.0 to 3.24.1 in the npm_and_yarn group [#345](https://github.com/haydenbleasel/next-forge/pull/345) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 3

- [@dependabot[bot]](https://github.com/dependabot[bot])
- [@pedrocarlo](https://github.com/pedrocarlo)
- Simon ([@simon-v-swyftx](https://github.com/simon-v-swyftx))

---

# v2.20.29 (Wed Dec 11 2024)

#### ⚠️ Pushed to `main`

- More images ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.28 (Wed Dec 11 2024)

#### ⚠️ Pushed to `main`

- Tailwind devDep needed for production dark mode ([@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- Replace next-secure-headers with Nosecone for security headers [#343](https://github.com/haydenbleasel/next-forge/pull/343) ([@davidmytton](https://github.com/davidmytton) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- David Mytton ([@davidmytton](https://github.com/davidmytton))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.27 (Wed Dec 11 2024)

#### ⚠️ Pushed to `main`

- Update index.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.26 (Wed Dec 11 2024)

#### ⚠️ Pushed to `main`

- Redesign splash page ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.25 (Tue Dec 10 2024)

#### ⚠️ Pushed to `main`

- Update pnpm-lock.yaml ([@haydenbleasel](https://github.com/haydenbleasel))
- Upgrade to Next.js 15.1 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.24 (Tue Dec 10 2024)

#### ⚠️ Pushed to `main`

- Update README.md ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.23 (Tue Dec 10 2024)

#### ⚠️ Pushed to `main`

- Upgrade postcss configurations ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.22 (Tue Dec 10 2024)

#### ⚠️ Pushed to `main`

- Resolves #337 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.21 (Tue Dec 10 2024)

#### ⚠️ Pushed to `main`

- Resolves #338 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.20 (Tue Dec 10 2024)

#### 🐛 Bug Fix

- Update Drizzle migration documentation [#341](https://github.com/haydenbleasel/next-forge/pull/341) ([@yamz8](https://github.com/yamz8))

#### Authors: 1

- Yam Catzenelson ([@yamz8](https://github.com/yamz8))

---

# v2.20.19 (Tue Dec 10 2024)

#### ⚠️ Pushed to `main`

- Resolves #339 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.18 (Tue Dec 10 2024)

#### ⚠️ Pushed to `main`

- Ultracite fixes, for #338 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.17 (Tue Dec 10 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, null[@pedrocarlo](https://github.com/pedrocarlo), for all your work!

#### 🐛 Bug Fix

- Feature: Turborepo generator [#334](https://github.com/haydenbleasel/next-forge/pull/334) ([@pedrocarlo](https://github.com/pedrocarlo))

#### ⚠️ Pushed to `main`

- Update pnpm-lock.yaml ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- [@pedrocarlo](https://github.com/pedrocarlo)
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.16 (Tue Dec 10 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Simon ([@simon-v-swyftx](https://github.com/simon-v-swyftx)), for all your work!

#### 🐛 Bug Fix

- Chore: cleaner git repo with init and update scripts [#336](https://github.com/haydenbleasel/next-forge/pull/336) ([@simon-v-swyftx](https://github.com/simon-v-swyftx))

#### Authors: 1

- Simon ([@simon-v-swyftx](https://github.com/simon-v-swyftx))

---

# v2.20.15 (Tue Dec 10 2024)

#### ⚠️ Pushed to `main`

- Switch to TUI mode ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.14 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- For #333 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.13 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Update mint.json ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.12 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Start adding documentation images ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.11 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Fix broken links ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.10 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Update mint.json ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.9 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Fix redirects ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.8 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Make Vercel Toolbar optional, for #251 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.7 (Mon Dec 09 2024)

#### 🐛 Bug Fix

- Make application security optional [#327](https://github.com/haydenbleasel/next-forge/pull/327) ([@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- Add Lemon Squeezy guide [#331](https://github.com/haydenbleasel/next-forge/pull/331) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.6 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Rename "Recommended Libraries" to "Addons" ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.5 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Add BaseHub as co-author ([@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- Tabs [#330](https://github.com/haydenbleasel/next-forge/pull/330) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.4 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Update ai-chatbot.mdx ([@haydenbleasel](https://github.com/haydenbleasel))
- Update ai.mdx ([@haydenbleasel](https://github.com/haydenbleasel))
- Export AI components ([@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- Recipes [#329](https://github.com/haydenbleasel/next-forge/pull/329) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.3 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.2 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Update setup.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.1 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Resolves #322 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.20.0 (Mon Dec 09 2024)

#### 🚀 Enhancement

- New update command [#320](https://github.com/haydenbleasel/next-forge/pull/320) ([@haydenbleasel](https://github.com/haydenbleasel))

#### ⚠️ Pushed to `main`

- Update vercel.mdx ([@haydenbleasel](https://github.com/haydenbleasel))
- Update docs ([@haydenbleasel](https://github.com/haydenbleasel))
- For #251 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.19.4 (Mon Dec 09 2024)

#### ⚠️ Pushed to `main`

- Update index.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.19.3 (Sun Dec 08 2024)

#### ⚠️ Pushed to `main`

- Document CMS environment variable ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.19.2 (Sun Dec 08 2024)

#### ⚠️ Pushed to `main`

- Update pnpm-lock.yaml ([@haydenbleasel](https://github.com/haydenbleasel))
- Upgrade to React 19 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.19.1 (Sun Dec 08 2024)

#### ⚠️ Pushed to `main`

- Misc fixes ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.19.0 (Sun Dec 08 2024)

#### 🚀 Enhancement

- New CMS package [#325](https://github.com/haydenbleasel/next-forge/pull/325) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.33 (Sun Dec 08 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Julian Benegas ([@julianbenegas](https://github.com/julianbenegas)), for all your work!

#### 🐛 Bug Fix

- [wip] basehub docs [#219](https://github.com/haydenbleasel/next-forge/pull/219) ([@julianbenegas](https://github.com/julianbenegas) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Julian Benegas ([@julianbenegas](https://github.com/julianbenegas))

---

# v2.18.32 (Sun Dec 08 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Fuma Nama ([@fuma-nama](https://github.com/fuma-nama)), for all your work!

#### 🐛 Bug Fix

- add Fumadocs guide [#324](https://github.com/haydenbleasel/next-forge/pull/324) ([@fuma-nama](https://github.com/fuma-nama) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Fuma Nama ([@fuma-nama](https://github.com/fuma-nama))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.31 (Sat Dec 07 2024)

#### 🐛 Bug Fix

- Set up storybook tool bar for dark + light mode swap. [#318](https://github.com/haydenbleasel/next-forge/pull/318) ([@Balance8](https://github.com/Balance8))

#### Authors: 1

- Michael Slocum ([@Balance8](https://github.com/Balance8))

---

# v2.18.30 (Thu Dec 05 2024)

#### 🐛 Bug Fix

- Add ESLint migration doc [#291](https://github.com/haydenbleasel/next-forge/pull/291) ([@haydenbleasel](https://github.com/haydenbleasel))

#### ⚠️ Pushed to `main`

- Update eslint.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.29 (Wed Dec 04 2024)

#### ⚠️ Pushed to `main`

- Add bump-ui script and a doc on updates ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.28 (Wed Dec 04 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.27 (Wed Dec 04 2024)

#### ⚠️ Pushed to `main`

- Update mint.json ([@haydenbleasel](https://github.com/haydenbleasel))
- Merge branch 'main' of https://github.com/haydenbleasel/next-forge ([@haydenbleasel](https://github.com/haydenbleasel))
- Add Netlify deployment doc ([@haydenbleasel](https://github.com/haydenbleasel))
- Build fixes ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.26 (Wed Dec 04 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Sergiy Dybskiy ([@sergical](https://github.com/sergical)), for all your work!

#### ⚠️ Pushed to `main`

- Redesign splash page hero ([@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- [Docs] Supabase database [#312](https://github.com/haydenbleasel/next-forge/pull/312) ([@sergical](https://github.com/sergical) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Sergiy Dybskiy ([@sergical](https://github.com/sergical))

---

# v2.18.25 (Wed Dec 04 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Emmanuel Isenah ([@Armadillidiid](https://github.com/Armadillidiid)), for all your work!

#### 🐛 Bug Fix

- Improve Grammer in Turso Docs [#319](https://github.com/haydenbleasel/next-forge/pull/319) ([@Armadillidiid](https://github.com/Armadillidiid))

#### 🔩 Dependency Updates

- Bump @storybook/react from 8.4.5 to 8.4.6 [#301](https://github.com/haydenbleasel/next-forge/pull/301) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump posthog-node from 4.3.0 to 4.3.1 [#303](https://github.com/haydenbleasel/next-forge/pull/303) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump class-variance-authority from 0.7.0 to 0.7.1 [#302](https://github.com/haydenbleasel/next-forge/pull/302) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump posthog-js from 1.188.0 to 1.194.1 [#304](https://github.com/haydenbleasel/next-forge/pull/304) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @prisma/client from 5.22.0 to 6.0.0 [#305](https://github.com/haydenbleasel/next-forge/pull/305) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @arcjet/next from 1.0.0-alpha.31 to 1.0.0-alpha.33 [#306](https://github.com/haydenbleasel/next-forge/pull/306) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump fumadocs-core from 14.5.4 to 14.5.5 [#307](https://github.com/haydenbleasel/next-forge/pull/307) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump undici from 6.21.0 to 7.0.0 [#308](https://github.com/haydenbleasel/next-forge/pull/308) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump ai from 4.0.4 to 4.0.9 [#309](https://github.com/haydenbleasel/next-forge/pull/309) ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump @storybook/addon-onboarding from 8.4.5 to 8.4.6 [#310](https://github.com/haydenbleasel/next-forge/pull/310) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 2

- [@dependabot[bot]](https://github.com/dependabot[bot])
- Emmanuel Isenah ([@Armadillidiid](https://github.com/Armadillidiid))

---

# v2.18.24 (Mon Dec 02 2024)

#### ⚠️ Pushed to `main`

- Update release.yml ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.23 (Mon Dec 02 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Michael Slocum ([@Balance8](https://github.com/Balance8)), for all your work!

#### 🐛 Bug Fix

- Set defaults for Shadcn darkmode in Storybook [#311](https://github.com/haydenbleasel/next-forge/pull/311) ([@Balance8](https://github.com/Balance8))

#### Authors: 1

- Michael Slocum ([@Balance8](https://github.com/Balance8))

---

# v2.18.22 (Sat Nov 30 2024)

#### ⚠️ Pushed to `main`

- Update fonts to match docs ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.21 (Fri Nov 29 2024)

#### 🐛 Bug Fix

- fix: Log Arcjet deny reason [#299](https://github.com/haydenbleasel/next-forge/pull/299) ([@davidmytton](https://github.com/davidmytton))

#### Authors: 1

- David Mytton ([@davidmytton](https://github.com/davidmytton))

---

# v2.18.20 (Thu Nov 28 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, DaniEnsi ([@DaniEnsi](https://github.com/DaniEnsi)), for all your work!

#### 🐛 Bug Fix

- feat: added missing imports and fixed speeling [#295](https://github.com/haydenbleasel/next-forge/pull/295) ([@DaniEnsi](https://github.com/DaniEnsi))

#### Authors: 1

- DaniEnsi ([@DaniEnsi](https://github.com/DaniEnsi))

---

# v2.18.19 (Wed Nov 27 2024)

:tada: This release contains work from new contributors! :tada:

Thanks for all your work!

:heart: Bereket Engida ([@Bekacru](https://github.com/Bekacru))

:heart: Matthew Hefferon ([@matthewhefferon](https://github.com/matthewhefferon))

#### 🐛 Bug Fix

- docs: add better-auth guide [#294](https://github.com/haydenbleasel/next-forge/pull/294) ([@Bekacru](https://github.com/Bekacru) [@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- Added Metabase documentation [#292](https://github.com/haydenbleasel/next-forge/pull/292) ([@matthewhefferon](https://github.com/matthewhefferon) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 3

- Bereket Engida ([@Bekacru](https://github.com/Bekacru))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Matthew Hefferon ([@matthewhefferon](https://github.com/matthewhefferon))

---

# v2.18.18 (Tue Nov 26 2024)

#### ⚠️ Pushed to `main`

- Update ai.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.17 (Tue Nov 26 2024)

#### ⚠️ Pushed to `main`

- Create new "Deploying" folder ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.16 (Tue Nov 26 2024)

#### ⚠️ Pushed to `main`

- Resolves #290 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.15 (Tue Nov 26 2024)

#### ⚠️ Pushed to `main`

- Update pnpm-lock.yaml ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.14 (Tue Nov 26 2024)

#### ⚠️ Pushed to `main`

- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.13 (Tue Nov 26 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.12 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- Temporarily revert symlinks due to prod build issue ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.11 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- For #251 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.10 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- For #251 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.9 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- For #251 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.8 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- For #251 ([@haydenbleasel](https://github.com/haydenbleasel))
- Update svix.ts ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.7 (Mon Nov 25 2024)

#### 🐛 Bug Fix

- feat: Add built-in components for readability [#287](https://github.com/haydenbleasel/next-forge/pull/287) ([@fmerian](https://github.com/fmerian))

#### Authors: 1

- flo merian ([@fmerian](https://github.com/fmerian))

---

# v2.18.6 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- Update ai.mdx ([@haydenbleasel](https://github.com/haydenbleasel))
- Fix AI provider snippet ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.5 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- Improve AI docs ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.4 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- Update ai.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.3 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- Update mint.json ([@haydenbleasel](https://github.com/haydenbleasel))
- Merge branch 'main' of https://github.com/haydenbleasel/next-forge ([@haydenbleasel](https://github.com/haydenbleasel))
- Update .gitignore ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #275 ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #199 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.2 (Mon Nov 25 2024)

#### 🐛 Bug Fix

- Added env variable NEXT_PUBLIC_API_URL [#245](https://github.com/haydenbleasel/next-forge/pull/245) ([@OsoThevenin](https://github.com/OsoThevenin) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Pere Bruy ([@OsoThevenin](https://github.com/OsoThevenin))

---

# v2.18.1 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- Resolves #286, resolves #247 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.18.0 (Mon Nov 25 2024)

#### 🚀 Enhancement

- Symlink environment variables [#285](https://github.com/haydenbleasel/next-forge/pull/285) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.17.3 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- Merge branch 'main' of https://github.com/haydenbleasel/next-forge ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #271 ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #272 ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #280 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.17.2 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- Improve Storybook docs ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.17.1 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- Update mint.json ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.17.0 (Mon Nov 25 2024)

#### 🚀 Enhancement

- Add Storybook [#167](https://github.com/haydenbleasel/next-forge/pull/167) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.17 (Mon Nov 25 2024)

#### ⚠️ Pushed to `main`

- Update mint.json ([@haydenbleasel](https://github.com/haydenbleasel))
- Update authors.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.16 (Sun Nov 24 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Pierangelo Di Pilato ([@pierDipi](https://github.com/pierDipi)), for all your work!

#### 🐛 Bug Fix

- Minor: fix authjs migration secrets creation command [#281](https://github.com/haydenbleasel/next-forge/pull/281) ([@pierDipi](https://github.com/pierDipi))

#### Authors: 1

- Pierangelo Di Pilato ([@pierDipi](https://github.com/pierDipi))

---

# v2.16.15 (Sat Nov 23 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Yanis Vestfalskii ([@yanisneverlies](https://github.com/yanisneverlies)), for all your work!

#### 🐛 Bug Fix

- fix: resolve submenu duplication issues by using index as a key [#278](https://github.com/haydenbleasel/next-forge/pull/278) ([@yanisneverlies](https://github.com/yanisneverlies))

#### Authors: 1

- Yanis Vestfalskii ([@yanisneverlies](https://github.com/yanisneverlies))

---

# v2.16.14 (Sat Nov 23 2024)

#### ⚠️ Pushed to `main`

- Attempt to fix Mintlify images again ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.13 (Sat Nov 23 2024)

#### ⚠️ Pushed to `main`

- Temporary Mintlify fix ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.12 (Thu Nov 21 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- Create Auth.js migration guide [#268](https://github.com/haydenbleasel/next-forge/pull/268) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.11 (Wed Nov 20 2024)

#### ⚠️ Pushed to `main`

- Update setup.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.10 (Wed Nov 20 2024)

#### ⚠️ Pushed to `main`

- Update mint.json ([@haydenbleasel](https://github.com/haydenbleasel))
- Document header security ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.9 (Wed Nov 20 2024)

#### ⚠️ Pushed to `main`

- For #272 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.8 (Wed Nov 20 2024)

#### 🐛 Bug Fix

- Add recommended libraries documentation [#270](https://github.com/haydenbleasel/next-forge/pull/270) ([@yamz8](https://github.com/yamz8) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Yam Catzenelson ([@yamz8](https://github.com/yamz8))

---

# v2.16.7 (Wed Nov 20 2024)

#### ⚠️ Pushed to `main`

- Update formatting.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.6 (Tue Nov 19 2024)

#### ⚠️ Pushed to `main`

- Build fixes ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.5 (Tue Nov 19 2024)

#### ⚠️ Pushed to `main`

- Resolves #267 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.4 (Mon Nov 18 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, null[@idkgene](https://github.com/idkgene), for all your work!

#### 🐛 Bug Fix

- VSCode workspace configuration [#253](https://github.com/haydenbleasel/next-forge/pull/253) ([@idkgene](https://github.com/idkgene) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- [@idkgene](https://github.com/idkgene)
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.3 (Mon Nov 18 2024)

#### 🐛 Bug Fix

- Extract testing configuration into repo/testing package [#182](https://github.com/haydenbleasel/next-forge/pull/182) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.2 (Mon Nov 18 2024)

#### ⚠️ Pushed to `main`

- Update setup.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.1 (Mon Nov 18 2024)

#### ⚠️ Pushed to `main`

- Update setup.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.16.0 (Mon Nov 18 2024)

### Release Notes

#### Collaboration ([#249](https://github.com/haydenbleasel/next-forge/pull/249))

- **New Features**
	- Introduced `AvatarStack` and `Cursors` components for enhanced user presence and cursor tracking in collaborative environments.
	- Added a new `CollaborationProvider` component to facilitate real-time collaboration features.
	- Implemented user search functionality within the organization.

- **Improvements**
	- Expanded configuration options with the addition of the `LIVEBLOCKS_SECRET` environment variable across multiple applications.

- **Bug Fixes**
	- Adjusted the `UserButton` styling to ensure it occupies the full width of the sidebar.

- **Chores**
	- Added new dependencies: `@repo/collaboration` and `fuse.js` to the project.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---

#### 🚀 Enhancement

- Collaboration [#249](https://github.com/haydenbleasel/next-forge/pull/249) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.15.10 (Sun Nov 17 2024)

#### ⚠️ Pushed to `main`

- Update faq.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.15.9 (Sun Nov 17 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Kaiden Riley ([@krpleo](https://github.com/krpleo)), for all your work!

#### 🐛 Bug Fix

- fix: sidebar collapsible triggers [#256](https://github.com/haydenbleasel/next-forge/pull/256) ([@krpleo](https://github.com/krpleo))

#### ⚠️ Pushed to `main`

- Improve shadcn CLI updating ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Kaiden Riley ([@krpleo](https://github.com/krpleo))

---

# v2.15.8 (Sun Nov 17 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Pere Bruy ([@OsoThevenin](https://github.com/OsoThevenin)), for all your work!

#### 🐛 Bug Fix

- Export PrismaClient in database package [#258](https://github.com/haydenbleasel/next-forge/pull/258) ([@OsoThevenin](https://github.com/OsoThevenin))

#### Authors: 1

- Pere Bruy ([@OsoThevenin](https://github.com/OsoThevenin))

---

# v2.15.7 (Sun Nov 17 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Dade ([@shengdade](https://github.com/shengdade)), for all your work!

#### 🐛 Bug Fix

- Remove duplicate Tailwind utility classes [#255](https://github.com/haydenbleasel/next-forge/pull/255) ([@shengdade](https://github.com/shengdade))

#### ⚠️ Pushed to `main`

- Update package.json ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Dade ([@shengdade](https://github.com/shengdade))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.15.6 (Sun Nov 17 2024)

#### ⚠️ Pushed to `main`

- Resolves #260 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.15.5 (Sat Nov 16 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.15.4 (Sat Nov 16 2024)

#### ⚠️ Pushed to `main`

- Resolves #184 ([@haydenbleasel](https://github.com/haydenbleasel))
- Ultracite fixes ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.15.3 (Sat Nov 16 2024)

#### ⚠️ Pushed to `main`

- Resolves #139 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.15.2 (Sat Nov 16 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Matthew Lewis ([@malewis5](https://github.com/malewis5)), for all your work!

#### 🐛 Bug Fix

- fix: add sheet title for a11y. [#250](https://github.com/haydenbleasel/next-forge/pull/250) ([@malewis5](https://github.com/malewis5) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Matthew Lewis ([@malewis5](https://github.com/malewis5))

---

# v2.15.1 (Sat Nov 16 2024)

#### ⚠️ Pushed to `main`

- Bump deps, simplify DS icons ([@haydenbleasel](https://github.com/haydenbleasel))
- Update shadcn/ui ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.15.0 (Fri Nov 15 2024)

#### 🚀 Enhancement

- Turbo [#170](https://github.com/haydenbleasel/next-forge/pull/170) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.17 (Fri Nov 15 2024)

#### 🐛 Bug Fix

- Add IP geolocation docs [#248](https://github.com/haydenbleasel/next-forge/pull/248) ([@davidmytton](https://github.com/davidmytton))

#### Authors: 1

- David Mytton ([@davidmytton](https://github.com/davidmytton))

---

# v2.14.16 (Fri Nov 15 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- Added anti-fraud advice [#237](https://github.com/haydenbleasel/next-forge/pull/237) ([@davidmytton](https://github.com/davidmytton))

#### Authors: 2

- David Mytton ([@davidmytton](https://github.com/davidmytton))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.15 (Fri Nov 15 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Michael Zavattaro ([@mzavattaro](https://github.com/mzavattaro)), for all your work!

#### 🐛 Bug Fix

- Update location of .env file in directory docs [#241](https://github.com/haydenbleasel/next-forge/pull/241) ([@mzavattaro](https://github.com/mzavattaro))

#### Authors: 1

- Michael Zavattaro ([@mzavattaro](https://github.com/mzavattaro))

---

# v2.14.14 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.13 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Fix SVIX_TOKEN deploy issue ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.12 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Update deploying.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.11 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Update deploying.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.10 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Add Vercel marketplace link ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.9 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Add Vercel deploy button ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.8 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Update setup.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.7 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Resolves #238, resolves #234 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.6 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- For #234 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.5 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- For #234 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.4 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- For #234 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.2 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.1 (Thu Nov 14 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Anthony Shew ([@anthonyshew](https://github.com/anthonyshew)), for all your work!

#### 🐛 Bug Fix

- Update `turbo.json` to improve cache hit ratios [#235](https://github.com/haydenbleasel/next-forge/pull/235) ([@anthonyshew](https://github.com/anthonyshew) [@haydenbleasel](https://github.com/haydenbleasel))
- Remove root tsconfig.json [#236](https://github.com/haydenbleasel/next-forge/pull/236) ([@anthonyshew](https://github.com/anthonyshew))

#### Authors: 2

- Anthony Shew ([@anthonyshew](https://github.com/anthonyshew))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.14.0 (Thu Nov 14 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, null[@svix-lucho](https://github.com/svix-lucho), for all your work!

#### 🚀 Enhancement

- Add Svix Webhooks [#212](https://github.com/haydenbleasel/next-forge/pull/212) ([@svix-lucho](https://github.com/svix-lucho) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- [@svix-lucho](https://github.com/svix-lucho)
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.21 (Thu Nov 14 2024)

#### 🐛 Bug Fix

- Adjust Arcjet middleware to allow monitoring & expand docs [#231](https://github.com/haydenbleasel/next-forge/pull/231) ([@davidmytton](https://github.com/davidmytton))

#### Authors: 1

- David Mytton ([@davidmytton](https://github.com/davidmytton))

---

# v2.13.19 (Thu Nov 14 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, David Mytton ([@davidmytton](https://github.com/davidmytton)), for all your work!

#### 🐛 Bug Fix

- List the required accounts in setup [#229](https://github.com/haydenbleasel/next-forge/pull/229) ([@davidmytton](https://github.com/davidmytton))
- Update drizzle.mdx [#230](https://github.com/haydenbleasel/next-forge/pull/230) ([@yamz8](https://github.com/yamz8))

#### Authors: 2

- David Mytton ([@davidmytton](https://github.com/davidmytton))
- Yam Catzenelson ([@yamz8](https://github.com/yamz8))

---

# v2.13.18 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Update vitest.config.ts ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.17 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.16 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Create pull_request_template.md ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.15 (Thu Nov 14 2024)

#### ⚠️ Pushed to `main`

- Update issue templates ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.14 (Wed Nov 13 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.13 (Wed Nov 13 2024)

#### ⚠️ Pushed to `main`

- Expose Clerk components from auth package ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.12 (Wed Nov 13 2024)

#### ⚠️ Pushed to `main`

- Fix authors styling ([@haydenbleasel](https://github.com/haydenbleasel))
- Fix author images ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.11 (Wed Nov 13 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Jamie Barton ([@notrab](https://github.com/notrab)), for all your work!

#### 🐛 Bug Fix

- feat: add turso guide [#226](https://github.com/haydenbleasel/next-forge/pull/226) ([@notrab](https://github.com/notrab) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Jamie Barton ([@notrab](https://github.com/notrab))

---

# v2.13.10 (Wed Nov 13 2024)

#### ⚠️ Pushed to `main`

- For #222 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.9 (Wed Nov 13 2024)

#### ⚠️ Pushed to `main`

- For #222 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.8 (Wed Nov 13 2024)

#### 🐛 Bug Fix

- Finish extracting arcjet package [#221](https://github.com/haydenbleasel/next-forge/pull/221) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.7 (Tue Nov 12 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Christian Leonardo ([@whyleonardo](https://github.com/whyleonardo)), for all your work!

#### 🐛 Bug Fix

- Fix fetch status response error check condition [#217](https://github.com/haydenbleasel/next-forge/pull/217) ([@whyleonardo](https://github.com/whyleonardo))

#### Authors: 1

- Christian Leonardo ([@whyleonardo](https://github.com/whyleonardo))

---

# v2.13.6 (Tue Nov 12 2024)

#### ⚠️ Pushed to `main`

- Misc fixes ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.5 (Tue Nov 12 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.4 (Tue Nov 12 2024)

#### ⚠️ Pushed to `main`

- Simplify authors data ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.3 (Tue Nov 12 2024)

#### ⚠️ Pushed to `main`

- Create CODE_OF_CONDUCT.md ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.2 (Tue Nov 12 2024)

#### 🐛 Bug Fix

- Update `mint.json` [#216](https://github.com/haydenbleasel/next-forge/pull/216) ([@fmerian](https://github.com/fmerian))

#### Authors: 1

- flo merian ([@fmerian](https://github.com/fmerian))

---

# v2.13.1 (Tue Nov 12 2024)

#### 🐛 Bug Fix

- Add Documentation section to docs [#214](https://github.com/haydenbleasel/next-forge/pull/214) ([@fmerian](https://github.com/fmerian) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- flo merian ([@fmerian](https://github.com/fmerian))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.13.0 (Tue Nov 12 2024)

#### 🚀 Enhancement

- V2.13 [#215](https://github.com/haydenbleasel/next-forge/pull/215) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.19 (Tue Nov 12 2024)

#### 🐛 Bug Fix

- Fix `.font` instructions in docs app [#213](https://github.com/haydenbleasel/next-forge/pull/213) ([@fmerian](https://github.com/fmerian) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- flo merian ([@fmerian](https://github.com/fmerian))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.18 (Mon Nov 11 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.17 (Mon Nov 11 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, jcchrrr ([@jcchrrr](https://github.com/jcchrrr)), for all your work!

#### 🐛 Bug Fix

- fix: vscode settings, tailwind config location [#211](https://github.com/haydenbleasel/next-forge/pull/211) ([@jcchrrr](https://github.com/jcchrrr))

#### Authors: 1

- jcchrrr ([@jcchrrr](https://github.com/jcchrrr))

---

# v2.12.16 (Sun Nov 10 2024)

#### ⚠️ Pushed to `main`

- Compress icons ([@haydenbleasel](https://github.com/haydenbleasel))
- Responsive fixes ([@haydenbleasel](https://github.com/haydenbleasel))
- Add X link ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.15 (Sun Nov 10 2024)

#### ⚠️ Pushed to `main`

- Update social.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.14 (Sun Nov 10 2024)

#### ⚠️ Pushed to `main`

- Update CONTRIBUTING.md ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.13 (Sun Nov 10 2024)

#### ⚠️ Pushed to `main`

- Move security file to github folder ([@haydenbleasel](https://github.com/haydenbleasel))
- Create CONTRIBUTING.md ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.12 (Sun Nov 10 2024)

#### 🐛 Bug Fix

- Include database scaffolding step in setup instructions [#208](https://github.com/haydenbleasel/next-forge/pull/208) ([@paulgrieselhuber](https://github.com/paulgrieselhuber))

#### Authors: 1

- Paul Grieselhuber ([@paulgrieselhuber](https://github.com/paulgrieselhuber))

---

# v2.12.11 (Sun Nov 10 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Paul Grieselhuber ([@paulgrieselhuber](https://github.com/paulgrieselhuber)), for all your work!

#### 🐛 Bug Fix

- Include necessary global env vars for turbo.json to allow Vercel builds [#206](https://github.com/haydenbleasel/next-forge/pull/206) ([@paulgrieselhuber](https://github.com/paulgrieselhuber))

#### Authors: 1

- Paul Grieselhuber ([@paulgrieselhuber](https://github.com/paulgrieselhuber))

---

# v2.12.10 (Sun Nov 10 2024)

#### ⚠️ Pushed to `main`

- Merge branch 'main' of https://github.com/haydenbleasel/next-forge ([@haydenbleasel](https://github.com/haydenbleasel))
- Add socials to homepage ([@haydenbleasel](https://github.com/haydenbleasel))
- Update layout.tsx ([@haydenbleasel](https://github.com/haydenbleasel))
- Load Geist from Google Fonts ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.9 (Sun Nov 10 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, null[@000-KunalPal](https://github.com/000-KunalPal), for all your work!

#### 🐛 Bug Fix

- fix: Remove duplicate "is" in text [#205](https://github.com/haydenbleasel/next-forge/pull/205) ([@000-KunalPal](https://github.com/000-KunalPal))

#### Authors: 1

- [@000-KunalPal](https://github.com/000-KunalPal)

---

# v2.12.8 (Sun Nov 10 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Yam Catzenelson ([@yamz8](https://github.com/yamz8)), for all your work!

#### 🐛 Bug Fix

- Update README.md [#204](https://github.com/haydenbleasel/next-forge/pull/204) ([@yamz8](https://github.com/yamz8) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Yam Catzenelson ([@yamz8](https://github.com/yamz8))

---

# v2.12.7 (Sat Nov 09 2024)

#### ⚠️ Pushed to `main`

- Update prisma-postgres.mdx ([@haydenbleasel](https://github.com/haydenbleasel))
- Create new SEO docs category ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.6 (Sat Nov 09 2024)

#### ⚠️ Pushed to `main`

- Update pnpm-lock.yaml ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.5 (Sat Nov 09 2024)

#### ⚠️ Pushed to `main`

- Resolves #202 ([@haydenbleasel](https://github.com/haydenbleasel))
- Resolves #201 ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps, add clerk/next to web ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.4 (Sat Nov 09 2024)

#### ⚠️ Pushed to `main`

- Update packages.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.3 (Sat Nov 09 2024)

#### ⚠️ Pushed to `main`

- Merge repo/status into repo/observability ([@haydenbleasel](https://github.com/haydenbleasel))
- Create "Observability" group ([@haydenbleasel](https://github.com/haydenbleasel))
- Break up structure pages ([@haydenbleasel](https://github.com/haydenbleasel))
- Shorten guide names ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.2 (Sat Nov 09 2024)

#### ⚠️ Pushed to `main`

- Fix broken links ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.1 (Sat Nov 09 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, flo merian ([@fmerian](https://github.com/fmerian)), for all your work!

#### ⚠️ Pushed to `main`

- Misc cleanup ([@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- Switch docs to Mintlify [#197](https://github.com/haydenbleasel/next-forge/pull/197) ([@fmerian](https://github.com/fmerian) [@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- flo merian ([@fmerian](https://github.com/fmerian))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.12.0 (Sat Nov 09 2024)

#### 🚀 Enhancement

- 198 improve package isolation [#200](https://github.com/haydenbleasel/next-forge/pull/200) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.11.7 (Thu Nov 07 2024)

#### ⚠️ Pushed to `main`

- Resolves #195 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.11.6 (Thu Nov 07 2024)

#### ⚠️ Pushed to `main`

- Resolves #193 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.11.5 (Thu Nov 07 2024)

#### ⚠️ Pushed to `main`

- Update attribution.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.11.4 (Thu Nov 07 2024)

#### ⚠️ Pushed to `main`

- Merge branch 'main' of https://github.com/haydenbleasel/next-forge ([@haydenbleasel](https://github.com/haydenbleasel))
- Redesign hero ([@haydenbleasel](https://github.com/haydenbleasel))
- Update installer.tsx ([@haydenbleasel](https://github.com/haydenbleasel))
- Add logo.dev attribution ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.11.3 (Thu Nov 07 2024)

#### ⚠️ Pushed to `main`

- Rework database / orm docs ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.11.1 (Thu Nov 07 2024)

#### ⚠️ Pushed to `main`

- Update security.mdx ([@haydenbleasel](https://github.com/haydenbleasel))
- Add Windows support ([@haydenbleasel](https://github.com/haydenbleasel))

#### 📝 Documentation

- Co-author: Drizzle [#168](https://github.com/haydenbleasel/next-forge/pull/168) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.11.0 (Thu Nov 07 2024)

:tada: This release contains work from new contributors! :tada:

Thanks for all your work!

:heart: Kaique da Silva ([@ktfth](https://github.com/ktfth))

:heart: David Mytton ([@davidmytton](https://github.com/davidmytton))

:heart: Nikolas ([@nikolasburk](https://github.com/nikolasburk))

#### 🚀 Enhancement

- feat: Add Arcjet security [#187](https://github.com/haydenbleasel/next-forge/pull/187) ([@davidmytton](https://github.com/davidmytton) [@haydenbleasel](https://github.com/haydenbleasel))

#### 🐛 Bug Fix

- chore(windows_setup): add windows setup script [#196](https://github.com/haydenbleasel/next-forge/pull/196) ([@ktfth](https://github.com/ktfth))

#### 📝 Documentation

- add docs for switching to Prisma Postgres [#192](https://github.com/haydenbleasel/next-forge/pull/192) ([@nikolasburk](https://github.com/nikolasburk))

#### Authors: 4

- David Mytton ([@davidmytton](https://github.com/davidmytton))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))
- Kaique da Silva ([@ktfth](https://github.com/ktfth))
- Nikolas ([@nikolasburk](https://github.com/nikolasburk))

---

# v2.10.10 (Tue Nov 05 2024)

#### ⚠️ Pushed to `main`

- Resolves #180 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.10.9 (Tue Nov 05 2024)

#### ⚠️ Pushed to `main`

- For #180 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.10.8 (Tue Nov 05 2024)

#### ⚠️ Pushed to `main`

- Build fixes ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))
- Use latest create-next-app ([@haydenbleasel](https://github.com/haydenbleasel))
- Update setup.sh ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.10.7 (Tue Nov 05 2024)

#### ⚠️ Pushed to `main`

- Resolves #175 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.10.6 (Tue Nov 05 2024)

#### ⚠️ Pushed to `main`

- Resolves #185 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.10.5 (Tue Nov 05 2024)

#### ⚠️ Pushed to `main`

- Resolves #186 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.10.4 (Tue Nov 05 2024)

#### ⚠️ Pushed to `main`

- Add Apple icons ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.10.3 (Tue Nov 05 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Alfredo José ([@fredojbg](https://github.com/fredojbg)), for all your work!

#### 🐛 Bug Fix

- feat: add repo/env to app [#188](https://github.com/haydenbleasel/next-forge/pull/188) ([@fredojbg](https://github.com/fredojbg) [@haydenbleasel](https://github.com/haydenbleasel))

#### ⚠️ Pushed to `main`

- Resolves #183 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 2

- Alfredo José ([@fredojbg](https://github.com/fredojbg))
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.10.2 (Tue Nov 05 2024)

#### 🐛 Bug Fix

- Misc enhancements [#181](https://github.com/haydenbleasel/next-forge/pull/181) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.10.1 (Mon Nov 04 2024)

#### ⚠️ Pushed to `main`

- Update github-button.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.10.0 (Mon Nov 04 2024)

#### 🚀 Enhancement

- 157 improve env var handling [#171](https://github.com/haydenbleasel/next-forge/pull/171) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.9.4 (Mon Nov 04 2024)

:tada: This release contains work from a new contributor! :tada:

Thank you, Ankur Tyagi ([@tyaga001](https://github.com/tyaga001)), for all your work!

#### 🐛 Bug Fix

- Add CodeRabbit AI Code Review Integration [#172](https://github.com/haydenbleasel/next-forge/pull/172) ([@tyaga001](https://github.com/tyaga001))

#### Authors: 1

- Ankur Tyagi ([@tyaga001](https://github.com/tyaga001))

---

# v2.9.3 (Sun Nov 03 2024)

#### ⚠️ Pushed to `main`

- Resolves #169 ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.9.2 (Sun Nov 03 2024)

#### ⚠️ Pushed to `main`

- Update README.md ([@haydenbleasel](https://github.com/haydenbleasel))
- Update setup.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.9.1 (Sun Nov 03 2024)

#### ⚠️ Pushed to `main`

- Update index.js ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.9.0 (Sun Nov 03 2024)

#### 🚀 Enhancement

- Create CLI [#166](https://github.com/haydenbleasel/next-forge/pull/166) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.8.0 (Sun Nov 03 2024)

#### 🚀 Enhancement

- Add Unit Tests [#165](https://github.com/haydenbleasel/next-forge/pull/165) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.7.4 (Sun Nov 03 2024)

#### ⚠️ Pushed to `main`

- Update shadcn/ui ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.7.3 (Sat Nov 02 2024)

#### ⚠️ Pushed to `main`

- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.7.2 (Sat Nov 02 2024)

#### ⚠️ Pushed to `main`

- Update structure.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.7.1 (Sat Nov 02 2024)

#### ⚠️ Pushed to `main`

- Update debugging.mdx ([@haydenbleasel](https://github.com/haydenbleasel))
- Create sitemap.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.7.0 (Sat Nov 02 2024)

#### 🚀 Enhancement

- Debugging [#164](https://github.com/haydenbleasel/next-forge/pull/164) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.6.6 (Fri Nov 01 2024)

#### ⚠️ Pushed to `main`

- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### 🔩 Dependency Updates

- Bump cmdk from 1.0.1 to 1.0.3 [#162](https://github.com/haydenbleasel/next-forge/pull/162) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 2

- [@dependabot[bot]](https://github.com/dependabot[bot])
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.6.5 (Thu Oct 31 2024)

#### ⚠️ Pushed to `main`

- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.6.4 (Thu Oct 31 2024)

#### ⚠️ Pushed to `main`

- Misc fixes, add tooltip to installer copy button ([@haydenbleasel](https://github.com/haydenbleasel))

#### 🔩 Dependency Updates

- Bump ws from 7.5.9 to 8.18.0 [#160](https://github.com/haydenbleasel/next-forge/pull/160) ([@dependabot[bot]](https://github.com/dependabot[bot]))

#### Authors: 2

- [@dependabot[bot]](https://github.com/dependabot[bot])
- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.6.3 (Thu Oct 31 2024)

#### ⚠️ Pushed to `main`

- Update global.css ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.6.2 (Thu Oct 31 2024)

#### ⚠️ Pushed to `main`

- Fix typo ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.6.1 (Thu Oct 31 2024)

#### ⚠️ Pushed to `main`

- Minor docs fixes ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.6.0 (Thu Oct 31 2024)

#### 🚀 Enhancement

- Improve Dark Mode support [#159](https://github.com/haydenbleasel/next-forge/pull/159) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.5.1 (Thu Oct 31 2024)

#### ⚠️ Pushed to `main`

- Update shadcn/ui ([@haydenbleasel](https://github.com/haydenbleasel))
- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.5.0 (Tue Oct 29 2024)

#### 🚀 Enhancement

- Improve SEO [#158](https://github.com/haydenbleasel/next-forge/pull/158) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.11 (Tue Oct 29 2024)

#### ⚠️ Pushed to `main`

- Fix typo ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.10 (Tue Oct 29 2024)

#### ⚠️ Pushed to `main`

- More tiny fixes ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.9 (Tue Oct 29 2024)

#### ⚠️ Pushed to `main`

- Fix and update docs fonts ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.8 (Tue Oct 29 2024)

#### ⚠️ Pushed to `main`

- Update analytics.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.7 (Tue Oct 29 2024)

#### ⚠️ Pushed to `main`

- Improve PostHog integration ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.6 (Tue Oct 29 2024)

#### ⚠️ Pushed to `main`

- Update flags.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.5 (Tue Oct 29 2024)

#### ⚠️ Pushed to `main`

- Add package-install remark plugin ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.4 (Tue Oct 29 2024)

#### ⚠️ Pushed to `main`

- Fix formatting of PostHog ([@haydenbleasel](https://github.com/haydenbleasel))
- Split error capture and monitoring ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.3 (Tue Oct 29 2024)

#### ⚠️ Pushed to `main`

- Add missing status component, improve docs ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.2 (Tue Oct 29 2024)

#### ⚠️ Pushed to `main`

- Add zoomable images, misc fixes ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.1 (Tue Oct 29 2024)

#### ⚠️ Pushed to `main`

- Run Ultracite ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.4.0 (Tue Oct 29 2024)

#### 🚀 Enhancement

- Add Vercel Feature Flags [#154](https://github.com/haydenbleasel/next-forge/pull/154) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.3.0 (Mon Oct 28 2024)

#### 🚀 Enhancement

- Implement Posthog [#156](https://github.com/haydenbleasel/next-forge/pull/156) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.2.7 (Mon Oct 28 2024)

#### ⚠️ Pushed to `main`

- Update global.css ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.2.6 (Mon Oct 28 2024)

#### ⚠️ Pushed to `main`

- Update layout.config.tsx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.2.5 (Mon Oct 28 2024)

#### ⚠️ Pushed to `main`

- Misc fixes ([@haydenbleasel](https://github.com/haydenbleasel))
- Update index.mdx ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.2.4 (Mon Oct 28 2024)

#### 🐛 Bug Fix

- Docs [#155](https://github.com/haydenbleasel/next-forge/pull/155) ([@haydenbleasel](https://github.com/haydenbleasel))

#### ⚠️ Pushed to `main`

- Update README.md ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.2.3 (Mon Oct 28 2024)

#### ⚠️ Pushed to `main`

- Remove leftover pscale stuff ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.2.2 (Mon Oct 28 2024)

#### ⚠️ Pushed to `main`

- Add Clerk as remote image pattern ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.2.1 (Sun Oct 27 2024)

#### ⚠️ Pushed to `main`

- Deprecate use of FC ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.2.0 (Sat Oct 26 2024)

#### 🚀 Enhancement

- 2.2 [#152](https://github.com/haydenbleasel/next-forge/pull/152) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.1.0 (Thu Oct 24 2024)

#### 🚀 Enhancement

- 2.1 [#151](https://github.com/haydenbleasel/next-forge/pull/151) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.0.6 (Thu Oct 24 2024)

#### ⚠️ Pushed to `main`

- Fix typo ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.0.5 (Thu Oct 24 2024)

#### ⚠️ Pushed to `main`

- Bump deps ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.0.4 (Wed Oct 23 2024)

#### ⚠️ Pushed to `main`

- Add missing LQIP props ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.0.3 (Wed Oct 23 2024)

#### 🐛 Bug Fix

- Demo fixes [#150](https://github.com/haydenbleasel/next-forge/pull/150) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.0.2 (Wed Oct 23 2024)

#### ⚠️ Pushed to `main`

- Update opengraph images ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.0.1 (Wed Oct 23 2024)

#### ⚠️ Pushed to `main`

- Improve installer ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v2.0.0 (Wed Oct 23 2024)

#### 💥 Breaking Change

- Version 2 [#149](https://github.com/haydenbleasel/next-forge/pull/149) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v1.2.0 (Mon Oct 21 2024)

#### 🚀 Enhancement

- 1.2.0 [#144](https://github.com/haydenbleasel/next-forge/pull/144) ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))

---

# v1.1.2 (Mon Sep 02 2024)

#### ⚠️ Pushed to `main`

- Attempt installing auto deps ([@haydenbleasel](https://github.com/haydenbleasel))
- Update package.json ([@haydenbleasel](https://github.com/haydenbleasel))
- Misc fixes ([@haydenbleasel](https://github.com/haydenbleasel))
- Create release.yml ([@haydenbleasel](https://github.com/haydenbleasel))
- Create .autorc ([@haydenbleasel](https://github.com/haydenbleasel))

#### Authors: 1

- Hayden Bleasel ([@haydenbleasel](https://github.com/haydenbleasel))


================================================
FILE: README.md
================================================
# ▲ / next-forge

**Production-grade Turborepo template for Next.js apps.**

<div>
  <img src="https://img.shields.io/npm/dy/next-forge" alt="" />
  <img src="https://img.shields.io/npm/v/next-forge" alt="" />
  <img src="https://img.shields.io/github/license/vercel/next-forge" alt="" />
</div>

## Overview

[next-forge](https://github.com/vercel/next-forge) is a production-grade [Turborepo](https://turborepo.com) template for [Next.js](https://nextjs.org/) apps. It's designed to be a comprehensive starting point for building SaaS applications, providing a solid, opinionated foundation with minimal configuration required.

Built on a decade of experience building web applications, next-forge balances speed and quality to help you ship thoroughly-built products faster.

### Philosophy

next-forge is built around five core principles:

- **Fast** — Quick to build, run, deploy, and iterate on
- **Cheap** — Free to start with services that scale with you
- **Opinionated** — Integrated tooling designed to work together
- **Modern** — Latest stable features with healthy community support
- **Safe** — End-to-end type safety and robust security posture

## Demo

Experience next-forge in action:

- [Web](https://demo.next-forge.com) — Marketing website
- [App](https://app.demo.next-forge.com) — Main application
- [Storybook](https://storybook.demo.next-forge.com) — Component library
- [API](https://api.demo.next-forge.com/health) — API health check

## Features

next-forge comes with batteries included:

### Apps

- **Web** — Marketing site built with Tailwind CSS and TWBlocks
- **App** — Main application with authentication and database integration
- **API** — RESTful API with health checks and monitoring
- **Docs** — Documentation site powered by Mintlify
- **Email** — Email templates with React Email
- **Storybook** — Component development environment

### Packages

- **Authentication** — Powered by [Clerk](https://clerk.com)
- **Database** — Type-safe ORM with migrations
- **Design System** — Comprehensive component library with dark mode
- **Payments** — Subscription management via [Stripe](https://stripe.com)
- **Email** — Transactional emails via [Resend](https://resend.com)
- **Analytics** — Web ([Google Analytics](https://developers.google.com/analytics)) and product ([Posthog](https://posthog.com))
- **Observability** — Error tracking ([Sentry](https://sentry.io)), logging, and uptime monitoring ([BetterStack](https://betterstack.com))
- **Security** — Application security ([Arcjet](https://arcjet.com)), rate limiting, and secure headers
- **CMS** — Type-safe content management for blogs and documentation
- **SEO** — Metadata management, sitemaps, and JSON-LD
- **AI** — AI integration utilities
- **Webhooks** — Inbound and outbound webhook handling
- **Collaboration** — Real-time features with avatars and live cursors
- **Feature Flags** — Feature flag management
- **Cron** — Scheduled job management
- **Storage** — File upload and management
- **Internationalization** — Multi-language support
- **Notifications** — In-app notification system

## Getting Started

### Prerequisites

- Node.js 20+
- [Bun](https://bun.sh) (or npm/yarn/pnpm)
- [Stripe CLI](https://docs.stripe.com/stripe-cli) for local webhook testing

### Installation

Create a new next-forge project:

```sh
npx next-forge@latest init
```

### Setup

1. Configure your environment variables
2. Set up required service accounts (Clerk, Stripe, Resend, etc.)
3. Run the development server

For detailed setup instructions, read the [documentation](https://www.next-forge.com/docs).

## Structure

next-forge uses a monorepo structure managed by Turborepo:

```
next-forge/
├── apps/           # Deployable applications
│   ├── web/        # Marketing website (port 3001)
│   ├── app/        # Main application (port 3000)
│   ├── api/        # API server
│   ├── docs/       # Documentation
│   ├── email/      # Email templates
│   └── storybook/  # Component library
└── packages/       # Shared packages
    ├── design-system/
    ├── database/
    ├── auth/
    └── ...
```

Each app is self-contained and independently deployable. Packages are shared across apps for consistency and maintainability.

## Documentation

Full documentation is available at [next-forge.com/docs](https://www.next-forge.com/docs), including:

- Detailed setup guides
- Package documentation
- Migration guides for swapping providers
- Deployment instructions
- Examples and recipes

## Contributing

We welcome contributions! See the [contributing guide](https://github.com/vercel/next-forge/blob/main/.github/CONTRIBUTING.md) for details.

## Contributors

<a href="https://github.com/vercel/next-forge/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=vercel/next-forge" />
</a>

Made with [contrib.rocks](https://contrib.rocks).

## License

MIT


================================================
FILE: apps/api/.gitignore
================================================
.vercel


================================================
FILE: apps/api/__tests__/health.test.ts
================================================
import { expect, test } from "vitest";
import { GET } from "../app/health/route";

test("Health Check", async () => {
  const response = await GET();
  expect(response.status).toBe(200);
  expect(await response.text()).toBe("OK");
});


================================================
FILE: apps/api/app/cron/keep-alive/route.ts
================================================
import { database } from "@repo/database";

export const GET = async () => {
  const newPage = await database.page.create({
    data: {
      name: "cron-temp",
    },
  });

  await database.page.delete({
    where: {
      id: newPage.id,
    },
  });

  return new Response("OK", { status: 200 });
};


================================================
FILE: apps/api/app/global-error.tsx
================================================
"use client";

import { Button } from "@repo/design-system/components/ui/button";
import { fonts } from "@repo/design-system/lib/fonts";
import { captureException } from "@sentry/nextjs";
import type NextError from "next/error";
import { useEffect } from "react";

interface GlobalErrorProperties {
  readonly error: NextError & { digest?: string };
  readonly reset: () => void;
}

const GlobalError = ({ error, reset }: GlobalErrorProperties) => {
  useEffect(() => {
    captureException(error);
  }, [error]);

  return (
    <html className={fonts} lang="en">
      <body>
        <h1>Oops, something went wrong</h1>
        <Button onClick={() => reset()}>Try again</Button>
      </body>
    </html>
  );
};

export default GlobalError;


================================================
FILE: apps/api/app/health/route.ts
================================================
export const GET = (): Response => new Response("OK", { status: 200 });


================================================
FILE: apps/api/app/layout.tsx
================================================
import { AnalyticsProvider } from "@repo/analytics/provider";
import type { ReactNode } from "react";

interface RootLayoutProperties {
  readonly children: ReactNode;
}

const RootLayout = ({ children }: RootLayoutProperties) => (
  <html lang="en">
    <body>
      <AnalyticsProvider>{children}</AnalyticsProvider>
    </body>
  </html>
);

export default RootLayout;


================================================
FILE: apps/api/app/webhooks/auth/route.ts
================================================
import { analytics } from "@repo/analytics/server";
import type {
  DeletedObjectJSON,
  OrganizationJSON,
  OrganizationMembershipJSON,
  UserJSON,
  WebhookEvent,
} from "@repo/auth/server";
import { log } from "@repo/observability/log";
import { headers } from "next/headers";
import { NextResponse } from "next/server";
import { Webhook } from "svix";
import { env } from "@/env";

const handleUserCreated = (data: UserJSON) => {
  analytics?.identify({
    distinctId: data.id,
    properties: {
      email: data.email_addresses.at(0)?.email_address,
      firstName: data.first_name,
      lastName: data.last_name,
      createdAt: new Date(data.created_at),
      avatar: data.image_url,
      phoneNumber: data.phone_numbers.at(0)?.phone_number,
    },
  });

  analytics?.capture({
    event: "User Created",
    distinctId: data.id,
  });

  return new Response("User created", { status: 201 });
};

const handleUserUpdated = (data: UserJSON) => {
  analytics?.identify({
    distinctId: data.id,
    properties: {
      email: data.email_addresses.at(0)?.email_address,
      firstName: data.first_name,
      lastName: data.last_name,
      createdAt: new Date(data.created_at),
      avatar: data.image_url,
      phoneNumber: data.phone_numbers.at(0)?.phone_number,
    },
  });

  analytics?.capture({
    event: "User Updated",
    distinctId: data.id,
  });

  return new Response("User updated", { status: 201 });
};

const handleUserDeleted = (data: DeletedObjectJSON) => {
  if (data.id) {
    analytics?.identify({
      distinctId: data.id,
      properties: {
        deleted: new Date(),
      },
    });

    analytics?.capture({
      event: "User Deleted",
      distinctId: data.id,
    });
  }

  return new Response("User deleted", { status: 201 });
};

const handleOrganizationCreated = (data: OrganizationJSON) => {
  analytics?.groupIdentify({
    groupKey: data.id,
    groupType: "company",
    distinctId: data.created_by,
    properties: {
      name: data.name,
      avatar: data.image_url,
    },
  });

  if (data.created_by) {
    analytics?.capture({
      event: "Organization Created",
      distinctId: data.created_by,
    });
  }

  return new Response("Organization created", { status: 201 });
};

const handleOrganizationUpdated = (data: OrganizationJSON) => {
  analytics?.groupIdentify({
    groupKey: data.id,
    groupType: "company",
    distinctId: data.created_by,
    properties: {
      name: data.name,
      avatar: data.image_url,
    },
  });

  if (data.created_by) {
    analytics?.capture({
      event: "Organization Updated",
      distinctId: data.created_by,
    });
  }

  return new Response("Organization updated", { status: 201 });
};

const handleOrganizationMembershipCreated = (
  data: OrganizationMembershipJSON
) => {
  analytics?.groupIdentify({
    groupKey: data.organization.id,
    groupType: "company",
    distinctId: data.public_user_data.user_id,
  });

  analytics?.capture({
    event: "Organization Member Created",
    distinctId: data.public_user_data.user_id,
  });

  return new Response("Organization membership created", { status: 201 });
};

const handleOrganizationMembershipDeleted = (
  data: OrganizationMembershipJSON
) => {
  // Need to unlink the user from the group

  analytics?.capture({
    event: "Organization Member Deleted",
    distinctId: data.public_user_data.user_id,
  });

  return new Response("Organization membership deleted", { status: 201 });
};

export const POST = async (request: Request): Promise<Response> => {
  if (!env.CLERK_WEBHOOK_SECRET) {
    return NextResponse.json({ message: "Not configured", ok: false });
  }

  // Get the headers
  const headerPayload = await headers();
  const svixId = headerPayload.get("svix-id");
  const svixTimestamp = headerPayload.get("svix-timestamp");
  const svixSignature = headerPayload.get("svix-signature");

  // If there are no headers, error out
  if (!(svixId && svixTimestamp && svixSignature)) {
    return new Response("Error occured -- no svix headers", {
      status: 400,
    });
  }

  // Get the body
  const payload = (await request.json()) as object;
  const body = JSON.stringify(payload);

  // Create a new SVIX instance with your secret.
  const webhook = new Webhook(env.CLERK_WEBHOOK_SECRET);

  let event: WebhookEvent | undefined;

  // Verify the payload with the headers
  try {
    event = webhook.verify(body, {
      "svix-id": svixId,
      "svix-timestamp": svixTimestamp,
      "svix-signature": svixSignature,
    }) as WebhookEvent;
  } catch (error) {
    log.error("Error verifying webhook:", { error });
    return new Response("Error occured", {
      status: 400,
    });
  }

  // Get the ID and type
  const { id } = event.data;
  const eventType = event.type;

  log.info("Webhook", { id, eventType, body });

  let response: Response = new Response("", { status: 201 });

  switch (eventType) {
    case "user.created": {
      response = handleUserCreated(event.data);
      break;
    }
    case "user.updated": {
      response = handleUserUpdated(event.data);
      break;
    }
    case "user.deleted": {
      response = handleUserDeleted(event.data);
      break;
    }
    case "organization.created": {
      response = handleOrganizationCreated(event.data);
      break;
    }
    case "organization.updated": {
      response = handleOrganizationUpdated(event.data);
      break;
    }
    case "organizationMembership.created": {
      response = handleOrganizationMembershipCreated(event.data);
      break;
    }
    case "organizationMembership.deleted": {
      response = handleOrganizationMembershipDeleted(event.data);
      break;
    }
    default: {
      break;
    }
  }

  await analytics?.shutdown();

  return response;
};


================================================
FILE: apps/api/app/webhooks/payments/route.ts
================================================
import { analytics } from "@repo/analytics/server";
import { clerkClient } from "@repo/auth/server";
import { parseError } from "@repo/observability/error";
import { log } from "@repo/observability/log";
import type { Stripe } from "@repo/payments";
import { stripe } from "@repo/payments";
import { headers } from "next/headers";
import { NextResponse } from "next/server";
import { env } from "@/env";

const getUserFromCustomerId = async (customerId: string) => {
  const clerk = await clerkClient();
  const users = await clerk.users.getUserList();

  const user = users.data.find(
    (currentUser) => currentUser.privateMetadata.stripeCustomerId === customerId
  );

  return user;
};

const handleCheckoutSessionCompleted = async (
  data: Stripe.Checkout.Session
) => {
  if (!data.customer) {
    return;
  }

  const customerId =
    typeof data.customer === "string" ? data.customer : data.customer.id;
  const user = await getUserFromCustomerId(customerId);

  if (!user) {
    return;
  }

  analytics?.capture({
    event: "User Subscribed",
    distinctId: user.id,
  });
};

const handleSubscriptionScheduleCanceled = async (
  data: Stripe.SubscriptionSchedule
) => {
  if (!data.customer) {
    return;
  }

  const customerId =
    typeof data.customer === "string" ? data.customer : data.customer.id;
  const user = await getUserFromCustomerId(customerId);

  if (!user) {
    return;
  }

  analytics?.capture({
    event: "User Unsubscribed",
    distinctId: user.id,
  });
};

export const POST = async (request: Request): Promise<Response> => {
  if (!(stripe && env.STRIPE_WEBHOOK_SECRET)) {
    return NextResponse.json({ message: "Not configured", ok: false });
  }

  try {
    const body = await request.text();
    const headerPayload = await headers();
    const signature = headerPayload.get("stripe-signature");

    if (!signature) {
      throw new Error("missing stripe-signature header");
    }

    const event = stripe.webhooks.constructEvent(
      body,
      signature,
      env.STRIPE_WEBHOOK_SECRET
    );

    switch (event.type) {
      case "checkout.session.completed": {
        await handleCheckoutSessionCompleted(event.data.object);
        break;
      }
      case "subscription_schedule.canceled": {
        await handleSubscriptionScheduleCanceled(event.data.object);
        break;
      }
      default: {
        log.warn(`Unhandled event type ${event.type}`);
      }
    }

    await analytics?.shutdown();

    return NextResponse.json({ result: event, ok: true });
  } catch (error) {
    const message = parseError(error);

    log.error(message);

    return NextResponse.json(
      {
        message: "something went wrong",
        ok: false,
      },
      { status: 500 }
    );
  }
};


================================================
FILE: apps/api/env.ts
================================================
import { keys as analytics } from "@repo/analytics/keys";
import { keys as auth } from "@repo/auth/keys";
import { keys as database } from "@repo/database/keys";
import { keys as email } from "@repo/email/keys";
import { keys as core } from "@repo/next-config/keys";
import { keys as observability } from "@repo/observability/keys";
import { keys as payments } from "@repo/payments/keys";
import { createEnv } from "@t3-oss/env-nextjs";

export const env = createEnv({
  extends: [
    auth(),
    analytics(),
    core(),
    database(),
    email(),
    observability(),
    payments(),
  ],
  server: {},
  client: {},
  runtimeEnv: {},
});


================================================
FILE: apps/api/instrumentation-client.ts
================================================
import { initializeAnalytics } from "@repo/analytics/instrumentation-client";
import { initializeSentry } from "@repo/observability/client";

initializeSentry();
initializeAnalytics();

export { onRouterTransitionStart } from "@repo/observability/client";


================================================
FILE: apps/api/instrumentation.ts
================================================
import { initializeSentry } from "@repo/observability/instrumentation";

export const register = initializeSentry;
export { onRequestError } from "@repo/observability/instrumentation";


================================================
FILE: apps/api/next.config.ts
================================================
import { config, withAnalyzer } from "@repo/next-config";
import { withLogging, withSentry } from "@repo/observability/next-config";
import type { NextConfig } from "next";
import { env } from "@/env";

let nextConfig: NextConfig = withLogging(config);

if (env.VERCEL) {
  nextConfig = withSentry(nextConfig);
}

if (env.ANALYZE === "true") {
  nextConfig = withAnalyzer(nextConfig);
}

export default nextConfig;


================================================
FILE: apps/api/package.json
================================================
{
  "name": "api",
  "private": true,
  "scripts": {
    "dev": "concurrently \"npm:next-dev\" \"npm:stripe\"",
    "next-dev": "bun --bun next dev -p 3002",
    "build": "bun --bun next build",
    "start": "bun --bun next start",
    "analyze": "ANALYZE=true npm run build",
    "test": "NODE_ENV=test vitest run",
    "stripe": "stripe listen --forward-to localhost:3002/webhooks/payments",
    "clean": "git clean -xdf .cache .turbo dist node_modules",
    "typecheck": "tsc --noEmit --emitDeclarationOnly false"
  },
  "dependencies": {
    "@repo/analytics": "workspace:*",
    "@repo/auth": "workspace:*",
    "@repo/database": "workspace:*",
    "@repo/design-system": "workspace:*",
    "@repo/next-config": "workspace:*",
    "@repo/observability": "workspace:*",
    "@repo/payments": "workspace:*",
    "@sentry/nextjs": "^10.42.0",
    "@t3-oss/env-nextjs": "^0.13.10",
    "import-in-the-middle": "^3.0.0",
    "next": "16.1.6",
    "react": "19.2.4",
    "react-dom": "19.2.4",
    "require-in-the-middle": "8.0.1",
    "svix": "^1.86.0",
    "zod": "^4.3.6"
  },
  "devDependencies": {
    "@repo/typescript-config": "workspace:*",
    "@types/node": "25.3.5",
    "@types/react": "19.2.14",
    "@types/react-dom": "19.2.3",
    "@vitejs/plugin-react": "^5.1.4",
    "concurrently": "^9.2.1",
    "typescript": "^5.9.3",
    "vitest": "^4.0.18"
  }
}


================================================
FILE: apps/api/scripts/skip-ci.js
================================================
const { execSync } = require("node:child_process");

const commitMessage = execSync("git log -1 --pretty=%B").toString().trim();

if (commitMessage.includes("[skip ci]")) {
  console.log("Skipping build due to [skip ci] in commit message.");
  process.exit(0); // this causes Vercel to skip the build
}

process.exit(1); // continue with build


================================================
FILE: apps/api/sentry.edge.config.ts
================================================
import { initializeSentry } from "@repo/observability/edge";

initializeSentry();


================================================
FILE: apps/api/sentry.server.config.ts
================================================
import { initializeSentry } from "@repo/observability/server";

initializeSentry();


================================================
FILE: apps/api/tsconfig.json
================================================
{
  "extends": "@repo/typescript-config/nextjs.json",
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["./*"],
      "@repo/*": ["../../packages/*"]
    }
  },
  "include": [
    "next-env.d.ts",
    "next.config.ts",
    "**/*.ts",
    "**/*.tsx",
    ".next/types/**/*.ts"
  ]
}


================================================
FILE: apps/api/vercel.json
================================================
{
  "$schema": "https://openapi.vercel.sh/vercel.json",
  "bunVersion": "1.x",
  "ignoreCommand": "node scripts/skip-ci.js",
  "crons": [
    {
      "path": "/cron/keep-alive",
      "schedule": "0 1 * * *"
    }
  ]
}


================================================
FILE: apps/api/vitest.config.mts
================================================
import path from "node:path";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vitest/config";

export default defineConfig({
  plugins: [react()],
  test: {
    environment: "jsdom",
  },
  resolve: {
    alias: {
      "@": path.resolve(import.meta.dirname, "./"),
      "@repo": path.resolve(import.meta.dirname, "../../packages"),
    },
  },
});


================================================
FILE: apps/app/.gitignore
================================================

# clerk configuration (can include secrets)
/.clerk/
.vercel


================================================
FILE: apps/app/__tests__/sign-in.test.tsx
================================================
import { render } from "@testing-library/react";
import { expect, test } from "vitest";
import Page from "../app/(unauthenticated)/sign-in/[[...sign-in]]/page";

test("Sign In Page", () => {
  const { container } = render(<Page />);
  expect(container).toBeDefined();
});


================================================
FILE: apps/app/__tests__/sign-up.test.tsx
================================================
import { render } from "@testing-library/react";
import { expect, test } from "vitest";
import Page from "../app/(unauthenticated)/sign-up/[[...sign-up]]/page";

test("Sign Up Page", () => {
  const { container } = render(<Page />);
  expect(container).toBeDefined();
});


================================================
FILE: apps/app/app/(authenticated)/components/avatar-stack.tsx
================================================
"use client";

import { useOthers, useSelf } from "@repo/collaboration/hooks";
import {
  Avatar,
  AvatarFallback,
  AvatarImage,
} from "@repo/design-system/components/ui/avatar";
import {
  Tooltip,
  TooltipContent,
  TooltipTrigger,
} from "@repo/design-system/components/ui/tooltip";

interface PresenceAvatarProps {
  info?: Liveblocks["UserMeta"]["info"];
}

const PresenceAvatar = ({ info }: PresenceAvatarProps) => (
  <Tooltip delayDuration={0}>
    <TooltipTrigger>
      <Avatar className="h-7 w-7 bg-secondary ring-1 ring-background">
        <AvatarImage alt={info?.name} src={info?.avatar} />
        <AvatarFallback className="text-xs">
          {info?.name?.slice(0, 2)}
        </AvatarFallback>
      </Avatar>
    </TooltipTrigger>
    <TooltipContent collisionPadding={4}>
      <p>{info?.name ?? "Unknown"}</p>
    </TooltipContent>
  </Tooltip>
);

export const AvatarStack = () => {
  const others = useOthers();
  const self = useSelf();
  const hasMoreUsers = others.length > 3;

  return (
    <div className="flex items-center -space-x-1 px-4">
      {others.slice(0, 3).map(({ connectionId, info }) => (
        <PresenceAvatar info={info} key={connectionId} />
      ))}

      {hasMoreUsers && (
        <PresenceAvatar
          info={{
            name: `+${others.length - 3}`,
            color: "var(--color-muted-foreground)",
          }}
        />
      )}

      {self && <PresenceAvatar info={self.info} />}
    </div>
  );
};


================================================
FILE: apps/app/app/(authenticated)/components/collaboration-provider.tsx
================================================
"use client";

import { Room } from "@repo/collaboration/room";
import type { ReactNode } from "react";
import { getUsers } from "@/app/actions/users/get";
import { searchUsers } from "@/app/actions/users/search";

export const CollaborationProvider = ({
  orgId,
  children,
}: {
  orgId: string;
  children: ReactNode;
}) => {
  const resolveUsers = async ({ userIds }: { userIds: string[] }) => {
    const response = await getUsers(userIds);

    if ("error" in response) {
      throw new Error("Problem resolving users");
    }

    return response.data;
  };

  const resolveMentionSuggestions = async ({ text }: { text: string }) => {
    const response = await searchUsers(text);

    if ("error" in response) {
      throw new Error("Problem resolving mention suggestions");
    }

    return response.data;
  };

  return (
    <Room
      authEndpoint="/api/collaboration/auth"
      fallback={
        <div className="px-3 text-muted-foreground text-xs">Loading...</div>
      }
      id={`${orgId}:presence`}
      resolveMentionSuggestions={resolveMentionSuggestions}
      resolveUsers={resolveUsers}
    >
      {children}
    </Room>
  );
};


================================================
FILE: apps/app/app/(authenticated)/components/cursors.tsx
================================================
"use client";

import { useMyPresence, useOthers } from "@repo/collaboration/hooks";
import { useEffect } from "react";

const Cursor = ({
  name,
  color,
  x,
  y,
}: {
  name: string | undefined;
  color: string;
  x: number;
  y: number;
}) => (
  <div
    className="pointer-events-none absolute top-0 left-0 z-[999] select-none transition-transform duration-100"
    style={{
      transform: `translateX(${x}px) translateY(${y}px)`,
    }}
  >
    <svg
      className="absolute top-0 left-0"
      fill="none"
      height="36"
      viewBox="0 0 24 36"
      width="24"
      xmlns="http://www.w3.org/2000/svg"
    >
      <title>Cursor</title>
      <path
        d="M5.65376 12.3673H5.46026L5.31717 12.4976L0.500002 16.8829L0.500002 1.19841L11.7841 12.3673H5.65376Z"
        fill={color}
      />
    </svg>
    <div
      className="absolute top-4 left-1.5 whitespace-nowrap rounded-full px-2 py-0.5 text-white text-xs"
      style={{
        backgroundColor: color,
      }}
    >
      {name}
    </div>
  </div>
);

export const Cursors = () => {
  /**
   * useMyPresence returns the presence of the current user and a function to update it.
   * updateMyPresence is different than the setState function returned by the useState hook from React.
   * You don't need to pass the full presence object to update it.
   * See https://liveblocks.io/docs/api-reference/liveblocks-react#useMyPresence for more information
   */
  const [_cursor, updateMyPresence] = useMyPresence();

  /**
   * Return all the other users in the room and their presence (a cursor position in this case)
   */
  const others = useOthers();

  useEffect(() => {
    const onPointerMove = (event: PointerEvent) => {
      // Update the user cursor position on every pointer move
      updateMyPresence({
        cursor: {
          x: Math.round(event.clientX),
          y: Math.round(event.clientY),
        },
      });
    };

    const onPointerLeave = () => {
      // When the pointer goes out, set cursor to null
      updateMyPresence({
        cursor: null,
      });
    };

    document.body.addEventListener("pointermove", onPointerMove);
    document.body.addEventListener("pointerleave", onPointerLeave);

    return () => {
      document.body.removeEventListener("pointermove", onPointerMove);
      document.body.removeEventListener("pointerleave", onPointerLeave);
    };
  }, [updateMyPresence]);

  return others.map(({ connectionId, presence, info }) => {
    if (!presence.cursor) {
      return null;
    }

    return (
      <Cursor
        color={info.color}
        // connectionId is an integer that is incremented at every new connections
        // Assigning a color with a modulo makes sure that a specific user has the same colors on every clients
        key={`cursor-${connectionId}`}
        name={info?.name}
        x={presence.cursor.x}
        y={presence.cursor.y}
      />
    );
  });
};


================================================
FILE: apps/app/app/(authenticated)/components/header.tsx
================================================
import {
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from "@repo/design-system/components/ui/breadcrumb";
import { Separator } from "@repo/design-system/components/ui/separator";
import { SidebarTrigger } from "@repo/design-system/components/ui/sidebar";
import { Fragment, type ReactNode } from "react";

interface HeaderProps {
  children?: ReactNode;
  page: string;
  pages: string[];
}

export const Header = ({ pages, page, children }: HeaderProps) => (
  <header className="flex h-16 shrink-0 items-center justify-between gap-2">
    <div className="flex items-center gap-2 px-4">
      <SidebarTrigger className="-ml-1" />
      <Separator className="mr-2 h-4" orientation="vertical" />
      <Breadcrumb>
        <BreadcrumbList>
          {pages.map((page, index) => (
            <Fragment key={page}>
              {index > 0 && <BreadcrumbSeparator className="hidden md:block" />}
              <BreadcrumbItem className="hidden md:block">
                <BreadcrumbLink href="#">{page}</BreadcrumbLink>
              </BreadcrumbItem>
            </Fragment>
          ))}
          <BreadcrumbSeparator className="hidden md:block" />
          <BreadcrumbItem>
            <BreadcrumbPage>{page}</BreadcrumbPage>
          </BreadcrumbItem>
        </BreadcrumbList>
      </Breadcrumb>
    </div>
    {children}
  </header>
);


================================================
FILE: apps/app/app/(authenticated)/components/notifications-provider.tsx
================================================
"use client";

import { NotificationsProvider as RawNotificationsProvider } from "@repo/notifications/components/provider";
import { useTheme } from "next-themes";
import type { ReactNode } from "react";

interface NotificationsProviderProperties {
  children: ReactNode;
  userId: string;
}

export const NotificationsProvider = ({
  children,
  userId,
}: NotificationsProviderProperties) => {
  const { resolvedTheme } = useTheme();

  return (
    <RawNotificationsProvider
      theme={resolvedTheme as "light" | "dark"}
      userId={userId}
    >
      {children}
    </RawNotificationsProvider>
  );
};


================================================
FILE: apps/app/app/(authenticated)/components/search.tsx
================================================
import { Button } from "@repo/design-system/components/ui/button";
import { Input } from "@repo/design-system/components/ui/input";
import { ArrowRightIcon, SearchIcon } from "lucide-react";

export const Search = () => (
  <form action="/search" className="flex items-center gap-2 px-4">
    <div className="relative">
      <div className="absolute top-px bottom-px left-px flex h-8 w-8 items-center justify-center">
        <SearchIcon className="text-muted-foreground" size={16} />
      </div>
      <Input
        className="h-auto bg-background py-1.5 pr-3 pl-8 text-xs"
        name="q"
        placeholder="Search"
        type="text"
      />
      <Button
        className="absolute top-px right-px bottom-px h-8 w-8"
        size="icon"
        variant="ghost"
      >
        <ArrowRightIcon className="text-muted-foreground" size={16} />
      </Button>
    </div>
  </form>
);


================================================
FILE: apps/app/app/(authenticated)/components/sidebar.tsx
================================================
"use client";

import { OrganizationSwitcher, UserButton } from "@repo/auth/client";
import { ModeToggle } from "@repo/design-system/components/mode-toggle";
import { Button } from "@repo/design-system/components/ui/button";
import {
  Collapsible,
  CollapsibleContent,
  CollapsibleTrigger,
} from "@repo/design-system/components/ui/collapsible";
import {
  DropdownMenu,
  DropdownMenuContent,
  DropdownMenuItem,
  DropdownMenuSeparator,
  DropdownMenuTrigger,
} from "@repo/design-system/components/ui/dropdown-menu";
import {
  Sidebar,
  SidebarContent,
  SidebarFooter,
  SidebarGroup,
  SidebarGroupContent,
  SidebarGroupLabel,
  SidebarHeader,
  SidebarInset,
  SidebarMenu,
  SidebarMenuAction,
  SidebarMenuButton,
  SidebarMenuItem,
  SidebarMenuSub,
  SidebarMenuSubButton,
  SidebarMenuSubItem,
  useSidebar,
} from "@repo/design-system/components/ui/sidebar";
import { cn } from "@repo/design-system/lib/utils";
import { NotificationsTrigger } from "@repo/notifications/components/trigger";
import {
  AnchorIcon,
  BookOpenIcon,
  BotIcon,
  ChevronRightIcon,
  FolderIcon,
  FrameIcon,
  LifeBuoyIcon,
  MapIcon,
  MoreHorizontalIcon,
  PieChartIcon,
  SendIcon,
  Settings2Icon,
  ShareIcon,
  SquareTerminalIcon,
  Trash2Icon,
} from "lucide-react";
import Link from "next/link";
import type { ReactNode } from "react";
import { Search } from "./search";

interface GlobalSidebarProperties {
  readonly children: ReactNode;
}

const data = {
  user: {
    name: "shadcn",
    email: "m@example.com",
    avatar: "/avatars/shadcn.jpg",
  },
  navMain: [
    {
      title: "Playground",
      url: "#",
      icon: SquareTerminalIcon,
      isActive: true,
      items: [
        {
          title: "History",
          url: "#",
        },
        {
          title: "Starred",
          url: "#",
        },
        {
          title: "Settings",
          url: "#",
        },
      ],
    },
    {
      title: "Models",
      url: "#",
      icon: BotIcon,
      items: [
        {
          title: "Genesis",
          url: "#",
        },
        {
          title: "Explorer",
          url: "#",
        },
        {
          title: "Quantum",
          url: "#",
        },
      ],
    },
    {
      title: "Documentation",
      url: "#",
      icon: BookOpenIcon,
      items: [
        {
          title: "Introduction",
          url: "#",
        },
        {
          title: "Get Started",
          url: "#",
        },
        {
          title: "Tutorials",
          url: "#",
        },
        {
          title: "Changelog",
          url: "#",
        },
      ],
    },
    {
      title: "Settings",
      url: "#",
      icon: Settings2Icon,
      items: [
        {
          title: "General",
          url: "#",
        },
        {
          title: "Team",
          url: "#",
        },
        {
          title: "Billing",
          url: "#",
        },
        {
          title: "Limits",
          url: "#",
        },
      ],
    },
  ],
  navSecondary: [
    {
      title: "Webhooks",
      url: "/webhooks",
      icon: AnchorIcon,
    },
    {
      title: "Support",
      url: "#",
      icon: LifeBuoyIcon,
    },
    {
      title: "Feedback",
      url: "#",
      icon: SendIcon,
    },
  ],
  projects: [
    {
      name: "Design Engineering",
      url: "#",
      icon: FrameIcon,
    },
    {
      name: "Sales & Marketing",
      url: "#",
      icon: PieChartIcon,
    },
    {
      name: "Travel",
      url: "#",
      icon: MapIcon,
    },
  ],
};

export const GlobalSidebar = ({ children }: GlobalSidebarProperties) => {
  const sidebar = useSidebar();

  return (
    <>
      <Sidebar variant="inset">
        <SidebarHeader>
          <SidebarMenu>
            <SidebarMenuItem>
              <div
                className={cn(
                  "h-[36px] overflow-hidden transition-all [&>div]:w-full",
                  sidebar.open ? "" : "-mx-1"
                )}
              >
                <OrganizationSwitcher
                  afterSelectOrganizationUrl="/"
                  hidePersonal
                />
              </div>
            </SidebarMenuItem>
          </SidebarMenu>
        </SidebarHeader>
        <Search />
        <SidebarContent>
          <SidebarGroup>
            <SidebarGroupLabel>Platform</SidebarGroupLabel>
            <SidebarMenu>
              {data.navMain.map((item) => (
                <Collapsible
                  asChild
                  defaultOpen={item.isActive}
                  key={item.title}
                >
                  <SidebarMenuItem>
                    <SidebarMenuButton asChild tooltip={item.title}>
                      <Link href={item.url}>
                        <item.icon />
                        <span>{item.title}</span>
                      </Link>
                    </SidebarMenuButton>
                    {item.items?.length ? (
                      <>
                        <CollapsibleTrigger asChild>
                          <SidebarMenuAction className="data-[state=open]:rotate-90">
                            <ChevronRightIcon />
                            <span className="sr-only">Toggle</span>
                          </SidebarMenuAction>
                        </CollapsibleTrigger>
                        <CollapsibleContent>
                          <SidebarMenuSub>
                            {item.items?.map((subItem) => (
                              <SidebarMenuSubItem key={subItem.title}>
                                <SidebarMenuSubButton asChild>
                                  <Link href={subItem.url}>
                                    <span>{subItem.title}</span>
                                  </Link>
                                </SidebarMenuSubButton>
                              </SidebarMenuSubItem>
                            ))}
                          </SidebarMenuSub>
                        </CollapsibleContent>
                      </>
                    ) : null}
                  </SidebarMenuItem>
                </Collapsible>
              ))}
            </SidebarMenu>
          </SidebarGroup>
          <SidebarGroup className="group-data-[collapsible=icon]:hidden">
            <SidebarGroupLabel>Projects</SidebarGroupLabel>
            <SidebarMenu>
              {data.projects.map((item) => (
                <SidebarMenuItem key={item.name}>
                  <SidebarMenuButton asChild>
                    <Link href={item.url}>
                      <item.icon />
                      <span>{item.name}</span>
                    </Link>
                  </SidebarMenuButton>
                  <DropdownMenu>
                    <DropdownMenuTrigger asChild>
                      <SidebarMenuAction showOnHover>
                        <MoreHorizontalIcon />
                        <span className="sr-only">More</span>
                      </SidebarMenuAction>
                    </DropdownMenuTrigger>
                    <DropdownMenuContent
                      align="end"
                      className="w-48"
                      side="bottom"
                    >
                      <DropdownMenuItem>
                        <FolderIcon className="text-muted-foreground" />
                        <span>View Project</span>
                      </DropdownMenuItem>
                      <DropdownMenuItem>
                        <ShareIcon className="text-muted-foreground" />
                        <span>Share Project</span>
                      </DropdownMenuItem>
                      <DropdownMenuSeparator />
                      <DropdownMenuItem>
                        <Trash2Icon className="text-muted-foreground" />
                        <span>Delete Project</span>
                      </DropdownMenuItem>
                    </DropdownMenuContent>
                  </DropdownMenu>
                </SidebarMenuItem>
              ))}
              <SidebarMenuItem>
                <SidebarMenuButton>
                  <MoreHorizontalIcon />
                  <span>More</span>
                </SidebarMenuButton>
              </SidebarMenuItem>
            </SidebarMenu>
          </SidebarGroup>
          <SidebarGroup className="mt-auto">
            <SidebarGroupContent>
              <SidebarMenu>
                {data.navSecondary.map((item) => (
                  <SidebarMenuItem key={item.title}>
                    <SidebarMenuButton asChild>
                      <Link href={item.url}>
                        <item.icon />
                        <span>{item.title}</span>
                      </Link>
                    </SidebarMenuButton>
                  </SidebarMenuItem>
                ))}
              </SidebarMenu>
            </SidebarGroupContent>
          </SidebarGroup>
        </SidebarContent>
        <SidebarFooter>
          <SidebarMenu>
            <SidebarMenuItem className="flex items-center gap-2">
              <UserButton
                appearance={{
                  elements: {
                    rootBox: "flex overflow-hidden w-full",
                    userButtonBox: "flex-row-reverse",
                    userButtonOuterIdentifier: "truncate pl-0",
                  },
                }}
                showName
              />
              <div className="flex shrink-0 items-center gap-px">
                <ModeToggle />
                <Button
                  asChild
                  className="shrink-0"
                  size="icon"
                  variant="ghost"
                >
                  <div className="h-4 w-4">
                    <NotificationsTrigger />
                  </div>
                </Button>
              </div>
            </SidebarMenuItem>
          </SidebarMenu>
        </SidebarFooter>
      </Sidebar>
      <SidebarInset>{children}</SidebarInset>
    </>
  );
};


================================================
FILE: apps/app/app/(authenticated)/layout.tsx
================================================
import { auth, currentUser } from "@repo/auth/server";
import { SidebarProvider } from "@repo/design-system/components/ui/sidebar";
import { showBetaFeature } from "@repo/feature-flags";
import { secure } from "@repo/security";
import type { ReactNode } from "react";
import { env } from "@/env";
import { NotificationsProvider } from "./components/notifications-provider";
import { GlobalSidebar } from "./components/sidebar";

interface AppLayoutProperties {
  readonly children: ReactNode;
}

const AppLayout = async ({ children }: AppLayoutProperties) => {
  if (env.ARCJET_KEY) {
    await secure(["CATEGORY:PREVIEW"]);
  }

  const user = await currentUser();
  const { redirectToSignIn } = await auth();
  const betaFeature = await showBetaFeature();

  if (!user) {
    return redirectToSignIn();
  }

  return (
    <NotificationsProvider userId={user.id}>
      <SidebarProvider>
        <GlobalSidebar>
          {betaFeature && (
            <div className="m-4 rounded-full bg-blue-500 p-1.5 text-center text-sm text-white">
              Beta feature now available
            </div>
          )}
          {children}
        </GlobalSidebar>
      </SidebarProvider>
    </NotificationsProvider>
  );
};

export default AppLayout;


================================================
FILE: apps/app/app/(authenticated)/page.tsx
================================================
import { auth } from "@repo/auth/server";
import { database } from "@repo/database";
import type { Metadata } from "next";
import dynamic from "next/dynamic";
import { notFound } from "next/navigation";
import { env } from "@/env";
import { AvatarStack } from "./components/avatar-stack";
import { Cursors } from "./components/cursors";
import { Header } from "./components/header";

const title = "Acme Inc";
const description = "My application.";

const CollaborationProvider = dynamic(() =>
  import("./components/collaboration-provider").then(
    (mod) => mod.CollaborationProvider
  )
);

export const metadata: Metadata = {
  title,
  description,
};

const App = async () => {
  const pages = await database.page.findMany();
  const { orgId } = await auth();

  if (!orgId) {
    notFound();
  }

  return (
    <>
      <Header page="Data Fetching" pages={["Building Your Application"]}>
        {env.LIVEBLOCKS_SECRET && (
          <CollaborationProvider orgId={orgId}>
            <AvatarStack />
            <Cursors />
          </CollaborationProvider>
        )}
      </Header>
      <div className="flex flex-1 flex-col gap-4 p-4 pt-0">
        <div className="grid auto-rows-min gap-4 md:grid-cols-3">
          {pages.map((page) => (
            <div className="aspect-video rounded-xl bg-muted/50" key={page.id}>
              {page.name}
            </div>
          ))}
        </div>
        <div className="min-h-[100vh] flex-1 rounded-xl bg-muted/50 md:min-h-min" />
      </div>
    </>
  );
};

export default App;


================================================
FILE: apps/app/app/(authenticated)/search/page.tsx
================================================
import { auth } from "@repo/auth/server";
import { database } from "@repo/database";
import { notFound, redirect } from "next/navigation";
import { Header } from "../components/header";

interface SearchPageProperties {
  searchParams: Promise<{
    q: string;
  }>;
}

export const generateMetadata = async ({
  searchParams,
}: SearchPageProperties) => {
  const { q } = await searchParams;

  return {
    title: `${q} - Search results`,
    description: `Search results for ${q}`,
  };
};

const SearchPage = async ({ searchParams }: SearchPageProperties) => {
  const { q } = await searchParams;
  const pages = await database.page.findMany({
    where: {
      name: {
        contains: q,
      },
    },
  });
  const { orgId } = await auth();

  if (!orgId) {
    notFound();
  }

  if (!q) {
    redirect("/");
  }

  return (
    <>
      <Header page="Search" pages={["Building Your Application"]} />
      <div className="flex flex-1 flex-col gap-4 p-4 pt-0">
        <div className="grid auto-rows-min gap-4 md:grid-cols-3">
          {pages.map((page) => (
            <div className="aspect-video rounded-xl bg-muted/50" key={page.id}>
              {page.name}
            </div>
          ))}
        </div>
        <div className="min-h-[100vh] flex-1 rounded-xl bg-muted/50 md:min-h-min" />
      </div>
    </>
  );
};

export default SearchPage;


================================================
FILE: apps/app/app/(authenticated)/webhooks/page.tsx
================================================
import { webhooks } from "@repo/webhooks";
import { notFound } from "next/navigation";

export const metadata = {
  title: "Webhooks",
  description: "Send webhooks to your users.",
};

const WebhooksPage = async () => {
  const response = await webhooks.getAppPortal();

  if (!response?.url) {
    notFound();
  }

  return (
    <div className="h-full w-full overflow-hidden">
      <iframe
        allow="clipboard-write"
        className="h-full w-full border-none"
        loading="lazy"
        src={response.url}
        title="Webhooks"
      />
    </div>
  );
};

export default WebhooksPage;


================================================
FILE: apps/app/app/(unauthenticated)/layout.tsx
================================================
import { ModeToggle } from "@repo/design-system/components/mode-toggle";
import { CommandIcon } from "lucide-react";
import type { ReactNode } from "react";

interface AuthLayoutProps {
  readonly children: ReactNode;
}

const AuthLayout = ({ children }: AuthLayoutProps) => (
  <div className="container relative grid h-dvh flex-col items-center justify-center lg:max-w-none lg:grid-cols-2 lg:px-0">
    <div className="relative hidden h-full flex-col bg-muted p-10 text-white lg:flex dark:border-r">
      <div className="absolute inset-0 bg-muted" />
      <div className="relative z-20 flex items-center font-medium text-lg text-primary">
        <CommandIcon className="mr-2 h-6 w-6" />
        Acme Inc
      </div>
      <div className="absolute top-4 right-4">
        <ModeToggle />
      </div>
      <div className="relative z-20 mt-auto text-primary">
        <blockquote className="space-y-2">
          <p className="text-lg">
            &ldquo;This library has saved me countless hours of work and helped
            me deliver stunning designs to my clients faster than ever
            before.&rdquo;
          </p>
          <footer className="text-sm">Sofia Davis</footer>
        </blockquote>
      </div>
    </div>
    <div className="lg:p-8">
      <div className="mx-auto flex w-full max-w-[400px] flex-col justify-center space-y-6">
        {children}
      </div>
    </div>
  </div>
);

export default AuthLayout;


================================================
FILE: apps/app/app/(unauthenticated)/sign-in/[[...sign-in]]/page.tsx
================================================
import { createMetadata } from "@repo/seo/metadata";
import type { Metadata } from "next";
import dynamic from "next/dynamic";

const title = "Welcome back";
const description = "Enter your details to sign in.";
const SignIn = dynamic(() =>
  import("@repo/auth/components/sign-in").then((mod) => mod.SignIn)
);

export const metadata: Metadata = createMetadata({ title, description });

const SignInPage = () => <SignIn />;

export default SignInPage;


================================================
FILE: apps/app/app/(unauthenticated)/sign-up/[[...sign-up]]/page.tsx
================================================
import { createMetadata } from "@repo/seo/metadata";
import type { Metadata } from "next";
import dynamic from "next/dynamic";

const title = "Create an account";
const description = "Enter your details to get started.";
const SignUp = dynamic(() =>
  import("@repo/auth/components/sign-up").then((mod) => mod.SignUp)
);

export const metadata: Metadata = createMetadata({ title, description });

const SignUpPage = () => <SignUp />;

export default SignUpPage;


================================================
FILE: apps/app/app/.well-known/vercel/flags/route.ts
================================================
import { getFlags } from "@repo/feature-flags/access";

export const GET = getFlags;


================================================
FILE: apps/app/app/actions/users/get.ts
================================================
"use server";

import {
  auth,
  clerkClient,
  type OrganizationMembership,
} from "@repo/auth/server";

const getName = (user: OrganizationMembership): string | undefined => {
  let name = user.publicUserData?.firstName;

  if (name && user.publicUserData?.lastName) {
    name = `${name} ${user.publicUserData.lastName}`;
  } else if (!name) {
    name = user.publicUserData?.identifier;
  }

  return name;
};

const colors = [
  "var(--color-red-500)",
  "var(--color-orange-500)",
  "var(--color-amber-500)",
  "var(--color-yellow-500)",
  "var(--color-lime-500)",
  "var(--color-green-500)",
  "var(--color-emerald-500)",
  "var(--color-teal-500)",
  "var(--color-cyan-500)",
  "var(--color-sky-500)",
  "var(--color-blue-500)",
  "var(--color-indigo-500)",
  "var(--color-violet-500)",
  "var(--color-purple-500)",
  "var(--color-fuchsia-500)",
  "var(--color-pink-500)",
  "var(--color-rose-500)",
];

export const getUsers = async (
  userIds: string[]
): Promise<
  | {
      data: Liveblocks["UserMeta"]["info"][];
    }
  | {
      error: unknown;
    }
> => {
  try {
    const { orgId } = await auth();

    if (!orgId) {
      throw new Error("Not logged in");
    }

    const clerk = await clerkClient();

    const members = await clerk.organizations.getOrganizationMembershipList({
      organizationId: orgId,
      limit: 100,
    });

    const data: Liveblocks["
Download .txt
gitextract_l86r4jct/

├── .autorc
├── .cursorrules.example
├── .github/
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── SECURITY.md
│   ├── copilot-instructions.md.example
│   ├── dependabot.yml
│   ├── pull_request_template.md
│   └── workflows/
│       └── release.yml
├── .gitignore
├── .vscode/
│   ├── extensions.json
│   ├── launch.json
│   └── settings.json
├── CHANGELOG.md
├── README.md
├── apps/
│   ├── api/
│   │   ├── .gitignore
│   │   ├── __tests__/
│   │   │   └── health.test.ts
│   │   ├── app/
│   │   │   ├── cron/
│   │   │   │   └── keep-alive/
│   │   │   │       └── route.ts
│   │   │   ├── global-error.tsx
│   │   │   ├── health/
│   │   │   │   └── route.ts
│   │   │   ├── layout.tsx
│   │   │   └── webhooks/
│   │   │       ├── auth/
│   │   │       │   └── route.ts
│   │   │       └── payments/
│   │   │           └── route.ts
│   │   ├── env.ts
│   │   ├── instrumentation-client.ts
│   │   ├── instrumentation.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── skip-ci.js
│   │   ├── sentry.edge.config.ts
│   │   ├── sentry.server.config.ts
│   │   ├── tsconfig.json
│   │   ├── vercel.json
│   │   └── vitest.config.mts
│   ├── app/
│   │   ├── .gitignore
│   │   ├── __tests__/
│   │   │   ├── sign-in.test.tsx
│   │   │   └── sign-up.test.tsx
│   │   ├── app/
│   │   │   ├── (authenticated)/
│   │   │   │   ├── components/
│   │   │   │   │   ├── avatar-stack.tsx
│   │   │   │   │   ├── collaboration-provider.tsx
│   │   │   │   │   ├── cursors.tsx
│   │   │   │   │   ├── header.tsx
│   │   │   │   │   ├── notifications-provider.tsx
│   │   │   │   │   ├── search.tsx
│   │   │   │   │   └── sidebar.tsx
│   │   │   │   ├── layout.tsx
│   │   │   │   ├── page.tsx
│   │   │   │   ├── search/
│   │   │   │   │   └── page.tsx
│   │   │   │   └── webhooks/
│   │   │   │       └── page.tsx
│   │   │   ├── (unauthenticated)/
│   │   │   │   ├── layout.tsx
│   │   │   │   ├── sign-in/
│   │   │   │   │   └── [[...sign-in]]/
│   │   │   │   │       └── page.tsx
│   │   │   │   └── sign-up/
│   │   │   │       └── [[...sign-up]]/
│   │   │   │           └── page.tsx
│   │   │   ├── .well-known/
│   │   │   │   └── vercel/
│   │   │   │       └── flags/
│   │   │   │           └── route.ts
│   │   │   ├── actions/
│   │   │   │   └── users/
│   │   │   │       ├── get.ts
│   │   │   │       └── search.ts
│   │   │   ├── api/
│   │   │   │   └── collaboration/
│   │   │   │       └── auth/
│   │   │   │           └── route.ts
│   │   │   ├── global-error.tsx
│   │   │   ├── layout.tsx
│   │   │   └── styles.css
│   │   ├── env.ts
│   │   ├── instrumentation-client.ts
│   │   ├── instrumentation.ts
│   │   ├── liveblocks.config.ts
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── proxy.ts
│   │   ├── scripts/
│   │   │   └── skip-ci.js
│   │   ├── sentry.edge.config.ts
│   │   ├── sentry.server.config.ts
│   │   ├── tsconfig.json
│   │   ├── vercel.json
│   │   └── vitest.config.mts
│   ├── docs/
│   │   ├── api-reference/
│   │   │   ├── endpoint/
│   │   │   │   ├── create.mdx
│   │   │   │   ├── delete.mdx
│   │   │   │   └── get.mdx
│   │   │   ├── introduction.mdx
│   │   │   └── openapi.json
│   │   ├── development.mdx
│   │   ├── essentials/
│   │   │   ├── code.mdx
│   │   │   ├── images.mdx
│   │   │   ├── markdown.mdx
│   │   │   ├── navigation.mdx
│   │   │   ├── reusable-snippets.mdx
│   │   │   └── settings.mdx
│   │   ├── introduction.mdx
│   │   ├── mint.json
│   │   ├── package.json
│   │   ├── quickstart.mdx
│   │   └── snippets/
│   │       └── snippet-intro.mdx
│   ├── email/
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── storybook/
│   │   ├── .storybook/
│   │   │   ├── main.ts
│   │   │   ├── preview-head.html
│   │   │   └── preview.tsx
│   │   ├── README.md
│   │   ├── next.config.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── scripts/
│   │   │   └── skip-ci.js
│   │   ├── stories/
│   │   │   ├── accordion.stories.tsx
│   │   │   ├── alert-dialog.stories.tsx
│   │   │   ├── alert.stories.tsx
│   │   │   ├── aspect-ratio.stories.tsx
│   │   │   ├── avatar.stories.tsx
│   │   │   ├── badge.stories.tsx
│   │   │   ├── breadcrumb.stories.tsx
│   │   │   ├── button.stories.tsx
│   │   │   ├── calendar.stories.tsx
│   │   │   ├── card.stories.tsx
│   │   │   ├── carousel.stories.tsx
│   │   │   ├── chart.stories.tsx
│   │   │   ├── checkbox.stories.tsx
│   │   │   ├── collapsible.stories.tsx
│   │   │   ├── command.stories.tsx
│   │   │   ├── context-menu.stories.tsx
│   │   │   ├── dialog.stories.tsx
│   │   │   ├── drawer.stories.tsx
│   │   │   ├── dropdown-menu.stories.tsx
│   │   │   ├── form.stories.tsx
│   │   │   ├── hover-card.stories.tsx
│   │   │   ├── input-otp.stories.tsx
│   │   │   ├── input.stories.tsx
│   │   │   ├── label.stories.tsx
│   │   │   ├── menubar.stories.tsx
│   │   │   ├── navigation-menu.stories.tsx
│   │   │   ├── pagination.stories.tsx
│   │   │   ├── popover.stories.tsx
│   │   │   ├── progress.stories.tsx
│   │   │   ├── radio-group.stories.tsx
│   │   │   ├── resizable.stories.tsx
│   │   │   ├── scroll-area.stories.tsx
│   │   │   ├── select.stories.tsx
│   │   │   ├── separator.stories.tsx
│   │   │   ├── sheet.stories.tsx
│   │   │   ├── sidebar.stories.tsx
│   │   │   ├── skeleton.stories.tsx
│   │   │   ├── slider.stories.tsx
│   │   │   ├── sonner.stories.tsx
│   │   │   ├── switch.stories.tsx
│   │   │   ├── table.stories.tsx
│   │   │   ├── tabs.stories.tsx
│   │   │   ├── textarea.stories.tsx
│   │   │   ├── toggle-group.stories.tsx
│   │   │   ├── toggle.stories.tsx
│   │   │   └── tooltip.stories.tsx
│   │   ├── tsconfig.json
│   │   └── vercel.json
│   ├── studio/
│   │   ├── package.json
│   │   └── tsconfig.json
│   └── web/
│       ├── .gitignore
│       ├── app/
│       │   ├── .well-known/
│       │   │   └── vercel/
│       │   │       └── flags/
│       │   │           └── route.ts
│       │   └── [locale]/
│       │       ├── (home)/
│       │       │   ├── components/
│       │       │   │   ├── cases.tsx
│       │       │   │   ├── cta.tsx
│       │       │   │   ├── faq.tsx
│       │       │   │   ├── features.tsx
│       │       │   │   ├── hero.tsx
│       │       │   │   ├── stats.tsx
│       │       │   │   └── testimonials.tsx
│       │       │   └── page.tsx
│       │       ├── blog/
│       │       │   ├── [slug]/
│       │       │   │   └── page.tsx
│       │       │   └── page.tsx
│       │       ├── components/
│       │       │   ├── footer.tsx
│       │       │   └── header/
│       │       │       ├── index.tsx
│       │       │       └── language-switcher.tsx
│       │       ├── contact/
│       │       │   ├── actions/
│       │       │   │   └── contact.tsx
│       │       │   ├── components/
│       │       │   │   └── contact-form.tsx
│       │       │   └── page.tsx
│       │       ├── global-error.tsx
│       │       ├── layout.tsx
│       │       ├── legal/
│       │       │   ├── [slug]/
│       │       │   │   └── page.tsx
│       │       │   └── layout.tsx
│       │       ├── pricing/
│       │       │   └── page.tsx
│       │       ├── robots.ts
│       │       ├── sitemap.ts
│       │       └── styles.css
│       ├── components/
│       │   └── sidebar.tsx
│       ├── env.ts
│       ├── instrumentation-client.ts
│       ├── instrumentation.ts
│       ├── next.config.ts
│       ├── package.json
│       ├── postcss.config.mjs
│       ├── proxy.ts
│       ├── scripts/
│       │   └── skip-ci.js
│       ├── sentry.edge.config.ts
│       ├── sentry.server.config.ts
│       ├── tsconfig.json
│       └── vercel.json
├── biome.jsonc
├── docs/
│   ├── .gitignore
│   ├── README.md
│   ├── app/
│   │   ├── [lang]/
│   │   │   ├── (home)/
│   │   │   │   ├── components/
│   │   │   │   │   ├── apps/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── cta.tsx
│   │   │   │   │   ├── demo.tsx
│   │   │   │   │   ├── features/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── hero.tsx
│   │   │   │   │   ├── installer.tsx
│   │   │   │   │   ├── social.tsx
│   │   │   │   │   └── video.tsx
│   │   │   │   ├── layout.tsx
│   │   │   │   └── page.tsx
│   │   │   ├── docs/
│   │   │   │   ├── [[...slug]]/
│   │   │   │   │   └── page.tsx
│   │   │   │   └── layout.tsx
│   │   │   ├── layout.tsx
│   │   │   ├── llms.mdx/
│   │   │   │   └── [[...slug]]/
│   │   │   │       └── route.ts
│   │   │   ├── llms.txt/
│   │   │   │   └── route.ts
│   │   │   ├── og/
│   │   │   │   └── [...slug]/
│   │   │   │       └── route.tsx
│   │   │   ├── rss.xml/
│   │   │   │   └── route.ts
│   │   │   └── sitemap.md/
│   │   │       └── route.ts
│   │   ├── actions/
│   │   │   └── feedback/
│   │   │       ├── emotions.ts
│   │   │       └── index.ts
│   │   ├── api/
│   │   │   ├── chat/
│   │   │   │   ├── route.ts
│   │   │   │   ├── tools.ts
│   │   │   │   ├── types.ts
│   │   │   │   └── utils.ts
│   │   │   └── search/
│   │   │       └── route.ts
│   │   ├── global.css
│   │   ├── robots.ts
│   │   ├── sitemap.ts
│   │   └── styles/
│   │       └── geistdocs.css
│   ├── components/
│   │   ├── ai-elements/
│   │   │   ├── code-block.tsx
│   │   │   ├── conversation.tsx
│   │   │   ├── message.tsx
│   │   │   ├── open-in-chat.tsx
│   │   │   ├── prompt-input.tsx
│   │   │   ├── shimmer.tsx
│   │   │   ├── sources.tsx
│   │   │   └── suggestion.tsx
│   │   ├── geistdocs/
│   │   │   ├── ask-ai.tsx
│   │   │   ├── callout.tsx
│   │   │   ├── chat.tsx
│   │   │   ├── code-block-tabs.tsx
│   │   │   ├── code-block.tsx
│   │   │   ├── copy-chat.tsx
│   │   │   ├── copy-page.tsx
│   │   │   ├── desktop-menu.tsx
│   │   │   ├── docs-layout.tsx
│   │   │   ├── docs-page.tsx
│   │   │   ├── edit-source.tsx
│   │   │   ├── feedback.tsx
│   │   │   ├── footer.tsx
│   │   │   ├── github-button.tsx
│   │   │   ├── home-layout.tsx
│   │   │   ├── icons.tsx
│   │   │   ├── installer.tsx
│   │   │   ├── language-selector.tsx
│   │   │   ├── mdx-components.tsx
│   │   │   ├── mermaid.tsx
│   │   │   ├── message-metadata.tsx
│   │   │   ├── mobile-menu.tsx
│   │   │   ├── navbar.tsx
│   │   │   ├── open-in-chat.tsx
│   │   │   ├── provider.tsx
│   │   │   ├── rss-button.tsx
│   │   │   ├── scroll-top.tsx
│   │   │   ├── search.tsx
│   │   │   ├── sidebar.tsx
│   │   │   ├── theme-toggle.tsx
│   │   │   └── video.tsx
│   │   ├── ui/
│   │   │   ├── badge.tsx
│   │   │   ├── button-group.tsx
│   │   │   ├── button.tsx
│   │   │   ├── card.tsx
│   │   │   ├── collapsible.tsx
│   │   │   ├── command.tsx
│   │   │   ├── dialog.tsx
│   │   │   ├── drawer.tsx
│   │   │   ├── dropdown-menu.tsx
│   │   │   ├── hover-card.tsx
│   │   │   ├── input-group.tsx
│   │   │   ├── input.tsx
│   │   │   ├── kbd.tsx
│   │   │   ├── navigation-menu.tsx
│   │   │   ├── popover.tsx
│   │   │   ├── scroll-area.tsx
│   │   │   ├── select.tsx
│   │   │   ├── separator.tsx
│   │   │   ├── sheet.tsx
│   │   │   ├── sonner.tsx
│   │   │   ├── spinner.tsx
│   │   │   ├── textarea.tsx
│   │   │   └── tooltip.tsx
│   │   └── vercel.tsx
│   ├── components.json
│   ├── content/
│   │   └── docs/
│   │       ├── addons/
│   │       │   ├── c15t.mdx
│   │       │   ├── dub.mdx
│   │       │   ├── fuse.mdx
│   │       │   ├── joyful.mdx
│   │       │   ├── metabase.mdx
│   │       │   ├── motion.mdx
│   │       │   ├── next-safe-action.mdx
│   │       │   ├── nuqs.mdx
│   │       │   ├── react-wrap-balancer.mdx
│   │       │   ├── trunk.mdx
│   │       │   └── zustand.mdx
│   │       ├── apps/
│   │       │   ├── api.mdx
│   │       │   ├── app.mdx
│   │       │   ├── docs.mdx
│   │       │   ├── email.mdx
│   │       │   ├── storybook.mdx
│   │       │   ├── studio.mdx
│   │       │   └── web.mdx
│   │       ├── deployment/
│   │       │   ├── docker.mdx
│   │       │   ├── netlify.mdx
│   │       │   └── vercel.mdx
│   │       ├── examples/
│   │       │   └── ai-chatbot.mdx
│   │       ├── faq.mdx
│   │       ├── index.mdx
│   │       ├── meta.json
│   │       ├── migrations/
│   │       │   ├── authentication/
│   │       │   │   ├── appwrite.mdx
│   │       │   │   ├── authjs.mdx
│   │       │   │   ├── better-auth.mdx
│   │       │   │   └── supabase.mdx
│   │       │   ├── cms/
│   │       │   │   └── content-collections.mdx
│   │       │   ├── database/
│   │       │   │   ├── appwrite.mdx
│   │       │   │   ├── convex.mdx
│   │       │   │   ├── drizzle.mdx
│   │       │   │   ├── edgedb.mdx
│   │       │   │   ├── planetscale.mdx
│   │       │   │   ├── prisma-postgres.mdx
│   │       │   │   ├── supabase.mdx
│   │       │   │   └── turso.mdx
│   │       │   ├── documentation/
│   │       │   │   └── fumadocs.mdx
│   │       │   ├── flags/
│   │       │   │   └── hypertune.mdx
│   │       │   ├── formatting/
│   │       │   │   └── eslint.mdx
│   │       │   ├── notifications/
│   │       │   │   └── novu.mdx
│   │       │   ├── payments/
│   │       │   │   ├── lemon-squeezy.mdx
│   │       │   │   └── paddle.mdx
│   │       │   └── storage/
│   │       │       ├── appwrite.mdx
│   │       │       └── upload-thing.mdx
│   │       ├── packages/
│   │       │   ├── analytics/
│   │       │   │   ├── product.mdx
│   │       │   │   └── web.mdx
│   │       │   ├── authentication.mdx
│   │       │   ├── cms/
│   │       │   │   ├── components.mdx
│   │       │   │   ├── meta.json
│   │       │   │   ├── metadata.mdx
│   │       │   │   └── overview.mdx
│   │       │   ├── collaboration.mdx
│   │       │   ├── cron.mdx
│   │       │   ├── database.mdx
│   │       │   ├── design-system/
│   │       │   │   ├── colors.mdx
│   │       │   │   ├── components.mdx
│   │       │   │   ├── dark-mode.mdx
│   │       │   │   ├── meta.json
│   │       │   │   ├── provider.mdx
│   │       │   │   └── typography.mdx
│   │       │   ├── email.mdx
│   │       │   ├── flags.mdx
│   │       │   ├── formatting.mdx
│   │       │   ├── internationalization.mdx
│   │       │   ├── meta.json
│   │       │   ├── next-config/
│   │       │   │   ├── bundle-analysis.mdx
│   │       │   │   ├── meta.json
│   │       │   │   └── overview.mdx
│   │       │   ├── notifications.mdx
│   │       │   ├── observability/
│   │       │   │   ├── debugging.mdx
│   │       │   │   ├── error-capture.mdx
│   │       │   │   ├── logging.mdx
│   │       │   │   └── uptime.mdx
│   │       │   ├── payments.mdx
│   │       │   ├── security/
│   │       │   │   ├── application.mdx
│   │       │   │   ├── dependencies.mdx
│   │       │   │   ├── headers.mdx
│   │       │   │   ├── ip-geolocation.mdx
│   │       │   │   └── rate-limiting.mdx
│   │       │   ├── seo/
│   │       │   │   ├── json-ld.mdx
│   │       │   │   ├── meta.json
│   │       │   │   ├── metadata.mdx
│   │       │   │   └── sitemap.mdx
│   │       │   ├── storage.mdx
│   │       │   ├── toolbar.mdx
│   │       │   └── webhooks/
│   │       │       ├── inbound.mdx
│   │       │       └── outbound.mdx
│   │       ├── philosophy.mdx
│   │       ├── setup/
│   │       │   ├── env.mdx
│   │       │   ├── installation.mdx
│   │       │   ├── meta.json
│   │       │   ├── prerequisites.mdx
│   │       │   └── quickstart.mdx
│   │       ├── structure.mdx
│   │       └── updates.mdx
│   ├── geistdocs.tsx
│   ├── hooks/
│   │   ├── geistdocs/
│   │   │   ├── use-chat.ts
│   │   │   └── use-sidebar.ts
│   │   └── use-mobile.ts
│   ├── lib/
│   │   ├── geistdocs/
│   │   │   ├── db.ts
│   │   │   ├── fonts.ts
│   │   │   ├── i18n.ts
│   │   │   ├── md-tracking.ts
│   │   │   └── source.ts
│   │   └── utils.ts
│   ├── next.config.ts
│   ├── package.json
│   ├── postcss.config.mjs
│   ├── proxy.ts
│   ├── source.config.ts
│   ├── tsconfig.json
│   └── turbo.json
├── license.md
├── package.json
├── packages/
│   ├── ai/
│   │   ├── components/
│   │   │   ├── message.tsx
│   │   │   └── thread.tsx
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── lib/
│   │   │   ├── models.ts
│   │   │   └── react.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── analytics/
│   │   ├── index.ts
│   │   ├── instrumentation-client.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── provider.tsx
│   │   ├── server.ts
│   │   └── tsconfig.json
│   ├── auth/
│   │   ├── client.ts
│   │   ├── components/
│   │   │   ├── sign-in.tsx
│   │   │   └── sign-up.tsx
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── provider.tsx
│   │   ├── proxy.ts
│   │   ├── server.ts
│   │   └── tsconfig.json
│   ├── cms/
│   │   ├── basehub-types.d.ts
│   │   ├── basehub.config.ts
│   │   ├── components/
│   │   │   ├── body.tsx
│   │   │   ├── code-block.tsx
│   │   │   ├── feed.tsx
│   │   │   ├── image.tsx
│   │   │   ├── toc.tsx
│   │   │   └── toolbar.tsx
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── next-config.ts
│   │   ├── package.json
│   │   ├── tsconfig.json
│   │   └── typescript-config.json
│   ├── collaboration/
│   │   ├── auth.ts
│   │   ├── config.ts
│   │   ├── hooks.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── room.tsx
│   │   └── tsconfig.json
│   ├── database/
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── prisma/
│   │   │   └── schema.prisma
│   │   ├── prisma.config.ts
│   │   └── tsconfig.json
│   ├── design-system/
│   │   ├── components/
│   │   │   ├── mode-toggle.tsx
│   │   │   └── ui/
│   │   │       ├── accordion.tsx
│   │   │       ├── alert-dialog.tsx
│   │   │       ├── alert.tsx
│   │   │       ├── aspect-ratio.tsx
│   │   │       ├── avatar.tsx
│   │   │       ├── badge.tsx
│   │   │       ├── breadcrumb.tsx
│   │   │       ├── button-group.tsx
│   │   │       ├── button.tsx
│   │   │       ├── calendar.tsx
│   │   │       ├── card.tsx
│   │   │       ├── carousel.tsx
│   │   │       ├── chart.tsx
│   │   │       ├── checkbox.tsx
│   │   │       ├── collapsible.tsx
│   │   │       ├── command.tsx
│   │   │       ├── context-menu.tsx
│   │   │       ├── dialog.tsx
│   │   │       ├── drawer.tsx
│   │   │       ├── dropdown-menu.tsx
│   │   │       ├── empty.tsx
│   │   │       ├── field.tsx
│   │   │       ├── form.tsx
│   │   │       ├── hover-card.tsx
│   │   │       ├── input-group.tsx
│   │   │       ├── input-otp.tsx
│   │   │       ├── input.tsx
│   │   │       ├── item.tsx
│   │   │       ├── kbd.tsx
│   │   │       ├── label.tsx
│   │   │       ├── menubar.tsx
│   │   │       ├── navigation-menu.tsx
│   │   │       ├── pagination.tsx
│   │   │       ├── popover.tsx
│   │   │       ├── progress.tsx
│   │   │       ├── radio-group.tsx
│   │   │       ├── resizable.tsx
│   │   │       ├── scroll-area.tsx
│   │   │       ├── select.tsx
│   │   │       ├── separator.tsx
│   │   │       ├── sheet.tsx
│   │   │       ├── sidebar.tsx
│   │   │       ├── skeleton.tsx
│   │   │       ├── slider.tsx
│   │   │       ├── sonner.tsx
│   │   │       ├── spinner.tsx
│   │   │       ├── switch.tsx
│   │   │       ├── table.tsx
│   │   │       ├── tabs.tsx
│   │   │       ├── textarea.tsx
│   │   │       ├── toggle-group.tsx
│   │   │       ├── toggle.tsx
│   │   │       └── tooltip.tsx
│   │   ├── components.json
│   │   ├── hooks/
│   │   │   └── use-mobile.ts
│   │   ├── index.tsx
│   │   ├── lib/
│   │   │   ├── fonts.ts
│   │   │   └── utils.ts
│   │   ├── package.json
│   │   ├── postcss.config.mjs
│   │   ├── providers/
│   │   │   └── theme.tsx
│   │   ├── styles/
│   │   │   └── globals.css
│   │   └── tsconfig.json
│   ├── email/
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── templates/
│   │   │   └── contact.tsx
│   │   └── tsconfig.json
│   ├── feature-flags/
│   │   ├── access.ts
│   │   ├── components/
│   │   │   └── toolbar.tsx
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── lib/
│   │   │   ├── create-flag.ts
│   │   │   └── toolbar.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── internationalization/
│   │   ├── dictionaries/
│   │   │   ├── de.json
│   │   │   ├── en.json
│   │   │   ├── es.json
│   │   │   ├── fr.json
│   │   │   ├── pt.json
│   │   │   └── zh.json
│   │   ├── index.ts
│   │   ├── languine.json
│   │   ├── package.json
│   │   ├── proxy.ts
│   │   └── tsconfig.json
│   ├── next-config/
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── notifications/
│   │   ├── components/
│   │   │   ├── provider.tsx
│   │   │   └── trigger.tsx
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── styles.css
│   │   └── tsconfig.json
│   ├── observability/
│   │   ├── client.ts
│   │   ├── edge.ts
│   │   ├── error.ts
│   │   ├── instrumentation.ts
│   │   ├── keys.ts
│   │   ├── log.ts
│   │   ├── next-config.ts
│   │   ├── package.json
│   │   ├── server.ts
│   │   ├── status/
│   │   │   ├── index.tsx
│   │   │   └── types.ts
│   │   └── tsconfig.json
│   ├── payments/
│   │   ├── ai.ts
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── rate-limit/
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   └── package.json
│   ├── security/
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   ├── proxy.ts
│   │   └── tsconfig.json
│   ├── seo/
│   │   ├── json-ld.tsx
│   │   ├── metadata.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── storage/
│   │   ├── client.ts
│   │   ├── index.ts
│   │   ├── keys.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── typescript-config/
│   │   ├── base.json
│   │   ├── nextjs.json
│   │   ├── package.json
│   │   └── react-library.json
│   └── webhooks/
│       ├── index.ts
│       ├── keys.ts
│       ├── lib/
│       │   └── svix.ts
│       ├── package.json
│       └── tsconfig.json
├── scripts/
│   ├── index.ts
│   ├── initialize.ts
│   ├── update.ts
│   └── utils.ts
├── skills/
│   └── next-forge/
│       ├── SKILL.md
│       └── references/
│           ├── architecture.md
│           ├── customization.md
│           ├── packages.md
│           └── setup.md
├── tsconfig.json
├── tsup.config.ts
├── turbo/
│   └── generators/
│       ├── config.ts
│       ├── package.json
│       └── templates/
│           ├── package.json.hbs
│           └── tsconfig.json.hbs
└── turbo.json
Download .txt
SYMBOL INDEX (783 symbols across 214 files)

FILE: apps/api/app/global-error.tsx
  type GlobalErrorProperties (line 9) | interface GlobalErrorProperties {

FILE: apps/api/app/layout.tsx
  type RootLayoutProperties (line 4) | interface RootLayoutProperties {

FILE: apps/app/app/(authenticated)/components/avatar-stack.tsx
  type PresenceAvatarProps (line 15) | interface PresenceAvatarProps {

FILE: apps/app/app/(authenticated)/components/header.tsx
  type HeaderProps (line 13) | interface HeaderProps {

FILE: apps/app/app/(authenticated)/components/notifications-provider.tsx
  type NotificationsProviderProperties (line 7) | interface NotificationsProviderProperties {

FILE: apps/app/app/(authenticated)/components/sidebar.tsx
  type GlobalSidebarProperties (line 59) | interface GlobalSidebarProperties {

FILE: apps/app/app/(authenticated)/layout.tsx
  type AppLayoutProperties (line 10) | interface AppLayoutProperties {

FILE: apps/app/app/(authenticated)/search/page.tsx
  type SearchPageProperties (line 6) | interface SearchPageProperties {

FILE: apps/app/app/(unauthenticated)/layout.tsx
  type AuthLayoutProps (line 5) | interface AuthLayoutProps {

FILE: apps/app/app/.well-known/vercel/flags/route.ts
  constant GET (line 3) | const GET = getFlags;

FILE: apps/app/app/api/collaboration/auth/route.ts
  constant COLORS (line 4) | const COLORS = [

FILE: apps/app/app/global-error.tsx
  type GlobalErrorProperties (line 9) | interface GlobalErrorProperties {

FILE: apps/app/app/layout.tsx
  type RootLayoutProperties (line 9) | interface RootLayoutProperties {

FILE: apps/storybook/stories/accordion.stories.tsx
  type Story (line 54) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/alert-dialog.stories.tsx
  type Story (line 48) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/alert.stories.tsx
  type Story (line 37) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/aspect-ratio.stories.tsx
  type Story (line 34) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/avatar.stories.tsx
  type Story (line 29) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/badge.stories.tsx
  type Story (line 26) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/breadcrumb.stories.tsx
  type Story (line 45) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/button.stories.tsx
  type Story (line 29) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/calendar.stories.tsx
  type Story (line 27) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/card.stories.tsx
  type Story (line 69) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/carousel.stories.tsx
  type Story (line 44) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/chart.stories.tsx
  type Story (line 82) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/checkbox.stories.tsx
  type Story (line 34) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/collapsible.stories.tsx
  type Story (line 40) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/command.stories.tsx
  type Story (line 49) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/context-menu.stories.tsx
  type Story (line 48) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/dialog.stories.tsx
  type Story (line 56) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/drawer.stories.tsx
  type Story (line 52) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/dropdown-menu.stories.tsx
  type Story (line 50) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/form.stories.tsx
  type Story (line 29) | type Story = StoryObj<typeof meta>;
  function onSubmit (line 44) | function onSubmit(values: zInfer<typeof formSchema>) {

FILE: apps/storybook/stories/hover-card.stories.tsx
  type Story (line 32) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/input-otp.stories.tsx
  type Story (line 43) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/input.stories.tsx
  type Story (line 25) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/label.stories.tsx
  type Story (line 24) | type Story = StoryObj<typeof Label>;

FILE: apps/storybook/stories/menubar.stories.tsx
  type Story (line 54) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/navigation-menu.stories.tsx
  type Story (line 73) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/pagination.stories.tsx
  type Story (line 51) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/popover.stories.tsx
  type Story (line 30) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/progress.stories.tsx
  type Story (line 21) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/radio-group.stories.tsx
  type Story (line 34) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/resizable.stories.tsx
  type Story (line 53) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/scroll-area.stories.tsx
  type Story (line 29) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/select.stories.tsx
  type Story (line 64) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/separator.stories.tsx
  type Story (line 16) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/sheet.stories.tsx
  type Story (line 66) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/sidebar.stories.tsx
  type Story (line 85) | type Story = StoryObj<typeof Sidebar>;

FILE: apps/storybook/stories/skeleton.stories.tsx
  type Story (line 19) | type Story = StoryObj<typeof Skeleton>;

FILE: apps/storybook/stories/slider.stories.tsx
  type Story (line 21) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/sonner.stories.tsx
  type Story (line 24) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/switch.stories.tsx
  type Story (line 27) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/table.stories.tsx
  type Story (line 74) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/tabs.stories.tsx
  type Story (line 41) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/textarea.stories.tsx
  type Story (line 20) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/toggle-group.stories.tsx
  type Story (line 47) | type Story = StoryObj<typeof meta>;

FILE: apps/storybook/stories/toggle.stories.tsx
  type Story (line 27) | type Story = StoryObj<typeof Toggle>;

FILE: apps/storybook/stories/tooltip.stories.tsx
  type Story (line 51) | type Story = StoryObj<typeof meta>;

FILE: apps/web/app/.well-known/vercel/flags/route.ts
  constant GET (line 3) | const GET = getFlags;

FILE: apps/web/app/[locale]/(home)/components/cases.tsx
  type CasesProps (line 12) | interface CasesProps {

FILE: apps/web/app/[locale]/(home)/components/cta.tsx
  type CTAProps (line 7) | interface CTAProps {

FILE: apps/web/app/[locale]/(home)/components/faq.tsx
  type FAQProps (line 12) | interface FAQProps {

FILE: apps/web/app/[locale]/(home)/components/features.tsx
  type FeaturesProps (line 4) | interface FeaturesProps {

FILE: apps/web/app/[locale]/(home)/components/hero.tsx
  type HeroProps (line 8) | interface HeroProps {

FILE: apps/web/app/[locale]/(home)/components/stats.tsx
  type StatsProps (line 4) | interface StatsProps {

FILE: apps/web/app/[locale]/(home)/components/testimonials.tsx
  type TestimonialsProps (line 18) | interface TestimonialsProps {

FILE: apps/web/app/[locale]/(home)/page.tsx
  type HomeProps (line 13) | interface HomeProps {

FILE: apps/web/app/[locale]/blog/[slug]/page.tsx
  type BlogPostProperties (line 21) | interface BlogPostProperties {

FILE: apps/web/app/[locale]/blog/page.tsx
  type BlogProps (line 12) | interface BlogProps {

FILE: apps/web/app/[locale]/components/header/index.tsx
  type HeaderProps (line 20) | interface HeaderProps {

FILE: apps/web/app/[locale]/contact/components/contact-form.tsx
  type ContactFormProps (line 18) | interface ContactFormProps {

FILE: apps/web/app/[locale]/contact/page.tsx
  type ContactProps (line 6) | interface ContactProps {

FILE: apps/web/app/[locale]/global-error.tsx
  type GlobalErrorProperties (line 9) | interface GlobalErrorProperties {

FILE: apps/web/app/[locale]/layout.tsx
  type RootLayoutProperties (line 13) | interface RootLayoutProperties {

FILE: apps/web/app/[locale]/legal/[slug]/page.tsx
  type LegalPageProperties (line 12) | interface LegalPageProperties {

FILE: apps/web/app/[locale]/legal/layout.tsx
  type LegalLayoutProps (line 4) | interface LegalLayoutProps {

FILE: apps/web/app/[locale]/robots.ts
  function robots (line 9) | function robots(): MetadataRoute.Robots {

FILE: apps/web/components/sidebar.tsx
  type SidebarProperties (line 4) | interface SidebarProperties {

FILE: docs/app/[lang]/(home)/components/video.tsx
  type VideoProps (line 6) | type VideoProps = ComponentProps<typeof ReactPlayer> & {

FILE: docs/app/[lang]/llms.mdx/[[...slug]]/route.ts
  function GET (line 6) | async function GET(

FILE: docs/app/[lang]/sitemap.md/route.ts
  constant DOCS_PREFIX_PATTERN (line 6) | const DOCS_PREFIX_PATTERN = /^\/docs\/?/;
  constant WHITESPACE_PATTERN (line 7) | const WHITESPACE_PATTERN = /\s+/;
  type PageNode (line 9) | type PageNode = {
  function buildTree (line 21) | function buildTree(
  function inferDocType (line 73) | function inferDocType(url: string, explicitType?: string): string {
  function extractTopics (line 89) | function extractTopics(url: string, product?: string): string[] {
  function truncateToWords (line 112) | function truncateToWords(text: string, maxWords: number): string {
  function renderNode (line 120) | function renderNode(

FILE: docs/app/api/chat/route.ts
  type RequestBody (line 14) | interface RequestBody {
  function POST (line 24) | async function POST(req: Request) {

FILE: docs/app/api/chat/types.ts
  type MyDataParts (line 14) | type MyDataParts = z.infer<typeof dataPartsSchema>;
  type MyTools (line 16) | type MyTools = InferUITools<ReturnType<typeof createTools>>;
  type MessageMetadata (line 18) | interface MessageMetadata {
  type MyUIMessage (line 26) | type MyUIMessage = UIMessage<MessageMetadata, MyDataParts, MyTools>;

FILE: docs/app/robots.ts
  function robots (line 6) | function robots(): MetadataRoute.Robots {

FILE: docs/app/sitemap.ts
  function sitemap (line 10) | function sitemap(): MetadataRoute.Sitemap {

FILE: docs/components/ai-elements/code-block.tsx
  type CodeBlockProps (line 17) | type CodeBlockProps = HTMLAttributes<HTMLDivElement> & {
  type CodeBlockContextType (line 23) | interface CodeBlockContextType {
  method line (line 33) | line(node, line) {
  function highlightCode (line 52) | async function highlightCode(
  type CodeBlockCopyButtonProps (line 132) | type CodeBlockCopyButtonProps = ComponentProps<typeof Button> & {

FILE: docs/components/ai-elements/conversation.tsx
  type ConversationProps (line 10) | type ConversationProps = ComponentProps<typeof StickToBottom>;
  type ConversationContentProps (line 22) | type ConversationContentProps = ComponentProps<
  type ConversationEmptyStateProps (line 36) | type ConversationEmptyStateProps = ComponentProps<"div"> & {
  type ConversationScrollButtonProps (line 71) | type ConversationScrollButtonProps = ComponentProps<typeof Button>;

FILE: docs/components/ai-elements/message.tsx
  type MessageProps (line 23) | type MessageProps = HTMLAttributes<HTMLDivElement> & {
  type MessageContentProps (line 38) | type MessageContentProps = HTMLAttributes<HTMLDivElement>;
  type MessageActionsProps (line 58) | type MessageActionsProps = ComponentProps<"div">;
  type MessageActionProps (line 70) | type MessageActionProps = ComponentProps<typeof Button> & {
  type MessageBranchContextType (line 106) | interface MessageBranchContextType {
  type MessageBranchProps (line 131) | type MessageBranchProps = HTMLAttributes<HTMLDivElement> & {
  type MessageBranchContentProps (line 181) | type MessageBranchContentProps = HTMLAttributes<HTMLDivElement>;
  type MessageBranchSelectorProps (line 211) | type MessageBranchSelectorProps = HTMLAttributes<HTMLDivElement> & {
  type MessageBranchPreviousProps (line 236) | type MessageBranchPreviousProps = ComponentProps<typeof Button>;
  type MessageBranchNextProps (line 259) | type MessageBranchNextProps = ComponentProps<typeof Button>;
  type MessageBranchPageProps (line 282) | type MessageBranchPageProps = HTMLAttributes<HTMLSpanElement>;
  type MessageResponseProps (line 303) | type MessageResponseProps = ComponentProps<typeof Streamdown>;
  type MessageToolbarProps (line 321) | type MessageToolbarProps = ComponentProps<"div">;

FILE: docs/components/ai-elements/open-in-chat.tsx
  type OpenInProps (line 196) | type OpenInProps = ComponentProps<typeof DropdownMenu> & {
  type OpenInContentProps (line 206) | type OpenInContentProps = ComponentProps<typeof DropdownMenuContent>;
  type OpenInItemProps (line 216) | type OpenInItemProps = ComponentProps<typeof DropdownMenuItem>;
  type OpenInLabelProps (line 222) | type OpenInLabelProps = ComponentProps<typeof DropdownMenuLabel>;
  type OpenInSeparatorProps (line 228) | type OpenInSeparatorProps = ComponentProps<typeof DropdownMenuSeparator>;
  type OpenInTriggerProps (line 234) | type OpenInTriggerProps = ComponentProps<typeof DropdownMenuTrigger>;
  type OpenInChatGPTProps (line 247) | type OpenInChatGPTProps = ComponentProps<typeof DropdownMenuItem>;
  type OpenInClaudeProps (line 267) | type OpenInClaudeProps = ComponentProps<typeof DropdownMenuItem>;
  type OpenInT3Props (line 287) | type OpenInT3Props = ComponentProps<typeof DropdownMenuItem>;
  type OpenInSciraProps (line 307) | type OpenInSciraProps = ComponentProps<typeof DropdownMenuItem>;
  type OpenInv0Props (line 327) | type OpenInv0Props = ComponentProps<typeof DropdownMenuItem>;
  type OpenInCursorProps (line 347) | type OpenInCursorProps = ComponentProps<typeof DropdownMenuItem>;

FILE: docs/components/ai-elements/prompt-input.tsx
  type AttachmentsContext (line 72) | interface AttachmentsContext {
  type TextInputContext (line 81) | interface TextInputContext {
  type PromptInputControllerProps (line 87) | interface PromptInputControllerProps {
  type PromptInputProviderProps (line 131) | type PromptInputProviderProps = PropsWithChildren<{
  function PromptInputProvider (line 139) | function PromptInputProvider({
  type ReferencedSourcesContext (line 279) | interface ReferencedSourcesContext {
  type PromptInputActionAddAttachmentsProps (line 299) | type PromptInputActionAddAttachmentsProps = ComponentProps<
  type PromptInputMessage (line 324) | interface PromptInputMessage {
  type PromptInputProps (line 329) | type PromptInputProps = Omit<
  type PromptInputBodyProps (line 792) | type PromptInputBodyProps = HTMLAttributes<HTMLDivElement>;
  type PromptInputTextareaProps (line 801) | type PromptInputTextareaProps = ComponentProps<
  type PromptInputHeaderProps (line 911) | type PromptInputHeaderProps = Omit<
  type PromptInputFooterProps (line 927) | type PromptInputFooterProps = Omit<
  type PromptInputToolsProps (line 943) | type PromptInputToolsProps = HTMLAttributes<HTMLDivElement>;
  type PromptInputButtonProps (line 952) | type PromptInputButtonProps = ComponentProps<typeof InputGroupButton>;
  type PromptInputActionMenuProps (line 974) | type PromptInputActionMenuProps = ComponentProps<typeof DropdownMenu>;
  type PromptInputActionMenuTriggerProps (line 979) | type PromptInputActionMenuTriggerProps = PromptInputButtonProps;
  type PromptInputActionMenuContentProps (line 993) | type PromptInputActionMenuContentProps = ComponentProps<
  type PromptInputActionMenuItemProps (line 1003) | type PromptInputActionMenuItemProps = ComponentProps<
  type PromptInputSubmitProps (line 1016) | type PromptInputSubmitProps = ComponentProps<typeof InputGroupButton> & {
  type PromptInputSelectProps (line 1067) | type PromptInputSelectProps = ComponentProps<typeof Select>;
  type PromptInputSelectTriggerProps (line 1073) | type PromptInputSelectTriggerProps = ComponentProps<
  type PromptInputSelectContentProps (line 1091) | type PromptInputSelectContentProps = ComponentProps<
  type PromptInputSelectItemProps (line 1102) | type PromptInputSelectItemProps = ComponentProps<typeof SelectItem>;
  type PromptInputSelectValueProps (line 1111) | type PromptInputSelectValueProps = ComponentProps<typeof SelectValue>;
  type PromptInputHoverCardProps (line 1120) | type PromptInputHoverCardProps = ComponentProps<typeof HoverCard>;
  type PromptInputHoverCardTriggerProps (line 1130) | type PromptInputHoverCardTriggerProps = ComponentProps<
  type PromptInputHoverCardContentProps (line 1138) | type PromptInputHoverCardContentProps = ComponentProps<
  type PromptInputTabsListProps (line 1149) | type PromptInputTabsListProps = HTMLAttributes<HTMLDivElement>;
  type PromptInputTabProps (line 1156) | type PromptInputTabProps = HTMLAttributes<HTMLDivElement>;
  type PromptInputTabLabelProps (line 1163) | type PromptInputTabLabelProps = HTMLAttributes<HTMLHeadingElement>;
  type PromptInputTabBodyProps (line 1178) | type PromptInputTabBodyProps = HTMLAttributes<HTMLDivElement>;
  type PromptInputTabItemProps (line 1187) | type PromptInputTabItemProps = HTMLAttributes<HTMLDivElement>;
  type PromptInputCommandProps (line 1202) | type PromptInputCommandProps = ComponentProps<typeof Command>;
  type PromptInputCommandInputProps (line 1209) | type PromptInputCommandInputProps = ComponentProps<typeof CommandInput>;
  type PromptInputCommandListProps (line 1218) | type PromptInputCommandListProps = ComponentProps<typeof CommandList>;
  type PromptInputCommandEmptyProps (line 1227) | type PromptInputCommandEmptyProps = ComponentProps<typeof CommandEmpty>;
  type PromptInputCommandGroupProps (line 1236) | type PromptInputCommandGroupProps = ComponentProps<typeof CommandGroup>;
  type PromptInputCommandItemProps (line 1245) | type PromptInputCommandItemProps = ComponentProps<typeof CommandItem>;
  type PromptInputCommandSeparatorProps (line 1254) | type PromptInputCommandSeparatorProps = ComponentProps<

FILE: docs/components/ai-elements/shimmer.tsx
  type TextShimmerProps (line 13) | interface TextShimmerProps {

FILE: docs/components/ai-elements/sources.tsx
  type SourcesProps (line 12) | type SourcesProps = ComponentProps<"div">;
  type SourcesTriggerProps (line 21) | type SourcesTriggerProps = ComponentProps<typeof CollapsibleTrigger> & {
  type SourcesContentProps (line 44) | type SourcesContentProps = ComponentProps<typeof CollapsibleContent>;
  type SourceProps (line 60) | type SourceProps = ComponentProps<"a">;

FILE: docs/components/ai-elements/suggestion.tsx
  type SuggestionsProps (line 11) | type SuggestionsProps = ComponentProps<typeof ScrollArea>;
  type SuggestionProps (line 26) | type SuggestionProps = Omit<ComponentProps<typeof Button>, "onClick"> & {

FILE: docs/components/geistdocs/ask-ai.tsx
  type AskAIProps (line 6) | interface AskAIProps {

FILE: docs/components/geistdocs/callout.tsx
  type CalloutProps (line 10) | type CalloutProps = ComponentProps<typeof CalloutPrimitive>;
  type CalloutContainerProps (line 22) | type CalloutContainerProps = ComponentProps<typeof CalloutContainerPrimi...
  type CalloutTitleProps (line 28) | type CalloutTitleProps = ComponentProps<typeof CalloutTitlePrimitive>;
  type CalloutDescriptionProps (line 34) | type CalloutDescriptionProps = ComponentProps<

FILE: docs/components/geistdocs/chat.tsx
  type ChatProps (line 138) | interface ChatProps {
  type ChatInnerProps (line 143) | type ChatInnerProps = ChatProps & {

FILE: docs/components/geistdocs/code-block.tsx
  type CodeBlockProps (line 16) | interface CodeBlockProps {

FILE: docs/components/geistdocs/copy-page.tsx
  type CopyPageProps (line 6) | interface CopyPageProps {

FILE: docs/components/geistdocs/desktop-menu.tsx
  type DesktopMenuProps (line 14) | interface DesktopMenuProps {

FILE: docs/components/geistdocs/docs-layout.tsx
  type DocsLayoutProps (line 11) | interface DocsLayoutProps {

FILE: docs/components/geistdocs/docs-page.tsx
  type PageProps (line 10) | type PageProps = ComponentProps<typeof FumadocsDocsPage>;

FILE: docs/components/geistdocs/edit-source.tsx
  type EditSourceProps (line 4) | interface EditSourceProps {

FILE: docs/components/geistdocs/feedback.tsx
  type Emotion (line 19) | type Emotion = (typeof emotions)[number]["name"];
  type Feedback (line 21) | interface Feedback {

FILE: docs/components/geistdocs/footer.tsx
  type FooterProps (line 7) | interface FooterProps {

FILE: docs/components/geistdocs/home-layout.tsx
  type HomeLayoutProps (line 6) | interface HomeLayoutProps {

FILE: docs/components/geistdocs/installer.tsx
  constant COPY_TIMEOUT (line 15) | const COPY_TIMEOUT = 2000;
  type InstallerProps (line 17) | interface InstallerProps {

FILE: docs/components/geistdocs/mermaid.tsx
  function cachePromise (line 22) | function cachePromise<T>(
  function MermaidContent (line 36) | function MermaidContent({ chart }: { chart: string }) {

FILE: docs/components/geistdocs/message-metadata.tsx
  type MessageMetadataProps (line 12) | interface MessageMetadataProps {

FILE: docs/components/geistdocs/open-in-chat.tsx
  type OpenInChatProps (line 15) | interface OpenInChatProps {

FILE: docs/components/geistdocs/provider.tsx
  type GeistdocsProviderProps (line 16) | type GeistdocsProviderProps = ComponentProps<typeof RootProvider> & {

FILE: docs/components/geistdocs/search.tsx
  type SearchButtonProps (line 21) | interface SearchButtonProps {

FILE: docs/components/geistdocs/video.tsx
  type VideoProps (line 4) | type VideoProps = ComponentProps<typeof ReactPlayer>;

FILE: docs/components/ui/badge.tsx
  function Badge (line 28) | function Badge({

FILE: docs/components/ui/button-group.tsx
  function ButtonGroup (line 24) | function ButtonGroup({
  function ButtonGroupText (line 40) | function ButtonGroupText({
  function ButtonGroupSeparator (line 60) | function ButtonGroupSeparator({

FILE: docs/components/ui/button.tsx
  function Button (line 39) | function Button({

FILE: docs/components/ui/card.tsx
  function Card (line 5) | function Card({ className, ...props }: React.ComponentProps<"div">) {
  function CardHeader (line 18) | function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
  function CardTitle (line 31) | function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
  function CardDescription (line 41) | function CardDescription({ className, ...props }: React.ComponentProps<"...
  function CardAction (line 51) | function CardAction({ className, ...props }: React.ComponentProps<"div">) {
  function CardContent (line 64) | function CardContent({ className, ...props }: React.ComponentProps<"div"...
  function CardFooter (line 74) | function CardFooter({ className, ...props }: React.ComponentProps<"div">) {

FILE: docs/components/ui/collapsible.tsx
  function Collapsible (line 5) | function Collapsible({
  function CollapsibleTrigger (line 11) | function CollapsibleTrigger({
  function CollapsibleContent (line 22) | function CollapsibleContent({

FILE: docs/components/ui/command.tsx
  function Command (line 16) | function Command({
  function CommandDialog (line 32) | function CommandDialog({
  function CommandInput (line 63) | function CommandInput({
  function CommandList (line 85) | function CommandList({
  function CommandEmpty (line 101) | function CommandEmpty({
  function CommandGroup (line 113) | function CommandGroup({
  function CommandSeparator (line 129) | function CommandSeparator({
  function CommandItem (line 142) | function CommandItem({
  function CommandShortcut (line 158) | function CommandShortcut({

FILE: docs/components/ui/dialog.tsx
  function Dialog (line 9) | function Dialog({
  function DialogTrigger (line 15) | function DialogTrigger({
  function DialogPortal (line 21) | function DialogPortal({
  function DialogClose (line 27) | function DialogClose({
  function DialogOverlay (line 33) | function DialogOverlay({
  function DialogContent (line 49) | function DialogContent({
  function DialogHeader (line 83) | function DialogHeader({ className, ...props }: React.ComponentProps<"div...
  function DialogFooter (line 93) | function DialogFooter({ className, ...props }: React.ComponentProps<"div...
  function DialogTitle (line 106) | function DialogTitle({
  function DialogDescription (line 119) | function DialogDescription({

FILE: docs/components/ui/drawer.tsx
  function Drawer (line 8) | function Drawer({
  function DrawerTrigger (line 14) | function DrawerTrigger({
  function DrawerPortal (line 20) | function DrawerPortal({
  function DrawerClose (line 26) | function DrawerClose({
  function DrawerOverlay (line 32) | function DrawerOverlay({
  function DrawerContent (line 48) | function DrawerContent({
  function DrawerHeader (line 75) | function DrawerHeader({ className, ...props }: React.ComponentProps<"div...
  function DrawerFooter (line 88) | function DrawerFooter({ className, ...props }: React.ComponentProps<"div...
  function DrawerTitle (line 98) | function DrawerTitle({
  function DrawerDescription (line 111) | function DrawerDescription({

FILE: docs/components/ui/dropdown-menu.tsx
  function DropdownMenu (line 9) | function DropdownMenu({
  function DropdownMenuPortal (line 15) | function DropdownMenuPortal({
  function DropdownMenuTrigger (line 23) | function DropdownMenuTrigger({
  function DropdownMenuContent (line 34) | function DropdownMenuContent({
  function DropdownMenuGroup (line 54) | function DropdownMenuGroup({
  function DropdownMenuItem (line 62) | function DropdownMenuItem({
  function DropdownMenuCheckboxItem (line 85) | function DropdownMenuCheckboxItem({
  function DropdownMenuRadioGroup (line 111) | function DropdownMenuRadioGroup({
  function DropdownMenuRadioItem (line 122) | function DropdownMenuRadioItem({
  function DropdownMenuLabel (line 146) | function DropdownMenuLabel({
  function DropdownMenuSeparator (line 166) | function DropdownMenuSeparator({
  function DropdownMenuShortcut (line 179) | function DropdownMenuShortcut({
  function DropdownMenuSub (line 195) | function DropdownMenuSub({
  function DropdownMenuSubTrigger (line 201) | function DropdownMenuSubTrigger({
  function DropdownMenuSubContent (line 225) | function DropdownMenuSubContent({

FILE: docs/components/ui/hover-card.tsx
  function HoverCard (line 8) | function HoverCard({
  function HoverCardTrigger (line 14) | function HoverCardTrigger({
  function HoverCardContent (line 22) | function HoverCardContent({

FILE: docs/components/ui/input-group.tsx
  function InputGroup (line 11) | function InputGroup({ className, ...props }: React.ComponentProps<"div">) {
  function InputGroupAddon (line 60) | function InputGroupAddon({
  function InputGroupButton (line 100) | function InputGroupButton({
  function InputGroupText (line 119) | function InputGroupText({ className, ...props }: React.ComponentProps<"s...
  function InputGroupInput (line 131) | function InputGroupInput({
  function InputGroupTextarea (line 147) | function InputGroupTextarea({

FILE: docs/components/ui/input.tsx
  function Input (line 5) | function Input({ className, type, ...props }: React.ComponentProps<"inpu...

FILE: docs/components/ui/kbd.tsx
  function Kbd (line 3) | function Kbd({ className, ...props }: React.ComponentProps<"kbd">) {
  function KbdGroup (line 18) | function KbdGroup({ className, ...props }: React.ComponentProps<"div">) {

FILE: docs/components/ui/navigation-menu.tsx
  function NavigationMenu (line 8) | function NavigationMenu({
  function NavigationMenuList (line 32) | function NavigationMenuList({
  function NavigationMenuItem (line 48) | function NavigationMenuItem({
  function NavigationMenuTrigger (line 65) | function NavigationMenuTrigger({
  function NavigationMenuContent (line 85) | function NavigationMenuContent({
  function NavigationMenuViewport (line 102) | function NavigationMenuViewport({
  function NavigationMenuLink (line 124) | function NavigationMenuLink({
  function NavigationMenuIndicator (line 140) | function NavigationMenuIndicator({

FILE: docs/components/ui/popover.tsx
  function Popover (line 8) | function Popover({
  function PopoverTrigger (line 14) | function PopoverTrigger({
  function PopoverContent (line 20) | function PopoverContent({
  function PopoverAnchor (line 42) | function PopoverAnchor({

FILE: docs/components/ui/scroll-area.tsx
  function ScrollArea (line 8) | function ScrollArea({
  function ScrollBar (line 31) | function ScrollBar({

FILE: docs/components/ui/select.tsx
  function Select (line 9) | function Select({
  function SelectGroup (line 15) | function SelectGroup({
  function SelectValue (line 21) | function SelectValue({
  function SelectTrigger (line 27) | function SelectTrigger({
  function SelectContent (line 53) | function SelectContent({
  function SelectLabel (line 90) | function SelectLabel({
  function SelectItem (line 103) | function SelectItem({
  function SelectSeparator (line 127) | function SelectSeparator({
  function SelectScrollUpButton (line 140) | function SelectScrollUpButton({
  function SelectScrollDownButton (line 158) | function SelectScrollDownButton({

FILE: docs/components/ui/separator.tsx
  function Separator (line 8) | function Separator({

FILE: docs/components/ui/sheet.tsx
  function Sheet (line 9) | function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive....
  function SheetTrigger (line 13) | function SheetTrigger({
  function SheetClose (line 19) | function SheetClose({
  function SheetPortal (line 25) | function SheetPortal({
  function SheetOverlay (line 31) | function SheetOverlay({
  function SheetContent (line 47) | function SheetContent({
  function SheetHeader (line 84) | function SheetHeader({ className, ...props }: React.ComponentProps<"div"...
  function SheetFooter (line 94) | function SheetFooter({ className, ...props }: React.ComponentProps<"div"...
  function SheetTitle (line 104) | function SheetTitle({
  function SheetDescription (line 117) | function SheetDescription({

FILE: docs/components/ui/spinner.tsx
  function Spinner (line 5) | function Spinner({ className, ...props }: React.ComponentProps<"svg">) {

FILE: docs/components/ui/textarea.tsx
  function Textarea (line 5) | function Textarea({ className, ...props }: React.ComponentProps<"textare...

FILE: docs/components/ui/tooltip.tsx
  function TooltipProvider (line 8) | function TooltipProvider({
  function Tooltip (line 21) | function Tooltip({
  function TooltipTrigger (line 31) | function TooltipTrigger({
  function TooltipContent (line 37) | function TooltipContent({

FILE: docs/hooks/use-mobile.ts
  constant MOBILE_BREAKPOINT (line 3) | const MOBILE_BREAKPOINT = 768
  function useIsMobile (line 5) | function useIsMobile() {

FILE: docs/lib/geistdocs/db.ts
  type StoredMessage (line 5) | interface StoredMessage extends UIMessage {
  class ChatDatabase (line 10) | class ChatDatabase extends Dexie {
    method constructor (line 13) | constructor() {

FILE: docs/lib/geistdocs/md-tracking.ts
  constant PLATFORM_URL (line 3) | const PLATFORM_URL = "https://geistdocs.com/md-tracking";
  type TrackMdRequestParams (line 5) | interface TrackMdRequestParams {
  function trackMdRequest (line 18) | async function trackMdRequest({

FILE: docs/lib/utils.ts
  function cn (line 4) | function cn(...inputs: ClassValue[]) {

FILE: docs/proxy.ts
  constant MDX_EXTENSION_PATTERN (line 16) | const MDX_EXTENSION_PATTERN = /\.mdx?$/;

FILE: packages/ai/components/message.tsx
  type MessageProps (line 6) | interface MessageProps {

FILE: packages/ai/components/thread.tsx
  type ThreadProps (line 4) | type ThreadProps = HTMLAttributes<HTMLDivElement>;

FILE: packages/analytics/provider.tsx
  type AnalyticsProviderProps (line 6) | interface AnalyticsProviderProps {

FILE: packages/auth/provider.tsx
  type AuthProviderProperties (line 9) | type AuthProviderProperties = ComponentProps<typeof ClerkProvider> & {

FILE: packages/cms/basehub-types.d.ts
  type Query (line 15) | interface Query extends _Query {}
  type QueryGenqlSelection (line 16) | interface QueryGenqlSelection extends _QueryGenqlSelection {}
  type Mutation (line 17) | interface Mutation extends _Mutation {}
  type MutationGenqlSelection (line 18) | interface MutationGenqlSelection extends _MutationGenqlSelection {}
  type FragmentsMap (line 19) | interface FragmentsMap extends _FragmentsMap {}
  type Scalars (line 20) | interface Scalars extends _Scalars {}
  type _Query (line 25) | interface _Query extends Query {}
  type _QueryGenqlSelection (line 26) | interface _QueryGenqlSelection extends QueryGenqlSelection {}
  type _Mutation (line 27) | interface _Mutation extends Mutation {}
  type _MutationGenqlSelection (line 28) | interface _MutationGenqlSelection extends MutationGenqlSelection {}
  type _FragmentsMap (line 29) | interface _FragmentsMap extends FragmentsMap {}
  type _Scalars (line 30) | interface _Scalars extends Scalars {}
  type Scalars (line 32) | interface Scalars {
  type AnalyticsKeyScope (line 63) | type AnalyticsKeyScope = 'query' | 'send'
  type Authors (line 65) | interface Authors {
  type AuthorsItem (line 84) | interface AuthorsItem {
  type AuthorsItemOrderByEnum (line 100) | type AuthorsItemOrderByEnum = '_sys_createdAt__ASC' | '_sys_createdAt__D...
  type BaseRichTextJson (line 102) | interface BaseRichTextJson {
  type BlockAudio (line 109) | interface BlockAudio {
  type BlockCodeSnippet (line 120) | interface BlockCodeSnippet {
  type BlockColor (line 129) | interface BlockColor {
  type BlockDocument (line 139) | type BlockDocument = (Authors | AuthorsItem | Blog | Categories | Catego...
  type BlockDocumentSys (line 141) | interface BlockDocumentSys {
  type BlockFile (line 154) | interface BlockFile {
  type BlockImage (line 163) | interface BlockImage {
  type BlockList (line 198) | type BlockList = (Authors | Categories | LegalPages | Posts | authorsIte...
  type BlockOgImage (line 200) | interface BlockOgImage {
  type BlockRichText (line 209) | type BlockRichText = (Body | Body_1) & { __isUnion?: true }
  type BlockVideo (line 211) | interface BlockVideo {
  type Blog (line 225) | interface Blog {
  type Body (line 240) | interface Body {
  type BodyRichText (line 249) | interface BodyRichText {
  type Body_1 (line 255) | interface Body_1 {
  type Body_1RichText (line 264) | interface Body_1RichText {
  type Categories (line 270) | interface Categories {
  type CategoriesItem (line 289) | interface CategoriesItem {
  type CategoriesItemOrderByEnum (line 303) | type CategoriesItemOrderByEnum = '_sys_createdAt__ASC' | '_sys_createdAt...
  type GetUploadSignedURL (line 305) | interface GetUploadSignedURL {
  type LegalPages (line 311) | interface LegalPages {
  type LegalPagesItem (line 330) | interface LegalPagesItem {
  type LegalPagesItemOrderByEnum (line 346) | type LegalPagesItemOrderByEnum = '_sys_createdAt__ASC' | '_sys_createdAt...
  type ListMeta (line 348) | interface ListMeta {
  type MediaBlock (line 356) | type MediaBlock = (BlockAudio | BlockFile | BlockImage | BlockVideo) & {...
  type MediaBlockUnion (line 358) | type MediaBlockUnion = (BlockAudio | BlockFile | BlockImage | BlockVideo...
  type Mutation (line 360) | interface Mutation {
  type Posts (line 393) | interface Posts {
  type PostsItem (line 412) | interface PostsItem {
  type PostsItemOrderByEnum (line 433) | type PostsItemOrderByEnum = '_sys_createdAt__ASC' | '_sys_createdAt__DES...
  type Query (line 435) | interface Query {
  type RepoSys (line 451) | interface RepoSys {
  type RichTextJson (line 463) | type RichTextJson = (BaseRichTextJson | BodyRichText | Body_1RichText) &...
  type SearchHighlight (line 465) | interface SearchHighlight {
  type TransactionStatus (line 473) | interface TransactionStatus {
  type TransactionStatusEnum (line 484) | type TransactionStatusEnum = 'Cancelled' | 'Completed' | 'Failed' | 'Run...
  type Variant (line 486) | interface Variant {
  type _AgentStart (line 495) | interface _AgentStart {
  type _BranchInfo (line 524) | interface _BranchInfo {
  type _Branches (line 548) | interface _Branches {
  type _CommitInfo (line 554) | interface _CommitInfo {
  type _GitInfo (line 571) | interface _GitInfo {
  type _PlaygroundInfo (line 577) | interface _PlaygroundInfo {
  type _ResolveTargetsWithEnum (line 585) | type _ResolveTargetsWithEnum = 'id' | 'objectName'
  type _StructureFormatEnum (line 587) | type _StructureFormatEnum = 'json' | 'xml'
  type _agents (line 589) | interface _agents {
  type _components (line 594) | interface _components {
  type authorsItem_AsList (line 602) | interface authorsItem_AsList {
  type categoriesItem_AsList (line 621) | interface categoriesItem_AsList {
  type legalPagesItem_AsList (line 640) | interface legalPagesItem_AsList {
  type postsItem_AsList (line 659) | interface postsItem_AsList {
  type AuthorsGenqlSelection (line 678) | interface AuthorsGenqlSelection{
  type AuthorsItemGenqlSelection (line 704) | interface AuthorsItemGenqlSelection{
  type AuthorsItemFilterInput (line 727) | interface AuthorsItemFilterInput {AND?: (AuthorsItemFilterInput | null),...
  type AuthorsItemSearchInput (line 729) | interface AuthorsItemSearchInput {
  type BaseRichTextJsonGenqlSelection (line 735) | interface BaseRichTextJsonGenqlSelection{
  type BlockAudioGenqlSelection (line 743) | interface BlockAudioGenqlSelection{
  type BlockCodeSnippetGenqlSelection (line 755) | interface BlockCodeSnippetGenqlSelection{
  type BlockColorGenqlSelection (line 767) | interface BlockColorGenqlSelection{
  type BlockDocumentGenqlSelection (line 778) | interface BlockDocumentGenqlSelection{
  type BlockDocumentSysGenqlSelection (line 811) | interface BlockDocumentSysGenqlSelection{
  type BlockFileGenqlSelection (line 825) | interface BlockFileGenqlSelection{
  type BlockImageGenqlSelection (line 835) | interface BlockImageGenqlSelection{
  type BlockListGenqlSelection (line 871) | interface BlockListGenqlSelection{
  type BlockOgImageGenqlSelection (line 901) | interface BlockOgImageGenqlSelection{
  type BlockRichTextGenqlSelection (line 911) | interface BlockRichTextGenqlSelection{
  type BlockVideoGenqlSelection (line 929) | interface BlockVideoGenqlSelection{
  type BlogGenqlSelection (line 944) | interface BlogGenqlSelection{
  type BodyGenqlSelection (line 996) | interface BodyGenqlSelection{
  type BodyRichTextGenqlSelection (line 1012) | interface BodyRichTextGenqlSelection{
  type Body_1GenqlSelection (line 1019) | interface Body_1GenqlSelection{
  type Body_1RichTextGenqlSelection (line 1035) | interface Body_1RichTextGenqlSelection{
  type CategoriesGenqlSelection (line 1042) | interface CategoriesGenqlSelection{
  type CategoriesItemGenqlSelection (line 1068) | interface CategoriesItemGenqlSelection{
  type CategoriesItemFilterInput (line 1089) | interface CategoriesItemFilterInput {AND?: (CategoriesItemFilterInput | ...
  type CategoriesItemSearchInput (line 1091) | interface CategoriesItemSearchInput {
  type DateFilter (line 1097) | interface DateFilter {eq?: (Scalars['DateTime'] | null),isAfter?: (Scala...
  type GetUploadSignedURLGenqlSelection (line 1099) | interface GetUploadSignedURLGenqlSelection{
  type LegalPagesGenqlSelection (line 1106) | interface LegalPagesGenqlSelection{
  type LegalPagesItemGenqlSelection (line 1132) | interface LegalPagesItemGenqlSelection{
  type LegalPagesItemFilterInput (line 1155) | interface LegalPagesItemFilterInput {AND?: (LegalPagesItemFilterInput | ...
  type LegalPagesItemSearchInput (line 1157) | interface LegalPagesItemSearchInput {
  type ListFilter (line 1163) | interface ListFilter {isEmpty?: (Scalars['Boolean'] | null),length?: (Sc...
  type ListMetaGenqlSelection (line 1165) | interface ListMetaGenqlSelection{
  type MediaBlockGenqlSelection (line 1174) | interface MediaBlockGenqlSelection{
  type MediaBlockUnionGenqlSelection (line 1188) | interface MediaBlockUnionGenqlSelection{
  type MutationGenqlSelection (line 1198) | interface MutationGenqlSelection{
  type NumberFilter (line 1256) | interface NumberFilter {eq?: (Scalars['Float'] | null),gt?: (Scalars['Fl...
  type PostsGenqlSelection (line 1258) | interface PostsGenqlSelection{
  type PostsItemGenqlSelection (line 1284) | interface PostsItemGenqlSelection{
  type PostsItemFilterInput (line 1312) | interface PostsItemFilterInput {AND?: (PostsItemFilterInput | null),OR?:...
  type PostsItemFilterInput__authors_0___untitled (line 1314) | interface PostsItemFilterInput__authors_0___untitled {_id?: (StringFilte...
  type PostsItemFilterInput__categories_0___untitled (line 1316) | interface PostsItemFilterInput__categories_0___untitled {_id?: (StringFi...
  type PostsItemSearchInput (line 1318) | interface PostsItemSearchInput {
  type QueryGenqlSelection (line 1324) | interface QueryGenqlSelection{
  type RepoSysGenqlSelection (line 1367) | interface RepoSysGenqlSelection{
  type RichTextJsonGenqlSelection (line 1380) | interface RichTextJsonGenqlSelection{
  type SearchHighlightGenqlSelection (line 1390) | interface SearchHighlightGenqlSelection{
  type SelectFilter (line 1399) | interface SelectFilter {excludes?: (Scalars['String'] | null),excludesAl...
  type StringFilter (line 1401) | interface StringFilter {contains?: (Scalars['String'] | null),endsWith?:...
  type StringMatchesFilter (line 1403) | interface StringMatchesFilter {caseSensitive?: (Scalars['Boolean'] | nul...
  type TargetBlock (line 1405) | interface TargetBlock {focus?: (Scalars['Boolean'] | null),id: Scalars['...
  type TransactionStatusGenqlSelection (line 1407) | interface TransactionStatusGenqlSelection{
  type VariantGenqlSelection (line 1419) | interface VariantGenqlSelection{
  type _AgentStartGenqlSelection (line 1429) | interface _AgentStartGenqlSelection{
  type _BranchInfoGenqlSelection (line 1465) | interface _BranchInfoGenqlSelection{
  type _BranchesGenqlSelection (line 1490) | interface _BranchesGenqlSelection{
  type _CommitInfoGenqlSelection (line 1497) | interface _CommitInfoGenqlSelection{
  type _GitInfoGenqlSelection (line 1515) | interface _GitInfoGenqlSelection{
  type _PlaygroundInfoGenqlSelection (line 1522) | interface _PlaygroundInfoGenqlSelection{
  type _agentsGenqlSelection (line 1531) | interface _agentsGenqlSelection{
  type _componentsGenqlSelection (line 1537) | interface _componentsGenqlSelection{
  type authorsItem_AsListGenqlSelection (line 1586) | interface authorsItem_AsListGenqlSelection{
  type categoriesItem_AsListGenqlSelection (line 1612) | interface categoriesItem_AsListGenqlSelection{
  type legalPagesItem_AsListGenqlSelection (line 1638) | interface legalPagesItem_AsListGenqlSelection{
  type postsItem_AsListGenqlSelection (line 1664) | interface postsItem_AsListGenqlSelection{
  type FragmentsMap (line 1690) | interface FragmentsMap {

FILE: packages/cms/components/toc.tsx
  type TableOfContentsProperties (line 4) | type TableOfContentsProperties = Omit<

FILE: packages/cms/index.ts
  type PostMeta (line 57) | type PostMeta = fragmentOn.infer<typeof postMetaFragment>;
  type Post (line 58) | type Post = fragmentOn.infer<typeof postFragment>;
  type LegalPostMeta (line 156) | type LegalPostMeta = fragmentOn.infer<typeof legalPostMetaFragment>;
  type LegalPost (line 157) | type LegalPost = fragmentOn.infer<typeof legalPostFragment>;

FILE: packages/collaboration/auth.ts
  type AuthenticateOptions (line 5) | interface AuthenticateOptions {

FILE: packages/collaboration/config.ts
  type Liveblocks (line 4) | interface Liveblocks {

FILE: packages/collaboration/room.tsx
  type RoomProps (line 12) | type RoomProps = ComponentProps<typeof LiveblocksProvider> & {

FILE: packages/design-system/components/ui/accordion.tsx
  function Accordion (line 9) | function Accordion({
  function AccordionItem (line 15) | function AccordionItem({
  function AccordionTrigger (line 28) | function AccordionTrigger({
  function AccordionContent (line 50) | function AccordionContent({

FILE: packages/design-system/components/ui/alert-dialog.tsx
  function AlertDialog (line 9) | function AlertDialog({
  function AlertDialogTrigger (line 15) | function AlertDialogTrigger({
  function AlertDialogPortal (line 23) | function AlertDialogPortal({
  function AlertDialogOverlay (line 31) | function AlertDialogOverlay({
  function AlertDialogContent (line 47) | function AlertDialogContent({
  function AlertDialogHeader (line 66) | function AlertDialogHeader({
  function AlertDialogFooter (line 79) | function AlertDialogFooter({
  function AlertDialogTitle (line 95) | function AlertDialogTitle({
  function AlertDialogDescription (line 108) | function AlertDialogDescription({
  function AlertDialogAction (line 121) | function AlertDialogAction({
  function AlertDialogCancel (line 133) | function AlertDialogCancel({

FILE: packages/design-system/components/ui/alert.tsx
  function Alert (line 22) | function Alert({
  function AlertTitle (line 37) | function AlertTitle({ className, ...props }: React.ComponentProps<"div">) {
  function AlertDescription (line 50) | function AlertDescription({

FILE: packages/design-system/components/ui/aspect-ratio.tsx
  function AspectRatio (line 5) | function AspectRatio({

FILE: packages/design-system/components/ui/avatar.tsx
  function Avatar (line 8) | function Avatar({
  function AvatarImage (line 24) | function AvatarImage({
  function AvatarFallback (line 37) | function AvatarFallback({

FILE: packages/design-system/components/ui/badge.tsx
  function Badge (line 28) | function Badge({

FILE: packages/design-system/components/ui/breadcrumb.tsx
  function Breadcrumb (line 7) | function Breadcrumb({ ...props }: React.ComponentProps<"nav">) {
  function BreadcrumbList (line 11) | function BreadcrumbList({ className, ...props }: React.ComponentProps<"o...
  function BreadcrumbItem (line 24) | function BreadcrumbItem({ className, ...props }: React.ComponentProps<"l...
  function BreadcrumbLink (line 34) | function BreadcrumbLink({
  function BreadcrumbPage (line 52) | function BreadcrumbPage({ className, ...props }: React.ComponentProps<"s...
  function BreadcrumbSeparator (line 65) | function BreadcrumbSeparator({
  function BreadcrumbEllipsis (line 83) | function BreadcrumbEllipsis({

FILE: packages/design-system/components/ui/button-group.tsx
  function ButtonGroup (line 24) | function ButtonGroup({
  function ButtonGroupText (line 40) | function ButtonGroupText({
  function ButtonGroupSeparator (line 60) | function ButtonGroupSeparator({

FILE: packages/design-system/components/ui/button.tsx
  function Button (line 39) | function Button({

FILE: packages/design-system/components/ui/calendar.tsx
  function Calendar (line 14) | function Calendar({
  function CalendarDayButton (line 178) | function CalendarDayButton({

FILE: packages/design-system/components/ui/card.tsx
  function Card (line 5) | function Card({ className, ...props }: React.ComponentProps<"div">) {
  function CardHeader (line 18) | function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
  function CardTitle (line 31) | function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
  function CardDescription (line 41) | function CardDescription({ className, ...props }: React.ComponentProps<"...
  function CardAction (line 51) | function CardAction({ className, ...props }: React.ComponentProps<"div">) {
  function CardContent (line 64) | function CardContent({ className, ...props }: React.ComponentProps<"div"...
  function CardFooter (line 74) | function CardFooter({ className, ...props }: React.ComponentProps<"div">) {

FILE: packages/design-system/components/ui/carousel.tsx
  type CarouselApi (line 12) | type CarouselApi = UseEmblaCarouselType[1]
  type UseCarouselParameters (line 13) | type UseCarouselParameters = Parameters<typeof useEmblaCarousel>
  type CarouselOptions (line 14) | type CarouselOptions = UseCarouselParameters[0]
  type CarouselPlugin (line 15) | type CarouselPlugin = UseCarouselParameters[1]
  type CarouselProps (line 17) | type CarouselProps = {
  type CarouselContextProps (line 24) | type CarouselContextProps = {
  function useCarousel (line 35) | function useCarousel() {
  function Carousel (line 45) | function Carousel({
  function CarouselContent (line 135) | function CarouselContent({ className, ...props }: React.ComponentProps<"...
  function CarouselItem (line 156) | function CarouselItem({ className, ...props }: React.ComponentProps<"div...
  function CarouselPrevious (line 174) | function CarouselPrevious({
  function CarouselNext (line 204) | function CarouselNext({

FILE: packages/design-system/components/ui/chart.tsx
  constant THEMES (line 9) | const THEMES = { light: "", dark: ".dark" } as const
  type ChartConfig (line 11) | type ChartConfig = {
  type ChartContextProps (line 21) | type ChartContextProps = {
  function useChart (line 27) | function useChart() {
  function ChartContainer (line 37) | function ChartContainer({
  function ChartTooltipContent (line 107) | function ChartTooltipContent({
  function ChartLegendContent (line 255) | function ChartLegendContent({
  function getPayloadConfigFromPayload (line 312) | function getPayloadConfigFromPayload(

FILE: packages/design-system/components/ui/checkbox.tsx
  function Checkbox (line 9) | function Checkbox({

FILE: packages/design-system/components/ui/collapsible.tsx
  function Collapsible (line 5) | function Collapsible({
  function CollapsibleTrigger (line 11) | function CollapsibleTrigger({
  function CollapsibleContent (line 22) | function CollapsibleContent({

FILE: packages/design-system/components/ui/command.tsx
  function Command (line 16) | function Command({
  function CommandDialog (line 32) | function CommandDialog({
  function CommandInput (line 63) | function CommandInput({
  function CommandList (line 85) | function CommandList({
  function CommandEmpty (line 101) | function CommandEmpty({
  function CommandGroup (line 113) | function CommandGroup({
  function CommandSeparator (line 129) | function CommandSeparator({
  function CommandItem (line 142) | function CommandItem({
  function CommandShortcut (line 158) | function CommandShortcut({

FILE: packages/design-system/components/ui/context-menu.tsx
  function ContextMenu (line 9) | function ContextMenu({
  function ContextMenuTrigger (line 15) | function ContextMenuTrigger({
  function ContextMenuGroup (line 23) | function ContextMenuGroup({
  function ContextMenuPortal (line 31) | function ContextMenuPortal({
  function ContextMenuSub (line 39) | function ContextMenuSub({
  function ContextMenuRadioGroup (line 45) | function ContextMenuRadioGroup({
  function ContextMenuSubTrigger (line 56) | function ContextMenuSubTrigger({
  function ContextMenuSubContent (line 80) | function ContextMenuSubContent({
  function ContextMenuContent (line 96) | function ContextMenuContent({
  function ContextMenuItem (line 114) | function ContextMenuItem({
  function ContextMenuCheckboxItem (line 137) | function ContextMenuCheckboxItem({
  function ContextMenuRadioItem (line 163) | function ContextMenuRadioItem({
  function ContextMenuLabel (line 187) | function ContextMenuLabel({
  function ContextMenuSeparator (line 207) | function ContextMenuSeparator({
  function ContextMenuShortcut (line 220) | function ContextMenuShortcut({

FILE: packages/design-system/components/ui/dialog.tsx
  function Dialog (line 9) | function Dialog({
  function DialogTrigger (line 15) | function DialogTrigger({
  function DialogPortal (line 21) | function DialogPortal({
  function DialogClose (line 27) | function DialogClose({
  function DialogOverlay (line 33) | function DialogOverlay({
  function DialogContent (line 49) | function DialogContent({
  function DialogHeader (line 83) | function DialogHeader({ className, ...props }: React.ComponentProps<"div...
  function DialogFooter (line 93) | function DialogFooter({ className, ...props }: React.ComponentProps<"div...
  function DialogTitle (line 106) | function DialogTitle({
  function DialogDescription (line 119) | function DialogDescription({

FILE: packages/design-system/components/ui/drawer.tsx
  function Drawer (line 8) | function Drawer({
  function DrawerTrigger (line 14) | function DrawerTrigger({
  function DrawerPortal (line 20) | function DrawerPortal({
  function DrawerClose (line 26) | function DrawerClose({
  function DrawerOverlay (line 32) | function DrawerOverlay({
  function DrawerContent (line 48) | function DrawerContent({
  function DrawerHeader (line 75) | function DrawerHeader({ className, ...props }: React.ComponentProps<"div...
  function DrawerFooter (line 88) | function DrawerFooter({ className, ...props }: React.ComponentProps<"div...
  function DrawerTitle (line 98) | function DrawerTitle({
  function DrawerDescription (line 111) | function DrawerDescription({

FILE: packages/design-system/components/ui/dropdown-menu.tsx
  function DropdownMenu (line 9) | function DropdownMenu({
  function DropdownMenuPortal (line 15) | function DropdownMenuPortal({
  function DropdownMenuTrigger (line 23) | function DropdownMenuTrigger({
  function DropdownMenuContent (line 34) | function DropdownMenuContent({
  function DropdownMenuGroup (line 54) | function DropdownMenuGroup({
  function DropdownMenuItem (line 62) | function DropdownMenuItem({
  function DropdownMenuCheckboxItem (line 85) | function DropdownMenuCheckboxItem({
  function DropdownMenuRadioGroup (line 111) | function DropdownMenuRadioGroup({
  function DropdownMenuRadioItem (line 122) | function DropdownMenuRadioItem({
  function DropdownMenuLabel (line 146) | function DropdownMenuLabel({
  function DropdownMenuSeparator (line 166) | function DropdownMenuSeparator({
  function DropdownMenuShortcut (line 179) | function DropdownMenuShortcut({
  function DropdownMenuSub (line 195) | function DropdownMenuSub({
  function DropdownMenuSubTrigger (line 201) | function DropdownMenuSubTrigger({
  function DropdownMenuSubContent (line 225) | function DropdownMenuSubContent({

FILE: packages/design-system/components/ui/empty.tsx
  function Empty (line 5) | function Empty({ className, ...props }: React.ComponentProps<"div">) {
  function EmptyHeader (line 18) | function EmptyHeader({ className, ...props }: React.ComponentProps<"div"...
  function EmptyMedia (line 46) | function EmptyMedia({
  function EmptyTitle (line 61) | function EmptyTitle({ className, ...props }: React.ComponentProps<"div">) {
  function EmptyDescription (line 71) | function EmptyDescription({ className, ...props }: React.ComponentProps<...
  function EmptyContent (line 84) | function EmptyContent({ className, ...props }: React.ComponentProps<"div...

FILE: packages/design-system/components/ui/field.tsx
  function FieldSet (line 10) | function FieldSet({ className, ...props }: React.ComponentProps<"fieldse...
  function FieldLegend (line 24) | function FieldLegend({
  function FieldGroup (line 44) | function FieldGroup({ className, ...props }: React.ComponentProps<"div">) {
  function Field (line 81) | function Field({
  function FieldContent (line 97) | function FieldContent({ className, ...props }: React.ComponentProps<"div...
  function FieldLabel (line 110) | function FieldLabel({
  function FieldTitle (line 128) | function FieldTitle({ className, ...props }: React.ComponentProps<"div">) {
  function FieldDescription (line 141) | function FieldDescription({ className, ...props }: React.ComponentProps<...
  function FieldSeparator (line 156) | function FieldSeparator({
  function FieldError (line 186) | function FieldError({

FILE: packages/design-system/components/ui/form.tsx
  type FormFieldContextValue (line 21) | type FormFieldContextValue<
  type FormItemContextValue (line 68) | type FormItemContextValue = {
  function FormItem (line 76) | function FormItem({ className, ...props }: React.ComponentProps<"div">) {
  function FormLabel (line 90) | function FormLabel({
  function FormControl (line 107) | function FormControl({ ...props }: React.ComponentProps<typeof SlotPrimi...
  function FormDescription (line 125) | function FormDescription({ className, ...props }: React.ComponentProps<"...
  function FormMessage (line 138) | function FormMessage({ className, ...props }: React.ComponentProps<"p">) {

FILE: packages/design-system/components/ui/hover-card.tsx
  function HoverCard (line 8) | function HoverCard({
  function HoverCardTrigger (line 14) | function HoverCardTrigger({
  function HoverCardContent (line 22) | function HoverCardContent({

FILE: packages/design-system/components/ui/input-group.tsx
  function InputGroup (line 11) | function InputGroup({ className, ...props }: React.ComponentProps<"div">) {
  function InputGroupAddon (line 60) | function InputGroupAddon({
  function InputGroupButton (line 100) | function InputGroupButton({
  function InputGroupText (line 119) | function InputGroupText({ className, ...props }: React.ComponentProps<"s...
  function InputGroupInput (line 131) | function InputGroupInput({
  function InputGroupTextarea (line 147) | function InputGroupTextarea({

FILE: packages/design-system/components/ui/input-otp.tsx
  function InputOTP (line 9) | function InputOTP({
  function InputOTPGroup (line 29) | function InputOTPGroup({ className, ...props }: React.ComponentProps<"di...
  function InputOTPSlot (line 39) | function InputOTPSlot({
  function InputOTPSeparator (line 69) | function InputOTPSeparator({ ...props }: React.ComponentProps<"div">) {

FILE: packages/design-system/components/ui/input.tsx
  function Input (line 5) | function Input({ className, type, ...props }: React.ComponentProps<"inpu...

FILE: packages/design-system/components/ui/item.tsx
  function ItemGroup (line 8) | function ItemGroup({ className, ...props }: React.ComponentProps<"div">) {
  function ItemSeparator (line 19) | function ItemSeparator({
  function Item (line 54) | function Item({
  function ItemMedia (line 91) | function ItemMedia({
  function ItemContent (line 106) | function ItemContent({ className, ...props }: React.ComponentProps<"div"...
  function ItemTitle (line 119) | function ItemTitle({ className, ...props }: React.ComponentProps<"div">) {
  function ItemDescription (line 132) | function ItemDescription({ className, ...props }: React.ComponentProps<"...
  function ItemActions (line 146) | function ItemActions({ className, ...props }: React.ComponentProps<"div"...
  function ItemHeader (line 156) | function ItemHeader({ className, ...props }: React.ComponentProps<"div">) {
  function ItemFooter (line 169) | function ItemFooter({ className, ...props }: React.ComponentProps<"div">) {

FILE: packages/design-system/components/ui/kbd.tsx
  function Kbd (line 3) | function Kbd({ className, ...props }: React.ComponentProps<"kbd">) {
  function KbdGroup (line 18) | function KbdGroup({ className, ...props }: React.ComponentProps<"div">) {

FILE: packages/design-system/components/ui/label.tsx
  function Label (line 8) | function Label({

FILE: packages/design-system/components/ui/menubar.tsx
  function Menubar (line 9) | function Menubar({
  function MenubarMenu (line 25) | function MenubarMenu({
  function MenubarGroup (line 31) | function MenubarGroup({
  function MenubarPortal (line 37) | function MenubarPortal({
  function MenubarRadioGroup (line 43) | function MenubarRadioGroup({
  function MenubarTrigger (line 51) | function MenubarTrigger({
  function MenubarContent (line 67) | function MenubarContent({
  function MenubarItem (line 91) | function MenubarItem({
  function MenubarCheckboxItem (line 114) | function MenubarCheckboxItem({
  function MenubarRadioItem (line 140) | function MenubarRadioItem({
  function MenubarLabel (line 164) | function MenubarLabel({
  function MenubarSeparator (line 184) | function MenubarSeparator({
  function MenubarShortcut (line 197) | function MenubarShortcut({
  function MenubarSub (line 213) | function MenubarSub({
  function MenubarSubTrigger (line 219) | function MenubarSubTrigger({
  function MenubarSubContent (line 243) | function MenubarSubContent({

FILE: packages/design-system/components/ui/navigation-menu.tsx
  function NavigationMenu (line 8) | function NavigationMenu({
  function NavigationMenuList (line 32) | function NavigationMenuList({
  function NavigationMenuItem (line 48) | function NavigationMenuItem({
  function NavigationMenuTrigger (line 65) | function NavigationMenuTrigger({
  function NavigationMenuContent (line 85) | function NavigationMenuContent({
  function NavigationMenuViewport (line 102) | function NavigationMenuViewport({
  function NavigationMenuLink (line 124) | function NavigationMenuLink({
  function NavigationMenuIndicator (line 140) | function NavigationMenuIndicator({

FILE: packages/design-system/components/ui/pagination.tsx
  function Pagination (line 11) | function Pagination({ className, ...props }: React.ComponentProps<"nav">) {
  function PaginationContent (line 23) | function PaginationContent({
  function PaginationItem (line 36) | function PaginationItem({ ...props }: React.ComponentProps<"li">) {
  type PaginationLinkProps (line 40) | type PaginationLinkProps = {
  function PaginationLink (line 45) | function PaginationLink({
  function PaginationPrevious (line 68) | function PaginationPrevious({
  function PaginationNext (line 85) | function PaginationNext({
  function PaginationEllipsis (line 102) | function PaginationEllipsis({

FILE: packages/design-system/components/ui/popover.tsx
  function Popover (line 8) | function Popover({
  function PopoverTrigger (line 14) | function PopoverTrigger({
  function PopoverContent (line 20) | function PopoverContent({
  function PopoverAnchor (line 42) | function PopoverAnchor({

FILE: packages/design-system/components/ui/progress.tsx
  function Progress (line 8) | function Progress({

FILE: packages/design-system/components/ui/radio-group.tsx
  function RadioGroup (line 9) | function RadioGroup({
  function RadioGroupItem (line 22) | function RadioGroupItem({

FILE: packages/design-system/components/ui/resizable.tsx
  function ResizablePanelGroup (line 9) | function ResizablePanelGroup({
  function ResizablePanel (line 25) | function ResizablePanel({
  function ResizableHandle (line 31) | function ResizableHandle({

FILE: packages/design-system/components/ui/scroll-area.tsx
  function ScrollArea (line 8) | function ScrollArea({
  function ScrollBar (line 31) | function ScrollBar({

FILE: packages/design-system/components/ui/select.tsx
  function Select (line 9) | function Select({
  function SelectGroup (line 15) | function SelectGroup({
  function SelectValue (line 21) | function SelectValue({
  function SelectTrigger (line 27) | function SelectTrigger({
  function SelectContent (line 53) | function SelectContent({
  function SelectLabel (line 90) | function SelectLabel({
  function SelectItem (line 103) | function SelectItem({
  function SelectSeparator (line 127) | function SelectSeparator({
  function SelectScrollUpButton (line 140) | function SelectScrollUpButton({
  function SelectScrollDownButton (line 158) | function SelectScrollDownButton({

FILE: packages/design-system/components/ui/separator.tsx
  function Separator (line 8) | function Separator({

FILE: packages/design-system/components/ui/sheet.tsx
  function Sheet (line 9) | function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive....
  function SheetTrigger (line 13) | function SheetTrigger({
  function SheetClose (line 19) | function SheetClose({
  function SheetPortal (line 25) | function SheetPortal({
  function SheetOverlay (line 31) | function SheetOverlay({
  function SheetContent (line 47) | function SheetContent({
  function SheetHeader (line 84) | function SheetHeader({ className, ...props }: React.ComponentProps<"div"...
  function SheetFooter (line 94) | function SheetFooter({ className, ...props }: React.ComponentProps<"div"...
  function SheetTitle (line 104) | function SheetTitle({
  function SheetDescription (line 117) | function SheetDescription({

FILE: packages/design-system/components/ui/sidebar.tsx
  constant SIDEBAR_COOKIE_NAME (line 28) | const SIDEBAR_COOKIE_NAME = "sidebar_state"
  constant SIDEBAR_COOKIE_MAX_AGE (line 29) | const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7
  constant SIDEBAR_WIDTH (line 30) | const SIDEBAR_WIDTH = "16rem"
  constant SIDEBAR_WIDTH_MOBILE (line 31) | const SIDEBAR_WIDTH_MOBILE = "18rem"
  constant SIDEBAR_WIDTH_ICON (line 32) | const SIDEBAR_WIDTH_ICON = "3rem"
  constant SIDEBAR_KEYBOARD_SHORTCUT (line 33) | const SIDEBAR_KEYBOARD_SHORTCUT = "b"
  type SidebarContextProps (line 35) | type SidebarContextProps = {
  function useSidebar (line 47) | function useSidebar() {
  function SidebarProvider (line 56) | function SidebarProvider({
  function Sidebar (line 154) | function Sidebar({
  function SidebarTrigger (line 256) | function SidebarTrigger({
  function SidebarRail (line 282) | function SidebarRail({ className, ...props }: React.ComponentProps<"butt...
  function SidebarInset (line 307) | function SidebarInset({ className, ...props }: React.ComponentProps<"mai...
  function SidebarInput (line 321) | function SidebarInput({
  function SidebarHeader (line 335) | function SidebarHeader({ className, ...props }: React.ComponentProps<"di...
  function SidebarFooter (line 346) | function SidebarFooter({ className, ...props }: React.ComponentProps<"di...
  function SidebarSeparator (line 357) | function SidebarSeparator({
  function SidebarContent (line 371) | function SidebarContent({ className, ...props }: React.ComponentProps<"d...
  function SidebarGroup (line 385) | function SidebarGroup({ className, ...props }: React.ComponentProps<"div...
  function SidebarGroupLabel (line 396) | function SidebarGroupLabel({
  function SidebarGroupAction (line 417) | function SidebarGroupAction({
  function SidebarGroupContent (line 440) | function SidebarGroupContent({
  function SidebarMenu (line 454) | function SidebarMenu({ className, ...props }: React.ComponentProps<"ul">) {
  function SidebarMenuItem (line 465) | function SidebarMenuItem({ className, ...props }: React.ComponentProps<"...
  function SidebarMenuButton (line 498) | function SidebarMenuButton({
  function SidebarMenuAction (line 548) | function SidebarMenuAction({
  function SidebarMenuBadge (line 580) | function SidebarMenuBadge({
  function SidebarMenuSkeleton (line 602) | function SidebarMenuSkeleton({
  function SidebarMenuSub (line 640) | function SidebarMenuSub({ className, ...props }: React.ComponentProps<"u...
  function SidebarMenuSubItem (line 655) | function SidebarMenuSubItem({
  function SidebarMenuSubButton (line 669) | function SidebarMenuSubButton({

FILE: packages/design-system/components/ui/skeleton.tsx
  function Skeleton (line 3) | function Skeleton({ className, ...props }: React.ComponentProps<"div">) {

FILE: packages/design-system/components/ui/slider.tsx
  function Slider (line 8) | function Slider({

FILE: packages/design-system/components/ui/spinner.tsx
  function Spinner (line 5) | function Spinner({ className, ...props }: React.ComponentProps<"svg">) {

FILE: packages/design-system/components/ui/switch.tsx
  function Switch (line 8) | function Switch({

FILE: packages/design-system/components/ui/table.tsx
  function Table (line 7) | function Table({ className, ...props }: React.ComponentProps<"table">) {
  function TableHeader (line 22) | function TableHeader({ className, ...props }: React.ComponentProps<"thea...
  function TableBody (line 32) | function TableBody({ className, ...props }: React.ComponentProps<"tbody"...
  function TableFooter (line 42) | function TableFooter({ className, ...props }: React.ComponentProps<"tfoo...
  function TableRow (line 55) | function TableRow({ className, ...props }: React.ComponentProps<"tr">) {
  function TableHead (line 68) | function TableHead({ className, ...props }: React.ComponentProps<"th">) {
  function TableCell (line 81) | function TableCell({ className, ...props }: React.ComponentProps<"td">) {
  function TableCaption (line 94) | function TableCaption({

FILE: packages/design-system/components/ui/tabs.tsx
  function Tabs (line 8) | function Tabs({
  function TabsList (line 21) | function TabsList({
  function TabsTrigger (line 37) | function TabsTrigger({
  function TabsContent (line 53) | function TabsContent({

FILE: packages/design-system/components/ui/textarea.tsx
  function Textarea (line 5) | function Textarea({ className, ...props }: React.ComponentProps<"textare...

FILE: packages/design-system/components/ui/toggle-group.tsx
  function ToggleGroup (line 20) | function ToggleGroup({
  function ToggleGroupItem (line 51) | function ToggleGroupItem({

FILE: packages/design-system/components/ui/toggle.tsx
  function Toggle (line 31) | function Toggle({

FILE: packages/design-system/components/ui/tooltip.tsx
  function TooltipProvider (line 8) | function TooltipProvider({
  function Tooltip (line 21) | function Tooltip({
  function TooltipTrigger (line 31) | function TooltipTrigger({
  function TooltipContent (line 37) | function TooltipContent({

FILE: packages/design-system/hooks/use-mobile.ts
  constant MOBILE_BREAKPOINT (line 3) | const MOBILE_BREAKPOINT = 768
  function useIsMobile (line 5) | function useIsMobile() {

FILE: packages/design-system/index.tsx
  type DesignSystemProviderProperties (line 7) | type DesignSystemProviderProperties = ThemeProviderProps & {

FILE: packages/email/templates/contact.tsx
  type ContactTemplateProps (line 13) | interface ContactTemplateProps {

FILE: packages/feature-flags/lib/create-flag.ts
  method decide (line 9) | async decide() {

FILE: packages/internationalization/index.ts
  type Dictionary (line 10) | type Dictionary = typeof en;

FILE: packages/next-config/index.ts
  method rewrites (line 16) | async rewrites() {

FILE: packages/notifications/components/provider.tsx
  type NotificationsProviderProps (line 14) | interface NotificationsProviderProps {

FILE: packages/observability/status/types.ts
  type BetterStackResponse (line 1) | interface BetterStackResponse {

FILE: packages/seo/json-ld.tsx
  type JsonLdProps (line 3) | interface JsonLdProps {

FILE: packages/seo/metadata.ts
  type MetadataGenerator (line 4) | type MetadataGenerator = Omit<Metadata, "description" | "title"> & {

FILE: scripts/initialize.ts
  method validate (line 186) | validate(value: string) {

FILE: turbo/generators/config.ts
  function generator (line 3) | function generator(plop: PlopTypes.NodePlopAPI): void {
Condensed preview — 611 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,511K chars).
[
  {
    "path": ".autorc",
    "chars": 201,
    "preview": "{\n  \"plugins\": [[\"npm\", { \"setRcToken\": false }], \"first-time-contributor\", \"released\"],\n  \"owner\": \"vercel\",\n  \"repo\": "
  },
  {
    "path": ".cursorrules.example",
    "chars": 1419,
    "preview": "# [PROJECT NAME]\n\n## PROJECT DESCRIPTION\n- [PROJECT DESCRIPTION - What is the goal of the project? What is the purpose o"
  },
  {
    "path": ".github/CODE_OF_CONDUCT.md",
    "chars": 5220,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "chars": 1554,
    "preview": "# Contributing to This Project\n\nThank you for your interest in contributing! This document outlines the process for cont"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 629,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Describe the "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 511,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement\nassignees: ''\n\n---\n\n**Is"
  },
  {
    "path": ".github/SECURITY.md",
    "chars": 198,
    "preview": "# Security Policy\n\n## Supported Versions\n\nCurrently, only the latest on `main` branch is supported with security updates"
  },
  {
    "path": ".github/copilot-instructions.md.example",
    "chars": 1333,
    "preview": "# Copilot Guidelines\n\nThis project <PROJECT_NAME> uses <TECH_STACK>.\n\n## Project Structure\nStructure of how project file"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 404,
    "preview": "version: 2\nupdates:\n\n  # Maintain dependencies for GitHub Actions\n  - package-ecosystem: \"github-actions\"\n    directory:"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 753,
    "preview": "## Description\n\nPlease provide a brief description of the changes introduced in this pull request.\n\n## Related Issues\n\nC"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 950,
    "preview": "name: Release\n\non:\n  push:\n    branches: [main]\n\npermissions:\n  contents: write\n  pull-requests: write\n  id-token: write"
  },
  {
    "path": ".gitignore",
    "chars": 4099,
    "preview": "# Created by https://www.toptal.com/developers/gitignore/api/macos,windows,node,nextjs,vercel,turbo,storybookjs,react\n# "
  },
  {
    "path": ".vscode/extensions.json",
    "chars": 198,
    "preview": "{\n  \"recommendations\": [\n    \"biomejs.biome\",\n    \"bradlc.vscode-tailwindcss\",\n    \"Prisma.prisma\",\n    \"unifiedjs.vscod"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 1570,
    "preview": "{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"name\": \"Next.js: debug server-side\",\n      \"type\": \"node-term"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 752,
    "preview": "{\n  \"[javascript]\": {\n    \"editor.defaultFormatter\": \"biomejs.biome\"\n  },\n  \"[json]\": {\n    \"editor.defaultFormatter\": \""
  },
  {
    "path": "CHANGELOG.md",
    "chars": 125538,
    "preview": "# v6.0.2 (Fri Mar 20 2026)\n\n:tada: This release contains work from a new contributor! :tada:\n\nThank you, Sam Gutentag (["
  },
  {
    "path": "README.md",
    "chars": 4872,
    "preview": "# ▲ / next-forge\n\n**Production-grade Turborepo template for Next.js apps.**\n\n<div>\n  <img src=\"https://img.shields.io/np"
  },
  {
    "path": "apps/api/.gitignore",
    "chars": 8,
    "preview": ".vercel\n"
  },
  {
    "path": "apps/api/__tests__/health.test.ts",
    "chars": 235,
    "preview": "import { expect, test } from \"vitest\";\nimport { GET } from \"../app/health/route\";\n\ntest(\"Health Check\", async () => {\n  "
  },
  {
    "path": "apps/api/app/cron/keep-alive/route.ts",
    "chars": 304,
    "preview": "import { database } from \"@repo/database\";\n\nexport const GET = async () => {\n  const newPage = await database.page.creat"
  },
  {
    "path": "apps/api/app/global-error.tsx",
    "chars": 744,
    "preview": "\"use client\";\n\nimport { Button } from \"@repo/design-system/components/ui/button\";\nimport { fonts } from \"@repo/design-sy"
  },
  {
    "path": "apps/api/app/health/route.ts",
    "chars": 72,
    "preview": "export const GET = (): Response => new Response(\"OK\", { status: 200 });\n"
  },
  {
    "path": "apps/api/app/layout.tsx",
    "chars": 371,
    "preview": "import { AnalyticsProvider } from \"@repo/analytics/provider\";\nimport type { ReactNode } from \"react\";\n\ninterface RootLay"
  },
  {
    "path": "apps/api/app/webhooks/auth/route.ts",
    "chars": 5770,
    "preview": "import { analytics } from \"@repo/analytics/server\";\nimport type {\n  DeletedObjectJSON,\n  OrganizationJSON,\n  Organizatio"
  },
  {
    "path": "apps/api/app/webhooks/payments/route.ts",
    "chars": 2757,
    "preview": "import { analytics } from \"@repo/analytics/server\";\nimport { clerkClient } from \"@repo/auth/server\";\nimport { parseError"
  },
  {
    "path": "apps/api/env.ts",
    "chars": 644,
    "preview": "import { keys as analytics } from \"@repo/analytics/keys\";\nimport { keys as auth } from \"@repo/auth/keys\";\nimport { keys "
  },
  {
    "path": "apps/api/instrumentation-client.ts",
    "chars": 256,
    "preview": "import { initializeAnalytics } from \"@repo/analytics/instrumentation-client\";\nimport { initializeSentry } from \"@repo/ob"
  },
  {
    "path": "apps/api/instrumentation.ts",
    "chars": 185,
    "preview": "import { initializeSentry } from \"@repo/observability/instrumentation\";\n\nexport const register = initializeSentry;\nexpor"
  },
  {
    "path": "apps/api/next.config.ts",
    "chars": 415,
    "preview": "import { config, withAnalyzer } from \"@repo/next-config\";\nimport { withLogging, withSentry } from \"@repo/observability/n"
  },
  {
    "path": "apps/api/package.json",
    "chars": 1368,
    "preview": "{\n  \"name\": \"api\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"concurrently \\\"npm:next-dev\\\" \\\"npm:stripe\\\"\",\n    \"nex"
  },
  {
    "path": "apps/api/scripts/skip-ci.js",
    "chars": 344,
    "preview": "const { execSync } = require(\"node:child_process\");\n\nconst commitMessage = execSync(\"git log -1 --pretty=%B\").toString()"
  },
  {
    "path": "apps/api/sentry.edge.config.ts",
    "chars": 82,
    "preview": "import { initializeSentry } from \"@repo/observability/edge\";\n\ninitializeSentry();\n"
  },
  {
    "path": "apps/api/sentry.server.config.ts",
    "chars": 84,
    "preview": "import { initializeSentry } from \"@repo/observability/server\";\n\ninitializeSentry();\n"
  },
  {
    "path": "apps/api/tsconfig.json",
    "chars": 304,
    "preview": "{\n  \"extends\": \"@repo/typescript-config/nextjs.json\",\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@"
  },
  {
    "path": "apps/api/vercel.json",
    "chars": 220,
    "preview": "{\n  \"$schema\": \"https://openapi.vercel.sh/vercel.json\",\n  \"bunVersion\": \"1.x\",\n  \"ignoreCommand\": \"node scripts/skip-ci."
  },
  {
    "path": "apps/api/vitest.config.mts",
    "chars": 374,
    "preview": "import path from \"node:path\";\nimport react from \"@vitejs/plugin-react\";\nimport { defineConfig } from \"vitest/config\";\n\ne"
  },
  {
    "path": "apps/app/.gitignore",
    "chars": 62,
    "preview": "\n# clerk configuration (can include secrets)\n/.clerk/\n.vercel\n"
  },
  {
    "path": "apps/app/__tests__/sign-in.test.tsx",
    "chars": 272,
    "preview": "import { render } from \"@testing-library/react\";\nimport { expect, test } from \"vitest\";\nimport Page from \"../app/(unauth"
  },
  {
    "path": "apps/app/__tests__/sign-up.test.tsx",
    "chars": 272,
    "preview": "import { render } from \"@testing-library/react\";\nimport { expect, test } from \"vitest\";\nimport Page from \"../app/(unauth"
  },
  {
    "path": "apps/app/app/(authenticated)/components/avatar-stack.tsx",
    "chars": 1471,
    "preview": "\"use client\";\n\nimport { useOthers, useSelf } from \"@repo/collaboration/hooks\";\nimport {\n  Avatar,\n  AvatarFallback,\n  Av"
  },
  {
    "path": "apps/app/app/(authenticated)/components/collaboration-provider.tsx",
    "chars": 1160,
    "preview": "\"use client\";\n\nimport { Room } from \"@repo/collaboration/room\";\nimport type { ReactNode } from \"react\";\nimport { getUser"
  },
  {
    "path": "apps/app/app/(authenticated)/components/cursors.tsx",
    "chars": 2919,
    "preview": "\"use client\";\n\nimport { useMyPresence, useOthers } from \"@repo/collaboration/hooks\";\nimport { useEffect } from \"react\";\n"
  },
  {
    "path": "apps/app/app/(authenticated)/components/header.tsx",
    "chars": 1411,
    "preview": "import {\n  Breadcrumb,\n  BreadcrumbItem,\n  BreadcrumbLink,\n  BreadcrumbList,\n  BreadcrumbPage,\n  BreadcrumbSeparator,\n} "
  },
  {
    "path": "apps/app/app/(authenticated)/components/notifications-provider.tsx",
    "chars": 611,
    "preview": "\"use client\";\n\nimport { NotificationsProvider as RawNotificationsProvider } from \"@repo/notifications/components/provide"
  },
  {
    "path": "apps/app/app/(authenticated)/components/search.tsx",
    "chars": 893,
    "preview": "import { Button } from \"@repo/design-system/components/ui/button\";\nimport { Input } from \"@repo/design-system/components"
  },
  {
    "path": "apps/app/app/(authenticated)/components/sidebar.tsx",
    "chars": 9919,
    "preview": "\"use client\";\n\nimport { OrganizationSwitcher, UserButton } from \"@repo/auth/client\";\nimport { ModeToggle } from \"@repo/d"
  },
  {
    "path": "apps/app/app/(authenticated)/layout.tsx",
    "chars": 1246,
    "preview": "import { auth, currentUser } from \"@repo/auth/server\";\nimport { SidebarProvider } from \"@repo/design-system/components/u"
  },
  {
    "path": "apps/app/app/(authenticated)/page.tsx",
    "chars": 1543,
    "preview": "import { auth } from \"@repo/auth/server\";\nimport { database } from \"@repo/database\";\nimport type { Metadata } from \"next"
  },
  {
    "path": "apps/app/app/(authenticated)/search/page.tsx",
    "chars": 1368,
    "preview": "import { auth } from \"@repo/auth/server\";\nimport { database } from \"@repo/database\";\nimport { notFound, redirect } from "
  },
  {
    "path": "apps/app/app/(authenticated)/webhooks/page.tsx",
    "chars": 605,
    "preview": "import { webhooks } from \"@repo/webhooks\";\nimport { notFound } from \"next/navigation\";\n\nexport const metadata = {\n  titl"
  },
  {
    "path": "apps/app/app/(unauthenticated)/layout.tsx",
    "chars": 1443,
    "preview": "import { ModeToggle } from \"@repo/design-system/components/mode-toggle\";\nimport { CommandIcon } from \"lucide-react\";\nimp"
  },
  {
    "path": "apps/app/app/(unauthenticated)/sign-in/[[...sign-in]]/page.tsx",
    "chars": 453,
    "preview": "import { createMetadata } from \"@repo/seo/metadata\";\nimport type { Metadata } from \"next\";\nimport dynamic from \"next/dyn"
  },
  {
    "path": "apps/app/app/(unauthenticated)/sign-up/[[...sign-up]]/page.tsx",
    "chars": 462,
    "preview": "import { createMetadata } from \"@repo/seo/metadata\";\nimport type { Metadata } from \"next\";\nimport dynamic from \"next/dyn"
  },
  {
    "path": "apps/app/app/.well-known/vercel/flags/route.ts",
    "chars": 85,
    "preview": "import { getFlags } from \"@repo/feature-flags/access\";\n\nexport const GET = getFlags;\n"
  },
  {
    "path": "apps/app/app/actions/users/get.ts",
    "chars": 1833,
    "preview": "\"use server\";\n\nimport {\n  auth,\n  clerkClient,\n  type OrganizationMembership,\n} from \"@repo/auth/server\";\n\nconst getName"
  },
  {
    "path": "apps/app/app/actions/users/search.ts",
    "chars": 1338,
    "preview": "\"use server\";\n\nimport {\n  auth,\n  clerkClient,\n  type OrganizationMembership,\n} from \"@repo/auth/server\";\nimport Fuse fr"
  },
  {
    "path": "apps/app/app/api/collaboration/auth/route.ts",
    "chars": 1088,
    "preview": "import { auth, currentUser } from \"@repo/auth/server\";\nimport { authenticate } from \"@repo/collaboration/auth\";\n\nconst C"
  },
  {
    "path": "apps/app/app/global-error.tsx",
    "chars": 744,
    "preview": "\"use client\";\n\nimport { Button } from \"@repo/design-system/components/ui/button\";\nimport { fonts } from \"@repo/design-sy"
  },
  {
    "path": "apps/app/app/layout.tsx",
    "chars": 1002,
    "preview": "import { env } from \"@/env\";\nimport \"./styles.css\";\nimport { AnalyticsProvider } from \"@repo/analytics/provider\";\nimport"
  },
  {
    "path": "apps/app/app/styles.css",
    "chars": 73,
    "preview": "@import \"tailwindcss\";\n@import \"@repo/design-system/styles/globals.css\";\n"
  },
  {
    "path": "apps/app/env.ts",
    "chars": 961,
    "preview": "import { keys as analytics } from \"@repo/analytics/keys\";\nimport { keys as auth } from \"@repo/auth/keys\";\nimport { keys "
  },
  {
    "path": "apps/app/instrumentation-client.ts",
    "chars": 256,
    "preview": "import { initializeAnalytics } from \"@repo/analytics/instrumentation-client\";\nimport { initializeSentry } from \"@repo/ob"
  },
  {
    "path": "apps/app/instrumentation.ts",
    "chars": 185,
    "preview": "import { initializeSentry } from \"@repo/observability/instrumentation\";\n\nexport const register = initializeSentry;\nexpor"
  },
  {
    "path": "apps/app/liveblocks.config.ts",
    "chars": 44,
    "preview": "export * from \"@repo/collaboration/config\";\n"
  },
  {
    "path": "apps/app/next.config.ts",
    "chars": 491,
    "preview": "import { withToolbar } from \"@repo/feature-flags/lib/toolbar\";\nimport { config, withAnalyzer } from \"@repo/next-config\";"
  },
  {
    "path": "apps/app/package.json",
    "chars": 1626,
    "preview": "{\n  \"name\": \"app\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"bun --bun next dev -p 3000\",\n    \"build\": \"bun --bun ne"
  },
  {
    "path": "apps/app/postcss.config.mjs",
    "chars": 66,
    "preview": "export { default } from \"@repo/design-system/postcss.config.mjs\";\n"
  },
  {
    "path": "apps/app/proxy.ts",
    "chars": 966,
    "preview": "import { authMiddleware } from \"@repo/auth/proxy\";\nimport {\n  noseconeOptions,\n  noseconeOptionsWithToolbar,\n  securityM"
  },
  {
    "path": "apps/app/scripts/skip-ci.js",
    "chars": 344,
    "preview": "const { execSync } = require(\"node:child_process\");\n\nconst commitMessage = execSync(\"git log -1 --pretty=%B\").toString()"
  },
  {
    "path": "apps/app/sentry.edge.config.ts",
    "chars": 82,
    "preview": "import { initializeSentry } from \"@repo/observability/edge\";\n\ninitializeSentry();\n"
  },
  {
    "path": "apps/app/sentry.server.config.ts",
    "chars": 84,
    "preview": "import { initializeSentry } from \"@repo/observability/server\";\n\ninitializeSentry();\n"
  },
  {
    "path": "apps/app/tsconfig.json",
    "chars": 304,
    "preview": "{\n  \"extends\": \"@repo/typescript-config/nextjs.json\",\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@"
  },
  {
    "path": "apps/app/vercel.json",
    "chars": 126,
    "preview": "{\n  \"$schema\": \"https://openapi.vercel.sh/vercel.json\",\n  \"bunVersion\": \"1.x\",\n  \"ignoreCommand\": \"node scripts/skip-ci."
  },
  {
    "path": "apps/app/vitest.config.mts",
    "chars": 374,
    "preview": "import path from \"node:path\";\nimport react from \"@vitejs/plugin-react\";\nimport { defineConfig } from \"vitest/config\";\n\ne"
  },
  {
    "path": "apps/docs/api-reference/endpoint/create.mdx",
    "chars": 54,
    "preview": "---\ntitle: 'Create Plant'\nopenapi: 'POST /plants'\n---\n"
  },
  {
    "path": "apps/docs/api-reference/endpoint/delete.mdx",
    "chars": 61,
    "preview": "---\ntitle: 'Delete Plant'\nopenapi: 'DELETE /plants/{id}'\n---\n"
  },
  {
    "path": "apps/docs/api-reference/endpoint/get.mdx",
    "chars": 51,
    "preview": "---\ntitle: 'Get Plants'\nopenapi: 'GET /plants'\n---\n"
  },
  {
    "path": "apps/docs/api-reference/introduction.mdx",
    "chars": 875,
    "preview": "---\ntitle: 'Introduction'\ndescription: 'Example section for showcasing API endpoints'\n---\n\n<Note>\n  If you're not lookin"
  },
  {
    "path": "apps/docs/api-reference/openapi.json",
    "chars": 4588,
    "preview": "{\n  \"openapi\": \"3.0.1\",\n  \"info\": {\n    \"title\": \"OpenAPI Plant Store\",\n    \"description\": \"A sample API that uses a pla"
  },
  {
    "path": "apps/docs/development.mdx",
    "chars": 2246,
    "preview": "---\ntitle: 'Development'\ndescription: 'Learn how to preview changes locally'\n---\n\n<Info>\n  **Prerequisite** You should h"
  },
  {
    "path": "apps/docs/essentials/code.mdx",
    "chars": 906,
    "preview": "---\ntitle: 'Code Blocks'\ndescription: 'Display inline code and code blocks'\nicon: 'code'\n---\n\n## Basic\n\n### Inline Code\n"
  },
  {
    "path": "apps/docs/essentials/images.mdx",
    "chars": 1553,
    "preview": "---\ntitle: 'Images and Embeds'\ndescription: 'Add image, video, and other HTML elements'\nicon: 'image'\n---\n\n<img\n  style="
  },
  {
    "path": "apps/docs/essentials/markdown.mdx",
    "chars": 2567,
    "preview": "---\ntitle: 'Markdown Syntax'\ndescription: 'Text, title, and styling in standard markdown'\nicon: 'text-size'\n---\n\n## Titl"
  },
  {
    "path": "apps/docs/essentials/navigation.mdx",
    "chars": 1716,
    "preview": "---\ntitle: 'Navigation'\ndescription: 'The navigation field in mint.json defines the pages that go in the navigation menu"
  },
  {
    "path": "apps/docs/essentials/reusable-snippets.mdx",
    "chars": 2574,
    "preview": "---\ntitle: Reusable Snippets\ndescription: Reusable, custom snippets to keep content in sync\nicon: 'recycle'\n---\n\nimport "
  },
  {
    "path": "apps/docs/essentials/settings.mdx",
    "chars": 11389,
    "preview": "---\ntitle: 'Global Settings'\ndescription: 'Mintlify gives you complete control over the look and feel of your documentat"
  },
  {
    "path": "apps/docs/introduction.mdx",
    "chars": 1637,
    "preview": "---\ntitle: Introduction\ndescription: 'Welcome to the home of your new documentation'\n---\n\n<img\n  className=\"block dark:h"
  },
  {
    "path": "apps/docs/mint.json",
    "chars": 1822,
    "preview": "{\n  \"$schema\": \"https://mintlify.com/schema.json\",\n  \"name\": \"Starter Kit\",\n  \"logo\": {\n    \"dark\": \"/logo/dark.svg\",\n  "
  },
  {
    "path": "apps/docs/package.json",
    "chars": 190,
    "preview": "{\n  \"name\": \"docs\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"mintlify dev --port 3004\",\n    \"lint\": \"mintlify broke"
  },
  {
    "path": "apps/docs/quickstart.mdx",
    "chars": 2934,
    "preview": "---\ntitle: 'Quickstart'\ndescription: 'Start building awesome documentation in under 5 minutes'\n---\n\n## Setup your develo"
  },
  {
    "path": "apps/docs/snippets/snippet-intro.mdx",
    "chars": 284,
    "preview": "One of the core principles of software development is DRY (Don't Repeat\nYourself). This is a principle that apply to doc"
  },
  {
    "path": "apps/email/package.json",
    "chars": 787,
    "preview": "{\n  \"name\": \"email\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"build\": \"email build --dir ../../packa"
  },
  {
    "path": "apps/email/tsconfig.json",
    "chars": 124,
    "preview": "{\n  \"extends\": \"@repo/typescript-config/nextjs.json\",\n  \"include\": [\"**/*.ts\", \"**/*.tsx\"],\n  \"exclude\": [\"node_modules\""
  },
  {
    "path": "apps/storybook/.storybook/main.ts",
    "chars": 890,
    "preview": "import { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport type { StorybookConfig } "
  },
  {
    "path": "apps/storybook/.storybook/preview-head.html",
    "chars": 560,
    "preview": "<!-- https://github.com/vercel/geist-font/issues/72 -->\n\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<li"
  },
  {
    "path": "apps/storybook/.storybook/preview.tsx",
    "chars": 1161,
    "preview": "import { Toaster } from \"@repo/design-system/components/ui/sonner\";\nimport { TooltipProvider } from \"@repo/design-system"
  },
  {
    "path": "apps/storybook/README.md",
    "chars": 1900,
    "preview": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/pages/api-"
  },
  {
    "path": "apps/storybook/next.config.ts",
    "chars": 130,
    "preview": "import type { NextConfig } from \"next\";\n\nconst nextConfig: NextConfig = {\n  reactStrictMode: true,\n};\n\nexport default ne"
  },
  {
    "path": "apps/storybook/package.json",
    "chars": 1218,
    "preview": "{\n  \"name\": \"storybook\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"storybook dev -p 6006\",\n   "
  },
  {
    "path": "apps/storybook/postcss.config.mjs",
    "chars": 135,
    "preview": "/** @type {import('postcss-load-config').Config} */\nconst config = {\n  plugins: {\n    tailwindcss: {},\n  },\n};\n\nexport d"
  },
  {
    "path": "apps/storybook/scripts/skip-ci.js",
    "chars": 344,
    "preview": "const { execSync } = require(\"node:child_process\");\n\nconst commitMessage = execSync(\"git log -1 --pretty=%B\").toString()"
  },
  {
    "path": "apps/storybook/stories/accordion.stories.tsx",
    "chars": 1594,
    "preview": "import {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger,\n} from \"@repo/design-system/components/ui"
  },
  {
    "path": "apps/storybook/stories/alert-dialog.stories.tsx",
    "chars": 1437,
    "preview": "import {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  Aler"
  },
  {
    "path": "apps/storybook/stories/alert.stories.tsx",
    "chars": 1270,
    "preview": "import {\n  Alert,\n  AlertDescription,\n  AlertTitle,\n} from \"@repo/design-system/components/ui/alert\";\nimport type { Meta"
  },
  {
    "path": "apps/storybook/stories/aspect-ratio.stories.tsx",
    "chars": 1413,
    "preview": "import { AspectRatio } from \"@repo/design-system/components/ui/aspect-ratio\";\nimport type { Meta, StoryObj } from \"@stor"
  },
  {
    "path": "apps/storybook/stories/avatar.stories.tsx",
    "chars": 706,
    "preview": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from \"@repo/design-system/components/ui/avatar\";\nimport type { Met"
  },
  {
    "path": "apps/storybook/stories/badge.stories.tsx",
    "chars": 1208,
    "preview": "import { Badge } from \"@repo/design-system/components/ui/badge\";\nimport type { Meta, StoryObj } from \"@storybook/react\";"
  },
  {
    "path": "apps/storybook/stories/breadcrumb.stories.tsx",
    "chars": 1934,
    "preview": "import {\n  Breadcrumb,\n  BreadcrumbItem,\n  BreadcrumbLink,\n  BreadcrumbList,\n  BreadcrumbPage,\n  BreadcrumbSeparator,\n} "
  },
  {
    "path": "apps/storybook/stories/button.stories.tsx",
    "chars": 3136,
    "preview": "import { Button } from \"@repo/design-system/components/ui/button\";\nimport type { Meta, StoryObj } from \"@storybook/react"
  },
  {
    "path": "apps/storybook/stories/calendar.stories.tsx",
    "chars": 1609,
    "preview": "import { Calendar } from \"@repo/design-system/components/ui/calendar\";\nimport type { Meta, StoryObj } from \"@storybook/r"
  },
  {
    "path": "apps/storybook/stories/card.stories.tsx",
    "chars": 1688,
    "preview": "import {\n  Card,\n  CardContent,\n  CardDescription,\n  CardFooter,\n  CardHeader,\n  CardTitle,\n} from \"@repo/design-system/"
  },
  {
    "path": "apps/storybook/stories/carousel.stories.tsx",
    "chars": 2007,
    "preview": "import {\n  Carousel,\n  CarouselContent,\n  CarouselItem,\n  CarouselNext,\n  CarouselPrevious,\n} from \"@repo/design-system/"
  },
  {
    "path": "apps/storybook/stories/chart.stories.tsx",
    "chars": 6613,
    "preview": "import {\n  type ChartConfig,\n  ChartContainer,\n  ChartTooltip,\n  ChartTooltipContent,\n} from \"@repo/design-system/compon"
  },
  {
    "path": "apps/storybook/stories/checkbox.stories.tsx",
    "chars": 1079,
    "preview": "import { Checkbox } from \"@repo/design-system/components/ui/checkbox\";\nimport type { Meta, StoryObj } from \"@storybook/r"
  },
  {
    "path": "apps/storybook/stories/collapsible.stories.tsx",
    "chars": 1224,
    "preview": "import {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from \"@repo/design-system/components/ui/collapsibl"
  },
  {
    "path": "apps/storybook/stories/command.stories.tsx",
    "chars": 1362,
    "preview": "import {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList,\n} from \"@repo/design-s"
  },
  {
    "path": "apps/storybook/stories/context-menu.stories.tsx",
    "chars": 4662,
    "preview": "import {\n  ContextMenu,\n  ContextMenuCheckboxItem,\n  ContextMenuContent,\n  ContextMenuItem,\n  ContextMenuLabel,\n  Contex"
  },
  {
    "path": "apps/storybook/stories/dialog.stories.tsx",
    "chars": 1538,
    "preview": "import {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n "
  },
  {
    "path": "apps/storybook/stories/drawer.stories.tsx",
    "chars": 1305,
    "preview": "import {\n  Drawer,\n  DrawerClose,\n  DrawerContent,\n  DrawerDescription,\n  DrawerFooter,\n  DrawerHeader,\n  DrawerTitle,\n "
  },
  {
    "path": "apps/storybook/stories/dropdown-menu.stories.tsx",
    "chars": 4742,
    "preview": "import {\n  DropdownMenu,\n  DropdownMenuCheckboxItem,\n  DropdownMenuContent,\n  DropdownMenuGroup,\n  DropdownMenuItem,\n  D"
  },
  {
    "path": "apps/storybook/stories/form.stories.tsx",
    "chars": 2149,
    "preview": "import { zodResolver } from \"@hookform/resolvers/zod\";\nimport {\n  Form,\n  FormControl,\n  FormDescription,\n  FormField,\n "
  },
  {
    "path": "apps/storybook/stories/hover-card.stories.tsx",
    "chars": 1024,
    "preview": "import {\n  HoverCard,\n  HoverCardContent,\n  HoverCardTrigger,\n} from \"@repo/design-system/components/ui/hover-card\";\nimp"
  },
  {
    "path": "apps/storybook/stories/input-otp.stories.tsx",
    "chars": 1607,
    "preview": "import {\n  InputOTP,\n  InputOTPGroup,\n  InputOTPSeparator,\n  InputOTPSlot,\n} from \"@repo/design-system/components/ui/inp"
  },
  {
    "path": "apps/storybook/stories/input.stories.tsx",
    "chars": 2020,
    "preview": "import { Input } from \"@repo/design-system/components/ui/input\";\nimport type { Meta, StoryObj } from \"@storybook/react\";"
  },
  {
    "path": "apps/storybook/stories/label.stories.tsx",
    "chars": 582,
    "preview": "import { Label } from \"@repo/design-system/components/ui/label\";\nimport type { Meta, StoryObj } from \"@storybook/react\";"
  },
  {
    "path": "apps/storybook/stories/menubar.stories.tsx",
    "chars": 3210,
    "preview": "import {\n  Menubar,\n  MenubarCheckboxItem,\n  MenubarContent,\n  MenubarGroup,\n  MenubarItem,\n  MenubarLabel,\n  MenubarMen"
  },
  {
    "path": "apps/storybook/stories/navigation-menu.stories.tsx",
    "chars": 2274,
    "preview": "import {\n  NavigationMenu,\n  NavigationMenuContent,\n  NavigationMenuItem,\n  NavigationMenuLink,\n  NavigationMenuList,\n  "
  },
  {
    "path": "apps/storybook/stories/pagination.stories.tsx",
    "chars": 1356,
    "preview": "import {\n  Pagination,\n  PaginationContent,\n  PaginationEllipsis,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n"
  },
  {
    "path": "apps/storybook/stories/popover.stories.tsx",
    "chars": 735,
    "preview": "import {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from \"@repo/design-system/components/ui/popover\";\nimport type "
  },
  {
    "path": "apps/storybook/stories/progress.stories.tsx",
    "chars": 802,
    "preview": "import { Progress } from \"@repo/design-system/components/ui/progress\";\nimport type { Meta, StoryObj } from \"@storybook/r"
  },
  {
    "path": "apps/storybook/stories/radio-group.stories.tsx",
    "chars": 1029,
    "preview": "import {\n  RadioGroup,\n  RadioGroupItem,\n} from \"@repo/design-system/components/ui/radio-group\";\nimport type { Meta, Sto"
  },
  {
    "path": "apps/storybook/stories/resizable.stories.tsx",
    "chars": 1694,
    "preview": "import {\n  ResizableHandle,\n  ResizablePanel,\n  ResizablePanelGroup,\n} from \"@repo/design-system/components/ui/resizable"
  },
  {
    "path": "apps/storybook/stories/scroll-area.stories.tsx",
    "chars": 1737,
    "preview": "import { ScrollArea } from \"@repo/design-system/components/ui/scroll-area\";\nimport type { Meta, StoryObj } from \"@storyb"
  },
  {
    "path": "apps/storybook/stories/select.stories.tsx",
    "chars": 2050,
    "preview": "import {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectSeparator,\n  SelectTrigger,\n  Se"
  },
  {
    "path": "apps/storybook/stories/separator.stories.tsx",
    "chars": 868,
    "preview": "import { Separator } from \"@repo/design-system/components/ui/separator\";\nimport type { Meta, StoryObj } from \"@storybook"
  },
  {
    "path": "apps/storybook/stories/sheet.stories.tsx",
    "chars": 1657,
    "preview": "import {\n  Sheet,\n  SheetClose,\n  SheetContent,\n  SheetDescription,\n  SheetFooter,\n  SheetHeader,\n  SheetTitle,\n  SheetT"
  },
  {
    "path": "apps/storybook/stories/sidebar.stories.tsx",
    "chars": 16226,
    "preview": "import {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from \"@repo/design-system/components/ui/avatar\";\nimport {\n  Breadc"
  },
  {
    "path": "apps/storybook/stories/skeleton.stories.tsx",
    "chars": 828,
    "preview": "import { Skeleton } from \"@repo/design-system/components/ui/skeleton\";\nimport type { Meta, StoryObj } from \"@storybook/r"
  },
  {
    "path": "apps/storybook/stories/slider.stories.tsx",
    "chars": 815,
    "preview": "import { Slider } from \"@repo/design-system/components/ui/slider\";\nimport type { Meta, StoryObj } from \"@storybook/react"
  },
  {
    "path": "apps/storybook/stories/sonner.stories.tsx",
    "chars": 1114,
    "preview": "import { Toaster } from \"@repo/design-system/components/ui/sonner\";\nimport type { Meta, StoryObj } from \"@storybook/reac"
  },
  {
    "path": "apps/storybook/stories/switch.stories.tsx",
    "chars": 948,
    "preview": "import { Switch } from \"@repo/design-system/components/ui/switch\";\nimport type { Meta, StoryObj } from \"@storybook/react"
  },
  {
    "path": "apps/storybook/stories/table.stories.tsx",
    "chars": 1887,
    "preview": "import {\n  Table,\n  TableBody,\n  TableCaption,\n  TableCell,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from \"@repo/design"
  },
  {
    "path": "apps/storybook/stories/tabs.stories.tsx",
    "chars": 1061,
    "preview": "import {\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n} from \"@repo/design-system/components/ui/tabs\";\nimport type "
  },
  {
    "path": "apps/storybook/stories/textarea.stories.tsx",
    "chars": 1893,
    "preview": "import { Textarea } from \"@repo/design-system/components/ui/textarea\";\nimport type { Meta, StoryObj } from \"@storybook/r"
  },
  {
    "path": "apps/storybook/stories/toggle-group.stories.tsx",
    "chars": 2223,
    "preview": "import {\n  ToggleGroup,\n  ToggleGroupItem,\n} from \"@repo/design-system/components/ui/toggle-group\";\nimport type { Meta, "
  },
  {
    "path": "apps/storybook/stories/toggle.stories.tsx",
    "chars": 1749,
    "preview": "import { Toggle } from \"@repo/design-system/components/ui/toggle\";\nimport type { Meta, StoryObj } from \"@storybook/react"
  },
  {
    "path": "apps/storybook/stories/tooltip.stories.tsx",
    "chars": 1675,
    "preview": "import {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from \"@repo/design-system/components/ui/too"
  },
  {
    "path": "apps/storybook/tsconfig.json",
    "chars": 222,
    "preview": "{\n  \"extends\": \"@repo/typescript-config/nextjs.json\",\n  \"compilerOptions\": {\n    \"baseUrl\": \".\"\n  },\n  \"include\": [\n    "
  },
  {
    "path": "apps/storybook/vercel.json",
    "chars": 126,
    "preview": "{\n  \"$schema\": \"https://openapi.vercel.sh/vercel.json\",\n  \"bunVersion\": \"1.x\",\n  \"ignoreCommand\": \"node scripts/skip-ci."
  },
  {
    "path": "apps/studio/package.json",
    "chars": 328,
    "preview": "{\n  \"name\": \"studio\",\n  \"version\": \"0.0.0\",\n  \"scripts\": {\n    \"dev\": \"prisma studio --config ../../packages/database/pr"
  },
  {
    "path": "apps/studio/tsconfig.json",
    "chars": 124,
    "preview": "{\n  \"extends\": \"@repo/typescript-config/nextjs.json\",\n  \"include\": [\"**/*.ts\", \"**/*.tsx\"],\n  \"exclude\": [\"node_modules\""
  },
  {
    "path": "apps/web/.gitignore",
    "chars": 8,
    "preview": ".vercel\n"
  },
  {
    "path": "apps/web/app/.well-known/vercel/flags/route.ts",
    "chars": 85,
    "preview": "import { getFlags } from \"@repo/feature-flags/access\";\n\nexport const GET = getFlags;\n"
  },
  {
    "path": "apps/web/app/[locale]/(home)/components/cases.tsx",
    "chars": 1735,
    "preview": "\"use client\";\n\nimport {\n  Carousel,\n  type CarouselApi,\n  CarouselContent,\n  CarouselItem,\n} from \"@repo/design-system/c"
  },
  {
    "path": "apps/web/app/[locale]/(home)/components/cta.tsx",
    "chars": 1471,
    "preview": "import { Button } from \"@repo/design-system/components/ui/button\";\nimport type { Dictionary } from \"@repo/internationali"
  },
  {
    "path": "apps/web/app/[locale]/(home)/components/faq.tsx",
    "chars": 1862,
    "preview": "import {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger,\n} from \"@repo/design-system/components/ui"
  },
  {
    "path": "apps/web/app/[locale]/(home)/components/features.tsx",
    "chars": 3126,
    "preview": "import type { Dictionary } from \"@repo/internationalization\";\nimport { User } from \"lucide-react\";\n\ninterface FeaturesPr"
  },
  {
    "path": "apps/web/app/[locale]/(home)/components/hero.tsx",
    "chars": 1950,
    "preview": "import { blog } from \"@repo/cms\";\nimport { Button } from \"@repo/design-system/components/ui/button\";\nimport type { Dicti"
  },
  {
    "path": "apps/web/app/[locale]/(home)/components/stats.tsx",
    "chars": 2278,
    "preview": "import type { Dictionary } from \"@repo/internationalization\";\nimport { MoveDownLeft, MoveUpRight } from \"lucide-react\";\n"
  },
  {
    "path": "apps/web/app/[locale]/(home)/components/testimonials.tsx",
    "chars": 2690,
    "preview": "\"use client\";\n\nimport {\n  Avatar,\n  AvatarFallback,\n  AvatarImage,\n} from \"@repo/design-system/components/ui/avatar\";\nim"
  },
  {
    "path": "apps/web/app/[locale]/(home)/page.tsx",
    "chars": 1503,
    "preview": "import { showBetaFeature } from \"@repo/feature-flags\";\nimport { getDictionary } from \"@repo/internationalization\";\nimpor"
  },
  {
    "path": "apps/web/app/[locale]/blog/[slug]/page.tsx",
    "chars": 4712,
    "preview": "import { ArrowLeftIcon } from \"@radix-ui/react-icons\";\nimport { blog } from \"@repo/cms\";\nimport { Body } from \"@repo/cms"
  },
  {
    "path": "apps/web/app/[locale]/blog/page.tsx",
    "chars": 3318,
    "preview": "import { blog } from \"@repo/cms\";\nimport { Feed } from \"@repo/cms/components/feed\";\nimport { Image } from \"@repo/cms/com"
  },
  {
    "path": "apps/web/app/[locale]/components/footer.tsx",
    "chars": 3702,
    "preview": "import { legal } from \"@repo/cms\";\nimport { Status } from \"@repo/observability/status\";\nimport Link from \"next/link\";\nim"
  },
  {
    "path": "apps/web/app/[locale]/components/header/index.tsx",
    "chars": 7779,
    "preview": "\"use client\";\n\nimport { ModeToggle } from \"@repo/design-system/components/mode-toggle\";\nimport { Button } from \"@repo/de"
  },
  {
    "path": "apps/web/app/[locale]/components/header/language-switcher.tsx",
    "chars": 1935,
    "preview": "\"use client\";\n\nimport { Button } from \"@repo/design-system/components/ui/button\";\nimport {\n  DropdownMenu,\n  DropdownMen"
  },
  {
    "path": "apps/web/app/[locale]/contact/actions/contact.tsx",
    "chars": 1371,
    "preview": "\"use server\";\n\nimport { resend } from \"@repo/email\";\nimport { ContactTemplate } from \"@repo/email/templates/contact\";\nim"
  },
  {
    "path": "apps/web/app/[locale]/contact/components/contact-form.tsx",
    "chars": 4657,
    "preview": "\"use client\";\n\nimport { Button } from \"@repo/design-system/components/ui/button\";\nimport { Calendar } from \"@repo/design"
  },
  {
    "path": "apps/web/app/[locale]/contact/page.tsx",
    "chars": 737,
    "preview": "import { getDictionary } from \"@repo/internationalization\";\nimport { createMetadata } from \"@repo/seo/metadata\";\nimport "
  },
  {
    "path": "apps/web/app/[locale]/global-error.tsx",
    "chars": 744,
    "preview": "\"use client\";\n\nimport { Button } from \"@repo/design-system/components/ui/button\";\nimport { fonts } from \"@repo/design-sy"
  },
  {
    "path": "apps/web/app/[locale]/layout.tsx",
    "chars": 1323,
    "preview": "import \"./styles.css\";\nimport { AnalyticsProvider } from \"@repo/analytics/provider\";\nimport { Toolbar as CMSToolbar } fr"
  },
  {
    "path": "apps/web/app/[locale]/legal/[slug]/page.tsx",
    "chars": 2678,
    "preview": "import { ArrowLeftIcon } from \"@radix-ui/react-icons\";\nimport { legal } from \"@repo/cms\";\nimport { Body } from \"@repo/cm"
  },
  {
    "path": "apps/web/app/[locale]/legal/layout.tsx",
    "chars": 284,
    "preview": "import { Toolbar } from \"@repo/cms/components/toolbar\";\nimport type { ReactNode } from \"react\";\n\ninterface LegalLayoutPr"
  },
  {
    "path": "apps/web/app/[locale]/pricing/page.tsx",
    "chars": 7086,
    "preview": "import { Button } from \"@repo/design-system/components/ui/button\";\nimport { Check, Minus, MoveRight, PhoneCall } from \"l"
  },
  {
    "path": "apps/web/app/[locale]/robots.ts",
    "chars": 433,
    "preview": "import type { MetadataRoute } from \"next\";\nimport { env } from \"@/env\";\n\nconst protocol = env.VERCEL_PROJECT_PRODUCTION_"
  },
  {
    "path": "apps/web/app/[locale]/sitemap.ts",
    "chars": 1196,
    "preview": "import fs from \"node:fs\";\nimport { blog, legal } from \"@repo/cms\";\nimport type { MetadataRoute } from \"next\";\nimport { e"
  },
  {
    "path": "apps/web/app/[locale]/styles.css",
    "chars": 682,
    "preview": "@import \"@repo/design-system/styles/globals.css\";\n\n.shiki {\n  color: var(--shiki-light);\n  background-color: var(--shiki"
  },
  {
    "path": "apps/web/components/sidebar.tsx",
    "chars": 1490,
    "preview": "import { capitalize } from \"@repo/design-system/lib/utils\";\nimport type { ReactNode } from \"react\";\n\ninterface SidebarPr"
  },
  {
    "path": "apps/web/env.ts",
    "chars": 641,
    "preview": "import { keys as cms } from \"@repo/cms/keys\";\nimport { keys as email } from \"@repo/email/keys\";\nimport { keys as flags }"
  },
  {
    "path": "apps/web/instrumentation-client.ts",
    "chars": 256,
    "preview": "import { initializeAnalytics } from \"@repo/analytics/instrumentation-client\";\nimport { initializeSentry } from \"@repo/ob"
  },
  {
    "path": "apps/web/instrumentation.ts",
    "chars": 185,
    "preview": "import { initializeSentry } from \"@repo/observability/instrumentation\";\n\nexport const register = initializeSentry;\nexpor"
  },
  {
    "path": "apps/web/next.config.ts",
    "chars": 897,
    "preview": "import { withCMS } from \"@repo/cms/next-config\";\nimport { withToolbar } from \"@repo/feature-flags/lib/toolbar\";\nimport {"
  },
  {
    "path": "apps/web/package.json",
    "chars": 1563,
    "preview": "{\n  \"name\": \"web\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"bun --bun next dev -p 3001\",\n    \"build\": \"bun --bun ne"
  },
  {
    "path": "apps/web/postcss.config.mjs",
    "chars": 66,
    "preview": "export { default } from \"@repo/design-system/postcss.config.mjs\";\n"
  },
  {
    "path": "apps/web/proxy.ts",
    "chars": 2269,
    "preview": "import { authMiddleware } from \"@repo/auth/proxy\";\nimport { internationalizationMiddleware } from \"@repo/internationaliz"
  },
  {
    "path": "apps/web/scripts/skip-ci.js",
    "chars": 344,
    "preview": "const { execSync } = require(\"node:child_process\");\n\nconst commitMessage = execSync(\"git log -1 --pretty=%B\").toString()"
  },
  {
    "path": "apps/web/sentry.edge.config.ts",
    "chars": 82,
    "preview": "import { initializeSentry } from \"@repo/observability/edge\";\n\ninitializeSentry();\n"
  },
  {
    "path": "apps/web/sentry.server.config.ts",
    "chars": 84,
    "preview": "import { initializeSentry } from \"@repo/observability/server\";\n\ninitializeSentry();\n"
  },
  {
    "path": "apps/web/tsconfig.json",
    "chars": 354,
    "preview": "{\n  \"extends\": [\n    \"@repo/typescript-config/nextjs.json\",\n    \"@repo/cms/typescript-config.json\"\n  ],\n  \"compilerOptio"
  },
  {
    "path": "apps/web/vercel.json",
    "chars": 126,
    "preview": "{\n  \"$schema\": \"https://openapi.vercel.sh/vercel.json\",\n  \"bunVersion\": \"1.x\",\n  \"ignoreCommand\": \"node scripts/skip-ci."
  },
  {
    "path": "biome.jsonc",
    "chars": 641,
    "preview": "{\n  \"$schema\": \"./node_modules/@biomejs/biome/configuration_schema.json\",\n  \"extends\": [\"ultracite/core\", \"ultracite/rea"
  },
  {
    "path": "docs/.gitignore",
    "chars": 258,
    "preview": "# deps\nnode_modules\n\n# generated content\n.source\n\n# test & build\ncoverage\n.next/\nout/\nbuild\n*.tsbuildinfo\ndist\n\n# misc\n."
  },
  {
    "path": "docs/README.md",
    "chars": 977,
    "preview": "# Geistdocs\n\nA modern documentation template built with Next.js and [Fumadocs](https://fumadocs.dev). Designed for spinn"
  },
  {
    "path": "docs/app/[lang]/(home)/components/apps/index.tsx",
    "chars": 3563,
    "preview": "import {\n  BookIcon,\n  CurlyBracesIcon,\n  DatabaseIcon,\n  GlobeIcon,\n  LaptopIcon,\n  MailIcon,\n  ServerIcon,\n} from \"luc"
  },
  {
    "path": "docs/app/[lang]/(home)/components/cta.tsx",
    "chars": 883,
    "preview": "import Link from \"next/link\";\nimport { Button } from \"@/components/ui/button\";\nimport { Installer } from \"./installer\";\n"
  },
  {
    "path": "docs/app/[lang]/(home)/components/demo.tsx",
    "chars": 825,
    "preview": "import { TerminalIcon } from \"lucide-react\";\nimport { Video } from \"./video\";\n\nexport const Demo = () => (\n  <section cl"
  },
  {
    "path": "docs/app/[lang]/(home)/components/features/index.tsx",
    "chars": 6732,
    "preview": "import Image from \"next/image\";\nimport { cn } from \"@/lib/utils\";\nimport Arcjet from \"./arcjet.svg\";\nimport BaseHub from"
  },
  {
    "path": "docs/app/[lang]/(home)/components/hero.tsx",
    "chars": 4458,
    "preview": "import Link from \"next/link\";\nimport type { ComponentProps } from \"react\";\nimport { Button } from \"@/components/ui/butto"
  },
  {
    "path": "docs/app/[lang]/(home)/components/installer.tsx",
    "chars": 1047,
    "preview": "\"use client\";\n\nimport { CopyIcon } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@/compon"
  },
  {
    "path": "docs/app/[lang]/(home)/components/social.tsx",
    "chars": 5913,
    "preview": "import { clsx } from \"clsx\";\nimport { Tweet } from \"react-tweet\";\n\nconst tweets = [\n  \"1853560800050651632\",\n  \"18532424"
  }
]

// ... and 411 more files (download for full content)

About this extraction

This page contains the full source code of the vercel/next-forge GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 611 files (1.3 MB), approximately 377.5k tokens, and a symbol index with 783 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!