**Database Schema Changes (Section 2.1):** - Rename generations.enhancedPrompt → generations.prompt (prompt used for generation) - Rename generations.originalPrompt semantics → user's original (only if enhanced) - Reverse semantics: prompt = what was used, originalPrompt = preserved user input - Add projects.allowNewLiveScopes (BOOLEAN, default: true) - Add projects.newLiveScopesGenerationLimit (INTEGER, default: 30) **Prompt Semantics Update:** - If autoEnhance=false: prompt=user input, originalPrompt=null - If autoEnhance=true: prompt=enhanced, originalPrompt=user input - Updated GenerationService.create() to implement new logic - Updated retry() and update() methods to use new prompt field **Regeneration Refactoring (Section 3):** - Add POST /api/v1/generations/:id/regenerate endpoint - Remove status checks (allow regeneration for any status) - Remove retry count logic (no longer tracked) - Remove parameter overrides (uses exact same params as original) - Updates existing image (same imageId, storageKey, storageUrl) - Keep /retry endpoint for backward compatibility (delegates to regenerate) - GenerationService.regenerate() method created - Physical file in MinIO overwritten by ImageGenService **Flow Regeneration (Section 3.6):** - Add POST /api/v1/flows/:id/regenerate endpoint - Regenerates most recent generation in flow - Returns FLOW_HAS_NO_GENERATIONS error if flow is empty - Uses parameters from last generation **Lazy Flow Creation (Section 4.3):** - Remove POST /api/v1/flows endpoint (commented out with explanation) - Flows now created automatically when: - Generation/upload specifies a flowId - Generation/upload provides flowAlias (eager creation) - Eager creation logic already implemented in Phase 1 **Technical Notes:** - All Phase 2 Part 1 changes maintain data integrity - No migration needed (dev mode per user confirmation) - Regeneration preserves image metadata (alias, createdAt, etc.) - Processing time tracked for regeneration 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| .claude | ||
| apps | ||
| docs | ||
| packages/database | ||
| prod-env | ||
| scripts | ||
| tests | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| .mcp.json | ||
| .prettierignore | ||
| .prettierrc.json | ||
| CLAUDE.md | ||
| README.md | ||
| UPLOAD_COMPONENTS_DELIVERY.md | ||
| UPLOAD_PAGE_IMPLEMENTATION.md | ||
| api-refactoring-final.md | ||
| banatie-api-requirements.md | ||
| banatie-database-design.md | ||
| banatie.code-workspace | ||
| demo.test.ts | ||
| infrastructure.md | ||
| minio-setup.md | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| test-api.sh | ||
| test-filename-sanitization.js | ||
| vitest.config.ts | ||
README.md
Banatie - AI Image Generation Service
A comprehensive monorepo for the Banatie AI image generation platform, featuring multiple applications for different use cases.
Architecture Overview
banatie-service/
├── apps/
│ ├── api-service/ # REST API for image generation (Express.js + TypeScript)
│ ├── landing/ # Landing page with demo (Next.js)
│ ├── studio/ # SaaS platform with billing (Next.js + Supabase + Stripe)
│ └── admin/ # Administration dashboard (Next.js)
├── data/ # Docker volumes (postgres, minio)
├── docker-compose.yml # Infrastructure services
└── package.json # Workspace scripts
Applications
🚀 API Service (apps/api-service)
- Port: 3000
- Tech: Express.js, TypeScript, Gemini AI
- Purpose: Core REST API for AI image generation
- Features: Image generation, file upload, rate limiting, logging
🌐 Landing Page (apps/landing)
- Port: 3001
- Tech: Next.js 14, Tailwind CSS
- Purpose: Public landing page with demo
- Features: Service overview, image generation demo
🏢 Studio (apps/studio)
- Port: 3002
- Tech: Next.js 14, Supabase, Stripe
- Purpose: SaaS platform for paid users
- Features: Authentication, billing, subscriptions, usage tracking
🔧 Admin (apps/admin)
- Port: 3003
- Tech: Next.js 14, Dashboard components
- Purpose: Service administration and monitoring
- Features: System monitoring, user management, analytics
Quick Start
Prerequisites
- Node.js >= 18.0.0
- pnpm >= 8.0.0
- Docker & Docker Compose
Development Setup
# Clone and install dependencies
git clone <repository-url>
cd banatie-service
pnpm install
# Start infrastructure (PostgreSQL + MinIO)
docker compose up -d postgres minio storage-init
# Start all applications in development mode
pnpm dev
# Or start individual apps
pnpm dev:api # API Service on :3000
pnpm dev:landing # Landing Page on :3001
pnpm dev:studio # Studio Platform on :3002
pnpm dev:admin # Admin Dashboard on :3003
Production Deployment
# Build all applications
pnpm build
# Start infrastructure
docker compose up -d
# Start production servers
pnpm start:api
pnpm start:landing
pnpm start:studio
pnpm start:admin
Development Commands
# Install dependencies for all apps
pnpm install
# Development (all apps in parallel)
pnpm dev
# Build all apps
pnpm build
# Type checking
pnpm typecheck
# Linting
pnpm lint
# Testing (API service only)
pnpm test
# Clean all build outputs
pnpm clean
Environment Configuration
Each application has its own environment configuration:
- Root:
.env.docker(for Docker services) - API Service:
apps/api-service/.env - Studio:
apps/studio/.env.local - Admin:
apps/admin/.env.local
See individual app README files for specific environment variables.
Services & Ports
| Service | Port | Description |
|---|---|---|
| API Service | 3000 | Core REST API |
| Landing Page | 3001 | Public website |
| Studio Platform | 3002 | SaaS application |
| Admin Dashboard | 3003 | Administration |
| PostgreSQL | 5460 | Database |
| MinIO API | 9000 | Object storage |
| MinIO Console | 9001 | Storage admin |
API Usage
Generate Image
# Text-to-image
curl -X POST http://localhost:3000/api/text-to-image \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"prompt": "A magical forest with glowing mushrooms",
"filename": "magical_forest"
}'
See apps/api-service/README.md for detailed API documentation.
Contributing
- Each app has its own package.json and dependencies
- Use the root workspace commands for multi-app operations
- Follow the existing code style and patterns
- Run
pnpm typecheckandpnpm lintbefore committing
License
MIT License - see individual app directories for more details.