diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..103f07d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +node_modules +build +.svelte-kit +db.sqlite +.env* +.claude +scripts \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6714ec7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +FROM oven/bun:slim AS base +WORKDIR /app + +FROM base AS install +COPY package.json bun.lock ./ +RUN bun install --frozen-lockfile + +FROM base AS build +ENV NODE_ENV=production +COPY --from=install /app/node_modules node_modules +COPY . . +RUN bun run build + +FROM base AS release +ENV NODE_ENV=production \ + DATABASE_URL=/app/data/db.sqlite \ + HOST=0.0.0.0 \ + PORT=3000 +# full node_modules: drizzle-kit (devDep) is needed for `drizzle-kit migrate` at startup +COPY --from=install /app/node_modules node_modules +COPY --from=build /app/build build +COPY drizzle drizzle +COPY drizzle.config.ts package.json ./ +RUN mkdir -p /app/data +COPY drizzle.config.ts package.json ./ +RUN bun run db:migrate +VOLUME /app/data +EXPOSE 3000 +# apply migrations (creates db.sqlite if absent), then start the server +CMD ["bun ./build/index.js"] diff --git a/bun.lock b/bun.lock index 4d4a619..e9dce2c 100644 --- a/bun.lock +++ b/bun.lock @@ -26,7 +26,7 @@ "@better-svelte-email/cli": "^2.1.1", "@eslint/js": "^10.0.1", "@fontsource-variable/geist": "^5.2.9", - "@inlang/paraglide-js": "^2.18.2", + "@inlang/paraglide-js": "^2.20.2", "@internationalized/date": "^3.12.0", "@libsql/client": "^0.17.3", "@lucide/svelte": "^1.21.0", @@ -223,7 +223,7 @@ "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], - "@inlang/paraglide-js": ["@inlang/paraglide-js@2.20.0", "", { "dependencies": { "@inlang/recommend-sherlock": "^0.2.1", "@inlang/sdk": "^2.10.0", "commander": "11.1.0", "consola": "3.4.0", "json5": "2.2.3", "unplugin": "^2.1.2", "urlpattern-polyfill": "^10.0.0" }, "peerDependencies": { "typescript": ">=5.6" }, "optionalPeers": ["typescript"], "bin": { "paraglide-js": "bin/run.js" } }, "sha512-vI8PdPVZSnpYnpagjvm+nWSa3nMDRJKVM/2eLAtUHFrNcZZadxVdmP79r4W95+dkMLDFGEyzSSY9sFxvjdkkyQ=="], + "@inlang/paraglide-js": ["@inlang/paraglide-js@2.20.2", "", { "dependencies": { "@inlang/recommend-sherlock": "^0.2.1", "@inlang/sdk": "^2.10.0", "commander": "11.1.0", "consola": "3.4.0", "json5": "2.2.3", "unplugin": "^2.1.2", "urlpattern-polyfill": "^10.0.0" }, "peerDependencies": { "typescript": ">=5.6" }, "optionalPeers": ["typescript"], "bin": { "paraglide-js": "bin/run.js" } }, "sha512-V8iY3uu/vQU94gEag1bdC3glMJSp4Dg3XMwfnabZLBh1Dv0F++DvDYlMeniqv2+nHbnS/twB75AM140OmpHDEg=="], "@inlang/recommend-sherlock": ["@inlang/recommend-sherlock@0.2.1", "", { "dependencies": { "comment-json": "^4.2.3" } }, "sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg=="], diff --git a/drizzle.config.ts b/drizzle.config.ts index 08c37b5..1f66d1c 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -7,5 +7,6 @@ export default defineConfig({ dialect: 'sqlite', schema: './src/lib/server/db/schema.ts', strict: true, - verbose: true + verbose: true, + }); diff --git a/package.json b/package.json index 2c8d225..9cda950 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "@better-svelte-email/cli": "^2.1.1", "@eslint/js": "^10.0.1", "@fontsource-variable/geist": "^5.2.9", - "@inlang/paraglide-js": "^2.18.2", + "@inlang/paraglide-js": "^2.20.2", "@internationalized/date": "^3.12.0", "@libsql/client": "^0.17.3", "@lucide/svelte": "^1.21.0", diff --git a/src/routes/docs/architecture/+page.svelte b/src/routes/docs/architecture/+page.svelte index 1961e0e..e86e64e 100644 --- a/src/routes/docs/architecture/+page.svelte +++ b/src/routes/docs/architecture/+page.svelte @@ -51,7 +51,7 @@
@@ -28,7 +26,6 @@
@@ -46,7 +43,6 @@
{m.docs_limits_credits_desc()}
diff --git a/vite.config.ts b/vite.config.ts index 431aa40..eba0d2b 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -8,7 +8,9 @@ export default defineConfig({ plugins: [ tailwindcss(), sveltekit({ - adapter: adapter(), + adapter: adapter({ + precompress:true + }), compilerOptions: { experimental: { async: true }, runes: ({ filename }) =>