diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..3a8214c --- /dev/null +++ b/.env.example @@ -0,0 +1,15 @@ +# Gemini +GEMINI_API_KEY= +GEMINI_TEXT_MODEL=gemini-2.5-flash-lite + +# Image generation +# IMAGE_PROVIDER: openai | gemini | mock +# mock = instant placeholder images, zero API calls (develop without burning quota) +IMAGE_PROVIDER=openai +OPENAI_API_KEY= +OPENAI_IMAGE_MODEL=gpt-image-1 +OPENAI_IMAGE_SIZE=1024x1024 +GEMINI_IMAGE_MODEL=gemini-3.1-flash-image + +# Kakao REST API (used later for /map) +KAKAO_REST_API_KEY= diff --git a/package-lock.json b/package-lock.json index e0ca8dd..544ff97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,10 @@ "": { "name": "ai-florist", "version": "0.0.1", + "dependencies": { + "@google/generative-ai": "^0.24.1", + "openai": "^6.42.0" + }, "devDependencies": { "@eslint/compat": "^2.0.4", "@eslint/js": "^10.0.1", @@ -210,6 +214,15 @@ "node": "^20.19.0 || ^22.13.0 || >=24" } }, + "node_modules/@google/generative-ai": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.24.1.tgz", + "integrity": "sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@humanfs/core": { "version": "0.19.2", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", @@ -2137,6 +2150,24 @@ ], "license": "MIT" }, + "node_modules/openai": { + "version": "6.42.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.42.0.tgz", + "integrity": "sha512-1WFEt/uXMXOLhYRNkgJWo08Y2YNvNwpVU72K7ibrWgWpNOXd4VojXLbe6SQ4bLiUQ3Y8jz4IiyVkylJCL1DtZg==", + "license": "Apache-2.0", + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", diff --git a/package.json b/package.json index 86988e4..517f28b 100644 --- a/package.json +++ b/package.json @@ -29,5 +29,9 @@ "svelte": "^5.55.2", "tailwindcss": "^4.2.2", "vite": "^8.0.7" + }, + "dependencies": { + "@google/generative-ai": "^0.24.1", + "openai": "^6.42.0" } } diff --git a/src/lib/components/ui/Button.svelte b/src/lib/components/ui/Button.svelte index e7655ec..dfe9fbb 100644 --- a/src/lib/components/ui/Button.svelte +++ b/src/lib/components/ui/Button.svelte @@ -1,7 +1,7 @@ - + {@render children()} diff --git a/src/lib/components/ui/Header.svelte b/src/lib/components/ui/Header.svelte index de87fe0..f614129 100644 --- a/src/lib/components/ui/Header.svelte +++ b/src/lib/components/ui/Header.svelte @@ -1,6 +1,6 @@ diff --git a/src/lib/components/ui/upload/MoodboardGrid.svelte b/src/lib/components/ui/upload/MoodboardGrid.svelte index abb3f3b..8f5150e 100644 --- a/src/lib/components/ui/upload/MoodboardGrid.svelte +++ b/src/lib/components/ui/upload/MoodboardGrid.svelte @@ -1,23 +1,70 @@ - - {#each tiles as tile (tile.key)} - - {/each} + + + + +