Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
fe2a1e0
chore: update build tooling and CI
akd-io Mar 7, 2026
78b9068
fix: fix website build
akd-io Mar 7, 2026
94bed1b
feat: add App Router support via --router flag
akd-io Mar 7, 2026
ecbcced
chore: gitignore tsbuildinfo files
akd-io Mar 7, 2026
4056d21
feat: update all plugins to latest versions
akd-io Mar 7, 2026
104aa47
test: add E2E tests and fix App Router issues
akd-io Mar 7, 2026
6a28458
feat: migrate website to Mantine v8 + App Router
akd-io Mar 7, 2026
ec13bbe
chore: require node >=20 in engines
akd-io Mar 7, 2026
58073d5
feat: upgrade to Next.js 16 + ESLint flat config
akd-io Mar 7, 2026
e88e7bf
chore: update internal tooling deps
akd-io Mar 7, 2026
05b0d06
feat: migrate CLI to ESM
akd-io Mar 7, 2026
13dd8a3
fix: use --filesOnly for vitest e2e test listing
akd-io Mar 7, 2026
4599d47
fix: replace deprecated --poolOptions with --no-fileParallelism
akd-io Mar 7, 2026
9f74545
fix: replace require.resolve with import.meta.resolve
akd-io Mar 7, 2026
b25a5fc
fix: resolve no-explicit-any lint errors in templates
akd-io Mar 7, 2026
cdcd5b0
fix: correct import extensions in generated templates
akd-io Mar 7, 2026
687d4de
fix: use extensionless imports in generated templates
akd-io Mar 7, 2026
ecac881
fix: add import type for Node type stripping compat
akd-io Mar 7, 2026
a8314c7
fix: unset CI env in e2e tests
akd-io Mar 7, 2026
b5793b4
fix: properly delete CI env vars in e2e tests
akd-io Mar 7, 2026
56ed2a7
fix: use --no-frozen-lockfile for pnpm in E2E
akd-io Mar 7, 2026
b2373eb
chore: remove unnecessary CI env var deletion
akd-io Mar 7, 2026
5d57d80
fix: alias MUI ThemeProvider to avoid conflict
akd-io Mar 7, 2026
93972b0
fix: move plausible env check to providerLogic
akd-io Mar 7, 2026
6385310
fix: remove .ts extension from material-theme import
akd-io Mar 8, 2026
4f44f63
fix: pnpm @types/react corruption + dup imports
akd-io Mar 8, 2026
6cf6718
refactor: use prettier organize-imports plugin
akd-io Mar 8, 2026
899024c
fix: add .prettierignore to exclude lock files
akd-io Mar 8, 2026
c4d2d1f
fix: remove .next from .prettierignore
akd-io Mar 8, 2026
fa44cc2
fix: move .prettierignore to create-next-stack plugin
akd-io Mar 8, 2026
de3bb51
fix: only generate .prettierignore when prettier selected
akd-io Mar 8, 2026
40e84a4
fix: extract StyledComponentsRegistry component
akd-io Mar 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,13 @@ jobs:

steps:
- name: "Checkout repo"
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: "Set up pnpm"
uses: pnpm/action-setup@v2
with:
version: 8
uses: pnpm/action-setup@v4

- name: "Set up latest Node LTS"
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: "lts/*"
cache: pnpm
Expand Down
16 changes: 6 additions & 10 deletions .github/workflows/cli-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,13 @@ jobs:

steps:
- name: "Checkout repo"
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: "Set up pnpm"
uses: pnpm/action-setup@v2
with:
version: 8
uses: pnpm/action-setup@v4

- name: "Set up latest Node LTS"
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: "lts/*"
cache: pnpm
Expand Down Expand Up @@ -58,15 +56,13 @@ jobs:

steps:
- name: "Checkout repo"
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: "Set up pnpm"
uses: pnpm/action-setup@v2
with:
version: 8
uses: pnpm/action-setup@v4

- name: "Set up latest Node LTS"
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: "lts/*"
cache: pnpm
Expand Down
8 changes: 3 additions & 5 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,13 @@ jobs:

steps:
- name: "Checkout repo"
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: "Set up pnpm"
uses: pnpm/action-setup@v2
with:
version: 8
uses: pnpm/action-setup@v4

- name: "Set up latest Node LTS"
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: "lts/*"
registry-url: "https://registry.npmjs.org"
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
**/lib
**/tmp

# typescript
*.tsbuildinfo

# misc
.DS_Store
Expand Down
3 changes: 0 additions & 3 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

pnpm run update-readmes
npx lint-staged
3 changes: 0 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,9 @@ Make sure you are set up locally by following the [Getting Started](#getting-sta
Make sure you are set up locally by following the [Getting Started](#getting-started) section above.

1. Create a new branch from `develop` with a descriptive name.

- `git checkout -b feature/support-my-favorite-technology`

2. Make sure you check out the [scripts](#scripts) section above. Most notably:

- `build:watch` - Make sure to have `build:watch` running if you are running tests, as tests are run on the built files.
- `unit:watch` - Some of these tests were specifically made to ease the plugin authoring process, so don't forget this one.
- `e2e` - Runs e2e tests. Note that this will run all e2e tests, which can take quite a while.
Expand All @@ -91,7 +89,6 @@ Make sure you are set up locally by following the [Getting Started](#getting-sta
- `clean` - Removes all generated files, including build files and the `create-next-stack-tests` directory created by the e2e tests.

3. Add a new .ts file for your plugin in the plugins directory at [`packages/create-next-stack/src/main/plugins`](packages/create-next-stack/src/main/plugins)

- See the [Writing a plugin section](#writing-a-plugin) below to learn how to write a Create Next Stack plugin.

4. Add new flags to the `create-next-stack` command in [`create-next-stack.ts`](packages/create-next-stack/src/main/commands/create-next-stack.ts).
Expand Down
6 changes: 0 additions & 6 deletions apps/website/.eslintrc.json

This file was deleted.

45 changes: 45 additions & 0 deletions apps/website/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import "@mantine/core/styles.css"

import { ColorSchemeScript, mantineHtmlProps } from "@mantine/core"
import type { Metadata } from "next"
import PlausibleProvider from "next-plausible"
import { Providers } from "./providers"

export const metadata: Metadata = {
title: "Create your Next.js project today! | Create Next Stack",
description:
"Create your Next.js project today! Create Next Stack is a website and CLI tool used to easily set up the boilerplate of new Next.js apps.",
openGraph: {
title: "Create your Next.js project today! | Create Next Stack",
description:
"Create your Next.js project today! Create Next Stack is a website and CLI tool used to easily set up the boilerplate of new Next.js apps.",
type: "website",
images: ["https://www.create-next-stack.com/thumbnail.png"],
},
icons: {
icon: "/favicon.ico",
},
}

export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en" {...mantineHtmlProps}>
<head>
<ColorSchemeScript defaultColorScheme="light" />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Roboto+Mono&display=swap"
rel="stylesheet"
/>
</head>
<body style={{ backgroundColor: "#eee", margin: 0 }}>
<PlausibleProvider domain="create-next-stack.com">
<Providers>{children}</Providers>
</PlausibleProvider>
</body>
</html>
)
}
5 changes: 5 additions & 0 deletions apps/website/app/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import LandingPageTemplate from "../templates/LandingPage/LandingPageTemplate"

export default function Page() {
return <LandingPageTemplate />
}
12 changes: 12 additions & 0 deletions apps/website/app/providers.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
"use client"

import { MantineProvider } from "@mantine/core"
import { theme } from "../theme"

export function Providers({ children }: { children: React.ReactNode }) {
return (
<MantineProvider theme={theme} defaultColorScheme="light">
{children}
</MantineProvider>
)
}
22 changes: 18 additions & 4 deletions apps/website/components/Anchor.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,20 @@
import { Link } from "@chakra-ui/react"
import { ComponentProps, FC } from "react"
"use client"

export const Anchor: FC<ComponentProps<typeof Link>> = (props) => {
return <Link color="#319bff" fontWeight="bold" {...props} />
import { Anchor as MantineAnchor } from "@mantine/core"
import { ReactNode } from "react"

type AnchorProps = {
href?: string
target?: string
children?: ReactNode
c?: string
fw?: string | number
}

export const Anchor = ({
c = "#319bff",
fw = "bold",
...props
}: AnchorProps) => {
return <MantineAnchor c={c} fw={fw} {...props} />
}
10 changes: 6 additions & 4 deletions apps/website/components/Checkbox.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { Checkbox as ChakraCheckbox } from "@chakra-ui/react"
import { ComponentProps, FC } from "react"
"use client"

export const Checkbox: FC<ComponentProps<typeof ChakraCheckbox>> = (props) => {
return <ChakraCheckbox size="md" colorScheme="purple" {...props} />
import { Checkbox as MantineCheckbox, CheckboxProps } from "@mantine/core"
import { FC } from "react"

export const Checkbox: FC<CheckboxProps> = (props) => {
return <MantineCheckbox size="md" color="violet" {...props} />
}
39 changes: 0 additions & 39 deletions apps/website/components/Page.tsx

This file was deleted.

10 changes: 6 additions & 4 deletions apps/website/components/Radio.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { Radio as ChakraRadio } from "@chakra-ui/react"
import { ComponentProps, FC } from "react"
"use client"

export const Radio: FC<ComponentProps<typeof ChakraRadio>> = (props) => {
return <ChakraRadio size="md" colorScheme="purple" {...props} />
import { Radio as MantineRadio, RadioProps } from "@mantine/core"
import { FC } from "react"

export const Radio: FC<RadioProps> = (props) => {
return <MantineRadio size="md" color="violet" {...props} />
}
40 changes: 19 additions & 21 deletions apps/website/components/Section.tsx
Original file line number Diff line number Diff line change
@@ -1,32 +1,30 @@
import { Flex } from "@chakra-ui/react"
import { ComponentProps, FC } from "react"
import { Box, Flex, FlexProps } from "@mantine/core"
import { FC, ReactNode } from "react"

type SectionProps = ComponentProps<typeof Flex> & {
innerProps?: ComponentProps<typeof Flex>
type SectionProps = Omit<FlexProps, "component"> & {
innerProps?: FlexProps
children?: ReactNode
as?: "section" | "header" | "footer"
}
export const Section: FC<SectionProps> = ({
innerProps,
children,
as: Element = "section",
...props
}) => {
return (
<Flex
direction="column"
width="100%"
px="30px"
alignItems="center"
as="section"
{...props}
>
<Flex
direction="column"
width="100%"
maxWidth="800"
alignItems="center"
{...innerProps}
>
{children}
<Box component={Element}>
<Flex direction="column" w="100%" px="30px" align="center" {...props}>
<Flex
direction="column"
w="100%"
maw="800"
align="center"
{...innerProps}
>
{children}
</Flex>
</Flex>
</Flex>
</Box>
)
}
10 changes: 5 additions & 5 deletions apps/website/components/SocialIcons.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { Flex, Stack } from "@chakra-ui/react"
import React, { ComponentProps } from "react"
import { Flex, FlexProps } from "@mantine/core"
import { FC } from "react"
import { FaDiscord, FaGithub, FaTwitter } from "react-icons/fa"

export const SocialIcons: React.FC<ComponentProps<typeof Flex>> = (props) => {
export const SocialIcons: FC<FlexProps> = (props) => {
return (
<Flex
justifyContent={["left", "center"]}
alignItems="center"
justify={{ base: "left", sm: "center" }}
align="center"
gap="12px"
{...props}
>
Expand Down
22 changes: 0 additions & 22 deletions apps/website/components/WithDefaultGlobalStyles.tsx

This file was deleted.

23 changes: 23 additions & 0 deletions apps/website/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { defineConfig, globalIgnores } from "eslint/config"
import nextVitals from "eslint-config-next/core-web-vitals"
import nextTs from "eslint-config-next/typescript"
import eslintConfigPrettier from "eslint-config-prettier"

const eslintConfig = defineConfig([
...nextVitals,
...nextTs,
eslintConfigPrettier,
{
rules: {
"@next/next/no-page-custom-font": "off",
"@next/next/no-img-element": "off",
"@typescript-eslint/no-unused-vars": [
"warn",
{ argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
],
},
},
globalIgnores([".next/**", "out/**", "build/**", "next-env.d.ts"]),
])

export default eslintConfig
3 changes: 2 additions & 1 deletion apps/website/next-env.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts"

// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
Loading