feat: Studio UI (upload/recipe/submit island) + queue view + library/file API
- StudioApp.tsx: upload (file/DnD/paste, HEIC, to /api/uploads), combinable task toggles with validation (contour needs cutout, freistellen+theframe blocked), format+orientation+live px+crop, contour mm, custom instruction, delivery, recipe prefill - QueueApp.tsx + warteschlange.astro: live polling, progress+ETA, per-item status, retry/pause/resume/cancel, result thumbnails+download - api/items (library filters), api/items/:id/file (stream result/source from S3) - index.astro renders Studio island
This commit is contained in:
+4
-16
@@ -1,21 +1,9 @@
|
||||
---
|
||||
import Base from '../layouts/Base.astro';
|
||||
const user = Astro.locals.user!;
|
||||
import StudioApp from '../components/StudioApp.tsx';
|
||||
import { query } from '../lib/db';
|
||||
const recipes = await query('SELECT * FROM recipes ORDER BY is_default DESC, name').catch(() => []);
|
||||
---
|
||||
<Base title="Studio · Klarbild">
|
||||
<section>
|
||||
<h1 class="display">Studio</h1>
|
||||
<p class="lead">Willkommen, {user.name}. Ziehe Screenshots herein, wähle ein Rezept — Klarbild macht daraus druckfertige Bilder.</p>
|
||||
<div class="soon card">
|
||||
<strong>Aufbau läuft.</strong>
|
||||
<p>Das Fundament steht (Login, Datenbank, Objektspeicher, Health). Als Nächstes: Upload, Rezepte, Warteschlange und die Bildpipeline.</p>
|
||||
</div>
|
||||
</section>
|
||||
<style>
|
||||
.display { font-family: var(--font-display); font-size: 2rem; margin: 8px 0 6px; letter-spacing: -0.02em; }
|
||||
.lead { color: var(--ink-soft); max-width: 60ch; }
|
||||
.card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius);
|
||||
padding: 20px; box-shadow: var(--shadow); margin-top: 20px; max-width: 60ch; }
|
||||
.card p { color: var(--ink-mute); margin: 6px 0 0; }
|
||||
</style>
|
||||
<StudioApp client:load recipes={recipes} />
|
||||
</Base>
|
||||
|
||||
Reference in New Issue
Block a user