diff --git a/docker-compose.yml b/docker-compose.yml
index 4ec4f3d..d7f8641 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -5,6 +5,8 @@ services:
dockerfile: Dockerfile
container_name: platform-frontend-v2
restart: unless-stopped
+ volumes:
+ - ./screenshots:/app/screenshots
environment:
- ORIGIN=${PLATFORM_V2_ORIGIN:-https://dash.quadjourney.com}
- GATEWAY_URL=http://gateway:8100
diff --git a/frontend-v2/src/routes/(app)/upload/+page.svelte b/frontend-v2/src/routes/(app)/upload/+page.svelte
new file mode 100644
index 0000000..0633003
--- /dev/null
+++ b/frontend-v2/src/routes/(app)/upload/+page.svelte
@@ -0,0 +1,117 @@
+
+
+
+
+
+
{ e.preventDefault(); dragOver = true; }}
+ ondragleave={() => dragOver = false}
+ ondrop={handleDrop}
+>
+
+ {#if uploading}
+
Uploading...
+ {:else if lastFile}
+
+
Saved
+
{lastFile}
+
+
+ {:else}
+
+
+
Drop a file, paste a screenshot, or click to upload
+
+
+ {/if}
+
+
+
+
diff --git a/frontend-v2/src/routes/(app)/upload/+server.ts b/frontend-v2/src/routes/(app)/upload/+server.ts
new file mode 100644
index 0000000..d12a182
--- /dev/null
+++ b/frontend-v2/src/routes/(app)/upload/+server.ts
@@ -0,0 +1,25 @@
+import { json } from '@sveltejs/kit';
+import type { RequestHandler } from './$types';
+import fs from 'fs';
+import path from 'path';
+
+const UPLOAD_DIR = '/app/screenshots';
+
+export const POST: RequestHandler = async ({ request }) => {
+ const formData = await request.formData();
+ const file = formData.get('file') as File;
+ if (!file) return json({ error: 'No file' }, { status: 400 });
+
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
+ const ext = file.name.split('.').pop() || 'png';
+ const filename = `${timestamp}.${ext}`;
+
+ const buffer = Buffer.from(await file.arrayBuffer());
+
+ // Ensure directory exists
+ if (!fs.existsSync(UPLOAD_DIR)) fs.mkdirSync(UPLOAD_DIR, { recursive: true });
+
+ fs.writeFileSync(path.join(UPLOAD_DIR, filename), buffer);
+
+ return json({ ok: true, filename, path: `/app/screenshots/${filename}` });
+};