Back to skills
SkillHub ClubRun DevOpsFull StackDevOps

devops-local-dev

Manages the Bestays Docker Compose development environment including service orchestration, Makefile workflows, logs monitoring, and hot-reload development. This skill should be used when starting/stopping development services, checking logs, troubleshooting Docker issues, or managing the local development workflow.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
0
Hot score
74
Updated
March 20, 2026
Overall rating
C0.5
Composite score
0.5
Best-practice grade
B81.2

Install command

npx @skill-hub/cli install shredbx-demo-3d-model-devops-local-dev
dockerdevopslocal-developmentmakefiletroubleshooting

Repository

shredbx/demo-3d-model

Skill path: .claude/skills/devops-local-dev

Manages the Bestays Docker Compose development environment including service orchestration, Makefile workflows, logs monitoring, and hot-reload development. This skill should be used when starting/stopping development services, checking logs, troubleshooting Docker issues, or managing the local development workflow.

Open repository

Best for

Primary workflow: Run DevOps.

Technical facets: Full Stack, DevOps.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: shredbx.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install devops-local-dev into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/shredbx/demo-3d-model before adding devops-local-dev to shared team environments
  • Use devops-local-dev for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: devops-local-dev
description: Manages the Bestays Docker Compose development environment including service orchestration, Makefile workflows, logs monitoring, and hot-reload development. This skill should be used when starting/stopping development services, checking logs, troubleshooting Docker issues, or managing the local development workflow.
---

# Devops Local Dev

## Overview

Manage the Bestays Docker Compose development environment with 4 core services (PostgreSQL, FastAPI, SvelteKit, Redis) using Makefile commands for orchestration, monitoring, and troubleshooting.

## When to Use This Skill

Use this skill when:

- Starting a new development session (`make dev`, `make up`)
- Stopping or restarting services (`make down`, `make restart`)
- Checking service logs (`make logs`, `make logs-server`, `make logs-frontend`)
- Troubleshooting service health or connectivity issues
- Accessing service shells (`make shell-server`, `make shell-db`)
- Resetting the development environment (`make reset`)
- Understanding the Docker Compose architecture

## Docker Compose Architecture

### Services Overview

| Service      | Container Name       | Host Port   | Purpose                                 |
| ------------ | -------------------- | ----------- | --------------------------------------- |
| **postgres** | bestays-db-dev       | 5433 → 5432 | PostgreSQL 16-alpine with pgvector      |
| **server**   | bestays-server-dev   | 8011 → 8011 | FastAPI backend with hot-reload         |
| **frontend** | bestays-dev-frontend | 5183 → 5183 | SvelteKit 5 with Vite HMR               |
| **redis**    | bestays-redis-dev    | 6379 → 6379 | Redis 7-alpine for caching/sessions     |
| **pgadmin**  | bestays-pgadmin-dev  | 5050 → 80   | Database UI (optional, --profile tools) |

**Access URLs:**

- Backend API: http://localhost:8011
- API Docs: http://localhost:8011/docs
- Frontend: http://localhost:5183
- Database: localhost:5433 (PostgreSQL client)
- pgAdmin: http://localhost:5050 (when started with `make pgadmin`)

### Persistent Volumes

| Volume                  | Purpose            | Survives `make down`? |
| ----------------------- | ------------------ | --------------------- |
| `postgres_data`         | Database data      | ✅ Yes                |
| `redis_data`            | Redis persistence  | ✅ Yes                |
| `server_venv`           | Python virtual env | ✅ Yes                |
| `frontend_node_modules` | Node dependencies  | ✅ Yes                |
| `pgadmin_data`          | pgAdmin config     | ✅ Yes                |

**Note:** Use `make reset` to delete all volumes and start fresh.

### Network

All services communicate via `bestays-network` (bridge network).

- Services use **internal names** to communicate (e.g., `postgres:5432`, `redis:6379`)
- Host machine uses **localhost** with mapped ports (e.g., `localhost:5433`)

## Development Workflow

### Starting a Session

**Recommended (with validation):**

```bash
make dev
```

This command:

1. Detects and stops existing containers
2. Runs preflight validation (checks dependencies, configs)
3. Starts all Docker services
4. Waits for health checks
5. Verifies service health

**Quick start (no validation):**

```bash
make up
```

**With pgAdmin (database UI):**

```bash
make pgadmin
```

### Monitoring Services

**Follow all logs (recommended during development):**

```bash
make logs
```

**Service-specific logs:**

```bash
make logs-server     # Backend FastAPI logs
make logs-frontend   # Frontend SvelteKit/Vite logs
make logs-db         # PostgreSQL logs
```

**Check service status:**

```bash
make status          # Docker Compose status
make check           # Health check all services
make dev-status      # Comprehensive status + validation
```

### Hot-Reload Development

**Backend (FastAPI):**

- Auto-reloads on `.py` file changes in `apps/server/`
- Restart time: ~1-2 seconds
- Watch logs: `make logs-server`

**Frontend (SvelteKit):**

- Vite HMR on `.svelte`, `.ts`, `.js`, `.css` changes in `apps/frontend/`
- Reload time: ~100-500ms (instant in browser)
- Watch logs: `make logs-frontend`

**Restart after major changes:**

```bash
make restart-server     # Restart backend only
make restart-frontend   # Restart frontend only
make restart            # Restart all services
```

### Shell Access

**Backend shell (Python environment):**

```bash
make shell-server
# Inside container: python, pytest, alembic commands
```

**Frontend shell:**

```bash
make shell-frontend
# Inside container: npm, node commands
```

**Database shell (psql):**

```bash
make shell-db
# PostgreSQL shell connected to bestays_dev
```

### Stopping Services

**Preserve data (recommended):**

```bash
make down           # or make dev-stop
```

Stops containers, keeps volumes intact.

**Full reset (delete all data):**

```bash
make reset
```

Stops containers, deletes volumes, restarts fresh.

## Makefile Commands

The project uses a Makefile for Docker Compose orchestration. Run `make help` to see all available commands.

### Common Commands

**Session Management:**

```bash
make dev          # Smart start with validation
make up           # Start all services
make down         # Stop services (preserve data)
make restart      # Restart all services
make reset        # Full reset (delete volumes)
```

**Monitoring:**

```bash
make logs              # Follow all logs
make logs-server       # Backend logs only
make logs-frontend     # Frontend logs only
make status            # Service status
make check             # Health check
```

**Shell Access:**

```bash
make shell-server      # Backend container shell
make shell-frontend    # Frontend container shell
make shell-db          # PostgreSQL shell
```

**Development:**

```bash
make build            # Rebuild containers
make test-server      # Run backend tests
make migrate          # Run database migrations
```

**Guidelines:**

- Use `make dev` for validated startup (runs preflight checks)
- Use `make up` for quick restart (no validation)
- Use `make logs` during active development
- Use `make reset` only when you need a completely fresh start (deletes all data)

## Troubleshooting

### Services Won't Start

**Check if ports are already in use:**

```bash
lsof -i :5433  # PostgreSQL
lsof -i :8011  # Backend
lsof -i :5183  # Frontend
lsof -i :6379  # Redis
```

**Solution:** Stop conflicting processes or change ports in `docker-compose.dev.yml`

### Backend Not Hot-Reloading

**Verify volume mount:**

```bash
make shell-server
ls -la /app
# Should show your source code
```

**Check logs for reload confirmation:**

```bash
make logs-server
# Look for "Uvicorn running on..." and "Watching for changes..."
```

### Frontend Not Hot-Reloading

**Check Vite startup:**

```bash
make logs-frontend
# Look for "VITE ready in X ms" and HMR connection
```

**Verify browser connection:**

- Open browser console
- Look for Vite HMR websocket connection
- Should see: `[vite] connected.`

### Database Connection Errors

**Check database health:**

```bash
make check
```

**Verify connection string (from backend container):**

```bash
make shell-server
echo $DATABASE_URL
# Should be: postgresql+asyncpg://bestays_user:bestays_password@postgres:5432/bestays_dev
```

**Common issue:** Backend tries to connect before PostgreSQL is ready

- **Solution:** Restart backend: `make restart-server`
- Health checks should prevent this, but can happen on slow systems

### Cannot Access Services from Host

**Check if services are running:**

```bash
make status
```

**Verify port mappings:**

```bash
docker ps --filter "name=bestays"
# Should show: 0.0.0.0:8011->8011/tcp
```

**Test connectivity:**

```bash
curl http://localhost:8011/api/health   # Backend
curl http://localhost:5183              # Frontend
```

### Full Reset Required

If nothing works, nuclear option:

```bash
make reset
```

This will:

1. Stop all services
2. Delete all volumes (database data, dependencies)
3. Start fresh

**Note:** You will lose local database data. Consider backing up first (see devops-database skill).

## Environment Variables

**Required variables (set in `.env` file):**

```bash
# Database
POSTGRES_USER=bestays_user
POSTGRES_PASSWORD=bestays_password
POSTGRES_DB=bestays_dev

# Backend
CLERK_SECRET_KEY=sk_test_...
CLERK_WEBHOOK_SECRET=whsec_...
OPENROUTER_API_KEY=sk-or-v1-...

# Frontend
VITE_CLERK_PUBLISHABLE_KEY=pk_test_...
```

**Location:** Copy `.env.example` to `.env` and configure.

**Validation:** Run `make dev-validate` to check environment configuration.

## Common Development Patterns

### TDD Workflow

```bash
# Terminal 1: Watch backend logs
make logs-server

# Terminal 2: Run tests on changes
make test-server

# Edit code → Tests auto-run → Check logs → Repeat
```

### Frontend Component Development

```bash
# Terminal 1: Watch frontend logs
make logs-frontend

# Terminal 2: Browser with DevTools open
# Edit .svelte files → Vite HMR → Instant browser update
```

### API Development

```bash
# Start services
make dev

# Access interactive API docs
open http://localhost:8011/docs

# Make changes to Python code → Auto-reload → Refresh docs → Test
```

### Full-Stack Feature Development

```bash
# Terminal 1: All logs
make logs

# Terminal 2: Available for commands
make shell-server     # Backend work
make shell-frontend   # Frontend work
make migrate          # Database changes
```

## Related Skills

- **devops-database** - Database migrations, Alembic, PostgreSQL management

## Key Files

- `docker-compose.dev.yml` - Service definitions
- `Makefile` - Command shortcuts (run `make help`)
- `.env` - Environment variables (copy from `.env.example`)

## Integration with Claude Code

When implementing features, Claude Code will:

1. **Start session:** `make dev`
2. **Watch logs:** `make logs` (or service-specific)
3. **Run tests:** `make test-server`
4. **Restart services if needed:** `make restart-server`
5. **Health check before testing:** `make check`
6. **End session (preserves data):** `make down`

**Why Docker for Development?**

1. **Dev/Prod Parity** - Same PostgreSQL version, same environment
2. **Easy Resets** - `make reset` gives fresh start
3. **Isolated Dependencies** - No conflicts with host machine
4. **Hot-Reload** - Code changes reflect immediately
5. **Unified Logs** - All service logs in one place
6. **Session Management** - Easy restart between development sessions
devops-local-dev | SkillHub