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 uses . ## 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 # ## 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) ## Additional Notes ================================================ 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": ["/**"], "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. --- #### 🚀 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.**
## 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 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 (

Oops, something went wrong

); }; 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) => ( {children} ); 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 => { 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 => { 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(); 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(); 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) => ( {info?.name?.slice(0, 2)}

{info?.name ?? "Unknown"}

); export const AvatarStack = () => { const others = useOthers(); const self = useSelf(); const hasMoreUsers = others.length > 3; return (
{others.slice(0, 3).map(({ connectionId, info }) => ( ))} {hasMoreUsers && ( )} {self && }
); }; ================================================ 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 ( Loading... } id={`${orgId}:presence`} resolveMentionSuggestions={resolveMentionSuggestions} resolveUsers={resolveUsers} > {children} ); }; ================================================ 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; }) => (
Cursor
{name}
); 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 ( ); }); }; ================================================ 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) => (
{pages.map((page, index) => ( {index > 0 && } {page} ))} {page}
{children}
); ================================================ 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 ( {children} ); }; ================================================ 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 = () => (
); ================================================ 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 ( <>
div]:w-full", sidebar.open ? "" : "-mx-1" )} >
Platform {data.navMain.map((item) => ( {item.title} {item.items?.length ? ( <> Toggle {item.items?.map((subItem) => ( {subItem.title} ))} ) : null} ))} Projects {data.projects.map((item) => ( {item.name} More View Project Share Project Delete Project ))} More {data.navSecondary.map((item) => ( {item.title} ))}
{children} ); }; ================================================ 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 ( {betaFeature && (
Beta feature now available
)} {children}
); }; 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 ( <>
{env.LIVEBLOCKS_SECRET && ( )}
{pages.map((page) => (
{page.name}
))}
); }; 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 ( <>
{pages.map((page) => (
{page.name}
))}
); }; 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 (

Mintlify supports [HTML tags in Markdown](https://www.markdownguide.org/basic-syntax/#html). This is helpful if you prefer HTML tags to Markdown syntax, and lets you create documentation with infinite flexibility. ### iFrames Loads another HTML page within the document. Most commonly used for embedding videos. ```html ``` ================================================ FILE: apps/docs/essentials/markdown.mdx ================================================ --- title: 'Markdown Syntax' description: 'Text, title, and styling in standard markdown' icon: 'text-size' --- ## Titles Best used for section headers. ```md ## Titles ``` ### Subtitles Best use to subsection headers. ```md ### Subtitles ``` Each **title** and **subtitle** creates an anchor and also shows up on the table of contents on the right. ## Text Formatting We support most markdown formatting. Simply add `**`, `_`, or `~` around text to format it. | Style | How to write it | Result | | ------------- | ----------------- | --------------- | | Bold | `**bold**` | **bold** | | Italic | `_italic_` | _italic_ | | Strikethrough | `~strikethrough~` | ~strikethrough~ | You can combine these. For example, write `**_bold and italic_**` to get **_bold and italic_** text. You need to use HTML to write superscript and subscript text. That is, add `` or `` around your text. | Text Size | How to write it | Result | | ----------- | ------------------------ | ---------------------- | | Superscript | `superscript` | superscript | | Subscript | `subscript` | subscript | ## Linking to Pages You can add a link by wrapping text in `[]()`. You would write `[link to google](https://google.com)` to [link to google](https://google.com). Links to pages in your docs need to be root-relative. Basically, you should include the entire folder path. For example, `[link to text](/writing-content/text)` links to the page "Text" in our components section. Relative links like `[link to text](../text)` will open slower because we cannot optimize them as easily. ## Blockquotes ### Singleline To create a blockquote, add a `>` in front of a paragraph. > Dorothy followed her through many of the beautiful rooms in her castle. ```md > Dorothy followed her through many of the beautiful rooms in her castle. ``` ### Multiline > Dorothy followed her through many of the beautiful rooms in her castle. > > The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood. ```md > Dorothy followed her through many of the beautiful rooms in her castle. > > The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood. ``` ### LaTeX Mintlify supports [LaTeX](https://www.latex-project.org) through the Latex component. 8 x (vk x H1 - H2) = (0,1) ```md 8 x (vk x H1 - H2) = (0,1) ``` ================================================ FILE: apps/docs/essentials/navigation.mdx ================================================ --- title: 'Navigation' description: 'The navigation field in mint.json defines the pages that go in the navigation menu' icon: 'map' --- The navigation menu is the list of links on every website. You will likely update `mint.json` every time you add a new page. Pages do not show up automatically. ## Navigation syntax Our navigation syntax is recursive which means you can make nested navigation groups. You don't need to include `.mdx` in page names. ```json Regular Navigation "navigation": [ { "group": "Getting Started", "pages": ["quickstart"] } ] ``` ```json Nested Navigation "navigation": [ { "group": "Getting Started", "pages": [ "quickstart", { "group": "Nested Reference Pages", "pages": ["nested-reference-page"] } ] } ] ``` ## Folders Simply put your MDX files in folders and update the paths in `mint.json`. For example, to have a page at `https://yoursite.com/your-folder/your-page` you would make a folder called `your-folder` containing an MDX file called `your-page.mdx`. You cannot use `api` for the name of a folder unless you nest it inside another folder. Mintlify uses Next.js which reserves the top-level `api` folder for internal server calls. A folder name such as `api-reference` would be accepted. ```json Navigation With Folder "navigation": [ { "group": "Group Name", "pages": ["your-folder/your-page"] } ] ``` ## Hidden Pages MDX files not included in `mint.json` will not show up in the sidebar but are accessible through the search bar and by linking directly to them. ================================================ FILE: apps/docs/essentials/reusable-snippets.mdx ================================================ --- title: Reusable Snippets description: Reusable, custom snippets to keep content in sync icon: 'recycle' --- import SnippetIntro from '/snippets/snippet-intro.mdx'; ## Creating a custom snippet **Pre-condition**: You must create your snippet file in the `snippets` directory. Any page in the `snippets` directory will be treated as a snippet and will not be rendered into a standalone page. If you want to create a standalone page from the snippet, import the snippet into another file and call it as a component. ### Default export 1. Add content to your snippet file that you want to re-use across multiple locations. Optionally, you can add variables that can be filled in via props when you import the snippet. ```mdx snippets/my-snippet.mdx Hello world! This is my content I want to reuse across pages. My keyword of the day is {word}. ``` The content that you want to reuse must be inside the `snippets` directory in order for the import to work. 2. Import the snippet into your destination file. ```mdx destination-file.mdx --- title: My title description: My Description --- import MySnippet from '/snippets/path/to/my-snippet.mdx'; ## Header Lorem impsum dolor sit amet. ``` ### Reusable variables 1. Export a variable from your snippet file: ```mdx snippets/path/to/custom-variables.mdx export const myName = 'my name'; export const myObject = { fruit: 'strawberries' }; ``` 2. Import the snippet from your destination file and use the variable: ```mdx destination-file.mdx --- title: My title description: My Description --- import { myName, myObject } from '/snippets/path/to/custom-variables.mdx'; Hello, my name is {myName} and I like {myObject.fruit}. ``` ### Reusable components 1. Inside your snippet file, create a component that takes in props by exporting your component in the form of an arrow function. ```mdx snippets/custom-component.mdx export const MyComponent = ({ title }) => (

{title}

... snippet content ...

); ``` MDX does not compile inside the body of an arrow function. Stick to HTML syntax when you can or use a default export if you need to use MDX. 2. Import the snippet into your destination file and pass in the props ```mdx destination-file.mdx --- title: My title description: My Description --- import { MyComponent } from '/snippets/custom-component.mdx'; Lorem ipsum dolor sit amet. ``` ================================================ FILE: apps/docs/essentials/settings.mdx ================================================ --- title: 'Global Settings' description: 'Mintlify gives you complete control over the look and feel of your documentation using the mint.json file' icon: 'gear' --- Every Mintlify site needs a `mint.json` file with the core configuration settings. Learn more about the [properties](#properties) below. ## Properties Name of your project. Used for the global title. Example: `mintlify` An array of groups with all the pages within that group The name of the group. Example: `Settings` The relative paths to the markdown files that will serve as pages. Example: `["customization", "page"]` Path to logo image or object with path to "light" and "dark" mode logo images Path to the logo in light mode Path to the logo in dark mode Where clicking on the logo links you to Path to the favicon image Hex color codes for your global theme The primary color. Used for most often for highlighted content, section headers, accents, in light mode The primary color for dark mode. Used for most often for highlighted content, section headers, accents, in dark mode The primary color for important buttons The color of the background in both light and dark mode The hex color code of the background in light mode The hex color code of the background in dark mode Array of `name`s and `url`s of links you want to include in the topbar The name of the button. Example: `Contact us` The url once you click on the button. Example: `https://mintlify.com/contact` Link shows a button. GitHub shows the repo information at the url provided including the number of GitHub stars. If `link`: What the button links to. If `github`: Link to the repository to load GitHub information from. Text inside the button. Only required if `type` is a `link`. Array of version names. Only use this if you want to show different versions of docs with a dropdown in the navigation bar. An array of the anchors, includes the `icon`, `color`, and `url`. The [Font Awesome](https://fontawesome.com/search?s=brands%2Cduotone) icon used to feature the anchor. Example: `comments` The name of the anchor label. Example: `Community` The start of the URL that marks what pages go in the anchor. Generally, this is the name of the folder you put your pages in. The hex color of the anchor icon background. Can also be a gradient if you pass an object with the properties `from` and `to` that are each a hex color. Used if you want to hide an anchor until the correct docs version is selected. Pass `true` if you want to hide the anchor until you directly link someone to docs inside it. One of: "brands", "duotone", "light", "sharp-solid", "solid", or "thin" Override the default configurations for the top-most anchor. The name of the top-most anchor Font Awesome icon. One of: "brands", "duotone", "light", "sharp-solid", "solid", or "thin" An array of navigational tabs. The name of the tab label. The start of the URL that marks what pages go in the tab. Generally, this is the name of the folder you put your pages in. Configuration for API settings. Learn more about API pages at [API Components](/api-playground/demo). The base url for all API endpoints. If `baseUrl` is an array, it will enable for multiple base url options that the user can toggle. The authentication strategy used for all API endpoints. The name of the authentication parameter used in the API playground. If method is `basic`, the format should be `[usernameName]:[passwordName]` The default value that's designed to be a prefix for the authentication input field. E.g. If an `inputPrefix` of `AuthKey` would inherit the default input result of the authentication field as `AuthKey`. Configurations for the API playground Whether the playground is showing, hidden, or only displaying the endpoint with no added user interactivity `simple` Learn more at the [playground guides](/api-playground/demo) Enabling this flag ensures that key ordering in OpenAPI pages matches the key ordering defined in the OpenAPI file. This behavior will soon be enabled by default, at which point this field will be deprecated. A string or an array of strings of URL(s) or relative path(s) pointing to your OpenAPI file. Examples: ```json Absolute "openapi": "https://example.com/openapi.json" ``` ```json Relative "openapi": "/openapi.json" ``` ```json Multiple "openapi": ["https://example.com/openapi1.json", "/openapi2.json", "/openapi3.json"] ``` An object of social media accounts where the key:property pair represents the social media platform and the account url. Example: ```json { "x": "https://x.com/mintlify", "website": "https://mintlify.com" } ``` One of the following values `website`, `facebook`, `x`, `discord`, `slack`, `github`, `linkedin`, `instagram`, `hacker-news` Example: `x` The URL to the social platform. Example: `https://x.com/mintlify` Configurations to enable feedback buttons Enables a button to allow users to suggest edits via pull requests Enables a button to allow users to raise an issue about the documentation Customize the dark mode toggle. Set if you always want to show light or dark mode for new users. When not set, we default to the same mode as the user's operating system. Set to true to hide the dark/light mode toggle. You can combine `isHidden` with `default` to force your docs to only use light or dark mode. For example: ```json Only Dark Mode "modeToggle": { "default": "dark", "isHidden": true } ``` ```json Only Light Mode "modeToggle": { "default": "light", "isHidden": true } ``` A background image to be displayed behind every page. See example with [Infisical](https://infisical.com/docs) and [FRPC](https://frpc.io). ================================================ FILE: apps/docs/introduction.mdx ================================================ --- title: Introduction description: 'Welcome to the home of your new documentation' --- Hero Light Hero Dark ## Setting up The first step to world-class documentation is setting up your editing environments. Get your docs set up locally for easy development Preview your changes before you push to make sure they're perfect ## Make it yours Update your docs to your brand and add valuable content for the best user conversion. Customize your docs to your company's colors and brands Automatically generate endpoints from an OpenAPI spec Build interactive features and designs to guide your users Check out our showcase of our favorite documentation ================================================ FILE: apps/docs/mint.json ================================================ { "$schema": "https://mintlify.com/schema.json", "name": "Starter Kit", "logo": { "dark": "/logo/dark.svg", "light": "/logo/light.svg" }, "favicon": "/favicon.svg", "colors": { "primary": "#0D9373", "light": "#07C983", "dark": "#0D9373", "anchors": { "from": "#0D9373", "to": "#07C983" } }, "topbarLinks": [ { "name": "Support", "url": "mailto:support@mintlify.com" } ], "topbarCtaButton": { "name": "Dashboard", "url": "https://dashboard.mintlify.com" }, "tabs": [ { "name": "API Reference", "url": "api-reference" } ], "anchors": [ { "name": "Documentation", "icon": "book-open-cover", "url": "https://mintlify.com/docs" }, { "name": "Community", "icon": "slack", "url": "https://mintlify.com/community" }, { "name": "Blog", "icon": "newspaper", "url": "https://mintlify.com/blog" } ], "navigation": [ { "group": "Get Started", "pages": ["introduction", "quickstart", "development"] }, { "group": "Essentials", "pages": [ "essentials/markdown", "essentials/code", "essentials/images", "essentials/settings", "essentials/navigation", "essentials/reusable-snippets" ] }, { "group": "API Documentation", "pages": ["api-reference/introduction"] }, { "group": "Endpoint Examples", "pages": [ "api-reference/endpoint/get", "api-reference/endpoint/create", "api-reference/endpoint/delete" ] } ], "footerSocials": { "x": "https://x.com/mintlify", "github": "https://github.com/mintlify", "linkedin": "https://www.linkedin.com/company/mintlify" } } ================================================ FILE: apps/docs/package.json ================================================ { "name": "docs", "private": true, "scripts": { "dev": "mintlify dev --port 3004", "lint": "mintlify broken-links" }, "devDependencies": { "typescript": "^5.9.3" } } ================================================ FILE: apps/docs/quickstart.mdx ================================================ --- title: 'Quickstart' description: 'Start building awesome documentation in under 5 minutes' --- ## Setup your development Learn how to update your docs locally and and deploy them to the public. ### Edit and preview During the onboarding process, we created a repository on your Github with your docs content. You can find this repository on our [dashboard](https://dashboard.mintlify.com). To clone the repository locally, follow these [instructions](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) in your terminal. Previewing helps you make sure your changes look as intended. We built a command line interface to render these changes locally. 1. Install the [Mintlify CLI](https://www.npmjs.com/package/mintlify) to preview the documentation changes locally with this command: ``` npm i -g mintlify ``` 2. Run the following command at the root of your documentation (where `mint.json` is): ``` mintlify dev ``` ### Deploy your changes Our Github app automatically deploys your changes to your docs site, so you don't need to manage deployments yourself. You can find the link to install on your [dashboard](https://dashboard.mintlify.com). Once the bot has been successfully installed, there should be a check mark next to the commit hash of the repo. [Commit and push your changes to Git](https://docs.github.com/en/get-started/using-git/pushing-commits-to-a-remote-repository#about-git-push) for your changes to update in your docs site. If you push and don't see that the Github app successfully deployed your changes, you can also manually update your docs through our [dashboard](https://dashboard.mintlify.com). ## Update your docs Add content directly in your files with MDX syntax and React components. You can use any of our components, or even build your own. Add flair to your docs with personalized branding. Implement your OpenAPI spec and enable API user interaction. Draw insights from user interactions with your documentation. Keep your docs on your own website's subdomain. ================================================ FILE: apps/docs/snippets/snippet-intro.mdx ================================================ One of the core principles of software development is DRY (Don't Repeat Yourself). This is a principle that apply to documentation as well. If you find yourself repeating the same content in multiple places, you should consider creating a custom snippet to keep your content in sync. ================================================ FILE: apps/email/package.json ================================================ { "name": "email", "version": "0.0.0", "private": true, "scripts": { "build": "email build --dir ../../packages/email/templates", "dev": "email dev --port 3003 --dir ../../packages/email/templates", "export": "email export --dir ../../packages/email/templates", "clean": "git clean -xdf .cache .turbo dist node_modules", "typecheck": "tsc --noEmit --emitDeclarationOnly false" }, "dependencies": { "@react-email/components": "1.0.8", "@react-email/preview-server": "5.2.9", "@repo/email": "workspace:*", "react": "19.2.4", "react-email": "5.2.9" }, "devDependencies": { "@repo/typescript-config": "workspace:*", "@types/node": "25.3.5", "@types/react": "19.2.14", "next": "16.1.6", "typescript": "^5.9.3" } } ================================================ FILE: apps/email/tsconfig.json ================================================ { "extends": "@repo/typescript-config/nextjs.json", "include": ["**/*.ts", "**/*.tsx"], "exclude": ["node_modules"] } ================================================ FILE: apps/storybook/.storybook/main.ts ================================================ import { createRequire } from "node:module"; import { dirname, join } from "node:path"; import type { StorybookConfig } from "@storybook/nextjs"; const require = createRequire(import.meta.url); /** * This function is used to resolve the absolute path of a package. * It is needed in projects that use Yarn PnP or are set up within a monorepo. */ const getAbsolutePath = (value: string) => dirname(require.resolve(join(value, "package.json"))); const config: StorybookConfig = { stories: [ "../stories/**/*.mdx", "../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)", ], addons: [ getAbsolutePath("@chromatic-com/storybook"), getAbsolutePath("@storybook/addon-onboarding"), getAbsolutePath("@storybook/addon-themes"), ], framework: { name: getAbsolutePath("@storybook/nextjs"), options: {}, }, staticDirs: ["../public"], }; export default config; ================================================ FILE: apps/storybook/.storybook/preview-head.html ================================================ ================================================ FILE: apps/storybook/.storybook/preview.tsx ================================================ import { Toaster } from "@repo/design-system/components/ui/sonner"; import { TooltipProvider } from "@repo/design-system/components/ui/tooltip"; import { ThemeProvider } from "@repo/design-system/providers/theme"; import { withThemeByClassName } from "@storybook/addon-themes"; import type { Preview } from "@storybook/react"; import "@repo/design-system/styles/globals.css"; const preview: Preview = { parameters: { controls: { matchers: { color: /(background|color)$/i, date: /Date$/i, }, }, chromatic: { modes: { light: { theme: "light", className: "light", }, dark: { theme: "dark", className: "dark", }, }, }, }, decorators: [ withThemeByClassName({ themes: { light: "light", dark: "dark", }, defaultTheme: "light", }), (Story) => (
), ], }; export default preview; ================================================ FILE: apps/storybook/README.md ================================================ This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/pages/api-reference/create-next-app). ## Getting Started First, run the development server: ```bash bun dev # or npm run dev # or yarn dev # or pnpm dev ``` Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. [API routes](https://nextjs.org/docs/pages/building-your-application/routing/api-routes) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/pages/building-your-application/routing/api-routes) instead of React pages. This project uses [`next/font`](https://nextjs.org/docs/pages/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. ## Learn More To learn more about Next.js, take a look at the following resources: - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. - [Learn Next.js](https://nextjs.org/learn-pages-router) - an interactive Next.js tutorial. You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! ## Deploy on Vercel The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. Check out our [Next.js deployment documentation](https://nextjs.org/docs/pages/building-your-application/deploying) for more details. ================================================ FILE: apps/storybook/next.config.ts ================================================ import type { NextConfig } from "next"; const nextConfig: NextConfig = { reactStrictMode: true, }; export default nextConfig; ================================================ FILE: apps/storybook/package.json ================================================ { "name": "storybook", "version": "0.1.0", "private": true, "scripts": { "dev": "storybook dev -p 6006", "build": "storybook build", "chromatic": "chromatic --exit-zero-on-changes", "clean": "git clean -xdf .cache .turbo dist node_modules", "typecheck": "tsc --noEmit --emitDeclarationOnly false" }, "dependencies": { "@hookform/resolvers": "^5.2.2", "@repo/design-system": "workspace:*", "cmdk": "^1.1.1", "date-fns": "^4.1.0", "input-otp": "^1.4.2", "lucide-react": "^0.577.0", "next": "16.1.6", "react": "19.2.4", "react-dom": "19.2.4", "react-hook-form": "^7.71.2", "recharts": "^3.8.0", "sonner": "^2.0.7", "zod": "^4.3.6" }, "devDependencies": { "@chromatic-com/storybook": "^5.0.1", "@repo/typescript-config": "workspace:*", "@storybook/addon-onboarding": "^10.2.16", "@storybook/addon-themes": "^10.2.16", "@storybook/nextjs": "^10.2.16", "@storybook/react": "^10.2.16", "@types/node": "^25", "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "chromatic": "^15.2.0", "postcss": "^8", "storybook": "^10.2.16", "tailwindcss": "^4.2.1", "typescript": "^5" } } ================================================ FILE: apps/storybook/postcss.config.mjs ================================================ /** @type {import('postcss-load-config').Config} */ const config = { plugins: { tailwindcss: {}, }, }; export default config; ================================================ FILE: apps/storybook/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/storybook/stories/accordion.stories.tsx ================================================ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@repo/design-system/components/ui/accordion"; import type { Meta, StoryObj } from "@storybook/react"; /** * A vertically stacked set of interactive headings that each reveal a section * of content. */ const meta = { title: "ui/Accordion", component: Accordion, tags: ["autodocs"], argTypes: { type: { options: ["single", "multiple"], control: { type: "radio" }, }, }, args: { type: "single", collapsible: true, }, render: (args) => ( Is it accessible? Yes. It adheres to the WAI-ARIA design pattern. Is it styled? Yes. It comes with default styles that matches the other components' aesthetic. Is it animated? Yes. It's animated by default, but you can disable it if you prefer. ), } satisfies Meta; export default meta; type Story = StoryObj; /** * The default behavior of the accordion allows only one item to be open. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/alert-dialog.stories.tsx ================================================ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@repo/design-system/components/ui/alert-dialog"; import type { Meta, StoryObj } from "@storybook/react"; /** * A modal dialog that interrupts the user with important content and expects * a response. */ const meta = { title: "ui/AlertDialog", component: AlertDialog, tags: ["autodocs"], argTypes: {}, render: (args) => ( Open Are you sure absolutely sure? This action cannot be undone. This will permanently delete your account and remove your data from our servers. Cancel Continue ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the alert dialog. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/alert.stories.tsx ================================================ import { Alert, AlertDescription, AlertTitle, } from "@repo/design-system/components/ui/alert"; import type { Meta, StoryObj } from "@storybook/react"; import { AlertCircle } from "lucide-react"; /** * Displays a callout for user attention. */ const meta = { title: "ui/Alert", component: Alert, tags: ["autodocs"], argTypes: { variant: { options: ["default", "destructive"], control: { type: "radio" }, }, }, args: { variant: "default", }, render: (args) => ( Heads up! You can add components to your app using the cli. ), } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the alert. */ export const Default: Story = {}; /** * Use the `destructive` alert to indicate a destructive action. */ export const Destructive: Story = { render: (args) => ( Error Your session has expired. Please log in again. ), args: { variant: "destructive", }, }; ================================================ FILE: apps/storybook/stories/aspect-ratio.stories.tsx ================================================ import { AspectRatio } from "@repo/design-system/components/ui/aspect-ratio"; import type { Meta, StoryObj } from "@storybook/react"; import Image from "next/image"; /** * Displays content within a desired ratio. */ const meta: Meta = { title: "ui/AspectRatio", component: AspectRatio, tags: ["autodocs"], argTypes: {}, render: (args) => ( Photo by Alvaro Pinot ), decorators: [ (Story) => (
), ], } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the aspect ratio. */ export const Default: Story = { args: { ratio: 16 / 9, }, }; /** * Use the `1:1` aspect ratio to display a square image. */ export const Square: Story = { args: { ratio: 1, }, }; /** * Use the `4:3` aspect ratio to display a landscape image. */ export const Landscape: Story = { args: { ratio: 4 / 3, }, }; /** * Use the `2.35:1` aspect ratio to display a cinemascope image. */ export const Cinemascope: Story = { args: { ratio: 2.35 / 1, }, }; ================================================ FILE: apps/storybook/stories/avatar.stories.tsx ================================================ import { Avatar, AvatarFallback, AvatarImage, } from "@repo/design-system/components/ui/avatar"; import type { Meta, StoryObj } from "@storybook/react"; /** * An image element with a fallback for representing the user. */ const meta = { title: "ui/Avatar", component: Avatar, tags: ["autodocs"], argTypes: {}, render: (args) => ( CN ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the avatar. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/badge.stories.tsx ================================================ import { Badge } from "@repo/design-system/components/ui/badge"; import type { Meta, StoryObj } from "@storybook/react"; /** * Displays a badge or a component that looks like a badge. */ const meta = { title: "ui/Badge", component: Badge, tags: ["autodocs"], argTypes: { children: { control: "text", }, }, args: { children: "Badge", }, parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the badge. */ export const Default: Story = {}; /** * Use the `secondary` badge to call for less urgent information, blending * into the interface while still signaling minor updates or statuses. */ export const Secondary: Story = { args: { variant: "secondary", }, }; /** * Use the `destructive` badge to indicate errors, alerts, or the need for * immediate attention. */ export const Destructive: Story = { args: { variant: "destructive", }, }; /** * Use the `outline` badge for overlaying without obscuring interface details, * emphasizing clarity and subtlety.. */ export const Outline: Story = { args: { variant: "outline", }, }; ================================================ FILE: apps/storybook/stories/breadcrumb.stories.tsx ================================================ import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from "@repo/design-system/components/ui/breadcrumb"; import type { Meta, StoryObj } from "@storybook/react"; import { ArrowRightSquare } from "lucide-react"; /** * Displays the path to the current resource using a hierarchy of links. */ const meta = { title: "ui/Breadcrumb", component: Breadcrumb, tags: ["autodocs"], argTypes: {}, args: {}, render: (args) => ( Home Components Breadcrumb ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * Displays the path of links to the current resource. */ export const Default: Story = {}; /** * Displays the path with a custom icon for the separator. */ export const WithCustomSeparator: Story = { render: (args) => ( Home Components Breadcrumb ), }; ================================================ FILE: apps/storybook/stories/button.stories.tsx ================================================ import { Button } from "@repo/design-system/components/ui/button"; import type { Meta, StoryObj } from "@storybook/react"; import { Loader2, Mail } from "lucide-react"; /** * Displays a button or a component that looks like a button. */ const meta = { title: "ui/Button", component: Button, tags: ["autodocs"], argTypes: { children: { control: "text", }, }, parameters: { layout: "centered", }, args: { variant: "default", size: "default", children: "Button", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the button, used for primary actions and commands. */ export const Default: Story = {}; /** * Use the `outline` button to reduce emphasis on secondary actions, such as * canceling or dismissing a dialog. */ export const Outline: Story = { args: { variant: "outline", }, }; /** * Use the `ghost` button is minimalistic and subtle, for less intrusive * actions. */ export const Ghost: Story = { args: { variant: "ghost", }, }; /** * Use the `secondary` button to call for less emphasized actions, styled to * complement the primary button while being less conspicuous. */ export const Secondary: Story = { args: { variant: "secondary", }, }; /** * Use the `destructive` button to indicate errors, alerts, or the need for * immediate attention. */ export const Destructive: Story = { args: { variant: "destructive", }, }; /** * Use the `link` button to reduce emphasis on tertiary actions, such as * hyperlink or navigation, providing a text-only interactive element. */ export const Link: Story = { args: { variant: "link", }, }; /** * Add the `disabled` prop to a button to prevent interactions and add a * loading indicator, such as a spinner, to signify an in-progress action. */ export const Loading: Story = { render: (args) => ( ), args: { ...Outline.args, disabled: true, }, }; /** * Add an icon element to a button to enhance visual communication and * providing additional context for the action. */ export const WithIcon: Story = { render: (args) => ( ), args: { ...Secondary.args, }, }; /** * Use the `sm` size for a smaller button, suitable for interfaces needing * compact elements without sacrificing usability. */ export const Small: Story = { args: { size: "sm", }, }; /** * Use the `lg` size for a larger button, offering better visibility and * easier interaction for users. */ export const Large: Story = { args: { size: "lg", }, }; /** * Use the "icon" size for a button with only an icon. */ export const Icon: Story = { args: { ...Secondary.args, size: "icon", children: , }, }; /** * Add the `disabled` prop to prevent interactions with the button. */ export const Disabled: Story = { args: { disabled: true, }, }; ================================================ FILE: apps/storybook/stories/calendar.stories.tsx ================================================ import { Calendar } from "@repo/design-system/components/ui/calendar"; import type { Meta, StoryObj } from "@storybook/react"; import { addDays } from "date-fns"; import { action } from "storybook/actions"; /** * A date field component that allows users to enter and edit date. */ const meta = { title: "ui/Calendar", component: Calendar, tags: ["autodocs"], argTypes: {}, args: { mode: "single", selected: new Date(), onSelect: action("onDayClick"), className: "rounded-md border w-fit", }, parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the calendar. */ export const Default: Story = {}; /** * Use the `multiple` mode to select multiple dates. */ export const Multiple: Story = { args: { min: 1, selected: [new Date(), addDays(new Date(), 2), addDays(new Date(), 8)], mode: "multiple", }, }; /** * Use the `range` mode to select a range of dates. */ export const Range: Story = { args: { selected: { from: new Date(), to: addDays(new Date(), 7), }, mode: "range", }, }; /** * Use the `disabled` prop to disable specific dates. */ export const Disabled: Story = { args: { disabled: [ addDays(new Date(), 1), addDays(new Date(), 2), addDays(new Date(), 3), addDays(new Date(), 5), ], }, }; /** * Use the `numberOfMonths` prop to display multiple months. */ export const MultipleMonths: Story = { args: { numberOfMonths: 2, showOutsideDays: false, }, }; ================================================ FILE: apps/storybook/stories/card.stories.tsx ================================================ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@repo/design-system/components/ui/card"; import type { Meta, StoryObj } from "@storybook/react"; import { BellRing } from "lucide-react"; const notifications = [ { title: "Your call has been confirmed.", description: "1 hour ago", }, { title: "You have a new message!", description: "1 hour ago", }, { title: "Your subscription is expiring soon!", description: "2 hours ago", }, ]; /** * Displays a card with header, content, and footer. */ const meta = { title: "ui/Card", component: Card, tags: ["autodocs"], argTypes: {}, args: { className: "w-96", }, render: (args) => ( Notifications You have 3 unread messages. {notifications.map((notification) => (

{notification.title}

{notification.description}

))}
), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the card. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/carousel.stories.tsx ================================================ import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, } from "@repo/design-system/components/ui/carousel"; import type { Meta, StoryObj } from "@storybook/react"; /** * A carousel with motion and swipe built using Embla. */ const meta: Meta = { title: "ui/Carousel", component: Carousel, tags: ["autodocs"], argTypes: {}, args: { className: "w-full max-w-xs", }, render: (args) => ( {Array.from({ length: 5 }).map((_, index) => ( // biome-ignore lint/suspicious/noArrayIndexKey: static list
{index + 1}
))}
), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the carousel. */ export const Default: Story = {}; /** * Use the `basis` utility class to change the size of the carousel. */ export const Size: Story = { render: (args) => ( {Array.from({ length: 5 }).map((_, index) => ( // biome-ignore lint/suspicious/noArrayIndexKey: static list
{index + 1}
))}
), args: { className: "mx-12 w-full max-w-xs", }, }; ================================================ FILE: apps/storybook/stories/chart.stories.tsx ================================================ import { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent, } from "@repo/design-system/components/ui/chart"; import type { Meta, StoryObj } from "@storybook/react"; import { useMemo } from "react"; import { Area, AreaChart, Bar, BarChart, CartesianGrid, Label, Line, LineChart, Pie, PieChart, XAxis, } from "recharts"; const multiSeriesData = [ { month: "January", desktop: 186, mobile: 80 }, { month: "February", desktop: 305, mobile: 200 }, { month: "March", desktop: 237, mobile: 120 }, { month: "April", desktop: 73, mobile: 190 }, { month: "May", desktop: 209, mobile: 130 }, { month: "June", desktop: 214, mobile: 140 }, ]; const multiSeriesConfig = { desktop: { label: "Desktop", color: "hsl(var(--chart-1))", }, mobile: { label: "Mobile", color: "hsl(var(--chart-2))", }, } satisfies ChartConfig; const singleSeriesData = [ { browser: "chrome", visitors: 275, fill: "var(--color-chrome)" }, { browser: "safari", visitors: 200, fill: "var(--color-safari)" }, { browser: "other", visitors: 190, fill: "var(--color-other)" }, ]; const singleSeriesConfig = { visitors: { label: "Visitors", }, chrome: { label: "Chrome", color: "hsl(var(--chart-1))", }, safari: { label: "Safari", color: "hsl(var(--chart-2))", }, other: { label: "Other", color: "hsl(var(--chart-5))", }, } satisfies ChartConfig; /** * Beautiful charts. Built using Recharts. Copy and paste into your apps. */ const meta = { title: "ui/Chart", component: ChartContainer, tags: ["autodocs"], argTypes: {}, args: { children:
, }, } satisfies Meta; export default meta; type Story = StoryObj; /** * Combine multiple Area components to create a stacked area chart. */ export const StackedAreaChart: Story = { args: { config: multiSeriesConfig, }, render: (args) => ( value.slice(0, 3)} tickLine={false} tickMargin={8} /> } cursor={false} /> ), }; /** * Combine multiple Bar components to create a stacked bar chart. */ export const StackedBarChart: Story = { args: { config: multiSeriesConfig, }, render: (args) => ( value.slice(0, 3)} tickLine={false} tickMargin={10} /> } cursor={false} /> ), }; /** * Combine multiple Line components to create a single line chart. */ export const MultiLineChart: Story = { args: { config: multiSeriesConfig, }, render: (args) => ( value.slice(0, 3)} tickLine={false} tickMargin={8} /> } cursor={false} /> ), }; /** * Combine Pie and Label components to create a doughnut chart. */ export const DoughnutChart: Story = { args: { config: singleSeriesConfig, }, render: (args) => { const totalVisitors = useMemo( () => singleSeriesData.reduce((acc, curr) => acc + curr.visitors, 0), [] ); return ( } cursor={false} /> ); }, }; ================================================ FILE: apps/storybook/stories/checkbox.stories.tsx ================================================ import { Checkbox } from "@repo/design-system/components/ui/checkbox"; import type { Meta, StoryObj } from "@storybook/react"; /** * A control that allows the user to toggle between checked and not checked. */ const meta: Meta = { title: "ui/Checkbox", component: Checkbox, tags: ["autodocs"], argTypes: {}, args: { id: "terms", disabled: false, }, render: (args) => (
), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the checkbox. */ export const Default: Story = {}; /** * Use the `disabled` prop to disable the checkbox. */ export const Disabled: Story = { args: { id: "disabled-terms", disabled: true, }, }; ================================================ FILE: apps/storybook/stories/collapsible.stories.tsx ================================================ import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@repo/design-system/components/ui/collapsible"; import type { Meta, StoryObj } from "@storybook/react"; import { Info } from "lucide-react"; /** * An interactive component which expands/collapses a panel. */ const meta = { title: "ui/Collapsible", component: Collapsible, tags: ["autodocs"], argTypes: {}, args: { className: "w-96", disabled: false, }, render: (args) => (

Can I use this in my project?

Yes. Free to use for personal and commercial projects. No attribution required.
), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the collapsible. */ export const Default: Story = {}; /** * Use the `disabled` prop to disable the interaction. */ export const Disabled: Story = { args: { disabled: true, }, }; ================================================ FILE: apps/storybook/stories/command.stories.tsx ================================================ import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "@repo/design-system/components/ui/command"; import type { Meta, StoryObj } from "@storybook/react"; import { CommandSeparator } from "cmdk"; /** * Fast, composable, unstyled command menu for React. */ const meta = { title: "ui/Command", component: Command, tags: ["autodocs"], argTypes: {}, args: { className: "rounded-lg w-96 border shadow-md", }, render: (args) => ( No results found. Calendar Search Emoji Calculator Profile Billing Settings ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the command. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/context-menu.stories.tsx ================================================ import { ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, } from "@repo/design-system/components/ui/context-menu"; import type { Meta, StoryObj } from "@storybook/react"; /** * Displays a menu to the user — such as a set of actions or functions — * triggered by a button. */ const meta = { title: "ui/ContextMenu", component: ContextMenu, tags: ["autodocs"], argTypes: {}, args: {}, render: (args) => ( Right click here Profile Billing Team Subscription ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the context menu. */ export const Default: Story = {}; /** * A context menu with shortcuts. */ export const WithShortcuts: Story = { render: (args) => ( Right click here Back ⌘[ Forward ⌘] Reload ⌘R ), }; /** * A context menu with a submenu. */ export const WithSubmenu: Story = { render: (args) => ( Right click here New Tab ⌘N More Tools Save Page As... ⇧⌘S Create Shortcut... Name Window... Developer Tools ), }; /** * A context menu with checkboxes. */ export const WithCheckboxes: Story = { render: (args) => ( Right click here Show Comments ⌘⇧C Show Preview ), }; /** * A context menu with a radio group. */ export const WithRadioGroup: Story = { render: (args) => ( Right click here Theme Light Dark ), }; ================================================ FILE: apps/storybook/stories/dialog.stories.tsx ================================================ import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@repo/design-system/components/ui/dialog"; import type { Meta, StoryObj } from "@storybook/react"; /** * A window overlaid on either the primary window or another dialog window, * rendering the content underneath inert. */ const meta = { title: "ui/Dialog", component: Dialog, tags: ["autodocs"], argTypes: {}, render: (args) => ( Open Are you absolutely sure? This action cannot be undone. This will permanently delete your account and remove your data from our servers. ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the dialog. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/drawer.stories.tsx ================================================ import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, } from "@repo/design-system/components/ui/drawer"; import type { Meta, StoryObj } from "@storybook/react"; /** * A drawer component for React. */ const meta: Meta = { title: "ui/Drawer", component: Drawer, tags: ["autodocs"], argTypes: {}, render: (args) => ( Open Are you sure absolutely sure? This action cannot be undone. ), parameters: { layout: "centered", }, }; export default meta; type Story = StoryObj; /** * The default form of the drawer. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/dropdown-menu.stories.tsx ================================================ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from "@repo/design-system/components/ui/dropdown-menu"; import type { Meta, StoryObj } from "@storybook/react"; import { Mail, Plus, PlusCircle, Search, UserPlus } from "lucide-react"; /** * Displays a menu to the user — such as a set of actions or functions — * triggered by a button. */ const meta = { title: "ui/DropdownMenu", component: DropdownMenu, tags: ["autodocs"], argTypes: {}, render: (args) => ( Open My Account Profile Billing Team Subscription ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the dropdown menu. */ export const Default: Story = {}; /** * A dropdown menu with shortcuts. */ export const WithShortcuts: Story = { render: (args) => ( Open Controls Back ⌘[ Forward ⌘] ), }; /** * A dropdown menu with submenus. */ export const WithSubmenus: Story = { render: (args) => ( Open Search New Team ⌘+T Invite users Email More... ), }; /** * A dropdown menu with radio items. */ export const WithRadioItems: Story = { render: (args) => ( Open Status Info Warning Error ), }; /** * A dropdown menu with checkboxes. */ export const WithCheckboxes: Story = { render: (args) => ( Open Autosave ⌘S Show Comments ), }; ================================================ FILE: apps/storybook/stories/form.stories.tsx ================================================ import { zodResolver } from "@hookform/resolvers/zod"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@repo/design-system/components/ui/form"; import type { Meta, StoryObj } from "@storybook/react"; import { useForm } from "react-hook-form"; import { action } from "storybook/actions"; import { object, string, type infer as zInfer } from "zod"; /** * Building forms with React Hook Form and Zod. */ const meta: Meta = { title: "ui/Form", component: Form, tags: ["autodocs"], argTypes: {}, render: (args) => , } satisfies Meta; export default meta; type Story = StoryObj; const formSchema = object({ username: string().min(2, { message: "Username must be at least 2 characters.", }), }); const ProfileForm = (args: Story["args"]) => { const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { username: "", }, }); function onSubmit(values: zInfer) { action("onSubmit")(values); } return (
( Username This is your public display name. )} /> ); }; /** * The default form of the form. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/hover-card.stories.tsx ================================================ import { HoverCard, HoverCardContent, HoverCardTrigger, } from "@repo/design-system/components/ui/hover-card"; import type { Meta, StoryObj } from "@storybook/react"; /** * For sighted users to preview content available behind a link. */ const meta = { title: "ui/HoverCard", component: HoverCard, tags: ["autodocs"], argTypes: {}, args: {}, render: (args) => ( Hover The React Framework - created and maintained by @vercel. ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the hover card. */ export const Default: Story = {}; /** * Use the `openDelay` and `closeDelay` props to control the delay before the * hover card opens and closes. */ export const Instant: Story = { args: { openDelay: 0, closeDelay: 0, }, }; ================================================ FILE: apps/storybook/stories/input-otp.stories.tsx ================================================ import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, } from "@repo/design-system/components/ui/input-otp"; import type { Meta, StoryObj } from "@storybook/react"; import { REGEXP_ONLY_DIGITS_AND_CHARS } from "input-otp"; /** * Accessible one-time password component with copy paste functionality. */ const meta = { title: "ui/InputOTP", component: InputOTP, tags: ["autodocs"], argTypes: {}, args: { maxLength: 6, pattern: REGEXP_ONLY_DIGITS_AND_CHARS, children: null, }, render: (args) => ( ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the InputOTP field. */ export const Default: Story = {}; /** * Use multiple groups to separate the input slots. */ export const SeparatedGroup: Story = { render: (args) => ( ), }; ================================================ FILE: apps/storybook/stories/input.stories.tsx ================================================ import { Input } from "@repo/design-system/components/ui/input"; import type { Meta, StoryObj } from "@storybook/react"; /** * Displays a form input field or a component that looks like an input field. */ const meta = { title: "ui/Input", component: Input, tags: ["autodocs"], argTypes: {}, args: { className: "w-96", type: "email", placeholder: "Email", disabled: false, }, parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the input field. */ export const Default: Story = {}; /** * Use the `disabled` prop to make the input non-interactive and appears faded, * indicating that input is not currently accepted. */ export const Disabled: Story = { args: { disabled: true }, }; /** * Use the `Label` component to includes a clear, descriptive label above or * alongside the input area to guide users. */ export const WithLabel: Story = { render: (args) => (
), }; /** * Use a text element below the input field to provide additional instructions * or information to users. */ export const WithHelperText: Story = { render: (args) => (

Enter your email address.

), }; /** * Use the `Button` component to indicate that the input field can be submitted * or used to trigger an action. */ export const WithButton: Story = { render: (args) => (
), }; ================================================ FILE: apps/storybook/stories/label.stories.tsx ================================================ import { Label } from "@repo/design-system/components/ui/label"; import type { Meta, StoryObj } from "@storybook/react"; /** * Renders an accessible label associated with controls. */ const meta = { title: "ui/Label", component: Label, tags: ["autodocs"], argTypes: { children: { control: { type: "text" }, }, }, args: { children: "Your email address", htmlFor: "email", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the label. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/menubar.stories.tsx ================================================ import { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, } from "@repo/design-system/components/ui/menubar"; import type { Meta, StoryObj } from "@storybook/react"; /** * A visually persistent menu common in desktop applications that provides * quick access to a consistent set of commands. */ const meta = { title: "ui/Menubar", component: Menubar, tags: ["autodocs"], argTypes: {}, render: (args) => ( File New Tab ⌘T New Window Share Print ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the menubar. */ export const Default: Story = {}; /** * A menubar with a submenu. */ export const WithSubmenu: Story = { render: (args) => ( Actions Download Share Email link Messages Notes ), }; /** * A menubar with radio items. */ export const WithRadioItems: Story = { render: (args) => ( View Device Size Small Medium Large ), }; /** * A menubar with checkbox items. */ export const WithCheckboxItems: Story = { render: (args) => ( Filters Show All Unread Important Flagged ), }; ================================================ FILE: apps/storybook/stories/navigation-menu.stories.tsx ================================================ import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, navigationMenuTriggerStyle, } from "@repo/design-system/components/ui/navigation-menu"; import type { Meta, StoryObj } from "@storybook/react"; /** * A collection of links for navigating websites. */ const meta = { title: "ui/NavigationMenu", component: NavigationMenu, tags: ["autodocs"], argTypes: {}, render: (args) => ( Overview Documentation
  • API Reference
  • Getting Started
  • Guides
External
), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the navigation menu. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/pagination.stories.tsx ================================================ import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@repo/design-system/components/ui/pagination"; import type { Meta, StoryObj } from "@storybook/react"; /** * Pagination with page navigation, next and previous links. */ const meta = { title: "ui/Pagination", component: Pagination, tags: ["autodocs"], argTypes: {}, render: (args) => ( 1 2 3 ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the pagination. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/popover.stories.tsx ================================================ import { Popover, PopoverContent, PopoverTrigger, } from "@repo/design-system/components/ui/popover"; import type { Meta, StoryObj } from "@storybook/react"; /** * Displays rich content in a portal, triggered by a button. */ const meta = { title: "ui/Popover", component: Popover, tags: ["autodocs"], argTypes: {}, render: (args) => ( Open Place content for the popover here. ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the popover. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/progress.stories.tsx ================================================ import { Progress } from "@repo/design-system/components/ui/progress"; import type { Meta, StoryObj } from "@storybook/react"; /** * Displays an indicator showing the completion progress of a task, typically * displayed as a progress bar. */ const meta = { title: "ui/Progress", component: Progress, tags: ["autodocs"], argTypes: {}, args: { value: 30, max: 100, }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the progress. */ export const Default: Story = {}; /** * When the progress is indeterminate. */ export const Indeterminate: Story = { args: { value: undefined, }, }; /** * When the progress is completed. */ export const Completed: Story = { args: { value: 100, }, }; ================================================ FILE: apps/storybook/stories/radio-group.stories.tsx ================================================ import { RadioGroup, RadioGroupItem, } from "@repo/design-system/components/ui/radio-group"; import type { Meta, StoryObj } from "@storybook/react"; /** * A set of checkable buttons—known as radio buttons—where no more than one of * the buttons can be checked at a time. */ const meta = { title: "ui/RadioGroup", component: RadioGroup, tags: ["autodocs"], argTypes: {}, args: { defaultValue: "comfortable", className: "grid gap-2 grid-cols-[1rem_1fr] items-center", }, render: (args) => ( ), } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the radio group. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/resizable.stories.tsx ================================================ import { ResizableHandle, ResizablePanel, ResizablePanelGroup, } from "@repo/design-system/components/ui/resizable"; import type { Meta, StoryObj } from "@storybook/react"; /** * Accessible resizable panel groups and layouts with keyboard support. */ const meta: Meta = { title: "ui/ResizablePanelGroup", component: ResizablePanelGroup, tags: ["autodocs"], argTypes: { onLayout: { control: false, }, }, args: { className: "max-w-96 rounded-lg border", direction: "horizontal", }, render: (args) => (
One
Two
Three
), } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the resizable panel group. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/scroll-area.stories.tsx ================================================ import { ScrollArea } from "@repo/design-system/components/ui/scroll-area"; import type { Meta, StoryObj } from "@storybook/react"; /** * Augments native scroll functionality for custom, cross-browser styling. */ const meta = { title: "ui/ScrollArea", component: ScrollArea, tags: ["autodocs"], argTypes: { children: { control: "text", }, }, args: { className: "h-32 w-80 rounded-md border p-4", type: "auto", children: "Jokester began sneaking into the castle in the middle of the night and leaving jokes all over the place: under the king's pillow, in his soup, even in the royal toilet. The king was furious, but he couldn't seem to stop Jokester. And then, one day, the people of the kingdom discovered that the jokes left by Jokester were so funny that they couldn't help but laugh. And once they started laughing, they couldn't stop. The king was so angry that he banished Jokester from the kingdom, but the people still laughed, and they laughed, and they laughed. And they all lived happily ever after.", }, parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the scroll area. */ export const Default: Story = {}; /** * Use the `type` prop with `always` to always show the scroll area. */ export const Always: Story = { args: { type: "always", }, }; /** * Use the `type` prop with `hover` to show the scroll area on hover. */ export const Hover: Story = { args: { type: "hover", }, }; /** * Use the `type` prop with `scroll` to show the scroll area when scrolling. */ export const Scroll: Story = { args: { type: "scroll", }, }; ================================================ FILE: apps/storybook/stories/select.stories.tsx ================================================ import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, } from "@repo/design-system/components/ui/select"; import type { Meta, StoryObj } from "@storybook/react"; /** * Displays a list of options for the user to pick from—triggered by a button. */ const meta: Meta = { title: "ui/Select", component: Select, tags: ["autodocs"], argTypes: {}, render: (args) => ( ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the select. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/separator.stories.tsx ================================================ import { Separator } from "@repo/design-system/components/ui/separator"; import type { Meta, StoryObj } from "@storybook/react"; /** * Visually or semantically separates content. */ const meta = { title: "ui/Separator", component: Separator, tags: ["autodocs"], argTypes: {}, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the separator. */ export const Horizontal: Story = { render: () => (
Left
Right
), }; /** * A vertical separator. */ export const Vertical: Story = { render: () => (
Top
Bottom
), }; ================================================ FILE: apps/storybook/stories/sheet.stories.tsx ================================================ import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, } from "@repo/design-system/components/ui/sheet"; import type { Meta, StoryObj } from "@storybook/react"; /** * Extends the Dialog component to display content that complements the main * content of the screen. */ const meta: Meta = { title: "ui/Sheet", component: Sheet, tags: ["autodocs"], argTypes: { side: { options: ["top", "bottom", "left", "right"], control: { type: "radio", }, }, }, args: { side: "right", }, render: (args) => ( Open Are you absolutely sure? This action cannot be undone. This will permanently delete your account and remove your data from our servers. ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the sheet. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/sidebar.stories.tsx ================================================ import { Avatar, AvatarFallback, AvatarImage, } from "@repo/design-system/components/ui/avatar"; import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from "@repo/design-system/components/ui/breadcrumb"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@repo/design-system/components/ui/collapsible"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, } from "@repo/design-system/components/ui/dropdown-menu"; import { Separator } from "@repo/design-system/components/ui/separator"; import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupLabel, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarTrigger, } from "@repo/design-system/components/ui/sidebar"; import type { Meta, StoryObj } from "@storybook/react"; import { AudioWaveform, BadgeCheck, Bell, BookOpen, Bot, ChevronRight, ChevronsUpDown, Command, CreditCard, Folder, Forward, Frame, GalleryVerticalEnd, LogOut, // biome-ignore lint/suspicious/noShadowRestrictedNames: "icon name" Map, MoreHorizontal, PieChart, Plus, Settings2, Sparkles, SquareTerminal, Trash2, } from "lucide-react"; import { useState } from "react"; const meta: Meta = { title: "ui/Sidebar", component: Sidebar, tags: ["autodocs"], argTypes: {}, }; export default meta; type Story = StoryObj; const data = { user: { name: "shadcn", email: "m@example.com", avatar: "/avatars/shadcn.jpg", }, teams: [ { name: "Acme Inc", logo: GalleryVerticalEnd, plan: "Enterprise", }, { name: "Acme Corp.", logo: AudioWaveform, plan: "Startup", }, { name: "Evil Corp.", logo: Command, plan: "Free", }, ], navMain: [ { title: "Playground", url: "#", icon: SquareTerminal, isActive: true, items: [ { title: "History", url: "#", }, { title: "Starred", url: "#", }, { title: "Settings", url: "#", }, ], }, { title: "Models", url: "#", icon: Bot, items: [ { title: "Genesis", url: "#", }, { title: "Explorer", url: "#", }, { title: "Quantum", url: "#", }, ], }, { title: "Documentation", url: "#", icon: BookOpen, items: [ { title: "Introduction", url: "#", }, { title: "Get Started", url: "#", }, { title: "Tutorials", url: "#", }, { title: "Changelog", url: "#", }, ], }, { title: "Settings", url: "#", icon: Settings2, items: [ { title: "General", url: "#", }, { title: "Team", url: "#", }, { title: "Billing", url: "#", }, { title: "Limits", url: "#", }, ], }, ], projects: [ { name: "Design Engineering", url: "#", icon: Frame, }, { name: "Sales & Marketing", url: "#", icon: PieChart, }, { name: "Travel", url: "#", icon: Map, }, ], }; export const Base: Story = { render: () => { const [activeTeam, setActiveTeam] = useState(data.teams[0]); return (
{activeTeam.name} {activeTeam.plan}
Teams {data.teams.map((team, index) => ( setActiveTeam(team)} >
{team.name} ⌘{index + 1}
))}
Add team
Platform {data.navMain.map((item) => ( {item.icon && } {item.title} {item.items?.map((subItem) => ( {subItem.title} ))} ))} Projects {data.projects.map((item) => ( {item.name} More View Project Share Project Delete Project ))} More CN
{data.user.name} {data.user.email}
CN
{data.user.name} {data.user.email}
Upgrade to Pro Account Billing Notifications Log out
Building Your Application Data Fetching
); }, args: {}, }; ================================================ FILE: apps/storybook/stories/skeleton.stories.tsx ================================================ import { Skeleton } from "@repo/design-system/components/ui/skeleton"; import type { Meta, StoryObj } from "@storybook/react"; /** * Use to show a placeholder while content is loading. */ const meta = { title: "ui/Skeleton", component: Skeleton, tags: ["autodocs"], argTypes: {}, parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the skeleton. */ export const Default: Story = { render: (args) => (
), }; ================================================ FILE: apps/storybook/stories/slider.stories.tsx ================================================ import { Slider } from "@repo/design-system/components/ui/slider"; import type { Meta, StoryObj } from "@storybook/react"; /** * An input where the user selects a value from within a given range. */ const meta = { title: "ui/Slider", component: Slider, tags: ["autodocs"], argTypes: {}, args: { defaultValue: [33], max: 100, step: 1, }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the slider. */ export const Default: Story = {}; /** * Use the `inverted` prop to have the slider fill from right to left. */ export const Inverted: Story = { args: { inverted: true, }, }; /** * Use the `disabled` prop to disable the slider. */ export const Disabled: Story = { args: { disabled: true, }, }; ================================================ FILE: apps/storybook/stories/sonner.stories.tsx ================================================ import { Toaster } from "@repo/design-system/components/ui/sonner"; import type { Meta, StoryObj } from "@storybook/react"; import { toast } from "sonner"; import { action } from "storybook/actions"; /** * An opinionated toast component for React. */ const meta: Meta = { title: "ui/Sonner", component: Toaster, tags: ["autodocs"], argTypes: {}, args: { position: "bottom-right", }, parameters: { layout: "fullscreen", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the toaster. */ export const Default: Story = { render: (args) => (
), }; ================================================ FILE: apps/storybook/stories/switch.stories.tsx ================================================ import { Switch } from "@repo/design-system/components/ui/switch"; import type { Meta, StoryObj } from "@storybook/react"; /** * A control that allows the user to toggle between checked and not checked. */ const meta = { title: "ui/Switch", component: Switch, tags: ["autodocs"], argTypes: {}, parameters: { layout: "centered", }, render: (args) => (
), } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the switch. */ export const Default: Story = { args: { id: "default-switch", }, }; /** * Use the `disabled` prop to disable the switch. */ export const Disabled: Story = { args: { id: "disabled-switch", disabled: true, }, }; ================================================ FILE: apps/storybook/stories/table.stories.tsx ================================================ import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow, } from "@repo/design-system/components/ui/table"; import type { Meta, StoryObj } from "@storybook/react"; const invoices = [ { invoice: "INV001", paymentStatus: "Paid", totalAmount: "$250.00", paymentMethod: "Credit Card", }, { invoice: "INV002", paymentStatus: "Pending", totalAmount: "$150.00", paymentMethod: "PayPal", }, { invoice: "INV003", paymentStatus: "Unpaid", totalAmount: "$350.00", paymentMethod: "Bank Transfer", }, { invoice: "INV004", paymentStatus: "Paid", totalAmount: "$450.00", paymentMethod: "Credit Card", }, ]; /** * Powerful table and datagrids built using TanStack Table. */ const meta = { title: "ui/Table", component: Table, tags: ["autodocs"], argTypes: {}, render: (args) => ( A list of your recent invoices. Invoice Status Method Amount {invoices.map((invoice) => ( {invoice.invoice} {invoice.paymentStatus} {invoice.paymentMethod} {invoice.totalAmount} ))}
), } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the table. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/tabs.stories.tsx ================================================ import { Tabs, TabsContent, TabsList, TabsTrigger, } from "@repo/design-system/components/ui/tabs"; import type { Meta, StoryObj } from "@storybook/react"; /** * A set of layered sections of content—known as tab panels—that are displayed * one at a time. */ const meta = { title: "ui/Tabs", component: Tabs, tags: ["autodocs"], argTypes: {}, args: { defaultValue: "account", className: "w-96", }, render: (args) => ( Account Password Make changes to your account here. Change your password here. ), parameters: { layout: "centered", }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the tabs. */ export const Default: Story = {}; ================================================ FILE: apps/storybook/stories/textarea.stories.tsx ================================================ import { Textarea } from "@repo/design-system/components/ui/textarea"; import type { Meta, StoryObj } from "@storybook/react"; /** * Displays a form textarea or a component that looks like a textarea. */ const meta = { title: "ui/Textarea", component: Textarea, tags: ["autodocs"], argTypes: {}, args: { placeholder: "Type your message here.", disabled: false, }, } satisfies Meta; export default meta; type Story = StoryObj; /** * The default form of the textarea. */ export const Default: Story = {}; /** * Use the `disabled` prop to disable the textarea. */ export const Disabled: Story = { args: { disabled: true, }, }; /** * Use the `Label` component to includes a clear, descriptive label above or * alongside the text area to guide users. */ export const WithLabel: Story = { render: (args) => (