UX
- Add elapsed-time counter and Cancel button to in-flight generations,
wired through AbortController so partial responses are discarded
cleanly. The cancel action is available from both the input panel
and the results header.
- Add a Recent generations panel below the input. The last 6 successful
generations are saved to localStorage; one click reloads both the
input fields and the generated assets.
- Add a Revert button to every editable card. It appears the moment
the current value diverges from the last generated value and restores
the field with a single click.
- Add an Empty state to the right panel with a friendly hint pointing
at the Generate button and the Settings page.
- Add a 'Try an example' button that fills the input with a random
starter idea (idea + mood + vocals).
- Add Cmd/Ctrl+Enter as a keyboard shortcut to generate.
- Add a Footer with project info and a privacy reminder.
- Add a 'Clear saved key' button to the Settings page so the user can
remove the API key without overwriting it.
Bug fix
- Settings > Test Connection used to save the in-progress form values
to localStorage before testing. It now uses the in-memory candidate
config, so failed tests don't pollute the saved config.
Code quality
- Extract the duplicated useAutoHeight hook to src/lib/useAutoHeight.ts.
- Extract a useElapsed hook for the loading timer.
- Move InputValues into src/lib/types.ts (was duplicated in
InputPanel.tsx) and add SECTION_LABELS, replacing the humanizeSection
switch in HomePage.
- Centralize the filename sanitization: HomePage now calls
sanitizeFilename from zip.ts instead of duplicating the regex.
- Add previewConfig / testConnectionWithConfig helpers to llm.ts to
support in-memory connection tests.
Drop the Supabase backend and call the AI provider directly from the
browser. The endpoint URL, API key, and model name are stored in
localStorage and used for direct /chat/completions requests.
- src/lib/llm.ts: config persistence, direct fetch, JSON extraction,
shape validation, connection test
- src/lib/prompts.ts: full + partial-regeneration system prompts and
user-message builder
- src/lib/{api,supabase}.ts removed
- supabase/ directory removed
- @supabase/supabase-js dropped from package.json
- README updated to describe the standalone architecture and CORS caveats
- .gitignore: drop Supabase entries, exclude *.tsbuildinfo