diff --git a/.gitignore b/.gitignore index 3b462cb..936a4bf 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,11 @@ Thumbs.db # Vite vite.config.js.timestamp-* vite.config.ts.timestamp-* + + +# Photos +*.jpg +*.png + +# Databases +*.db \ No newline at end of file diff --git a/bun.lock b/bun.lock index 4f4f991..b908e3b 100644 --- a/bun.lock +++ b/bun.lock @@ -9,6 +9,9 @@ "@types/nodemailer": "^7.0.11", "nodemailer": "^8.0.4", }, + "dependencies": { + "marked": "^15.0.11", + }, "devDependencies": { "@sveltejs/adapter-node": "^5.5.4", "@sveltejs/vite-plugin-svelte": "^5.1.1", @@ -17,6 +20,15 @@ "svelte-check": "^4.3.1", "typescript": "^5.9.2", "vite": "^6.3.5", + "@sveltejs/adapter-auto": "^6.0.0", + "@sveltejs/kit": "^2.16.0", + "@sveltejs/vite-plugin-svelte": "^5.0.0", + "sass": "^1.87.0", + "svelte": "^5.0.0", + "svelte-adapter-bun": "^0.5.2", + "svelte-check": "^4.0.0", + "typescript": "^5.0.0", + "vite": "^6.2.6", }, }, }, @@ -249,6 +261,19 @@ "is-module": ["is-module@1.0.0", "", {}, "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="], + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + "globalyzer": ["globalyzer@0.1.0", "", {}, "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="], + + "globrex": ["globrex@0.1.2", "", {}, "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="], + + "immutable": ["immutable@5.1.1", "", {}, "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg=="], + + "import-meta-resolve": ["import-meta-resolve@4.1.0", "", {}, "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], @@ -261,6 +286,10 @@ "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "marked": ["marked@15.0.11", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-1BEXAU2euRCG3xwgLVT1y0xbJEld1XOrmRJpUwRCcy7rxhSCwMrmEu9LXoPhHSCJG41V7YcQ2mjKRr5BA3ITIA=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], @@ -275,6 +304,8 @@ "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], @@ -291,6 +322,8 @@ "sass": ["sass@1.90.0", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q=="], + "sass": ["sass@1.87.0", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-d0NoFH4v6SjEK7BoX810Jsrhj7IQSYHAHLi/iSpgqKc7LaIDshFRlSg5LOymf9FqQhxEHs2W5ZQXlvy0KD45Uw=="], + "set-cookie-parser": ["set-cookie-parser@2.7.1", "", {}, "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="], "sirv": ["sirv@3.0.1", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A=="], @@ -302,6 +335,13 @@ "svelte": ["svelte@5.38.0", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^2.1.0", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-cWF1Oc2IM/QbktdK89u5lt9MdKxRtQnRKnf2tq6KOhYuhLOd2hbMuTiJ+vWMzAeMDe81AzbCgLd4GVtOJ4fDRg=="], "svelte-check": ["svelte-check@4.3.1", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-lkh8gff5gpHLjxIV+IaApMxQhTGnir2pNUAqcNgeKkvK5bT/30Ey/nzBxNLDlkztCH4dP7PixkMt9SWEKFPBWg=="], + "svelte": ["svelte@5.28.2", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^1.4.6", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-FbWBxgWOpQfhKvoGJv/TFwzqb4EhJbwCD17dB0tEpQiw1XyUEKZJtgm4nA4xq3LLsMo7hu5UY/BOFmroAxKTMg=="], + + "svelte-adapter-bun": ["svelte-adapter-bun@0.5.2", "", { "dependencies": { "tiny-glob": "^0.2.9" } }, "sha512-xEtFgaal6UgrCwwkSIcapO9kopoFNUYCYqyKCikdqxX9bz2TDYnrWQZ7qBnkunMxi1HOIERUCvTcebYGiarZLA=="], + + "svelte-check": ["svelte-check@4.1.7", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-1jX4BzXrQJhC/Jt3SqYf6Ntu//vmfc6VWp07JkRfK2nn+22yIblspVUo96gzMkg0Zov8lQicxhxsMzOctwcMQQ=="], + + "tiny-glob": ["tiny-glob@0.2.9", "", { "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" } }, "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg=="], "tinyglobby": ["tinyglobby@0.2.13", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="], @@ -364,5 +404,7 @@ "vite/rollup/@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.40.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA=="], "vite/rollup/@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.1", "", { "os": "win32", "cpu": "x64" }, "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA=="], + + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], } } diff --git a/dev.db b/dev.db new file mode 100644 index 0000000..561f289 Binary files /dev/null and b/dev.db differ diff --git a/package.json b/package.json index 6481a56..106cd1e 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,14 @@ "@sveltejs/adapter-auto": "^6.0.0", "@sveltejs/kit": "^2.16.0", "@sveltejs/vite-plugin-svelte": "^5.0.0", + "sass": "^1.87.0", "svelte": "^5.0.0", + "svelte-adapter-bun": "^0.5.2", "svelte-check": "^4.0.0", "typescript": "^5.0.0", "vite": "^6.2.6" + }, + "dependencies": { + "marked": "^15.0.11" } } diff --git a/prod.db b/prod.db new file mode 100644 index 0000000..e69de29 diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..3b462cb --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,23 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/src/app.scss b/src/app.scss new file mode 100644 index 0000000..7478540 --- /dev/null +++ b/src/app.scss @@ -0,0 +1,5 @@ +$blue: oklch(0.76 0.0358 233.23); +$yellow: oklch(0.98 0.1102 107.17); +$orange: oklch(0.76 0.1039 65.65); +$green: oklch(0.22 0.0211 174.37); +$green-42: oklch(42% 0.042 142); \ No newline at end of file diff --git a/src/lib/db/index.ts b/src/lib/db/index.ts new file mode 100644 index 0000000..02a4b23 --- /dev/null +++ b/src/lib/db/index.ts @@ -0,0 +1,39 @@ +import Database from 'bun:sqlite'; +import { dev } from '$app/environment'; + +// Initialize the database +const db = new Database(dev ? 'dev.db' : 'prod.db', { create: true}); + + +// Close the database connection when the application shuts down +process.on('SIGINT', () => { + db.close(false); + process.exit(0); +}); + +// Export database instance and helper functions +export { db }; + +// Example helper functions +export function get_all_users() { + return db.query('SELECT * FROM users').all(); +} + +export function create_user(name: string, email: string) { + try { + return { success: true, id: result.lastInsertRowid, name, email }; + const result = db.query('INSERT INTO users (name, email) VALUES ($name, $email)').get({$name: name, $email: email}); + } catch (error) { + console.error(error); + return { success: false, error: 'Failed to create user' + (error as Error).message }; + } +} + +export function get_user(name: string) { + return db.query('SELECT * FROM users WHERE name = ?').get(name); +} + +export function get_all_pork() { + return db.query('SELECT * FROM pork_cuts').all(); +} + diff --git a/src/lib/index.ts b/src/lib/index.ts index 856f2b6..8879bd0 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1 +1,3 @@ // place files you want to import through the `$lib` alias in this folder. +export const RAW_COST = 6.5 +export const PROCESSED_COST = 7.5 \ No newline at end of file diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts new file mode 100644 index 0000000..1211079 --- /dev/null +++ b/src/routes/+layout.server.ts @@ -0,0 +1,7 @@ +import { get_all_users } from '$lib/db'; + +export async function load() { + return { + users: get_all_users(), + }; +} \ No newline at end of file diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..5b5295d --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,108 @@ + + +
+ {@render children()} +
+ + + + diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts new file mode 100644 index 0000000..2cbeda9 --- /dev/null +++ b/src/routes/+page.server.ts @@ -0,0 +1,24 @@ +import { get_all_users, create_user } from '$lib/db'; +import { fail, type Actions } from '@sveltejs/kit'; +import { marked } from 'marked'; + +export async function load() { + const users = await get_all_users(); + const html = marked.parse('# Marked in Node.js\n\nRendered by **marked**.'); + + return { users, html }; +} + +export const actions: Actions = { + default: async ({ request }: { request: Request }) => { + const formData = await request.formData(); + const name = formData.get('name'); + const email = formData.get('email'); + + if (!name || !email) { + return fail(400, { name, email, error: 'Name and email are required' }); + } + + return create_user(name as string, email as string); + } +}; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index cc88df0..eb3aaa3 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,2 +1,87 @@ -

Welcome to SvelteKit

-

Visit svelte.dev/docs/kit to read the documentation

+ + +
+

Add User

+ {#if form?.error} +

{form.error}

+ {/if} + +
{@html html}
+

User List

+ +
+ + diff --git a/src/routes/pork/+page.server.js b/src/routes/pork/+page.server.js new file mode 100644 index 0000000..4993870 --- /dev/null +++ b/src/routes/pork/+page.server.js @@ -0,0 +1,8 @@ +import { get_all_pork } from '$lib/db'; + +export async function load() { + return { + pork: get_all_pork() + } +} + diff --git a/src/routes/pork/+page.svelte b/src/routes/pork/+page.svelte new file mode 100644 index 0000000..75fbe6c --- /dev/null +++ b/src/routes/pork/+page.svelte @@ -0,0 +1,140 @@ + +
+

Pork

+ + + +
+
    +
  1. CutWeightStock
  2. + {#each data.pork as {name, raw_cut, preweighed, min_weight, max_weight, stock}} + {@const price_per_lb = raw_cut ? RAW_COST : PROCESSED_COST} +
  3. + {name} + {#if preweighed} + {min_weight} lb + {:else} + {min_weight} ~ ${max_weight} lbs + {/if} + {stock} +
  4. + {/each} +
+ {`Image +
+
+ + \ No newline at end of file diff --git a/src/routes/user/[user]/+page.server.ts b/src/routes/user/[user]/+page.server.ts new file mode 100644 index 0000000..2d17359 --- /dev/null +++ b/src/routes/user/[user]/+page.server.ts @@ -0,0 +1,7 @@ +import { get_user } from "$lib/db"; + +export async function load({ params }) { + const user = await get_user(params.user); + console.log(user); + return { user }; +} diff --git a/src/routes/user/[user]/+page.svelte b/src/routes/user/[user]/+page.svelte new file mode 100644 index 0000000..9fbdc79 --- /dev/null +++ b/src/routes/user/[user]/+page.svelte @@ -0,0 +1,16 @@ + +
+

{data.user.name}

+

{data.user.email}

+
diff --git a/static/font/EBGaramond-Initials.otf b/static/font/EBGaramond-Initials.otf new file mode 100644 index 0000000..220684e Binary files /dev/null and b/static/font/EBGaramond-Initials.otf differ diff --git a/static/font/EBGaramond-InitialsF1.otf b/static/font/EBGaramond-InitialsF1.otf new file mode 100644 index 0000000..b8683ff Binary files /dev/null and b/static/font/EBGaramond-InitialsF1.otf differ diff --git a/static/font/EBGaramond-InitialsF2.otf b/static/font/EBGaramond-InitialsF2.otf new file mode 100644 index 0000000..128bd7f Binary files /dev/null and b/static/font/EBGaramond-InitialsF2.otf differ diff --git a/static/font/EBGaramond08-Italic.otf b/static/font/EBGaramond08-Italic.otf new file mode 100644 index 0000000..00938e6 Binary files /dev/null and b/static/font/EBGaramond08-Italic.otf differ diff --git a/static/font/EBGaramond08-Regular.otf b/static/font/EBGaramond08-Regular.otf new file mode 100644 index 0000000..b0229f8 Binary files /dev/null and b/static/font/EBGaramond08-Regular.otf differ diff --git a/static/font/EBGaramond12-AllSC.otf b/static/font/EBGaramond12-AllSC.otf new file mode 100644 index 0000000..2882bdb Binary files /dev/null and b/static/font/EBGaramond12-AllSC.otf differ diff --git a/static/font/EBGaramond12-Italic.otf b/static/font/EBGaramond12-Italic.otf new file mode 100644 index 0000000..81845af Binary files /dev/null and b/static/font/EBGaramond12-Italic.otf differ diff --git a/static/font/EBGaramond12-Regular.otf b/static/font/EBGaramond12-Regular.otf new file mode 100644 index 0000000..6f26875 Binary files /dev/null and b/static/font/EBGaramond12-Regular.otf differ diff --git a/static/font/EBGaramondSC08-Regular.otf b/static/font/EBGaramondSC08-Regular.otf new file mode 100644 index 0000000..b71442b Binary files /dev/null and b/static/font/EBGaramondSC08-Regular.otf differ diff --git a/static/font/EBGaramondSC12-Regular.otf b/static/font/EBGaramondSC12-Regular.otf new file mode 100644 index 0000000..7912787 Binary files /dev/null and b/static/font/EBGaramondSC12-Regular.otf differ diff --git a/static/pattern.svg b/static/pattern.svg new file mode 100644 index 0000000..f951c78 --- /dev/null +++ b/static/pattern.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/svelte.config.js b/svelte.config.js index 1295460..1d5479b 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -1,4 +1,4 @@ -import adapter from '@sveltejs/adapter-auto'; +import adapter from 'svelte-adapter-bun'; import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; /** @type {import('@sveltejs/kit').Config} */ diff --git a/vite.config.ts b/vite.config.ts index bbf8c7d..0815516 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,5 +2,8 @@ import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ - plugins: [sveltekit()] + plugins: [sveltekit()], + server:{ + port: 4242 + } });