From c12d55368c11dc9daa0d267140758dcdec2c2491 Mon Sep 17 00:00:00 2001 From: Till Heidrich Date: Thu, 23 Jul 2026 11:47:27 +0000 Subject: [PATCH] feat: upload/recipe/job API routes + Klarbild visual identity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - api: /uploads (multipart, HEIC, 25MB guard, S3), /recipes (GET/POST), /jobs (create+snapshot+enqueue, list), /jobs/:id (status+items), /jobs/:id/:action (pause/resume/cancel/retry-failed), /items/:id/retry - design: adopt Till mockup identity — Space Grotesk + Space Mono (self-hosted, no google/US), blue accent, paper/card, registration-mark motif; OKLCH tokens - verified: astro build passes --- package-lock.json | 20 +++++++ package.json | 2 + src/layouts/Base.astro | 13 +++-- src/pages/api/items/[id]/retry.ts | 18 +++++++ src/pages/api/jobs/[id].ts | 17 ++++++ src/pages/api/jobs/[id]/[action].ts | 41 ++++++++++++++ src/pages/api/jobs/index.ts | 61 +++++++++++++++++++++ src/pages/api/recipes.ts | 25 +++++++++ src/pages/api/uploads.ts | 50 +++++++++++++++++ src/styles/tokens.css | 84 ++++++++++++++--------------- 10 files changed, 285 insertions(+), 46 deletions(-) create mode 100644 src/pages/api/items/[id]/retry.ts create mode 100644 src/pages/api/jobs/[id].ts create mode 100644 src/pages/api/jobs/[id]/[action].ts create mode 100644 src/pages/api/jobs/index.ts create mode 100644 src/pages/api/recipes.ts create mode 100644 src/pages/api/uploads.ts diff --git a/package-lock.json b/package-lock.json index ec07c4c..468131e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,8 @@ "@astrojs/react": "^4.2.1", "@aws-sdk/client-s3": "^3.700.0", "@aws-sdk/s3-request-presigner": "^3.700.0", + "@fontsource/space-grotesk": "^5.1.0", + "@fontsource/space-mono": "^5.1.0", "archiver": "^7.0.1", "argon2": "^0.41.1", "astro": "^5.5.0", @@ -1163,6 +1165,24 @@ "node": ">=18" } }, + "node_modules/@fontsource/space-grotesk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/space-grotesk/-/space-grotesk-5.3.0.tgz", + "integrity": "sha512-ksnGizDPXIDuvqcTYTSrmZ+evx9sDlS8rp7+42BQ7wU+spt3twEoXfbJz672C+5CLg6VeUQwRy5RXshWb67LcQ==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/space-mono": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/space-mono/-/space-mono-5.3.0.tgz", + "integrity": "sha512-FrpBMOVWn3PRdRHlrZWC55X3kZG/2BTH7SM5ZyS/bky3iKya2BturI5lk+t0RoDQL2JyHzURsVq/EisCsxpI5A==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@grammyjs/types": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@grammyjs/types/-/types-4.0.0.tgz", diff --git a/package.json b/package.json index 3e83258..682e650 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,8 @@ "dependencies": { "@astrojs/node": "^9.1.3", "@astrojs/react": "^4.2.1", + "@fontsource/space-grotesk": "^5.1.0", + "@fontsource/space-mono": "^5.1.0", "@aws-sdk/client-s3": "^3.700.0", "@aws-sdk/s3-request-presigner": "^3.700.0", "archiver": "^7.0.1", diff --git a/src/layouts/Base.astro b/src/layouts/Base.astro index 20fa2eb..71fe977 100644 --- a/src/layouts/Base.astro +++ b/src/layouts/Base.astro @@ -1,4 +1,9 @@ --- +import '@fontsource/space-grotesk/400.css'; +import '@fontsource/space-grotesk/500.css'; +import '@fontsource/space-grotesk/700.css'; +import '@fontsource/space-mono/400.css'; +import '@fontsource/space-mono/700.css'; import '../styles/tokens.css'; interface Props { title?: string } const { title = 'Klarbild' } = Astro.props; @@ -15,7 +20,7 @@ const user = Astro.locals.user; {user && (
- Klarbild + klarbild