diff --git a/.github/workflows/lighthouse.yml b/.github/workflows/lighthouse.yml new file mode 100644 index 0000000..e58a6d3 --- /dev/null +++ b/.github/workflows/lighthouse.yml @@ -0,0 +1,20 @@ +name: Lighthouse CI + +on: [push] + +env: + VITE_GROWTH_BOOK_KEY: 'some-key' + +jobs: + lighthouseci: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + - run: bun install --frozen-lockfile && bun install -g @lhci/cli@0.12.x + - run: bun run build + - run: lhci autorun + env: + LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }} diff --git a/bun.lockb b/bun.lockb index 48afc2f..23769c3 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/lighthouserc.yml b/lighthouserc.yml new file mode 100644 index 0000000..5f804b7 --- /dev/null +++ b/lighthouserc.yml @@ -0,0 +1,15 @@ +ci: + collect: + numberOfRuns: 3 + # url: ['http://localhost'] + staticDistDir: './build' + isSinglePageApplication: true + assert: + assertions: + 'categories:performance': ['error', { 'minScore': 1 }] + 'categories:accessibility': ['error', { 'minScore': .90 }] + 'categories:best-practices': ['error', { 'minScore': .92 }] + 'categories:pwa': ['off'] + 'categories:seo': ['error', { 'minScore': .91 }] + upload: + target: 'temporary-public-storage' diff --git a/next.config.js b/next.config.mjs similarity index 54% rename from next.config.js rename to next.config.mjs index 0a5c146..ff1fa88 100644 --- a/next.config.js +++ b/next.config.mjs @@ -1,12 +1,13 @@ /** @type {import('next').NextConfig} */ -const { createVanillaExtractPlugin } = require('@vanilla-extract/next-plugin'); +import { createVanillaExtractPlugin } from '@vanilla-extract/next-plugin'; const withVanillaExtract = createVanillaExtractPlugin(); const nextConfig = { + distDir: 'build', experimental: { typedRoutes: true, }, }; -module.exports = withVanillaExtract(nextConfig); +export default withVanillaExtract(nextConfig); diff --git a/package.json b/package.json index dd60c9f..9114236 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@tanstack/eslint-plugin-query": "4.34.1", "@types/node": "20.6.0", "@vanilla-extract/css": "1.13.0", - "@vanilla-extract/next-plugin": "2.3.0", + "@vanilla-extract/next-plugin": "2.3.1", "eslint": "8.49.0", "eslint-config-next": "13.4.19", "eslint-config-prettier": "9.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9508d08..cab2df9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,8 +71,8 @@ devDependencies: specifier: 1.13.0 version: 1.13.0 '@vanilla-extract/next-plugin': - specifier: 2.3.0 - version: 2.3.0(@types/node@20.6.0)(next@13.4.19)(webpack@5.88.2) + specifier: 2.3.1 + version: 2.3.1(@types/node@20.6.0)(next@13.4.19)(webpack@5.88.2) eslint: specifier: 8.49.0 version: 8.49.0 @@ -154,6 +154,29 @@ packages: transitivePeerDependencies: - supports-color + /@babel/core@7.22.20: + resolution: {integrity: sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.22.15 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.22.20(@babel/core@7.22.20) + '@babel/helpers': 7.22.15 + '@babel/parser': 7.22.16 + '@babel/template': 7.22.15 + '@babel/traverse': 7.22.20 + '@babel/types': 7.22.19 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/generator@7.22.15: resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} engines: {node: '>=6.9.0'} @@ -232,6 +255,11 @@ packages: - supports-color dev: true + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} @@ -275,6 +303,20 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.15 + /@babel/helper-module-transforms@7.22.20(@babel/core@7.22.20): + resolution: {integrity: sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.20 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} @@ -338,6 +380,11 @@ packages: resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option@7.22.15: resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} @@ -680,6 +727,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.20): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.17): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -1502,6 +1559,24 @@ packages: transitivePeerDependencies: - supports-color + /@babel/traverse@7.22.20: + resolution: {integrity: sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.22.15 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.19 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.22.17: resolution: {integrity: sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==} engines: {node: '>=6.9.0'} @@ -1510,6 +1585,15 @@ packages: '@babel/helper-validator-identifier': 7.22.15 to-fast-properties: 2.0.0 + /@babel/types@7.22.19: + resolution: {integrity: sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -4602,7 +4686,7 @@ packages: /@vanilla-extract/babel-plugin-debug-ids@1.0.3: resolution: {integrity: sha512-vm4jYu1xhSa6ofQ9AhIpR3DkAp4c+eoR1Rpm8/TQI4DmWbmGbOjYRcqV0aWsfaIlNhN4kFuxFMKBNN9oG6iRzA==} dependencies: - '@babel/core': 7.22.17 + '@babel/core': 7.22.20 transitivePeerDependencies: - supports-color dev: true @@ -4626,8 +4710,8 @@ packages: /@vanilla-extract/integration@6.2.2(@types/node@20.6.0): resolution: {integrity: sha512-gV3qPFjFap1+IrPeuFy+tEZOq7l7ifJf1ik/kluDWhPr1ffsFG9puq1/jjJ4rod1BIC79Q5ZWPNvBInHyxfCew==} dependencies: - '@babel/core': 7.22.17 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.17) + '@babel/core': 7.22.20 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.20) '@vanilla-extract/babel-plugin-debug-ids': 1.0.3 '@vanilla-extract/css': 1.13.0 esbuild: 0.17.6 @@ -4650,13 +4734,12 @@ packages: - terser dev: true - /@vanilla-extract/next-plugin@2.3.0(@types/node@20.6.0)(next@13.4.19)(webpack@5.88.2): - resolution: {integrity: sha512-l7ZzcL1G9zuJTAhBbOy6NKW/FPDOhDzfUXPhFGSTN1sdtO7qBmGLtOGFZATAYboAuIWXhGgnrfkyNgQh2adXZw==} + /@vanilla-extract/next-plugin@2.3.1(@types/node@20.6.0)(next@13.4.19)(webpack@5.88.2): + resolution: {integrity: sha512-aoDTnCY3gJXjytoxlA7Xk4A/BDxdzUBeZhHWypauKJ06XJKlV/odjXt8K5FhCrMy8o+nqnCpjOD6KXcg6JmIdw==} peerDependencies: next: '>=12.1.7' dependencies: - '@vanilla-extract/webpack-plugin': 2.3.0(@types/node@20.6.0)(webpack@5.88.2) - browserslist: 4.21.10 + '@vanilla-extract/webpack-plugin': 2.3.1(@types/node@20.6.0)(webpack@5.88.2) next: 13.4.19(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0) transitivePeerDependencies: - '@types/node' @@ -4674,8 +4757,8 @@ packages: resolution: {integrity: sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==} dev: true - /@vanilla-extract/webpack-plugin@2.3.0(@types/node@20.6.0)(webpack@5.88.2): - resolution: {integrity: sha512-c+oaozLGNu+dqLNattJ9nVmy6t2OZw6qEW0xJkPS4bRXlpMSNrPwkKB1Lpov2yd2/eDuxTFi760zTZygwFNBVA==} + /@vanilla-extract/webpack-plugin@2.3.1(@types/node@20.6.0)(webpack@5.88.2): + resolution: {integrity: sha512-S767iP+S67Uh+BsTe+u60BMbtRqZAxzjK7gYd6a+1hcbMKznYxdQMeP2qs9wr+NhRqZFrNxewo3/ztMnN85TOg==} peerDependencies: webpack: ^4.30.0 || ^5.20.2 dependencies: @@ -10044,6 +10127,14 @@ packages: fsevents: 2.3.3 dev: true + /rollup@3.29.2: + resolution: {integrity: sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -11200,7 +11291,7 @@ packages: '@types/node': 20.6.0 esbuild: 0.18.20 postcss: 8.4.29 - rollup: 3.29.1 + rollup: 3.29.2 optionalDependencies: fsevents: 2.3.3 dev: true