diff --git a/packages/website/.gitignore b/packages/website/.gitignore index d89423204..4c4207142 100644 --- a/packages/website/.gitignore +++ b/packages/website/.gitignore @@ -21,6 +21,7 @@ typings/ build/ api/ src/styles/unocss.css +.next/ # Miscellaneous .tmp/ diff --git a/packages/website/next-env.d.ts b/packages/website/next-env.d.ts new file mode 100644 index 000000000..4f11a03dc --- /dev/null +++ b/packages/website/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/website/next.config.js b/packages/website/next.config.js new file mode 100644 index 000000000..fc481917a --- /dev/null +++ b/packages/website/next.config.js @@ -0,0 +1,34 @@ +// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires +const UnoCSS = require('@unocss/webpack').default; + +/** + * @type {import('next').NextConfig} + */ +module.exports = { + reactStrictMode: true, + swcMinify: true, + experimental: { + images: { + allowFutureImage: true, + }, + }, + images: { + dangerouslyAllowSVG: true, + contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;", + }, + webpack(config, context) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + config.plugins.push(UnoCSS()); + + if (context.buildId !== 'development') { + // * disable filesystem cache for build + // * https://github.com/unocss/unocss/issues/419 + // * https://webpack.js.org/configuration/cache/ + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + config.cache = false; + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return config; + }, +}; diff --git a/packages/website/package.json b/packages/website/package.json index d0ff530d1..5484cb7ff 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -7,9 +7,11 @@ "test": "vitest run", "build": "yarn build:css && yarn build:remix", "build:css": "yarn generate:css", + "build:next": "next build", "build:remix": "remix build", "dev": "concurrently 'yarn dev:css' 'yarn dev:remix'", "dev:css": "yarn generate:css --watch", + "dev:next": "next dev", "dev:remix": "remix dev", "generate:css": "unocss 'src/**/*.tsx' --out-file ./src/styles/unocss.css", "lint": "prettier --check . && eslint src --ext mjs,js,ts,tsx", @@ -55,6 +57,7 @@ "@remix-run/server-runtime": "^1.6.5", "@remix-run/vercel": "^1.6.5", "@vscode/codicons": "^0.0.31", + "next": "^12.2.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-icons": "^4.4.0", @@ -76,6 +79,7 @@ "@unocss/cli": "^0.44.5", "@unocss/preset-web-fonts": "^0.44.5", "@unocss/reset": "^0.44.5", + "@unocss/webpack": "^0.44.5", "@vitejs/plugin-react": "^2.0.0", "c8": "^7.12.0", "concurrently": "^7.3.0", diff --git a/packages/website/remix.env.d.ts b/packages/website/remix-env.d.ts similarity index 100% rename from packages/website/remix.env.d.ts rename to packages/website/remix-env.d.ts diff --git a/packages/website/src/pages/_app.tsx b/packages/website/src/pages/_app.tsx new file mode 100644 index 000000000..568e0de71 --- /dev/null +++ b/packages/website/src/pages/_app.tsx @@ -0,0 +1,8 @@ +import type { AppProps } from 'next/app'; +import '@unocss/reset/normalize.css'; +import 'uno.css'; +import '../styles/main.css'; + +export default function MyApp({ Component, pageProps }: AppProps) { + return ; +} diff --git a/packages/website/src/pages/_document.tsx b/packages/website/src/pages/_document.tsx new file mode 100644 index 000000000..73018b36c --- /dev/null +++ b/packages/website/src/pages/_document.tsx @@ -0,0 +1,24 @@ +import { Html, Head, Main, NextScript } from 'next/document'; + +export default function Document() { + return ( + + + +