{ "title": "Storage Example", "description": "Demonstrates IndexedDB + Spark KV hybrid storage", "counter": { "title": "Simple Counter (useStorage)", "incrementButton": "Increment", "helper": "This counter persists across page refreshes using hybrid storage" }, "todo": { "title": "Todo List (useStorage)", "placeholder": "Enter todo...", "addButton": "Add", "emptyState": "No todos yet. Add one above!", "deleteButton": "Delete", "footer": "Todos are stored in IndexedDB with Spark KV fallback" }, "howItWorks": { "title": "How It Works", "steps": [ { "title": "1. Primary: IndexedDB", "description": "Data is first saved to IndexedDB for fast, structured storage with indexes" }, { "title": "2. Fallback: Spark KV", "description": "If IndexedDB fails or is unavailable, Spark KV is used automatically" }, { "title": "3. Sync Both", "description": "Data is kept in sync between both storage systems for redundancy" } ], "codeExampleTitle": "Code Example:", "codeSample": "import { useStorage } from '@/hooks/use-storage'\n\n// Replaces useKV from Spark\nconst [todos, setTodos] = useStorage('todos', [])\n\n// Use functional updates for safety\nsetTodos((current) => [...current, newTodo])" } }