diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 0000000..49f6bee --- /dev/null +++ b/netlify.toml @@ -0,0 +1,36 @@ +[build] +# Build command for SvelteKit +command = "npm run build" + +# Publish directory (where the built files are located) +publish = "build" + +[build.environment] +# Node.js version for the build environment +NODE_VERSION = "18" + +# Redirects for SvelteKit routing +[[redirects]] +# Handle client-side routing for SPA +from = "/*" +to = "/index.html" +status = 200 + +# Headers for better performance and security +[[headers]] +for = "/*" +[headers.values] +# Cache static assets +Cache-Control = "public, max-age=31536000, immutable" + +[[headers]] +for = "/*.html" +[headers.values] +# Don't cache HTML files +Cache-Control = "public, max-age=0, must-revalidate" + +[[headers]] +for = "/assets/*" +[headers.values] +# Cache assets for a long time +Cache-Control = "public, max-age=31536000, immutable" diff --git a/package-lock.json b/package-lock.json index 24dfc46..ef305d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@eslint/compat": "^1.2.5", "@eslint/js": "^9.18.0", "@sveltejs/adapter-auto": "^6.0.0", + "@sveltejs/adapter-netlify": "^5.2.2", "@sveltejs/kit": "^2.22.0", "@sveltejs/vite-plugin-svelte": "^6.0.0", "@tailwindcss/forms": "^0.5.9", @@ -714,6 +715,13 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true, + "license": "ISC" + }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", @@ -1203,6 +1211,21 @@ "@sveltejs/kit": "^2.0.0" } }, + "node_modules/@sveltejs/adapter-netlify": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-netlify/-/adapter-netlify-5.2.2.tgz", + "integrity": "sha512-pFWB/lxG8NuJLEYOcPxD059v5QQDFX1vxpBbVobHjgJDCpSDLySGMi4ipDKNPfysqIA9TEG+rwdexz0iaIAocg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@iarna/toml": "^2.2.5", + "esbuild": "^0.25.4", + "set-cookie-parser": "^2.6.0" + }, + "peerDependencies": { + "@sveltejs/kit": "^2.4.0" + } + }, "node_modules/@sveltejs/kit": { "version": "2.30.1", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.30.1.tgz", diff --git a/package.json b/package.json index 6615fcb..77d3a75 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,14 @@ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "format": "prettier --write .", - "lint": "prettier --check . && eslint ." + "lint": "prettier --check . && eslint .", + "build:netlify": "npm run build" }, "devDependencies": { "@eslint/compat": "^1.2.5", "@eslint/js": "^9.18.0", "@sveltejs/adapter-auto": "^6.0.0", + "@sveltejs/adapter-netlify": "^5.2.2", "@sveltejs/kit": "^2.22.0", "@sveltejs/vite-plugin-svelte": "^6.0.0", "@tailwindcss/forms": "^0.5.9", diff --git a/svelte.config.js b/svelte.config.js index 1295460..972584a 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -1,4 +1,4 @@ -import adapter from '@sveltejs/adapter-auto'; +import adapter from '@sveltejs/adapter-netlify'; import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; /** @type {import('@sveltejs/kit').Config} */ @@ -8,10 +8,14 @@ const config = { preprocess: vitePreprocess(), kit: { - // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. - // If your environment is not supported, or you settled on a specific environment, switch out the adapter. - // See https://svelte.dev/docs/kit/adapters for more information about adapters. - adapter: adapter() + // Using Netlify adapter for deployment + adapter: adapter({ + // if you want to use 'split' mode, set this to 'split' + // and create a _redirects file with the redirects you want + // see "split" mode in https://github.com/sveltejs/kit/tree/main/packages/adapter-netlify + edge: false, + split: false + }) } };