[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6D1R73HWSFV5F2AFS2QKSAW":3,"skill-same:01M6D1R73HWSFV5F2AFS2QKSAW":78},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":54,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6D1R73HWSFV5F2AFS2QKSAW","brainstorm-architecture",null,"docs\u002Fplan\u002FARCHITECTURE.md: the stack and why, the folder layout, the modules and which agent owns each, how data flows through them, shared types and where they live, environment variables, integrations, deployment target, and the decisions with their reasons. Read when planning a new project or a change to how one is put together.","enowdev\u002Fenowxcli","enowdev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F179420349?v=4","01M6D1MVX2KC0X3Z9NESE7P22K","Enow Dev.","01M6D1MW1FMZGBDKWAJY4GQX81",67,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fbrainstorm-architecture\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"brainstorm","brainstorm architecture","architecture","decisions","live","layout","project","shared","modules","environment","read","deployment","change","integrations","stack","plan","why","how","data","planning","2026-11-10 10:12:30",false,"---\nname: brainstorm-architecture\ndescription: \"docs\u002Fplan\u002FARCHITECTURE.md: the stack and why, the folder layout, the modules and which agent owns each, how data flows through them, shared types and where they live, environment variables, integrations, deployment target, and the decisions with their reasons. Read when planning a new project or a change to how one is put together.\"\n---\n\n# ARCHITECTURE.md: how the project is put together\n\nWhen four specialists build one project at once, each makes the choices\nthe others depend on: where shared types live, which folder is whose, how\nthe page gets its data, what the environment variables are called. Left\nunwritten, the frontend reads `NEXT_PUBLIC_API_URL`, the backend serves on\na path nobody told it about, and two agents create `src\u002Ftypes.ts` and\n`src\u002Fshared\u002Ftypes.ts`. This document fixes those choices once.\n\n## 1. The template\n\n```markdown\n# Architecture\n\n## Stack\n| Layer | Choice | Why |\n|---|---|---|\n| Frontend | Next.js 15 (App Router), TypeScript, Tailwind | the user asked for Next |\n| Backend | Next.js route handlers | one deployable; the API is small |\n| Database | Postgres 16 with Drizzle | relational data (orders, items) |\n| Hosting | \u003Cthe user's: Coolify on their VPS> | |\n\n## Layout\nsrc\u002Fapp\u002F            pages and route handlers (fe: pages; be: src\u002Fapp\u002Fapi\u002F**)\nsrc\u002Fcomponents\u002F     shared UI components (fe, foundation wave)\nsrc\u002Fserver\u002F         data access and business logic (be)\nsrc\u002Fshared\u002Ftypes.ts types used by client and server (foundation; read-only after)\ndb\u002F                 schema and migrations (db)\ntests\u002F              end-to-end tests (test)\n\n## Modules\n| Module | Owns | Owner |\n|---|---|---|\n| Catalogue | src\u002Fapp\u002Fcatalogue\u002F**, src\u002Fserver\u002Fproducts.ts | fe, be |\n\n## Data flow\nBrowser → page (server component) → src\u002Fserver\u002Fproducts.ts → Postgres.\nMutations: form → POST \u002Fapi\u002Fcart\u002Fitems → src\u002Fserver\u002Fcart.ts → Postgres → revalidate \u002Fcart.\n\n## Shared\n- Types: src\u002Fshared\u002Ftypes.ts (Product, Cart, Order). Written in the foundation wave.\n- Money: integer minor units with an ISO currency code.\n- Dates: ISO 8601 in UTC on the wire; shown in the user's time zone.\n- IDs: \u003Cuuid v7 | database serial>; slugs for public URLs.\n\n## Environment\n| Variable | Used by | Example |\n|---|---|---|\n| DATABASE_URL | server | postgres:\u002F\u002F… (never in the client) |\n\n## Integrations\n- \u003Cpayments, email, storage: provider, what for, which module calls it>\n\n## Decisions\n- \u003Cdate> Route handlers instead of a separate API service: one deploy, small API. Revisit if mobile clients come.\n```\n\n## 2. Choosing, and saying why\n\n- **The stack is the user's** when they named one, and the project's when\n  it exists: read `package.json`, `Cargo.toml`, `go.mod`,\n  `pyproject.toml`, the framework config. A new project with no stated\n  preference gets the plain default for its kind (a static site: plain\n  HTML and CSS; an app with pages and data: the framework the project's\n  language community uses most), named as a default in the Why column.\n- **Why** is one short reason tied to the product, not a slogan.\n- **Fewer moving parts** unless the product needs more: one deployable\n  before two, the framework's own routes before a separate API service, a\n  managed database before a self-run cluster. Say what would change the\n  decision (\"revisit if mobile clients come\").\n\n## 3. The layout is the ownership map\n\n- Every folder in Layout names its owner, and those owners are the agents\n  in `PLAN.md`. Two parts of one wave never own the same folder.\n- Files everything imports (the router, root layout, shared types, the\n  package manifest, the global stylesheet) belong to the foundation wave or\n  to exactly one part, and are read-only for the rest.\n- Keep the project's existing conventions in an existing codebase; the\n  document describes them, it does not reorganise them.\n\n## 4. The shared facts\n\nThe conventions every part must use the same way: money, dates, IDs,\nerrors, pagination, naming (`camelCase` in JSON, `snake_case` in SQL).\nWrite each once here; `API.md` and `ERD.md` follow them.\n\n## 5. Decisions\n\nA short log in the ADR spirit: the date, what was decided, why, and what\nwould reverse it. Read before revisiting a choice; add to it whenever the\nuser or a report changes one.\n\n## Check it\n\n- Every folder has one owner, matching `PLAN.md`.\n- Shared types, money, dates and IDs are each defined once.\n- Every environment variable is named, with who reads it and whether it is\n  secret.\n- Every stack choice has a reason; defaults are called defaults.\n\n## Avoid\n\nStack choices the user did not make written as theirs; microservices for a\nsmall product; two homes for shared types; environment variables named\ndifferently by different parts; a layout that reorganises an existing\nproject; decisions without reasons.\n","# ARCHITECTURE.md: how the project is put together\n\nWhen four specialists build one project at once, each makes the choices\nthe others depend on: where shared types live, which folder is whose, how\nthe page gets its data, what the environment variables are called. Left\nunwritten, the frontend reads `NEXT_PUBLIC_API_URL`, the backend serves on\na path nobody told it about, and two agents create `src\u002Ftypes.ts` and\n`src\u002Fshared\u002Ftypes.ts`. This document fixes those choices once.\n\n## 1. The template\n\n```markdown\n# Architecture\n\n## Stack\n| Layer | Choice | Why |\n|---|---|---|\n| Frontend | Next.js 15 (App Router), TypeScript, Tailwind | the user asked for Next |\n| Backend | Next.js route handlers | one deployable; the API is small |\n| Database | Postgres 16 with Drizzle | relational data (orders, items) |\n| Hosting | \u003Cthe user's: Coolify on their VPS> | |\n\n## Layout\nsrc\u002Fapp\u002F            pages and route handlers (fe: pages; be: src\u002Fapp\u002Fapi\u002F**)\nsrc\u002Fcomponents\u002F     shared UI components (fe, foundation wave)\nsrc\u002Fserver\u002F         data access and business logic (be)\nsrc\u002Fshared\u002Ftypes.ts types used by client and server (foundation; read-only after)\ndb\u002F                 schema and migrations (db)\ntests\u002F              end-to-end tests (test)\n\n## Modules\n| Module | Owns | Owner |\n|---|---|---|\n| Catalogue | src\u002Fapp\u002Fcatalogue\u002F**, src\u002Fserver\u002Fproducts.ts | fe, be |\n\n## Data flow\nBrowser → page (server component) → src\u002Fserver\u002Fproducts.ts → Postgres.\nMutations: form → POST \u002Fapi\u002Fcart\u002Fitems → src\u002Fserver\u002Fcart.ts → Postgres → revalidate \u002Fcart.\n\n## Shared\n- Types: src\u002Fshared\u002Ftypes.ts (Product, Cart, Order). Written in the foundation wave.\n- Money: integer minor units with an ISO currency code.\n- Dates: ISO 8601 in UTC on the wire; shown in the user's time zone.\n- IDs: \u003Cuuid v7 | database serial>; slugs for public URLs.\n\n## Environment\n| Variable | Used by | Example |\n|---|---|---|\n| DATABASE_URL | server | postgres:\u002F\u002F… (never in the client) |\n\n## Integrations\n- \u003Cpayments, email, storage: provider, what for, which module calls it>\n\n## Decisions\n- \u003Cdate> Route handlers instead of a separate API service: one deploy, small API. Revisit if mobile clients come.\n```\n\n## 2. Choosing, and saying why\n\n- **The stack is the user's** when they named one, and the project's when\n  it exists: read `package.json`, `Cargo.toml`, `go.mod`,\n  `pyproject.toml`, the framework config. A new project with no stated\n  preference gets the plain default for its kind (a static site: plain\n  HTML and CSS; an app with pages and data: the framework the project's\n  language community uses most), named as a default in the Why column.\n- **Why** is one short reason tied to the product, not a slogan.\n- **Fewer moving parts** unless the product needs more: one deployable\n  before two, the framework's own routes before a separate API service, a\n  managed database before a self-run cluster. Say what would change the\n  decision (\"revisit if mobile clients come\").\n\n## 3. The layout is the ownership map\n\n- Every folder in Layout names its owner, and those owners are the agents\n  in `PLAN.md`. Two parts of one wave never own the same folder.\n- Files everything imports (the router, root layout, shared types, the\n  package manifest, the global stylesheet) belong to the foundation wave or\n  to exactly one part, and are read-only for the rest.\n- Keep the project's existing conventions in an existing codebase; the\n  document describes them, it does not reorganise them.\n\n## 4. The shared facts\n\nThe conventions every part must use the same way: money, dates, IDs,\nerrors, pagination, naming (`camelCase` in JSON, `snake_case` in SQL).\nWrite each once here; `API.md` and `ERD.md` follow them.\n\n## 5. Decisions\n\nA short log in the ADR spirit: the date, what was decided, why, and what\nwould reverse it. Read before revisiting a choice; add to it whenever the\nuser or a report changes one.\n\n## Check it\n\n- Every folder has one owner, matching `PLAN.md`.\n- Shared types, money, dates and IDs are each defined once.\n- Every environment variable is named, with who reads it and whether it is\n  secret.\n- Every stack choice has a reason; defaults are called defaults.\n\n## Avoid\n\nStack choices the user did not make written as theirs; microservices for a\nsmall product; two homes for shared types; environment variables named\ndifferently by different parts; a layout that reorganises an existing\nproject; decisions without reasons.\n",{"name":5,"description":7},"main","38293fe1b096e6bf3646c7344c38786ed688f464","crates\u002Fenowx-core\u002Fskills\u002Fbrainstorm-architecture",21,"https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli","https:\u002F\u002Fenowx.ai","https:\u002F\u002Fgithub.com\u002Fenowdev","Pretending to be a Developer","2026-10-06 02:05:35",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add enowdev\u002Fenowxcli --skill brainstorm-architecture",{"tool":64,"command":65},"bunx","bunx skills add enowdev\u002Fenowxcli --skill brainstorm-architecture",{"tool":67,"command":68},"pnpm","pnpm dlx skills add enowdev\u002Fenowxcli --skill brainstorm-architecture","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fbrainstorm-architecture\u002FSKILL.md",true,[72],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"compliance_detection.md","REFERENCE","参考文档",4094,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fsre-agent\u002Fblob\u002Fmain\u002Flabs\u002Fdeployment-compliance\u002Fskills\u002Fdeployment-compliance-check\u002Fcompliance_detection.md",[79,90,115,130,157,177],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":86,"publishedAt":44},"01M6D2HQYSQD9N7MTNDT4A7CBM","demo-skill","Project-scope demo skill for tests.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fworkspace\u002F.agents\u002Fskills\u002Fdemo-skill\u002FSKILL.md",[85],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[87,88,89,30,34],"demo skill","demo","tests",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":104,"publishedAt":44},"01M6D2HM0GCPM0TM2HPG9HHR2R","writing","Writing words people read: the specific thing instead of claims, words to drop, sentences, interface copy (buttons, labels, errors, empty states, confirmations), page copy, notifications and emails, alt text and link text, numbers and dates, words that translate well, documentation and voice. Read before writing a page's copy, an interface's text or a document.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fwriting\u002FSKILL.md",[96,99],{"categoryNo":97,"categoryName":98,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[92,105,106,107,108,109,34,110,111,112,113,114],"text","emails","empty","drop","document","page","voice","notifications","documentation","translate",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":124,"publishedAt":44},"01M6D2HG07YS49NM196Q0R3AZ8","ui","Designing or restyling an interface: direction, layout, type, colour, icons, components, states, responsive behaviour. Read before building a page, a screen or a set of components.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui\u002FSKILL.md",[121],{"categoryNo":122,"categoryName":123,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000032","设计师",[117,125,126,127,128,110,29,34,129],"icons","components","SET","responsive","before building",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":142,"publishedAt":44},"01M6D2HB59HZHWG1RYZDV4SJ91","ui-themes","Light and dark themes, and colour that holds in both: tokens with a value per theme, and what each kind of content needs to stay visible (icons, SVG drawings and line art, logos, photos, screenshots, charts, code, maps, borders, shadows, focus, form controls), switching without a flash, and checking both. Read before building a second theme or a theme toggle, and before any drawing, logo or chart on a page that has two themes.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui-themes\u002FSKILL.md",[136,139],{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":140,"categoryName":141,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000030","开发工程师",[117,143,144,145,146,147,148,149,150,34,129,151,110,152,153,154,125,155,156],"ui themes","switching","photos","tokens","drawing","focus","maps","Art","flash","code","Charts","content","screenshots","logo",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":166,"publishedAt":44},"01M6D2H5R5KRAE524C8QX0T7Q0","ui-structure","Structure before styling: the blueprint written before any interface code (the screen's job, the regions its kind of page needs, their order and why, the layout skeleton in numbers, the components and their states), the anatomy and order of a homepage, a dashboard, a list, a detail page, settings, a form, sign-in, pricing, docs, an article and a checkout, and how to turn the blueprint into code (tokens, layout primitives, components, sections, page). Read first, before building or rebuilding any page or screen.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui-structure\u002FSKILL.md",[163,164,165],{"categoryNo":97,"categoryName":98,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":140,"categoryName":141,"taxonomyType":102,"taxonomyTypeDesc":103},{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},[167,117,168,126,169,170,152,171,172,173,29,146,174,175,176,34,129,110,40,41],"structure","ui structure","pricing","dashboard","Blueprint","article","anatomy","styling","primitives","list",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":190,"publishedAt":44},"01M6D2H0ZZBJG77MBGPZHA6MWD","ui-stack-vue","Building interfaces in Vue 3 and Nuxt: project layout, script setup with typed defineProps, defineEmits and defineModel, attribute fallthrough, slots and scoped slots, template refs, ref, reactive and computed, watch versus watchEffect, composables and VueUse, provide and inject, Pinia, keyed v-for, transitions, Nuxt 4 (app directory, pages, layouts, useFetch and useAsyncData keys, $fetch in handlers, server routes, runtime config, useSeoMeta, NuxtImg, middleware), VeeValidate forms, Reka UI and Nuxt UI, testing, vue-tsc, and the traps. Read when the project uses Vue or Nuxt.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui-stack-vue\u002FSKILL.md",[183,186,189],{"categoryNo":184,"categoryName":185,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":187,"categoryName":188,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":122,"categoryName":123,"taxonomyType":102,"taxonomyTypeDesc":103},[117,191,38,192,193,194,195,196,29,30,197,198,34,199,200,201,202,203,204,205],"vue","ui stack vue","forms","pages","watch","runtime","transitions","fetch","pinia","nuxt","template","server","config","directory","testing"]