원클릭으로
dexie
Dexie.js usage in a local-first Next.js + React + TypeScript app (IndexedDB wrapper, useLiveQuery, schema versioning, migrations)
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Dexie.js usage in a local-first Next.js + React + TypeScript app (IndexedDB wrapper, useLiveQuery, schema versioning, migrations)
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Scaffold, revise and manage custom ACF Gutenberg blocks for WordPress with Tailwind CSS. Use when the user wants to create a new block, revise/audit blocks, or set up a WordPress blocks project.
Scaffold one or more ACF Gutenberg blocks from GitHub issues, a markdown brief, or interactive prompts. Generates block.json, fields.json, render.php, and optional view.js.
Discuss a new block's purpose and requirements with the user, then create a GitHub issue with a structured breakdown ready for /wp-acf-blocks:add-block.
Deep AI audit of all blocks or specific blocks — runs structural checks first, then uses AI to review content quality, descriptions, grammar, admin render justification, wrapper usage, and empty-state messages.
Fast structural audit of all blocks or specific blocks — checks required files, wrapper attributes, fields.json timestamp, previewImage, viewScript. No AI, runs instantly via script.
Set up a new WordPress theme with the wp-acf-blocks block development workflow
| name | dexie |
| description | Dexie.js usage in a local-first Next.js + React + TypeScript app (IndexedDB wrapper, useLiveQuery, schema versioning, migrations) |
| when_to_use | When the user works with Dexie.js — setting up a database, defining schemas, querying, reacting to data changes in React, or migrating existing data |
| allowed-tools | Read, Edit, Write, Bash, Glob, Grep |
useLiveQuery() auto-rerenders React components on data changes (no extra state management).upgrade() handles migrations for existing user dataTable<T, PrimaryKey> — full TypeScript supportpnpm add dexie dexie-react-hooks
lib/db.ts)import Dexie, { type Table } from 'dexie';
export interface Item {
id?: number;
name: string;
createdAt: number;
}
class AppDatabase extends Dexie {
items!: Table<Item, number>;
constructor() {
super('AppDatabase');
this.version(1).stores({
items: '++id, name',
});
}
}
export const db = new AppDatabase();
++id — auto-increment primary keythis.version(1).stores({ items: '++id, name' });
this.version(2).stores({ items: '++id, name, category' }).upgrade(tx =>
tx.table('items').toCollection().modify(item => {
item.category = item.category ?? 'uncategorized';
})
);
.modify() mutates in place; return value is ignoredconst all = await db.items.toArray();
const filtered = await db.items.where('name').equals('foo').toArray();
const sorted = await db.items.orderBy('createdAt').toArray();
const one = await db.items.get(id);
const id = await db.items.add({ name: 'Foo', createdAt: Date.now() });
await db.items.update(id, { name: 'Bar' });
await db.items.put({ id: 1, name: 'Bar', createdAt: Date.now() }); // upsert
await db.items.delete(id);
useLiveQueryimport { useLiveQuery } from 'dexie-react-hooks';
import { db } from '@/lib/db';
export function ItemList() {
const items = useLiveQuery(() => db.items.toArray(), []);
if (!items) return <p>Loading…</p>;
return <ul>{items.map(i => <li key={i.id}>{i.name}</li>)}</ul>;
}
undefined on first render — use as loading stateawait db.transaction('rw', db.items, async () => {
await db.items.add({ ... });
await db.items.update(someId, { ... });
});
'use client' directive or guard with typeof window !== 'undefined'db.* in server components or static data-fetching functionsuseLiveQuery returns undefined initially — always handle the loading state'[field1+field2]' in .stores() for multi-field queriesdb.items.bulkAdd([...]) / db.items.bulkDelete([...]) for batch writes