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 (
+
+
+