Skip to content

Creating Custom Templates ​

Learn how to create your own Orchestre templates tailored to your specific needs, technology stack, or domain. Custom templates encode your best practices and accelerate future projects.

Understanding Templates ​

An Orchestre template is more than boilerplate code - it's a complete knowledge system that includes:

  • Code structure optimized for your use case
  • Dynamic commands that understand your domain
  • Pattern library with proven solutions
  • Memory templates for consistent documentation
  • Configuration for your specific stack

Template Structure ​

A complete template follows this structure:

my-template/
├── template.json           # Template metadata
├── CLAUDE.md              # Template documentation
├── commands/              # Template-specific commands
│   ├── add-feature.md
│   ├── setup-auth.md
│   └── deploy.md
├── patterns/              # Reusable patterns
│   ├── error-handling.md
│   ├── data-access.md
│   └── api-design.md
├── memory-templates/      # Documentation templates
│   ├── feature.md
│   ├── api.md
│   └── decision.md
├── src/                   # Template source code
│   └── ...
└── .orchestre/           # Orchestre configuration

Creating Your Template ​

Step 1: Define Template Metadata ​

Create template.json:

json
{
  "name": "my-custom-template",
  "displayName": "My Custom Template",
  "description": "A template for building [your domain] applications",
  "version": "1.0.0",
  "author": "Your Name",
  "repository": "https://github.com/yourusername/my-template",
  "keywords": ["custom", "domain-specific"],
  "requirements": {
    "node": ">=18.0.0",
    "orchestreVersion": ">=3.0.0"
  },
  "setupCommands": [
    "npm install",
    "npm run setup"
  ],
  "structure": {
    "sourceDir": "src",
    "commandsDir": "commands",
    "patternsDir": "patterns"
  },
  "features": [
    "authentication",
    "database",
    "api",
    "testing"
  ]
}

Step 2: Create Template Documentation ​

Write CLAUDE.md:

markdown
# My Custom Template

## Overview
This template is designed for building [specific type] applications with:
- [Key feature 1]
- [Key feature 2]
- [Key feature 3]

## Technology Stack
- **Framework**: [Your framework]
- **Database**: [Your database]
- **Authentication**: [Auth solution]
- **Deployment**: [Platform]

## Architecture Principles
1. [Principle 1]
2. [Principle 2]
3. [Principle 3]

## Getting Started
1. Run `/create my-app my-custom-template`
2. Configure environment variables
3. Run `/orchestrate` to plan your features
4. Use template commands for common tasks

## Template Commands
- `/add-[feature]` - Add domain-specific features
- `/setup-[service]` - Configure external services
- `/deploy-[environment]` - Deploy to different environments

## Conventions
- File naming: [convention]
- Code style: [style guide]
- Testing: [approach]
- Documentation: [standards]

Step 3: Design Template Commands ​

Create intelligent commands that understand your domain:

Example: Domain-Specific Feature Command ​

Create commands/add-entity.md:

markdown
# /add-entity

Add a complete entity with model, API, and UI following our domain patterns.

## Prompt

You are helping create a new entity in a [domain] application. 

First, analyze the existing codebase to understand:
1. Current entity patterns
2. API conventions
3. UI component structure
4. Testing approaches

Then implement a complete entity with:

### Data Model
- Database schema/model
- Validation rules
- Relationships with other entities
- Migration files

### API Layer
- CRUD endpoints following REST/GraphQL conventions
- Input validation
- Error handling
- Authentication/authorization
- API documentation

### Business Logic
- Service layer with domain logic
- Event handlers if using event-driven
- Integration with other services
- Caching strategy

### UI Components
- List view with filtering/sorting
- Detail view
- Create/Edit forms
- Delete confirmation
- Loading and error states

### Testing
- Unit tests for business logic
- Integration tests for API
- Component tests for UI
- E2E test scenarios

## Parameters
- `name`: Entity name (required)
- `fields`: Comma-separated list of fields
- `relationships`: Related entities
- `features`: Additional features (search, export, etc.)

## Examples
```bash
/add-entity User "email,name,role"
/add-entity Product "name,price,category" --features "search,inventory"
/add-entity Order --relationships "User,Product" --features "workflow,notifications"

#### Example: Setup Command

Create `commands/setup-monitoring.md`:

```markdown
# /setup-monitoring

Configure comprehensive monitoring for our [domain] application.

## Prompt

Set up monitoring tailored to our domain needs:

1. **Analyze Requirements**
   - Identify critical business metrics
   - Determine performance KPIs
   - List compliance requirements

2. **Configure Monitoring Stack**
   Based on our stack, implement:
   - Application Performance Monitoring (APM)
   - Error tracking
   - Log aggregation
   - Custom metrics
   - Alerting rules

3. **Domain-Specific Metrics**
   For our [domain], track:
   - [Metric 1]: [Description]
   - [Metric 2]: [Description]
   - [Metric 3]: [Description]

4. **Dashboards**
   Create dashboards for:
   - Technical metrics
   - Business metrics
   - User experience metrics

## Implementation
[Specific implementation details for your stack]

Step 4: Create Pattern Library ​

Document reusable patterns specific to your domain:

Create patterns/authentication.md:

markdown
# Authentication Pattern

## Overview
Our standard authentication approach using [method].

## Implementation

### Token Management
```typescript
// Standard token structure
interface AuthToken {
  accessToken: string
  refreshToken: string
  expiresIn: number
  tokenType: 'Bearer'
}

// Token refresh logic
async function refreshAuth(refreshToken: string): Promise<AuthToken> {
  // Implementation specific to our needs
}

Middleware Pattern ​

typescript
export function requireAuth(permissions?: string[]) {
  return async (req: Request, res: Response, next: NextFunction) => {
    // Our standard auth check
  }
}

Usage ​

  • All protected routes use requireAuth middleware
  • Tokens stored in [storage method]
  • Refresh handled automatically by [component]

Security Considerations ​

  • [Consideration 1]
  • [Consideration 2]

### Step 5: Memory Templates

Create templates for consistent documentation:

Create `memory-templates/feature.md`:

```markdown
# Feature: {FEATURE_NAME}

## Overview
{BRIEF_DESCRIPTION}

## Business Requirements
- {REQUIREMENT_1}
- {REQUIREMENT_2}

## Technical Implementation
### Architecture
{ARCHITECTURE_DESCRIPTION}

### Key Components
- `{COMPONENT_1}`: {DESCRIPTION}
- `{COMPONENT_2}`: {DESCRIPTION}

### API Endpoints
- `{METHOD} {ENDPOINT}`: {DESCRIPTION}

### Database Changes
- {CHANGE_1}
- {CHANGE_2}

## Security Considerations
- {CONSIDERATION_1}
- {CONSIDERATION_2}

## Performance Notes
- {NOTE_1}
- {NOTE_2}

## Testing Strategy
- Unit tests: {COVERAGE}
- Integration tests: {SCENARIOS}
- E2E tests: {FLOWS}

## Deployment Notes
- {NOTE_1}
- {NOTE_2}

## Future Enhancements
- {ENHANCEMENT_1}
- {ENHANCEMENT_2}

Advanced Template Features ​

1. Conditional Logic ​

Make templates adapt to different scenarios:

json
// template.json
{
  "variants": {
    "database": {
      "prompt": "Which database?",
      "options": ["postgresql", "mysql", "mongodb"],
      "affects": ["src/db", "migrations", "commands/add-model.md"]
    },
    "authentication": {
      "prompt": "Authentication method?",
      "options": ["jwt", "session", "oauth"],
      "affects": ["src/auth", "commands/setup-auth.md"]
    }
  }
}

2. Dynamic Configuration ​

Allow runtime configuration:

javascript
// .orchestre/configure.js
export async function configure(answers) {
  return {
    replacements: {
      '__APP_NAME__': answers.appName,
      '__DATABASE__': answers.database,
      '__PORT__': answers.port || 3000
    },
    exclude: answers.database === 'mongodb' 
      ? ['migrations/**'] 
      : ['src/mongodb/**']
  }
}

3. Post-Install Scripts ​

Run setup after template installation:

javascript
// .orchestre/post-install.js
export async function postInstall(projectPath, config) {
  // Generate environment file
  const envContent = `
DATABASE_URL=${config.database}://localhost
JWT_SECRET=${generateSecret()}
PORT=${config.port}
  `.trim()
  
  await fs.writeFile(
    path.join(projectPath, '.env'),
    envContent
  )
  
  // Run migrations
  if (config.database !== 'mongodb') {
    await exec('npm run migrate')
  }
  
  console.log('✅ Template configured successfully!')
}

4. Template Composition ​

Build templates that extend others:

json
// template.json
{
  "extends": "makerkit-nextjs",
  "name": "my-saas-extension",
  "additions": {
    "commands": ["commands/"],
    "patterns": ["patterns/"],
    "source": ["src/extensions/"]
  },
  "overrides": {
    "src/config/features.ts": "custom/features.ts"
  }
}

Testing Your Template ​

1. Local Testing ​

bash
# Test template installation
/create test-app file:///path/to/my-template

# Test commands
cd test-app
/add-entity TestEntity
/setup-monitoring

2. Automated Tests ​

Create test/template.test.js:

javascript
describe('My Custom Template', () => {
  it('should create project structure', async () => {
    const projectPath = await createProject('test', 'my-template')
    
    expect(fs.existsSync(path.join(projectPath, 'src'))).toBe(true)
    expect(fs.existsSync(path.join(projectPath, 'CLAUDE.md'))).toBe(true)
  })
  
  it('should run custom commands', async () => {
    await runCommand('/add-entity', 'Test')
    
    expect(fs.existsSync('src/entities/Test.ts')).toBe(true)
    expect(fs.existsSync('src/api/test.ts')).toBe(true)
  })
})

Publishing Your Template ​

1. Package for Distribution ​

json
// package.json
{
  "name": "@yourorg/orchestre-template-custom",
  "version": "1.0.0",
  "description": "Custom Orchestre template for [domain]",
  "keywords": ["orchestre-template"],
  "files": [
    "template.json",
    "CLAUDE.md",
    "commands/",
    "patterns/",
    "memory-templates/",
    "src/",
    ".orchestre/"
  ],
  "orchestre": {
    "type": "template"
  }
}

2. Publish to npm ​

bash
npm publish --access public

3. Use Published Template ​

bash
/create my-app @yourorg/orchestre-template-custom

Best Practices ​

1. Keep It Focused ​

  • One clear purpose per template
  • Don't try to solve everything
  • Make it excellent at one thing

2. Document Everything ​

  • Clear README
  • Comprehensive CLAUDE.md
  • Example usage for every command
  • Pattern explanations

3. Maintain Flexibility ​

  • Use configuration over hard-coding
  • Provide escape hatches
  • Allow customization

4. Test Thoroughly ​

  • Test all commands
  • Verify different configurations
  • Check edge cases
  • Test on fresh systems

5. Version Carefully ​

  • Follow semantic versioning
  • Document breaking changes
  • Provide migration guides

Examples of Domain-Specific Templates ​

1. E-commerce Template ​

bash
/create shop ecommerce-template
# Includes: product catalog, cart, checkout, payment, shipping

2. Healthcare Template ​

bash
/create clinic healthcare-template
# Includes: HIPAA compliance, patient records, appointments, billing

3. Education Template ​

bash
/create school education-template
# Includes: courses, students, grades, assignments, LMS features

4. IoT Template ​

bash
/create iot-platform iot-template
# Includes: device management, data ingestion, real-time dashboard

Troubleshooting ​

Common Issues ​

Template not found

  • Check file paths in template.json
  • Verify all referenced files exist
  • Check npm package contents

Commands not working

  • Ensure command files end with .md
  • Check command file syntax
  • Verify prompt section exists

Patterns not applied

  • Check pattern file format
  • Ensure patterns directory is included
  • Verify pattern references

Next Steps ​

  1. Analyze your needs - What patterns do you repeat?
  2. Start simple - Create basic template first
  3. Add intelligence - Build smart commands
  4. Test extensively - Ensure reliability
  5. Share with community - Publish your template

Ready to create your template? Start with:

bash
/orchestrate "Design a custom template for [your domain]"

Built with ❤️ for the AI Coding community, by Praney Behl