ac521c38a8aed727062db22e0aebe1738f453077
- Replace 'stable' tag with semver-based tags (1.2.3, 1.2, 1) - Use 'edge' tag for main branch instead of 'latest' - Reserve 'latest' tag only for tagged releases - Remove version from Swagger docs (tracked via git tags instead) - Document available image tags in README
Apocapoc
Self-hosted habit tracking service with a clean, hexagonal architecture.
Features
- Multiple habit types: Boolean (check), Counter, Value
- Flexible scheduling: Daily, Weekly, Monthly with specific days
- Carry-over support: Choose if incomplete habits persist or expire
- Full history tracking: Complete audit trail of all interactions
- Statistics: Track streaks, completion rates, and progress
- Self-hosted first: Easy deployment with SQLite
- Security: JWT authentication, rate limiting on auth endpoints
- API Documentation: Interactive Swagger UI
Quick Start
Using Docker Compose (Recommended)
- Create a
docker-compose.ymlfile:
services:
api:
image: ghcr.io/davidfolch/apocapoc-api:latest
ports:
- "8080:8080"
environment:
- DB_PATH=/data/apocapoc.db
- JWT_SECRET=YOUR_SECRET_HERE
- JWT_EXPIRY=24h
- REFRESH_TOKEN_EXPIRY=168h
- CORS_ORIGINS=http://localhost:3000
- DEFAULT_TIMEZONE=UTC
volumes:
- habit-data:/data
restart: unless-stopped
volumes:
habit-data:
-
Important: Replace
YOUR_SECRET_HEREwith a secure random string forJWT_SECRET -
Start the service:
docker-compose up -d
The API will be available at http://localhost:8080
Available image tags:
latest: Latest stable release (recommended for production)1,1.0,1.0.0: Specific version tagsedge: Latest development build from main branch (unstable)sha-abc123: Specific commit (for debugging)
Configuration options:
JWT_SECRET: Required. Use a long random stringJWT_EXPIRY: Token expiration (e.g.,24h,48h)REFRESH_TOKEN_EXPIRY: Refresh token expiration (e.g.,168h= 7 days)CORS_ORIGINS: Comma-separated list of allowed originsDEFAULT_TIMEZONE: Timezone for date calculations (e.g.,UTC,Europe/Madrid)
Using the binary
- Download the latest release
- Copy
.env.exampleto.envand configure - Run:
./apocapoc-api
The API will be available at http://localhost:8080
Development
Prerequisites
- Go 1.23+
- SQLite
- Docker (optional)
Running locally with Docker (Recommended)
cp docker-compose.example.yml docker-compose.yml
docker-compose up --build
The API will be available at http://localhost:8080
Running locally with Go
cp .env.example .env
go run cmd/api/main.go
API Documentation
Once running, visit http://localhost:8080/api/v1/docs for interactive Swagger documentation.
Architecture
This project follows hexagonal (ports & adapters) architecture:
domain/: Core business logic and entitiesapplication/: Use cases (commands & queries)infrastructure/: External adapters (database, HTTP, etc.)shared/: Common utilities and errors
License
MIT
Languages
Go
99.5%
HTML
0.4%