Self-host on your own infrastructure. Full control over your data. MIT licensed and ready to deploy.
Built with production-grade architecture. Clean separation, comprehensive testing, multi-database support.
// Clean Architecture in action
func main() {
// Repository layer
workoutRepo := repository.NewWorkoutRepository(db)
// Service layer
workoutSvc := service.NewWorkoutService(workoutRepo)
// Handler layer
handler.RegisterWorkoutRoutes(router, workoutSvc)
}
# Clone the repository
git clone https://github.com/johnzastrow/actalog.git
cd actalog
# Start with Docker Compose
docker compose up -d
# Or use the pre-built image
docker pull ghcr.io/johnzastrow/actalog:latest
Zero configuration. Perfect for development and small deployments. Just set DB_DRIVER=sqlite3.
Production recommended. Full-featured with excellent performance. Scales with your needs.
Full MySQL and MariaDB support. Use your existing infrastructure.
Strict layer separation makes the codebase maintainable and testable. Each layer has a single responsibility.
internal/domain/
Entities and repository interfaces. Zero external dependencies. The core of your business logic.
internal/repository/
Data access implementations. Database-agnostic interfaces allow swapping backends easily.
internal/service/
Business logic and use cases. Orchestrates repositories and enforces business rules.
internal/handler/
HTTP handlers and API endpoints. Input validation, response formatting, and error handling.
Well-documented REST API with JWT authentication. Build integrations, mobile apps, or custom dashboards.
JWT-based auth with refresh tokens. User registration, login, password reset, and email verification.
CRUD operations for workouts, templates, and movements. Automatic PR detection on create/update.
Performance endpoints for charts, PR history, movement stats, and workout summaries.
CSV import from Wodify. JSON export for all data. Full database backup and restore.
User management, announcements, audit logs, and subscription management endpoints.
Notification system for PRs, achievements, and admin announcements. Extensible for integrations.
ActaLog is designed to run efficiently on minimal hardware. A small VPS can handle moderate load while delivering a responsive experience.
Tested on a Linode Nanode (shared 1 CPU, 1GB RAM, 25GB storage) with MariaDB
50 concurrent users, 5-minute test duration
Includes Vue.js, Vuetify, and all application code. Gzip compressed.
Run your own benchmarks with our open-source tool:
ACTALOG-BENCHMARKClone the repo, run docker compose, and you're up in minutes.