# Getting Started with Bakery IA

Welcome to Bakery IA! This guide will help you get up and running quickly with the platform.

## Overview

Bakery IA is an advanced AI-powered platform for bakery management and optimization. The platform implements a microservices architecture with 15+ interconnected services providing comprehensive bakery management solutions including:

- **AI-Powered Forecasting**: ML-based demand prediction
- **Inventory Management**: Real-time stock tracking and optimization
- **Production Planning**: Optimized production schedules
- **Sales Analytics**: Advanced sales insights and reporting
- **Multi-Tenancy**: Complete tenant isolation and management
- **Sustainability Tracking**: Environmental impact monitoring

## Prerequisites

Before you begin, ensure you have the following installed:

### Required
- **Docker Desktop** (with Kubernetes enabled) - v4.0 or higher
- **Docker Compose** - v2.0 or higher
- **Node.js** - v18 or higher (for frontend development)
- **Python** - v3.11 or higher (for backend services)
- **kubectl** - Latest version (for Kubernetes deployment)

### Optional
- **Tilt** - For live development environment
- **Skaffold** - Alternative development tool
- **pgAdmin** - For database management
- **Postman** - For API testing

## Quick Start (Docker Compose)

The fastest way to get started is using Docker Compose:

### 1. Clone the Repository

```bash
git clone <repository-url>
cd bakery-ia
```

### 2. Set Up Environment Variables

```bash
# Copy the example environment file
cp .env.example .env

# Edit the .env file with your configuration
nano .env  # or use your preferred editor
```

Key variables to configure:
- `JWT_SECRET` - Secret key for JWT tokens
- Database passwords (use strong passwords for production)
- Redis password
- SMTP settings (for email notifications)

### 3. Start the Services

```bash
# Build and start all services
docker-compose up --build

# Or run in detached mode
docker-compose up -d --build
```

### 4. Verify the Deployment

```bash
# Check service health
docker-compose ps

# View logs
docker-compose logs -f gateway
```

### 5. Access the Application

- **Frontend**: http://localhost:3000
- **API Gateway**: http://localhost:8000
- **API Documentation**: http://localhost:8000/docs
- **pgAdmin**: http://localhost:5050 (admin@bakery.com / admin)

## Quick Start (Kubernetes - Development)

For a more production-like environment:

### 1. Enable Kubernetes in Docker Desktop

1. Open Docker Desktop settings
2. Go to Kubernetes tab
3. Check "Enable Kubernetes"
4. Click "Apply & Restart"

### 2. Deploy to Kubernetes

```bash
# Create namespace
kubectl create namespace bakery-ia

# Apply configurations
kubectl apply -k infrastructure/kubernetes/overlays/dev

# Check deployment status
kubectl get pods -n bakery-ia
```

### 3. Access Services

```bash
# Port forward the gateway
kubectl port-forward -n bakery-ia svc/gateway 8000:8000

# Port forward the frontend
kubectl port-forward -n bakery-ia svc/frontend 3000:3000
```

Access the application at http://localhost:3000

## Development Workflow

### Using Tilt (Recommended)

Tilt provides a live development environment with auto-reload:

```bash
# Install Tilt
curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash

# Start Tilt
tilt up

# Access Tilt UI at http://localhost:10350
```

### Using Skaffold

```bash
# Install Skaffold
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin

# Run development mode
skaffold dev
```

## First Steps After Installation

### 1. Create Your First Tenant

```bash
# Register a new user and tenant
curl -X POST http://localhost:8000/api/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "admin@mybakery.com",
    "password": "SecurePassword123!",
    "full_name": "Admin User",
    "tenant_name": "My Bakery"
  }'
```

### 2. Log In

```bash
# Get access token
curl -X POST http://localhost:8000/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "admin@mybakery.com",
    "password": "SecurePassword123!"
  }'
```

Save the returned `access_token` for subsequent API calls.

### 3. Explore the API

Visit http://localhost:8000/docs to see interactive API documentation with all available endpoints.

### 4. Add Sample Data

```bash
# Load demo data (optional)
kubectl exec -n bakery-ia deploy/demo-session -- python seed_demo_data.py
```

## Project Structure

```
bakery-ia/
├── frontend/                 # React frontend application
├── gateway/                  # API gateway service
├── services/                 # Microservices
│   ├── auth/                # Authentication service
│   ├── tenant/              # Multi-tenancy service
│   ├── inventory/           # Inventory management
│   ├── forecasting/         # ML forecasting service
│   ├── production/          # Production planning
│   ├── sales/               # Sales service
│   ├── orders/              # Order management
│   └── ...                  # Other services
├── shared/                  # Shared libraries and utilities
├── infrastructure/          # Kubernetes configs and IaC
│   ├── kubernetes/         # K8s manifests
│   └── tls/                # TLS certificates
├── scripts/                 # Utility scripts
└── docs/                    # Documentation
```

## Common Tasks

### View Service Logs

```bash
# Docker Compose
docker-compose logs -f <service-name>

# Kubernetes
kubectl logs -f -n bakery-ia deployment/<service-name>
```

### Restart a Service

```bash
# Docker Compose
docker-compose restart <service-name>

# Kubernetes
kubectl rollout restart -n bakery-ia deployment/<service-name>
```

### Access Database

```bash
# Using pgAdmin at http://localhost:5050
# Or use psql directly
docker-compose exec auth-db psql -U auth_user -d auth_db
```

### Run Database Migrations

```bash
# For a specific service
docker-compose exec auth-service alembic upgrade head
```

### Clean Up

```bash
# Docker Compose
docker-compose down -v  # -v removes volumes

# Kubernetes
kubectl delete namespace bakery-ia
```

## Troubleshooting

### Services Won't Start

1. **Check Docker is running**: `docker ps`
2. **Check ports are free**: `lsof -i :8000` (or other ports)
3. **View logs**: `docker-compose logs <service-name>`
4. **Rebuild**: `docker-compose up --build --force-recreate`

### Database Connection Errors

1. **Check database is running**: `docker-compose ps`
2. **Verify credentials** in `.env` file
3. **Check network**: `docker network ls`
4. **Reset database**: `docker-compose down -v && docker-compose up -d`

### Frontend Can't Connect to Backend

1. **Check gateway is running**: `curl http://localhost:8000/health`
2. **Verify CORS settings** in gateway configuration
3. **Check network mode** in docker-compose.yml

### Kubernetes Pods Not Starting

```bash
# Check pod status
kubectl get pods -n bakery-ia

# Describe failing pod
kubectl describe pod -n bakery-ia <pod-name>

# View pod logs
kubectl logs -n bakery-ia <pod-name>
```

## Next Steps

Now that you have the platform running, explore these guides:

1. **[Architecture Overview](../02-architecture/system-overview.md)** - Understand the system design
2. **[Development Workflow](../04-development/README.md)** - Learn development best practices
3. **[API Reference](../08-api-reference/README.md)** - Explore available APIs
4. **[Deployment Guide](../05-deployment/README.md)** - Deploy to production

## Additional Resources

### Documentation
- [Testing Guide](../04-development/testing-guide.md)
- [Security Overview](../06-security/README.md)
- [Feature Documentation](../03-features/)

### Tools & Scripts
- `/scripts/` - Utility scripts for common tasks
- `/infrastructure/` - Infrastructure as Code
- `/tests/` - Test suites

### Getting Help

- Check the [documentation](../)
- Review [troubleshooting guide](#troubleshooting)
- Explore existing issues in the repository

## Development Tips

### Hot Reload

- **Frontend**: Runs with hot reload by default (React)
- **Backend**: Use Tilt for automatic reload on code changes
- **Database**: Mount volumes for persistent data during development

### Testing

```bash
# Run all tests
docker-compose exec <service-name> pytest

# Run specific test
docker-compose exec <service-name> pytest tests/test_specific.py

# With coverage
docker-compose exec <service-name> pytest --cov=app tests/
```

### Code Quality

```bash
# Format code
black services/auth/app

# Lint code
flake8 services/auth/app

# Type checking
mypy services/auth/app
```

## Performance Optimization

### For Development

- Use **Tilt** for faster iteration
- Enable **caching** in Docker builds
- Use **local volumes** instead of named volumes
- Limit **resource allocation** in Docker Desktop settings

### For Production

- See the [Deployment Guide](../05-deployment/README.md)
- Configure proper resource limits
- Enable horizontal pod autoscaling
- Use production-grade databases

---

**Welcome to Bakery IA!** If you have any questions, check the documentation or reach out to the team.

**Last Updated**: 2025-11-04
