ワンクリックで
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