Feature Spec
Related feature document: docs/features/18-indexeddb-project-persistence.md
Goal
Persist the active browser project locally with IndexedDB so refresh/reopen restores project state and imported sample data.
Context
Project data must remain serializable. Runtime audio objects such as AudioBuffer, AudioNode, object URLs, and decoded caches must not be stored in project JSON.
Scope
Included:
- Versioned active project document storage.
- Imported sample blob storage keyed by stable sample IDs.
- Startup restore of the last active project.
- Debounced autosave.
- Minimal save status and storage error feedback.
Excluded:
- Cloud sync.
- Multi-project dashboard.
- File export/import.
- Final audio rendering/export.
Constraints
- Keep persistence separate from React rendering and audio scheduling.
- Do not store runtime audio objects in project JSON.
- Do not make the audio engine depend on IndexedDB.
Done when
- Refresh restores the active project.
- Imported WAV clips can survive refresh when saved successfully.
- Storage failure is visible and does not corrupt in-memory state.
Verification
- npm run typecheck --if-present
- npm run lint --if-present
- npm run test --if-present
- npm run build --if-present
Notes
Planning created from the agentic workflow discuss-feature process.
Feature Spec
Related feature document: docs/features/18-indexeddb-project-persistence.md
Goal
Persist the active browser project locally with IndexedDB so refresh/reopen restores project state and imported sample data.
Context
Project data must remain serializable. Runtime audio objects such as AudioBuffer, AudioNode, object URLs, and decoded caches must not be stored in project JSON.
Scope
Included:
Excluded:
Constraints
Done when
Verification
Notes
Planning created from the agentic workflow discuss-feature process.