create-feature
Skill1 starsChanged 27 days agoMITView on GitHub
Plan and implement a complete feature using spec-driven development. Analyzes requirements, designs data model, selects Buildpad components, and produces spec artifacts (requirements.md, design.md, tasks.md) with a testing strategy. Use when the user wants to add a new feature, module, or capability to an existing DaaS project.
- Reads credentials
7 other projects use a version of this.
Adopted by
Most recently taken up by
- LongJohnSilver1504/claude-skillstheir own version, first seen Nov 8, 2026
- seungmanchoi/react-native-fsd-agent-templatetheir own version, first seen Oct 25, 2026
- zacharyfmarion/openscad-studiotheir own version, first seen Oct 8, 2026
- NarekManukyan/flutter-mobx-kittheir own version, first seen Sep 17, 2026
- quocnt59/claude_skilltheir own version, first seen Aug 6, 2026
- ThisIsSadeghi/KMPilottheir own version, first seen Aug 4, 2026
Used with
Projects with it also use modify-feature.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
ThisIsSadeghiSkillmodify-feature
Modify existing KMP features with spec-first workflow. Invoke with /modify-feature.
Also in 3 projects that use this
Other versions7 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 7
- zacharyfmarion/openscad-studio★ 238same name
- ThisIsSadeghi/KMPilot★ 56same name
- seungmanchoi/react-native-fsd-agent-template★ 52same name
- LongJohnSilver1504/claude-skills★ 1same name
- ThisIsSadeghi/Loupe★ 1same name
- NarekManukyan/flutter-mobx-kit★ 0same name
- quocnt59/claude_skill★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository66 other files it gives its agents.
- add-ai-chatSkill
- add-buildpadSkill
- add-commentsSkill
- add-cronSkill
- add-external-oauthSkill
- add-filesSkill
- add-i18nSkill
- add-mcp-serverSkill
- add-microappSkill
- add-microfrontendSkill
- add-microfrontend-zonesSkill
- add-mobile-appSkill
- add-multitenancySkill
- add-usersSkill
- add-workflowsSkill
- amplify-env-varsSkill
- authentication-proxySkill
- buildpad-debugSkill
- buildpad-discoverySkill
- buildpad-implSkill
- buildpad-referenceSkill
- buildpad-reviewSkill
- buildpad-spec-batchSkill
- buildpad-spec-designSkill
- buildpad-spec-initSkill
- buildpad-spec-quickSkill
- buildpad-spec-requirementsSkill
- buildpad-spec-statusSkill
- buildpad-spec-tasksSkill
- buildpad-steering-customSkill
- buildpad-steeringSkill
- buildpad-validate-designSkill
- buildpad-validate-gapSkill
- buildpad-validate-implSkill
- buildpad-verify-completionSkill
- code-simplificationSkill
- context-engineeringSkill
- create-api-routeSkill
- create-collectionSkill
- create-componentSkill
- create-cronSkill
- create-form-builderSkill
- create-migrationSkill
- create-projectSkill
- create-rbacSkill
- create-serviceSkill
- create-testsSkill
- create-workflowSkill
- daas-platformSkill
- debugging-and-error-recoverySkill
- generate-docsSkill
- git-workflow-and-versioningSkill
- grant-module-accessSkill
- hooks-extensionsSkill
- idea-refineSkill
- incremental-implementationSkill
- manage-scopeSkill
- migrate-to-engineSkill
- performance-optimizationSkill
- planning-and-task-breakdownSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
9 rules. 0 are common, 2 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 5 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
Read .buildpad/project.json at the project root.
- Very specific: line 19
If a folder named supabase at the project root holds a file named config.toml, or holds a folder named migrations that holds a file whose …
- Very specific: line 46
Every feature gets spec artifacts in .kiro/specs/<feature-name>/ before implementation.
- Very specific: line 105
When the design includes a list page, you MUST use CollectionList with the full-featured pattern.
- Very specific: line 106
Do NOT create custom tables with Mantine <Table> or raw HTML for collection records.
- Distinctive: line 133
When the design includes a form page, you MUST follow the VForm controlled component pattern.
- Very specific: line 141
Consider CollectionForm as an all-in-one alternative to VForm for CRUD pages
- Distinctive: line 153
When implementing a new context/provider that fetches from DaaS:
- Very specific: line 198
After generating ANY .tsx files for this feature, run the Buildpad-First violation check:
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Create Feature
<!-- backend-gate:begin v1 -->Establish the backend first. A Buildpad project's backend is either the Buildpad Engine or Supabase, and some parts of this file hold for one of them only. Before you act on anything in this file, find the backend with these steps, in order, and stop at the first step that answers:
- Read
.buildpad/project.jsonat the project root. If it is JSON and its fieldbackendis"engine"or"supabase", that is the backend. If.buildpad/backend-answer.jsonnames the other backend, tell the developer the two files disagree, and follow.buildpad/project.json. - Otherwise read
.buildpad/backend-answer.jsonin the same way; if itsbackendis"engine"or"supabase", that is the backend. - If a folder named
supabaseat the project root holds a file namedconfig.toml, or holds a folder namedmigrationsthat holds a file whose name ends in.sql, the backend is Supabase. - Otherwise ask the developer once: "Is this project's backend the Buildpad Engine or
Supabase?" Write the answer to
.buildpad/backend-answer.jsonas{"buildpadBackendAnswer": 1, "backend": "engine"}or{"buildpadBackendAnswer": 1, "backend": "supabase"}, and ask the developer to commit that file. Do not add it to.gitignore. Never write.buildpad/project.json.
To find the backend, do not open an environment file (.env, .env.*) or an MCP configuration
file, and do not call a tool that returns project credentials.
Then follow only the parts for that backend. A part starts at a line that holds only a comment
whose text is buildpad + -backend: engine or buildpad + -backend: supabase, and ends at the
next line that holds only a comment whose text is /buildpad + -backend. A comment that merely
mentions a backend is not a part. A file whose first line, after any front matter, holds only a
comment whose text is buildpad + -backend-file: engine (or supabase) holds for that backend
only, and so does every file in a folder named engine-only or supabase-only. Skip the other
backend's parts and copy no code from them; everything else holds for both. On an Engine project, when this file says that
something is not available, tell the developer so and stop: do not build a substitute.
<!-- backend-gate:end -->Plan and coordinate implementation of a complete feature using spec-driven development (see the spec-driven-development skill).
BEFORE generating ANY
.tsxfiles (pages, components, forms, lists), you MUSTread_filethe Buildpad component reference at.github/skills/buildpad-reference/SKILL.md. This loads the full 40+ component catalog with import paths and usage patterns. Skipping this step leads to raw Mantine usage violations.
Spec Workflow
Every feature gets spec artifacts in .kiro/specs/<feature-name>/ before implementation. In Kiro, use native specs; in other IDEs, run /buildpad-spec-init → /buildpad-spec-requirements → /buildpad-spec-design → /buildpad-spec-tasks → /buildpad-impl. The DaaS-specific planning below feeds those artifacts:
| Stage | Focus | Artifact |
| Requirements | Problem, users, acceptance criteria (EARS) | requirements.md |
| Design | Data model, API, UI, Buildpad components | design.md |
| Tasks | Ordered, verifiable tasks with tests | tasks.md |
| Implement | Task-by-task with review | Working code |
Planning Process
- Understand Requirements — What problem does this solve? Who are the users?
- Check Built-In DaaS Features — Before designing anything, review the Built-in DaaS features reference. If DaaS provides it natively (audit trail, workflow, versioning, file management, cron, RBAC, scoping, import/export), use it — do NOT rebuild it. On an Engine project the Engine provides them; where one differs there (scheduled cron runs, for example), the checklist below and the skill for that feature say so.
- Design Data Model — Collections, fields, types, relationships, permissions. For every collection, follow the Standard Fields decision tree: always include audit fields, add workflow fields if approval/lifecycle needed, add scope field if multi-tenancy needed.
- Plan API Endpoints — CRUD routes with request/response formats
- Design UI — Pages, components, user flows
- Select Components (Buildpad-First MANDATORY) — Check Buildpad's 40+ components before creating custom
- Plan Implementation — Numbered tasks with estimates
- Plan Testing — API tests, page tests, component tests, E2E tests
Feature Planning Checklist
For each collection in the feature, answer these questions during the design stage:
- Audit fields included? → ALWAYS yes (Group A: user_created, date_created, user_updated, date_updated)
- Needs workflow/approval? → Add Group B fields + plan
create-workflowskill invocation - Needs multi-tenancy (data separated by scope)? → Add Group C field + plan
manage-scopeskill invocation. On an Engine project the project is one tenant, and the scopes are levels below its tenant node. - Needs versioning? → Plan DaaS versioning API integration (NOT custom version tables)
- Needs scheduled tasks? → Plan DaaS cron jobs (NOT Next.js cron routes). On an Engine project a cron job's body runs in the Engine's runtime: it has no
fetch,process,requireor timers, no Supabase service and no SQL; it reads and writes data throughservices.items(collection)(with{ elevated: true }where it must act as an administrator) and calls outside hosts throughservices.fetch(see create-cron). On an Engine project an active cron job fires at its scheduled time. - Needs capability/role gating? → Plan Module-Level Access Keys (
grant-module-accessskill): register key indaas_module_access_keys, grant on policymodule_accessJSONB, check in React withusePermissions().hasModuleAccess(key). NEVER check role names directly — this applies to every button, section, page, or nav item that is conditionally shown/hidden based on role. - Needs audit/change tracking? → Already built-in via
GET /api/activity(do NOT build custom)
<!-- buildpad-backend: engine -->On an Engine project with Customer_Tenants each customer of the application is a tenant of its own, and the project's tenant is the Blueprint every customer is copied from. Establish the tenancy mode as the add-multitenancy skill says: from the field tenancy of .buildpad/project.json, else from .buildpad/tenancy-answer.json. In the mode customer-tenants that skill's guide engine-customer-tenants replaces what ES-3, ES-4, ES-5, ES-7 and ES-9 say about the project's tenant; in the mode scope they hold as written.
<!-- /buildpad-backend -->On an Engine project some files the Buildpad CLI generates cannot be used yet: lib/supabase/admin.ts, the OAuth callback and provider routes of the external-oauth module, the server-side enforcer and session modules, and lib/module-access/enforce.ts. Do not call them; check module access by forwarding the user's token to GET <Engine_URL>/api/permissions/me and reading isAdmin and moduleAccess. For XAppHub sign-in the CLI installs the external-oauth-engine module in place of external-oauth; its routes are used as the add-external-oauth skill says.
Buildpad Component Selection
| Need | Buildpad Component |
| Text input | Input, Textarea |
| Rich text | RichTextHtml, RichTextMarkdown |
| Select/dropdown | SelectDropdown, SelectRadio |
| Multi-select | SelectMultipleDropdown, Tags |
| Toggle | Toggle, Boolean |
| Date/time | DateTime |
| File upload | FileInterface, FileImage, Files |
| Relations | ListM2O, ListM2M, ListO2M, ListM2A |
| Dynamic form | VForm, CollectionForm |
| Listing records | CollectionList (with search, filter, pagination, permissions) |
| Filtering records | FilterPanel (field-type-aware, DaaS-compatible JSON output) |
| Aggregate/stats | DaaS aggregate API (aggregate[count]=id&groupBy=status), on either kind of project |
Custom components allowed ONLY for: app-specific layouts, dashboards, specialized visualizations.
CollectionList Usage (MANDATORY for list pages)
When the design includes a list page, you MUST use CollectionList with the full-featured pattern.
Do NOT create custom tables with Mantine <Table> or raw HTML for collection records.
import { CollectionList } from "@/components/ui";
<CollectionList
collection="articles"
enableSearch
enableFilter // Integrated FilterPanel with badge count
enableSelection // Row selection with bulk actions
enableCreate // Permission-gated create button
enableDelete // Built-in delete with confirmation modal
enableSort
enableResize
enableReorder
enableHeaderMenu
limit={25}
onCreate={() => router.push("/content/articles/+")}
onItemClick={(item) => router.push(`/content/articles/${item.id}`)}
/>;Key features: integrated search + FilterPanel toggle with badge, permission-gated create/bulk actions, pagination (25/50/100/250), field-type-aware cell rendering, column management.
VForm Usage (CRITICAL)
When the design includes a form page, you MUST follow the VForm controlled component pattern. See VForm usage reference for the required pattern.
Key rules:
- VForm has NO
onSubmitprop — passmodelValue+onUpdatefor controlled state - VForm renders a
<div>, NOT a<form>— do NOT usetype="submit"orform="vform" - Handle submission externally via
onClickon a Button - Consider
CollectionFormas an all-in-one alternative to VForm for CRUD pages
Scope-Aware Context Pattern (REQUIRED when feature has scoped data)
On an Engine project the project is one tenant. Every scope hierarchy begins below the project's tenant node: create no scope type without a parent and no scope item without a parent. Scope types, items and collection settings are managed through the MCP scope tool, or through /api/scope/types, /api/scope/items and /api/scope/collection-config with an administrator's session. The tool reads types, items and collection settings with the caller's grants; only an administrator may create, change or delete them through it, read a user's roles (read_user_roles), or assign and remove a role at a scope (assign_user_role, remove_user_role), and a delete is refused while the project's MCP deletes are off. If tools/list offers only assign_user_role and create_config for it, the project's Engine is older than 0.1.0-dev.19: use the routes for the rest. On a Supabase project the scope hierarchy is the project's own, as manage-scope describes.
<!-- buildpad-backend: engine -->On an Engine project with Customer_Tenants each customer of the application is a tenant of its own, and the project's tenant is the Blueprint every customer is copied from. Establish the tenancy mode as the add-multitenancy skill says: from the field tenancy of .buildpad/project.json, else from .buildpad/tenancy-answer.json. In the mode customer-tenants that skill's guide engine-customer-tenants replaces what ES-3, ES-4, ES-5, ES-7 and ES-9 say about the project's tenant; in the mode scope they hold as written.
<!-- /buildpad-backend -->Bug 26: Any React context or component that calls DaaS on mount AND lives inside
ScopeProvidermust wait for the scope to be ready before fetching. Firing the request before thedaas_resource_uricookie is set results in a 401. The.catch()handler will have set state tofalse/empty, and the effect will NOT re-run unlessscopeLoadingis in the dependency array.
When implementing a new context/provider that fetches from DaaS:
import { useScope } from '@/lib/contexts/ScopeContext';
const { resourceUri, isLoading: scopeLoading } = useScope();
useEffect(() => {
if (scopeLoading) return; // ← REQUIRED guard — do not remove
apiRequest('/api/...')
.then(...)
.catch(...);
// Re-fetch when the scope changes (policies/data may differ per scope)
}, [version, resourceUri, scopeLoading]);
// ^^^^^^^^^^ ^^^^^^^^^^^ ← REQUIRED depsOutput Format
Provide a structured plan with:
- Overview and requirements
- Data model design
- API design
- UI design with Buildpad components
- Capability matrix (required for role-gated features):
- module key (
domain:capability) - granted policies
- UI guard points (
hasModuleAccess) - API guard points (policy module_access OR-merge; on an Engine project, the user's token forwarded to
GET <Engine_URL>/api/permissions/me)
- module key (
- Implementation tasks in
tasks.md, ordered by dependency layer - Testing strategy per layer
- Time estimates
Testing Strategy (per layer)
- Schema: API tests for all endpoints
- UI: Page tests for all pages
- Logic: Integration tests for business rules
- Hardening: E2E tests for user flows
Post-Generation Validation (MANDATORY)
After generating ANY .tsx files for this feature, run the Buildpad-First violation check:
# Scan generated files for forbidden raw Mantine form/input imports
grep -rn "from '@mantine/form'\|from '@mantine/dates'\|from '@mantine/dropzone'\|<TextInput\|<NumberInput\|<Select \|<Switch \|<Checkbox \|<DatePicker\|<Dropzone" app/ components/ 2>/dev/nullIf any matches are found, replace them with Buildpad equivalents before proceeding.
Then run module-access anti-pattern checks (UI + API):
grep -rn "role === \|roleName\|user\.role\|is_manager\|is_admin\|isManager\b\|currentUser\.role" app/ components/ 2>/dev/null
grep -rn "detectAdminFromMe\|checkAdmin\|roleObj\.name === 'Administrator'\|admin_access\s*===\s*true\|\bisAdmin\b" app/ components/ 2>/dev/nullAny match used for capability gating must be replaced with Module-Level Access Keys checks.
Quick fix reference:
| Violation | Replace With |
<TextInput> / <Textarea> | Input / Textarea from @/components/ui |
<Select> | SelectDropdown from @/components/ui |
<DatePicker> | DateTime from @/components/ui |
<Switch> / <Checkbox> | Toggle / Boolean / SelectMultipleCheckbox |
<Dropzone> | Upload / Files from @/components/ui |
useForm (@mantine/form) | VForm or CollectionForm from @/components/ui |
Custom <Table> for records | CollectionList from @/components/ui |
For capability gating rules, load and follow:
../grant-module-access/SKILL.md../../references/module-access-checklist.md
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

