Claude-skill-registry add-feature
Scaffold complete feature with types, repository, API routes, components, store actions, and tests. Use when adding major new functionality like water tracking, sleep tracking, etc.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/add-feature" ~/.claude/skills/majiayu000-claude-skill-registry-add-feature-6d65bf && rm -rf "$T"
manifest:
skills/data/add-feature/SKILL.mdsource content
Add Feature
Scaffold a complete feature including types, database layer, API routes, UI components, state management, and tests.
Usage
When user requests to add a new major feature, ask for:
- Feature name (e.g., "Water Tracking", "Sleep Logging", "Weight Management")
- Feature description (what data it tracks, why it matters)
- Data fields needed (with types and validation rules)
- Dashboard components needed (card, chart, statistics)
- Forms needed (input forms, edit forms)
- Daily summary impact (whether it affects health score, true/false)
Implementation Process
This skill orchestrates the following steps:
Step 1: Create TypeScript Types
Create file:
src/lib/types/{featureName}.ts
export interface FeatureEntity { id: string; date: string; field1: string; field2: number; createdAt: string; } // Validation schema types (for API) export type FeatureInput = Omit<FeatureEntity, 'id' | 'createdAt'>;
Step 2: Create Repository
Use
/generate-repository skill to create:
src/lib/database/repositories/featureRepository.ts- CRUD methods
- Date-based queries
Step 3: Create API Routes
Use
/generate-api-route skill to create:
src/app/api/feature/route.ts- POST handler (create)
- DELETE handler (delete)
- Daily summary recalculation (if applicable)
Step 4: Create Store Actions
Use
/generate-store-action skill to add to src/lib/store/healthStore.ts:
- State property for feature data
- fetchFeature() action
- addFeature() action
- deleteFeature() action
Step 5: Create Dashboard Card
Use
/generate-card skill to create:
src/components/dashboard/{FeatureName}Card.tsx- Display key metrics
- Show trends or statistics
- Optional: Recharts integration
Step 6: Create Input Form
Use
/generate-form skill to create:
src/components/forms/{FeatureName}Form.tsx- Form fields for data entry
- Validation logic
- Store action integration
Step 7: Create Tests
Use
/generate-test skill to create:
src/__tests__/lib/database/repositories/{FeatureName}.test.tssrc/__tests__/components/forms/{FeatureName}Form.test.tsxsrc/__tests__/app/api/feature/route.test.ts
Step 8: Update Dashboard Layout
Edit:
src/app/page.tsx or src/components/layout/MainLayout.tsx
- Import new card component
- Add to dashboard grid
- Position appropriately
Step 9: Update Navigation (if needed)
If feature has dedicated page:
- Create
src/app/feature/page.tsx - Create full page component
- Update navigation in Sidebar
Step 10: Database Schema Update
Add to:
src/lib/database/schema.sql
- Create new table
- Define columns with types
- Add indexes for common queries
Full Feature Example: Water Tracking
1. Types (src/lib/types/water.ts
)
src/lib/types/water.tsexport interface WaterLog { id: string; date: string; amount: number; // in ml time: string; // HH:MM format source: 'water' | 'beverage' | 'food'; createdAt: string; } export type WaterInput = Omit<WaterLog, 'id' | 'createdAt'>;
2. Repository → /generate-repository
/generate-repository- Entity: WaterLog
- Table: water_logs
- Methods: addWaterLog, getWaterLogsByDate, deleteWaterLog
3. API Routes → /generate-api-route
/generate-api-route- POST /api/water → create water log
- DELETE /api/water?id=X → delete water log
- Daily summary recalculation: YES
4. Store Actions → /generate-store-action
/generate-store-actioninterface HealthState { waterLogs: WaterLog[]; fetchDailyWaterLogs: (date: string) => Promise<void>; addWaterLog: (log: WaterInput) => Promise<void>; deleteWaterLog: (id: string) => Promise<void>; }
5. Dashboard Card → /generate-card
/generate-card- Card name: WaterIntakeCard
- Displays: Total ml today, Target vs actual, Timeline of entries
- Icon: Droplets
- Optional chart: Hourly water intake
6. Input Form → /generate-form
/generate-form- Form name: WaterLogForm
- Fields: Amount (number), Time (time picker), Source (select)
- List: Shows today's water entries with ability to remove
7. Tests → /generate-test
/generate-test- Repository tests: CRUD operations
- Form tests: Validation, submission
- API tests: POST, DELETE handlers
8. Update Dashboard
Add WaterIntakeCard to dashboard grid
Key Considerations
Database Schema
CREATE TABLE IF NOT EXISTS water_logs ( id TEXT PRIMARY KEY, date TEXT NOT NULL, amount INTEGER NOT NULL, time TEXT NOT NULL, source TEXT NOT NULL, created_at TEXT NOT NULL, UNIQUE(date, time, source) ); CREATE INDEX idx_water_logs_date ON water_logs(date);
Health Score Integration
If feature impacts health score:
- Update
incalculateHealthScore()src/lib/utils/healthScoring.ts - Update daily summary calculation in
DailySummaryRepository - Document scoring formula
Migrations
Document any schema changes needed:
- Create migration file or script
- Add instructions to DEVELOPMENT.md
Checklist
Complete feature should have:
- TypeScript types defined
- Database repository with CRUD
- API routes (POST, DELETE, GET)
- Zustand store actions
- Dashboard card component
- Input/edit forms
- Comprehensive tests
- Dashboard integration
- Database schema
- Optional: dedicated page
- Documentation updated (if major feature)
Coordination with Other Skills
This skill uses:
- for data access/generate-repository
- for API endpoints/generate-api-route
- for state management/generate-store-action
- for dashboard widgets/generate-card
- for data entry/generate-form
- for test coverage/generate-test
Each sub-skill handles a specific layer of the feature.
Best Practices
- Start with types - Define data structure first
- Database first - Create repository before using in API
- API routes next - Implement endpoints before UI
- Store actions - Wire up state management before components
- UI components - Build forms and cards
- Tests throughout - Write tests for each layer
- Integration - Add to dashboard and navigation
- Documentation - Update relevant docs
Output Structure
After using this skill, project structure should look like:
src/ ├── lib/ │ ├── types/ │ │ └── waterTracking.ts │ └── database/repositories/ │ └── waterTrackingRepository.ts ├── app/ │ └── api/ │ └── water/ │ └── route.ts ├── components/ │ ├── dashboard/ │ │ └── WaterIntakeCard.tsx │ └── forms/ │ └── WaterLogForm.tsx └── __tests__/ ├── lib/ │ └── database/repositories/ │ └── WaterTracking.test.ts ├── components/ │ └── forms/ │ └── WaterLogForm.test.tsx └── app/ └── api/water/ └── route.test.ts
Implementation Checklist
- Request feature details from user
- Create TypeScript types
- Generate repository
- Generate API routes
- Generate store actions
- Generate dashboard card
- Generate form component
- Generate tests
- Update dashboard integration
- Update navigation (if page)
- Verify TypeScript compilation
- Run tests
- Commit changes with proper messages