HAVE SMRT Template
Historical document — the API below no longer exists. This page describes a template repository from before the
@have/*→@happyvertical/*rename. At 0.40.61 there is no@have/smrt,@have/smrt-template, or@have/sveltepackage;SmartMicroserviceandgenerateFromTemplateare not exported by anything; and the per-type field helpers (text(),decimal(),boolean()) were removed in #318 — schema now comes from TypeScript property types, narrowed by thefield/foreignKey/metadecorators. For a current application scaffold, usepackages/template-sveltekit. This page is kept because ADR 0001 cites it; read it as a record of intent, not as instructions.
A GitHub template for building AI-powered applications with the HAVE SDK ecosystem.
Quick Start
- Use this template: Click "Use this template" on GitHub
- Install dependencies:
bun install - Start development:
bun run dev
What's Included
🚀 Full Stack Foundation
- SMRT Objects: Define your domain models with decorators
- Auto-generated APIs: REST, GraphQL, and OpenAPI from objects
- MCP Tools: AI-native tools for LLM integration
- CLI Interface: Command-line tools for your application
- Authentication: Keycloak integration out-of-the-box
📦 Example Applications
- E-commerce: Product and Category management
- SvelteKit UI: Modern frontend with auto-generated forms
- Microservice: Complete deployment-ready backend
🛠 Development Tools
- TypeScript: Full type safety
- Bun: Fast package management and runtime
- Biome: Code formatting and linting
- Vitest: Testing framework
Project Structure
├── packages/
│ ├── smrt-template/ # This template package
│ │ ├── src/
│ │ │ ├── examples/ # Example applications
│ │ │ ├── auth/ # Authentication components
│ │ │ └── microservice.ts # Main orchestration
│ │ └── templates/ # GitHub template files
│ └── sveltekit-template/ # SvelteKit frontend template
└── docs/ # Documentation and workflows
Usage Patterns
1. Define SMRT Objects
import { SmrtObject, smrt, text, decimal, boolean } from '@have/smrt';
@smrt({
api: { exclude: ['delete'] },
mcp: { include: ['list', 'get', 'create'] },
cli: true
})
class Product extends SmrtObject {
name = text({ required: true });
description = text();
price = decimal({ min: 0, required: true });
inStock = boolean({ default: true });
}
2. Create Smart Microservice
import { SmartMicroservice } from '@have/smrt-template';
const app = new SmartMicroservice([Product], {
name: 'my-api',
generators: ['api', 'mcp', 'cli'],
database: { type: 'postgres', url: process.env.DATABASE_URL },
ai: { provider: 'openai', apiKey: process.env.OPENAI_API_KEY }
});
const services = await app.start();
3. Generate Frontend Components
// Auto-generate Svelte forms from SMRT objects
import { generateFromTemplate } from '@have/svelte';
await generateFromTemplate('./src/objects', './src/components');
Templates
SvelteKit Application
- Modern Svelte 5 with runes
- shadcn-svelte components
- Auto-generated forms from SMRT objects
- TypeScript and Tailwind CSS
Express API
- REST endpoints from SMRT objects
- OpenAPI documentation
- Authentication middleware
- Health checks and monitoring
MCP Server
- AI tools generated from objects
- LLM-native function calling
- Type-safe tool definitions
- Claude Desktop integration
CLI Application
- Interactive prompts
- CRUD operations for objects
- Batch processing commands
- Configuration management
Deployment
Docker
FROM oven/bun:alpine
COPY . /app
WORKDIR /app
RUN bun install
RUN bun run build
CMD ["bun", "start"]
Vercel (SvelteKit)
# Already configured for Vercel deployment
bun run build
AWS Lambda (Serverless)
export const handler = app.generateHandler();
Kubernetes
Helm charts and manifests included in /k8s directory.
Configuration
Environment Variables
# Database
DATABASE_URL=postgres://localhost/myapp
# Authentication
KEYCLOAK_URL=http://localhost:8080
KEYCLOAK_CLIENT_ID=my-app
# AI Integration
OPENAI_API_KEY=sk-...
Package Scripts
{
"dev": "bun run src/index.ts",
"build": "bun build src/index.ts",
"start": "bun run build/index.js",
"test": "vitest",
"generate": "smrt generate"
}
Examples
See the /examples directory for complete applications:
- E-commerce: Product catalog with categories
- Blog: Posts and comments
- CRM: Contacts and companies
- Inventory: Items and locations
Contributing
This template is part of the HAVE SDK ecosystem. Contributions welcome!
- Fork the repository
- Create your feature branch
- Add tests for new functionality
- Submit a pull request
License
MIT - Use this template freely for any project.