[{"data":1,"prerenderedAt":60},["ShallowReactive",2],{"\u002Fapi\u002Fpage\u002Fskills\u002Fsumi-nuxt\u002Ffirebase-firestore":3,"PageBody_fvoMpAYPcQlbkhpvOO3rlirxb9095k43gYACmUYQXA":52},{"title":4,"description":5,"plugin":6,"kind":7,"references":8,"source":9,"heading":10,"toc":11,"locale":51},"firebase-firestore","Firebase for Nuxt\u002FVue apps - query-first Firestore data modeling (denormalization, aggregation docs, composite indexes, cursor pagination, batches\u002Ftransactions), security rules as the real backend (deny by default, shape validation, emulator tests), Auth patterns, Cloud Functions v2 (idempotency, retries, secrets), cost\u002Fread amplification, Emulator Suite, and the modular SDK or nuxt-vuefire. Use when designing collections, writing queries, editing firestore.rules, storage.rules, firestore.indexes.json, firebase.json, functions\u002F**, or any code importing firebase\u002F* or firebase-admin.","sumi-nuxt","skill",2,"plugins\u002Fsumi-nuxt\u002Fskills\u002Ffirebase-firestore\u002FSKILL.md","Firebase and Firestore",[12,15,18,21,24,27,30,33,36,39,42,45,48],{"id":13,"text":14},"core-principles","Core principles",{"id":16,"text":17},"modeling-rules","Modeling rules",{"id":19,"text":20},"queries-indexes-pagination","Queries, indexes, pagination",{"id":22,"text":23},"writes-batches-and-transactions","Writes: batches and transactions",{"id":25,"text":26},"security-rules","Security rules",{"id":28,"text":29},"auth","Auth",{"id":31,"text":32},"cloud-functions-v2","Cloud Functions (v2)",{"id":34,"text":35},"client-sdk-and-nuxt-integration","Client SDK and Nuxt integration",{"id":37,"text":38},"emulator-suite","Emulator Suite",{"id":40,"text":41},"anti-patterns-ai-slop-tells","Anti-patterns (AI slop tells)",{"id":43,"text":44},"done-checklist","Done checklist",{"id":46,"text":47},"firestore-modeling-worked-examples","Firestore modeling worked examples",{"id":49,"text":50},"testing-security-rules-with-the-emulator","Testing security rules with the emulator","en",["Island",53],{"key":54,"result":55},"PageBody_fvoMpAYPcQlbkhpvOO3rlirxb9095k43gYACmUYQXA",{"head":56},{"style":57},[58],{"innerHTML":59},".prose[data-v-1545ba8e]{max-width:var(--measure-prose)}.prose[data-v-1545ba8e] h2{margin-block:var(--space-8) var(--space-4)}.prose[data-v-1545ba8e] h3{margin-block:var(--space-6) var(--space-3)}.prose[data-v-1545ba8e] h4{margin-block:var(--space-5) var(--space-3);font-family:var(--font-mono);font-variation-settings:\"wdth\" var(--mono-width-label);font-size:var(--text-small);text-transform:uppercase;letter-spacing:var(--text-label-ls);color:var(--color-text-muted)}.prose[data-v-1545ba8e] ol,.prose[data-v-1545ba8e] p,.prose[data-v-1545ba8e] ul{margin-block-end:var(--space-4)}.prose[data-v-1545ba8e] li{margin-block-end:var(--space-2)}.prose[data-v-1545ba8e] ol,.prose[data-v-1545ba8e] ul{padding-inline-start:var(--space-5)}.prose[data-v-1545ba8e] li:has(.task-box){list-style:none}.prose[data-v-1545ba8e] .task-box{width:.8em;height:.8em;border:var(--border-width) solid var(--color-border);vertical-align:baseline;margin-inline-end:var(--space-2);display:inline-block}.prose[data-v-1545ba8e] code{padding:1px var(--space-1);background:var(--color-surface-sunk);border:var(--border-width) solid var(--color-border)}.prose[data-v-1545ba8e] pre{padding:var(--space-4);background:var(--color-surface-sunk);border:var(--border-width) solid var(--color-border);margin-block-end:var(--space-5);overflow-x:auto}.prose[data-v-1545ba8e] pre code{background:0 0;border:0;padding:0}.prose[data-v-1545ba8e] .table-scroll{max-width:none;margin-block-end:var(--space-5);overflow-x:auto}.prose[data-v-1545ba8e] table{border-collapse:collapse;width:100%;min-width:32rem;font-size:var(--text-small);line-height:var(--text-small-lh)}.prose[data-v-1545ba8e] td,.prose[data-v-1545ba8e] th{padding:var(--space-3) var(--space-4);text-align:start;vertical-align:top;border-block-start:var(--divider-width) solid var(--color-divider)}.prose[data-v-1545ba8e] th{font-family:var(--font-mono);font-variation-settings:\"wdth\" var(--mono-width-label);font-size:var(--text-label);letter-spacing:var(--text-label-ls);text-transform:uppercase;color:var(--color-text-muted);border-block-end:var(--border-width) solid var(--color-border)}.prose[data-v-1545ba8e] blockquote{margin:0 0 var(--space-5);border-inline-start:var(--seam-width) solid var(--color-seam);color:var(--color-text-muted);padding-inline-start:var(--space-4)}.prose[data-v-1545ba8e] hr{margin-block:var(--space-7);border:0;border-block-start:var(--divider-width) solid var(--color-divider)}.prose[data-v-1545ba8e] pre,.prose[data-v-1545ba8e] table{max-width:none}",1791464219051]