- gRPC Service – port 50051, handles business logic and external API calls
- HTTP Gateway – port 8080, exposes REST endpoints
- Internal communication via gRPC
- External access via HTTP
gRPC / Protocol Buffers
HTTP/REST
External currency API integration
- Concurrent per-site monitoring - each site runs in its own goroutine with a ticker
- Each site gets a dedicated monitor worker
- Configurable intervals and timeouts via YAML
- Notifier pattern for status change alerts
YAML configuration
HTTP client
Structured logging (slog)
Wait groups for goroutine management
- Custom JWT Authentication Middleware
- Custom Database Migrator with version tracking and seeding system
- Custom Validator for input validation using struct tags
- Configuration Management with YAML (cfg package)
- Layered Architecture: Handlers → Services → Repositories → PostgreSQL
PostgreSQL + custom migrator with schema_migrations table
JWT Authentication (golang-jwt/jwt) with custom middleware
bcrypt for password hashing
YAML Config
Custom Validator based on reflection and struct tags
- Worker pool for concurrent image processing
- HTTP server with file upload and validation
- Asynchronous job processing with buffered channels
- Graceful shutdown of both server and worker pool
HTTP server with multipart form handling
Image processing (decode/encode, scaling with Catmull-Rom)
Concurrent worker pool implementation
File system operations for thumbnail storage
