[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K1EM7DGGWGHW47DXSC8SSF":3,"skill-same:01M6K1EM7DGGWGHW47DXSC8SSF":94},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":6,"ownerHtmlUrl":62,"ownerBlogUrl":63,"ownerDescription":64,"updatedAt":65,"install":66,"resources":79},"01M6K1EM7DGGWGHW47DXSC8SSF","supabase-usage",null,"This skill should be used when user asks to \"query Supabase\", \"list Supabase tables\", \"get Supabase schema\", \"search Supabase records\", \"check Supabase database\", \"Supabase auth\", \"Supabase authentication\", \"RLS policy\", \"row level security\", \"Supabase foreign key\", \"table relationships\", \"Supabase join\", \"Supabase filter\", \"Supabase pagination\", or needs guidance on Supabase database patterns, auth flows, RLS policies, or query best practices.","NagyVikt\u002Fcodex-plugins","NagyVikt","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F137165288?v=4","01M6K0SJ3R2DAZRJKJJS10VN87","Viktor Nagy","01M6K0SJ9HXN0GBD91QDQ9WNVV",2,"MIT","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsupabase\u002Fskills\u002Fsupabase-usage\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"supabase usage","usage","supabase","references","flows","rls","records","filter","join","get","query","policy","pagination","schema","check","search","database","best practices","authentication","auth","2026-11-10 10:12:30",false,"---\nname: supabase-usage\ndescription: This skill should be used when user asks to \"query Supabase\", \"list Supabase tables\", \"get Supabase schema\", \"search Supabase records\", \"check Supabase database\", \"Supabase auth\", \"Supabase authentication\", \"RLS policy\", \"row level security\", \"Supabase foreign key\", \"table relationships\", \"Supabase join\", \"Supabase filter\", \"Supabase pagination\", or needs guidance on Supabase database patterns, auth flows, RLS policies, or query best practices.\nreferences:\n  - references\u002Fauth.md\n  - references\u002Frls.md\n  - references\u002Frelationships.md\n  - references\u002Fquery-patterns.md\n---\n\n# Supabase Database Patterns\n\nPatterns for working with Supabase databases including Auth, Row Level Security, table relationships, and query best practices.\n\n## Overview\n\n- **MCP Tools**: Query and explore database structure\n- **Authentication**: User management, sessions, auth tables\n- **Row Level Security**: Policy patterns for data access control\n- **Table Relationships**: Foreign keys, joins, nested queries\n- **Query Patterns**: Filtering, pagination, performance\n\n## MCP Tools\n\nAvailable tools for database exploration:\n\n- `mcp__supabase__list_tables` - List all tables in the database\n- `mcp__supabase__get_table_schema` - Get schema for a specific table\n- `mcp__supabase__execute_sql` - Run read-only SQL queries\n\n**Workflow:**\n\n1. Start with `list_tables` to understand database structure\n2. Use `get_table_schema` to inspect columns and types\n3. Use `execute_sql` for custom queries (read-only)\n\n---\n\n## Best Practices\n\n### DO\n\n- Enable RLS on all public tables\n- Use `(select auth.uid())` in RLS policies for performance\n- Add indexes on RLS-checked columns\n- Specify roles with `TO authenticated` in policies\n- Use `on delete cascade` for foreign keys to `auth.users`\n- Use cursor-based pagination for large datasets\n- Select only needed columns: `.select('id, name')` not `.select('*')`\n\n### DON'T\n\n- Store sensitive data without RLS\n- Use `auth.uid()` directly in policies (use `(select auth.uid())`)\n- Create policies without specifying roles\n- Forget indexes on frequently filtered columns\n- Use offset pagination for deep pages (>1000 rows)\n- Expose `auth.users` directly via API (use a public profiles table)\n\n---\n\n## Quick Reference\n\n### Common Filters\n\n| Filter           | JavaScript               | Python                   |\n| ---------------- | ------------------------ | ------------------------ |\n| Equals           | `.eq('col', val)`        | `.eq(\"col\", val)`        |\n| Not equals       | `.neq('col', val)`       | `.neq(\"col\", val)`       |\n| Greater than     | `.gt('col', val)`        | `.gt(\"col\", val)`        |\n| Greater or equal | `.gte('col', val)`       | `.gte(\"col\", val)`       |\n| Less than        | `.lt('col', val)`        | `.lt(\"col\", val)`        |\n| Less or equal    | `.lte('col', val)`       | `.lte(\"col\", val)`       |\n| Pattern match    | `.ilike('col', '%val%')` | `.ilike(\"col\", \"%val%\")` |\n| In list          | `.in('col', [a,b])`      | `.in_(\"col\", [a,b])`     |\n| Is null          | `.is('col', null)`       | `.is_(\"col\", \"null\")`    |\n| OR               | `.or('a.eq.1,b.eq.2')`   | `.or_(\"a.eq.1,b.eq.2\")`  |\n\n### Auth Tables Quick Reference\n\n| Table             | Key Columns                                                       |\n| ----------------- | ----------------------------------------------------------------- |\n| `auth.users`      | id, email, phone, created_at, last_sign_in_at, raw_user_meta_data  |\n| `auth.sessions`   | id, user_id, created_at, updated_at                               |\n| `auth.identities` | id, user_id, provider, identity_data                              |\n\n### RLS Policy Template\n\n```sql\ncreate policy \"policy_name\" on table_name\nto authenticated  -- or anon, or specific role\nfor select        -- select, insert, update, delete, or all\nusing ( (select auth.uid()) = user_id )\nwith check ( (select auth.uid()) = user_id );  -- for insert\u002Fupdate\n```\n\n---\n\n## Additional Resources\n\nFor detailed patterns and code examples, consult:\n\n- **`references\u002Fauth.md`** - Authentication with JS\u002FPython SDK, user profiles\n- **`references\u002Frls.md`** - Row Level Security policies and performance tips\n- **`references\u002Frelationships.md`** - Table relationships and nested queries\n- **`references\u002Fquery-patterns.md`** - Filtering, pagination, counting, indexes\n","# Supabase Database Patterns\n\nPatterns for working with Supabase databases including Auth, Row Level Security, table relationships, and query best practices.\n\n## Overview\n\n- **MCP Tools**: Query and explore database structure\n- **Authentication**: User management, sessions, auth tables\n- **Row Level Security**: Policy patterns for data access control\n- **Table Relationships**: Foreign keys, joins, nested queries\n- **Query Patterns**: Filtering, pagination, performance\n\n## MCP Tools\n\nAvailable tools for database exploration:\n\n- `mcp__supabase__list_tables` - List all tables in the database\n- `mcp__supabase__get_table_schema` - Get schema for a specific table\n- `mcp__supabase__execute_sql` - Run read-only SQL queries\n\n**Workflow:**\n\n1. Start with `list_tables` to understand database structure\n2. Use `get_table_schema` to inspect columns and types\n3. Use `execute_sql` for custom queries (read-only)\n\n---\n\n## Best Practices\n\n### DO\n\n- Enable RLS on all public tables\n- Use `(select auth.uid())` in RLS policies for performance\n- Add indexes on RLS-checked columns\n- Specify roles with `TO authenticated` in policies\n- Use `on delete cascade` for foreign keys to `auth.users`\n- Use cursor-based pagination for large datasets\n- Select only needed columns: `.select('id, name')` not `.select('*')`\n\n### DON'T\n\n- Store sensitive data without RLS\n- Use `auth.uid()` directly in policies (use `(select auth.uid())`)\n- Create policies without specifying roles\n- Forget indexes on frequently filtered columns\n- Use offset pagination for deep pages (>1000 rows)\n- Expose `auth.users` directly via API (use a public profiles table)\n\n---\n\n## Quick Reference\n\n### Common Filters\n\n| Filter           | JavaScript               | Python                   |\n| ---------------- | ------------------------ | ------------------------ |\n| Equals           | `.eq('col', val)`        | `.eq(\"col\", val)`        |\n| Not equals       | `.neq('col', val)`       | `.neq(\"col\", val)`       |\n| Greater than     | `.gt('col', val)`        | `.gt(\"col\", val)`        |\n| Greater or equal | `.gte('col', val)`       | `.gte(\"col\", val)`       |\n| Less than        | `.lt('col', val)`        | `.lt(\"col\", val)`        |\n| Less or equal    | `.lte('col', val)`       | `.lte(\"col\", val)`       |\n| Pattern match    | `.ilike('col', '%val%')` | `.ilike(\"col\", \"%val%\")` |\n| In list          | `.in('col', [a,b])`      | `.in_(\"col\", [a,b])`     |\n| Is null          | `.is('col', null)`       | `.is_(\"col\", \"null\")`    |\n| OR               | `.or('a.eq.1,b.eq.2')`   | `.or_(\"a.eq.1,b.eq.2\")`  |\n\n### Auth Tables Quick Reference\n\n| Table             | Key Columns                                                       |\n| ----------------- | ----------------------------------------------------------------- |\n| `auth.users`      | id, email, phone, created_at, last_sign_in_at, raw_user_meta_data  |\n| `auth.sessions`   | id, user_id, created_at, updated_at                               |\n| `auth.identities` | id, user_id, provider, identity_data                              |\n\n### RLS Policy Template\n\n```sql\ncreate policy \"policy_name\" on table_name\nto authenticated  -- or anon, or specific role\nfor select        -- select, insert, update, delete, or all\nusing ( (select auth.uid()) = user_id )\nwith check ( (select auth.uid()) = user_id );  -- for insert\u002Fupdate\n```\n\n---\n\n## Additional Resources\n\nFor detailed patterns and code examples, consult:\n\n- **`references\u002Fauth.md`** - Authentication with JS\u002FPython SDK, user profiles\n- **`references\u002Frls.md`** - Row Level Security policies and performance tips\n- **`references\u002Frelationships.md`** - Table relationships and nested queries\n- **`references\u002Fquery-patterns.md`** - Filtering, pagination, counting, indexes\n",{"name":5,"references":52,"description":7},[53,54,55,56],"references\u002Fauth.md","references\u002Frls.md","references\u002Frelationships.md","references\u002Fquery-patterns.md","main","9a4409c8751439c3aeeea2bc3940ba05dc3cd3b5","plugins\u002Fsupabase\u002Fskills\u002Fsupabase-usage",0,"https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins","https:\u002F\u002Fgithub.com\u002FNagyVikt","https:\u002F\u002Fwebu.hu\u002F","Codex is a tool they said...\r\n\r\nCreator of GitGuardex, CueCards. Tech stack: Next.js · TypeScript · Rust · Linux. ","2026-03-30 02:19:53",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add NagyVikt\u002Fcodex-plugins --skill supabase-usage",{"tool":72,"command":73},"bunx","bunx skills add NagyVikt\u002Fcodex-plugins --skill supabase-usage",{"tool":75,"command":76},"pnpm","pnpm dlx skills add NagyVikt\u002Fcodex-plugins --skill supabase-usage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsupabase\u002Fskills\u002Fsupabase-usage\u002FSKILL.md",true,[80,85,88,91],{"path":53,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"REFERENCE","参考文档",2228,"https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsupabase\u002Fskills\u002Fsupabase-usage\u002Freferences\u002Fauth.md",{"path":56,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":86,"sourceHtmlUrl":87},3952,"https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsupabase\u002Fskills\u002Fsupabase-usage\u002Freferences\u002Fquery-patterns.md",{"path":55,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":89,"sourceHtmlUrl":90},1792,"https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsupabase\u002Fskills\u002Fsupabase-usage\u002Freferences\u002Frelationships.md",{"path":54,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":92,"sourceHtmlUrl":93},2462,"https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsupabase\u002Fskills\u002Fsupabase-usage\u002Freferences\u002Frls.md",[95,131,164,187,215,237],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":111,"publishedAt":47},"01M6K1ZEN8P9R2S6NPNJNJ8JVH","workflow","Vercel Workflow DevKit (WDK) expert guidance. Use when building durable workflows, long-running tasks, API routes or agents that need pause\u002Fresume, retries, step-based execution, or crash-safe orchestration with Vercel Workflow.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fworkflow\u002FSKILL.md",[101,102,103,108],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":104,"categoryName":105,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":109,"categoryName":110,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000038","人力资源",[97,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130],"workflows","create","run","streaming","logs","start","why","loop","wait for","branch","auto","log","conversation","human","lib","condition","rendering","retries","sleep",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":147,"publishedAt":47},"01M6K1Z71NWFSPHK2VJJ73MVSY","verification","Full-story verification — infers what the user is building, then verifies the complete flow end-to-end: browser → API → data → response. Triggers on dev server start and 'why isn't this working' signals.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fverification\u002FSKILL.md",[137,140,141,144],{"categoryNo":138,"categoryName":139,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":142,"categoryName":143,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000031","产品经理",{"categoryNo":145,"categoryName":146,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000033","数据分析师",[133,46,115,148,149,150,121,151,152,153,154,155,156,157,158,159,160,161,162,163],"routing middleware","api","projects","user story","full stack","jest","local","project","end","app","false","unit","error","middleware","loading","unit test",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":171,"publishedAt":47},"01M6K1YPRYJS3BQEDP8HKBHPEJ","vercel-storage","Vercel storage expert guidance — Blob, Edge Config, and Marketplace storage (Neon Postgres, Upstash Redis). Use when choosing, configuring, or using data storage with Vercel applications.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-storage\u002FSKILL.md",[170],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[172,173,174,175,114,29,176,122,177,178,179,180,181,182,157,126,183,184,185,186],"storage","vercel storage","vercel","config","migrate","router","clerk","expert","prisma","connection pooling","neon","turso","upstash","URL","auth0",{"skillNo":188,"name":189,"nameZh":6,"description":190,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":191,"categories":192,"keywords":200,"publishedAt":47},"01M6K1YFEP0GPPGMQ3D0FPTS27","vercel-services","Vercel Services — deploy multiple services within a single Vercel project. Use for monorepo layouts or when combining a backend (Python, Go) with a frontend (Next.js, Vite) in one deployment.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-services\u002FSKILL.md",[193,196,197],{"categoryNo":194,"categoryName":195,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":198,"categoryName":199,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",[201,202,174,203,204,205,206,207,208,209,210,57,211,212,155,36,157,213,160,214],"vercel services","services","frontend","docker compose","SET","configure","monorepo","go api","fastapi","up","aws lambda","go backend","apps","python backend",{"skillNo":216,"name":217,"nameZh":6,"description":218,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":219,"categories":220,"keywords":221,"publishedAt":47},"01M6K1Y8S3CRD43DPKX0PK1MTT","vercel-sandbox","Vercel Sandbox guidance — ephemeral Firecracker microVMs for running untrusted code safely. Supports AI agents, code generation, and experimentation. Use when executing user-generated or AI-generated code in isolation.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-sandbox\u002FSKILL.md",[],[222,223,174,224,225,113,114,226,227,228,229,230,231,232,233,234,162,235,217,236],"sandbox","vercel sandbox","safe","ai agents","code","ai sdk","Code Generation","playground","generated","spawn","install","runner","io","child","student",{"skillNo":238,"name":239,"nameZh":6,"description":240,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":241,"categories":242,"keywords":244,"publishedAt":47},"01M6K1Y1J8S7AN97H75SHBGF7J","vercel-queues","Vercel Queues guidance (public beta) — durable event streaming with topics, consumer groups, retries, and delayed delivery. $0.60\u002F1M ops. Powers Workflow DevKit. Use when building async processing, fan-out patterns, or event-driven architectures.","https:\u002F\u002Fgithub.com\u002FNagyVikt\u002Fcodex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-queues\u002FSKILL.md",[243],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[245,174,97,112,115,246,205,149,206,210,247,248,249,250,157,126,251,129,162,252],"vercel queues","beta","message","delivery","across","worker","processing","at"]