Skip to content

IndexedDB project persistence #47

Description

@britle20

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions