[{"data":1,"prerenderedAt":328},["ShallowReactive",2],{"navigation_docs":3,"-ai-skills":101,"-ai-skills-surround":325},[4,55,73,91],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":54},"Guides","i-lucide-book-open","\u002Fguides","1.guides",[10,14,18,22,26,30,34,38,42,46,50],{"title":11,"path":12,"stem":13},"Introduction","\u002Fguides\u002Fintroduction","1.guides\u002F0.introduction",{"title":15,"path":16,"stem":17},"Data","\u002Fguides\u002Fdata","1.guides\u002F1.data",{"title":19,"path":20,"stem":21},"Forms","\u002Fguides\u002Fform","1.guides\u002F2.form",{"title":23,"path":24,"stem":25},"List","\u002Fguides\u002Flist","1.guides\u002F3.list",{"title":27,"path":28,"stem":29},"Authentication","\u002Fguides\u002Fauthentication","1.guides\u002F4.authentication",{"title":31,"path":32,"stem":33},"Authorization","\u002Fguides\u002Fauthorization","1.guides\u002F5.authorization",{"title":35,"path":36,"stem":37},"Notifications","\u002Fguides\u002Fnotifications","1.guides\u002F6.notifications",{"title":39,"path":40,"stem":41},"Realtime","\u002Fguides\u002Frealtime","1.guides\u002F7.realtime",{"title":43,"path":44,"stem":45},"Router","\u002Fguides\u002Frouter","1.guides\u002F8.router",{"title":47,"path":48,"stem":49},"I18n","\u002Fguides\u002Fi18n","1.guides\u002F9.i18n",{"title":51,"path":52,"stem":53},"Resources","\u002Fguides\u002Fresources","1.guides\u002F99.resources",false,{"title":56,"icon":57,"path":58,"stem":59,"children":60,"page":54},"Integrations","i-lucide-blocks","\u002Fintegrations","2.integrations",[61,65,69],{"title":62,"path":63,"stem":64},"Vue","\u002Fintegrations\u002Fvue","2.integrations\u002F0.vue",{"title":66,"path":67,"stem":68},"Nuxt","\u002Fintegrations\u002Fnuxt","2.integrations\u002F1.nuxt",{"title":70,"path":71,"stem":72},"Svelte","\u002Fintegrations\u002Fsvelte","2.integrations\u002F2.svelte",{"title":74,"icon":75,"path":76,"stem":77,"children":78,"page":54},"Backend","i-lucide-server","\u002Fbackend","3.backend",[79,83,87],{"title":80,"path":81,"stem":82},"Directus","\u002Fbackend\u002Fdirectus","3.backend\u002F0.directus",{"title":84,"path":85,"stem":86},"Supabase","\u002Fbackend\u002Fsupabase","3.backend\u002F1.supabase",{"title":88,"path":89,"stem":90},"RESTful API","\u002Fbackend\u002Frest-api","3.backend\u002F9.rest-api",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":54},"AI","i-lucide-sparkles","\u002Fai","4.ai",[97],{"title":98,"path":99,"stem":100},"Agent Skills","\u002Fai\u002Fskills","4.ai\u002F0.skills",{"id":102,"title":98,"body":103,"description":318,"extension":319,"links":320,"meta":321,"navigation":322,"path":99,"seo":323,"stem":100,"__hash__":324},"docs\u002F4.ai\u002F0.skills.md",{"type":104,"value":105,"toc":305},"minimark",[106,117,122,125,128,158,162,167,183,187,201,205,222,226,246,250,258,262,265,271,277,283,289,295,301],[107,108,109,110,116],"p",{},"Ginjou includes an ",[111,112,98],"a",{"href":113,"rel":114},"https:\u002F\u002Fagentskills.io\u002Fhome",[115],"nofollow"," package. It\nteaches AI assistants how to help you build CRUD apps, wire backends, and set up\nproviders — using verified references instead of guessing.",[118,119,121],"h2",{"id":120},"install","Install",[107,123,124],{},"Compatible agents (Cursor, Claude Code, etc.) pick up skills automatically.",[107,126,127],{},"To install manually:",[129,130,136],"pre",{"className":131,"code":132,"filename":133,"language":134,"meta":135,"style":135},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","npx skills add https:\u002F\u002Fgithub.com\u002Faa900031\u002Fginjou\n","Terminal","bash","",[137,138,139],"code",{"__ignoreMap":135},[140,141,144,148,152,155],"span",{"class":142,"line":143},"line",1,[140,145,147],{"class":146},"sR7ES","npx",[140,149,151],{"class":150},"sLACW"," skills",[140,153,154],{"class":150}," add",[140,156,157],{"class":150}," https:\u002F\u002Fgithub.com\u002Faa900031\u002Fginjou\n",[118,159,161],{"id":160},"what-the-skill-does","What the Skill Does",[163,164,166],"h3",{"id":165},"build-crud-pages","Build CRUD Pages",[168,169,170,174,177,180],"ul",{},[171,172,173],"li",{},"Scaffold list, show, create, and edit pages",[171,175,176],{},"Set up pagination, sorting, and filtering",[171,178,179],{},"Choose the right mutation mode (optimistic, undoable, pessimistic)",[171,181,182],{},"Load options for select fields",[163,184,186],{"id":185},"set-up-your-backend","Set Up Your Backend",[168,188,189,192,195,198],{},[171,190,191],{},"Walk through REST API adapter setup",[171,193,194],{},"Configure Supabase data provider",[171,196,197],{},"Configure Directus data provider",[171,199,200],{},"Warn about backend-specific limitations",[163,202,204],{"id":203},"match-your-framework","Match Your Framework",[168,206,207,210,213,216,219],{},[171,208,209],{},"Provide Vue 3 composables and context setup",[171,211,212],{},"Guide Nuxt 3\u002F4 module configuration",[171,214,215],{},"Handle SSR data fetching patterns",[171,217,218],{},"Guide Svelte 5 rune-based setup with @ginjou\u002Fsvelte",[171,220,221],{},"Respect the layered architecture (core → Vue → Nuxt → Svelte)",[163,223,225],{"id":224},"auth-realtime-and-more","Auth, Realtime, and More",[168,227,228,231,234,237,240,243],{},[171,229,230],{},"Wire authentication providers and login flows",[171,232,233],{},"Set up access control rules",[171,235,236],{},"Add realtime subscriptions to pages",[171,238,239],{},"Configure notifications and undoable actions",[171,241,242],{},"Map routes to resources",[171,244,245],{},"Set up i18n translations",[118,247,249],{"id":248},"directory-structure","Directory Structure",[129,251,256],{"className":252,"code":254,"language":255},[253],"language-text","skills\u002F\n└── ginjou\u002F\n    ├── SKILL.md\n    └── references\u002F\n        ├── core\u002F\n        │   ├── setup.md\n        │   ├── controllers.md\n        │   ├── data-flow.md\n        │   ├── mutation-flows.md\n        │   ├── resources.md\n        │   ├── router.md\n        │   ├── authentication.md\n        │   ├── authorization.md\n        │   ├── notifications.md\n        │   ├── realtime.md\n        │   ├── i18n.md\n        │   ├── backend-rest-api.md\n        │   ├── backend-supabase.md\n        │   └── backend-directus.md\n        ├── vue\u002F\n        │   ├── setup.md\n        │   ├── controllers.md\n        │   ├── data-composables.md\n        │   ├── forms.md\n        │   ├── resources.md\n        │   ├── router.md\n        │   ├── authentication.md\n        │   ├── authorization.md\n        │   ├── notifications.md\n        │   ├── realtime.md\n        │   └── i18n.md\n        └── nuxt\u002F\n            ├── setup.md\n            ├── router.md\n            └── ssr.md\n","text",[137,257,254],{"__ignoreMap":135},[118,259,261],{"id":260},"example-prompts","Example Prompts",[107,263,264],{},"Try asking your AI assistant:",[129,266,269],{"className":267,"code":268,"language":255},[253],"Set up Ginjou with Supabase in a Nuxt app\n",[137,270,268],{"__ignoreMap":135},[129,272,275],{"className":273,"code":274,"language":255},[253],"Create a list page with pagination and sorting\n",[137,276,274],{"__ignoreMap":135},[129,278,281],{"className":279,"code":280,"language":255},[253],"How do I use optimistic updates with undo?\n",[137,282,280],{"__ignoreMap":135},[129,284,287],{"className":285,"code":286,"language":255},[253],"Help me wire authentication\n",[137,288,286],{"__ignoreMap":135},[129,290,293],{"className":291,"code":292,"language":255},[253],"Add realtime to a list page\n",[137,294,292],{"__ignoreMap":135},[129,296,299],{"className":297,"code":298,"language":255},[253],"What is the difference between useList and useSelect?\n",[137,300,298],{"__ignoreMap":135},[302,303,304],"style",{},"html pre.shiki code .sR7ES, html code.shiki .sR7ES{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":135,"searchDepth":306,"depth":306,"links":307},2,[308,309,316,317],{"id":120,"depth":306,"text":121},{"id":160,"depth":306,"text":161,"children":310},[311,313,314,315],{"id":165,"depth":312,"text":166},3,{"id":185,"depth":312,"text":186},{"id":203,"depth":312,"text":204},{"id":224,"depth":312,"text":225},{"id":248,"depth":306,"text":249},{"id":260,"depth":306,"text":261},"Let AI guide your Ginjou development with verified references.","md",null,{},true,{"title":98,"description":318},"h3w9bzltUQ0cnUJX5249E7dqYddQz0rySk6_vAlANEc",[326,320],{"title":88,"path":89,"stem":90,"description":327,"children":-1},"Explain the fetcher mapping, supported scope, and json-server-style conventions in @ginjou\u002Fwith-rest-api.",1778513973893]