Project Types Reference
Quick lookup for type-specific questions, patterns, and recommended stacks.
Type Index
| Type | Complexity | Default PRD | Recommended Stack |
|---|---|---|---|
| CLI Tool | Low | Minimal | Rust (clap) |
| REST API | Low-Medium | Minimal/Standard | Rust (axum) |
| Web App | Medium | Standard | Rust + HTMX |
| Telegram Bot | Medium | Standard | Rust (teloxide) |
| Discord Bot | Medium | Standard | Rust (serenity) |
| GraphQL API | Medium | Standard | Rust (async-graphql) |
| Mobile App | High | Full | Flutter/React Native |
| Data Pipeline | High | Full | Python/Rust |
| Browser Extension | Medium | Standard | TypeScript |
CLI Tool
Discovery Questions
- •Execution model: One-shot or interactive?
- •Arguments: Positional args, flags, or subcommands?
- •Output: Text, JSON, or files?
- •Config: Config file needed?
Patterns
- •Use
clapfor argument parsing - •Support
--jsonfor machine output - •Use
anyhowfor error handling - •Exit codes: 0 success, 1 error
Stack
toml
[dependencies]
clap = { version = "4", features = ["derive"] }
anyhow = "1"
serde_json = "1" # if JSON output
Example Structure
code
src/ main.rs # Entry point, arg parsing lib.rs # Core logic commands/ # Subcommand handlers (if needed)
REST API
Discovery Questions
- •Audience: Internal, public, or partner?
- •Auth: None, API Key, JWT, OAuth2?
- •Rate limiting: Needed?
- •Versioning: /v1/, header, or none?
Patterns
- •OpenAPI spec first (consider)
- •JSON responses with consistent error format
- •Health endpoint required:
GET /health - •Structured logging (tracing)
Stack
toml
[dependencies]
axum = "0.8"
tokio = { version = "1", features = ["full"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tracing = "0.1"
tracing-subscriber = "0.3"
Example Structure
code
src/ main.rs # Server setup lib.rs # Router, handlers routes/ # Route modules models/ # Data structures middleware/ # Auth, logging
Web App (SaaS)
Discovery Questions
- •Auth: Email/password, OAuth, magic link, or none?
- •Realtime: WebSocket, SSE, or none?
- •Multi-tenant: Yes/no?
- •Admin panel: Needed?
Patterns
- •HTMX for interactivity (minimal JS)
- •Server-rendered templates (Askama)
- •Progressive enhancement
- •CSRF protection on forms
Stack
toml
[dependencies]
axum = "0.8"
tokio = { version = "1", features = ["full"] }
askama = "0.12"
askama_axum = "0.4"
tower-http = { version = "0.6", features = ["fs"] }
Example Structure
code
src/
main.rs
lib.rs
routes/
templates/
base.html
pages/
components/
static/
css/
js/ (minimal)
Telegram Bot
Discovery Questions
- •Interaction: Commands, dialog, inline, or buttons?
- •State: Stateless, SQLite, or PostgreSQL?
- •Integrations: LLM, payments, external APIs?
- •Delivery: Webhooks or polling?
Patterns
- •Start with polling (simpler), switch to webhooks for prod
- •FSM (finite state machine) for dialogs
- •Inline keyboards for navigation
- •Rate limit user requests
Stack
toml
[dependencies]
teloxide = { version = "0.13", features = ["macros"] }
tokio = { version = "1", features = ["full"] }
sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite"] } # if DB
serde = { version = "1", features = ["derive"] }
Example Structure
code
src/
main.rs # Bot setup
lib.rs # Command handlers
handlers/
commands.rs # /start, /help, etc
callbacks.rs # Button callbacks
state.rs # FSM states (if dialog)
db.rs # Database (if needed)
Key Considerations
- •Store bot token in env var:
TELOXIDE_TOKEN - •Handle
/startand/helpcommands - •Graceful shutdown for webhook mode
Discord Bot
Discovery Questions
- •Type: Slash commands, prefix commands, or both?
- •Scope: Single server or multi-server?
- •Features: Moderation, games, integrations?
- •State: In-memory, SQLite, or PostgreSQL?
Patterns
- •Use slash commands (modern)
- •Respect rate limits
- •Handle guild joins/leaves
- •Shard for 2500+ servers
Stack
toml
[dependencies]
serenity = { version = "0.12", features = ["framework", "standard_framework"] }
tokio = { version = "1", features = ["full"] }
sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite"] } # if DB
Mobile App
Discovery Questions
- •Platforms: iOS, Android, or both?
- •Offline: Offline-first or online-only?
- •Push: Push notifications needed?
- •Native: Camera, GPS, sensors?
Patterns
- •Consider Flutter for cross-platform
- •Local storage with Hive/SQLite
- •Deep linking support
- •App store submission requirements
Stack Options
- •Flutter: Dart, single codebase
- •React Native: JS/TS, web dev friendly
- •Native: Swift/Kotlin for full control
Key Considerations
- •Design for both platforms (different UX conventions)
- •Handle offline gracefully
- •Consider app size
- •Test on real devices
Data Pipeline
Discovery Questions
- •Trigger: Schedule, event, or manual?
- •Volume: How much data? How often?
- •Sources: APIs, databases, files?
- •Output: Database, files, API?
Patterns
- •Idempotent operations
- •Checkpointing for resumability
- •Structured logging
- •Alerting on failures
Stack
toml
[dependencies]
tokio = { version = "1", features = ["full"] }
reqwest = { version = "0.12", features = ["json"] }
sqlx = { version = "0.8", features = ["runtime-tokio", "postgres"] }
serde = { version = "1", features = ["derive"] }
chrono = "0.4"
Browser Extension
Discovery Questions
- •Browser: Chrome, Firefox, or both?
- •Permissions: What site access?
- •UI: Popup, sidebar, or page action?
- •Storage: Local or sync?
Patterns
- •Manifest V3 for Chrome
- •Content scripts for page interaction
- •Background service workers
- •Careful with permissions (minimal)
Stack
- •TypeScript for type safety
- •Vite for bundling
- •Chrome Extension APIs
Example Structure
code
src/ background.ts # Service worker content.ts # Content script popup/ # Popup UI options/ # Options page manifest.json
Quick Selection Guide
code
Need CLI tool? → Rust + clap Need API? → REST: Rust + axum → GraphQL: Rust + async-graphql Need Web UI? → Simple: Rust + HTMX → Complex SPA: Consider separate frontend Need Bot? → Telegram: Rust + teloxide → Discord: Rust + serenity Need Mobile? → Cross-platform: Flutter → Web skills: React Native Need Data Processing? → Batch: Rust or Python → Stream: Rust + Tokio