Lotty A/B Platform
Service for managing A/B testing experiments. Drive your tests without breaking user experience!_)
🎨 Artifacts
ADR
Runbook
Diagrams
C4 Context
Source: C4 context
C4 Container
Source: C4 container
C4 Component
Source: C4 component
Testing report
Can be seen in GitLab CI/CD pipeline run
- Go to the pipelines page
- Click on the latest pipeline run

- Testing report (
Teststab)
- Tests coverage (
Jobstab)
Here on screenshot you can see coverage percent (97%), for detailed coverage per file go to the test job log
Here we can see statements coverage per file, you can check out job run artifacts for html report.
Click here on index.html and you'll see complete coverage html report.
Repository map
Yep, artifacts content is written in Russian, but all other docs are in English, this is for judges' convenient experience.
📋 Instructions
Dedicated services setup
Setup with docker compose
Warning
Please note that by default containers will use ports 80 (reverse proxy) and range 14601-14611 (for direct access to containers), so there is must be no listeners on this ports range. You can customize the ports in .env.template.
0. Prerequisites
- Docker (latest version recommended)
- Docker compose (latest version recommended)
- Cloned repository
1. Configuration
- Docker compose configuration files are stored in deploy/compose.
- Configuration files for containers are stored in infrastructure/configs.
Env could be customized by creating
.envfile in each service config directory, it will automatically override the default values from.env.template. - Ports on which containers will be accessible are defined in .env.template. This could be customized by creating
.envfile in the root directory and patching the following lines compose you are running:
x-defaults: &defaults
project_directory: ./
env_file:
- ./.env.template
- ./.env # add this
2. Choosing compose configuration
- compose.yaml - default configuration with base services included.
- compose.prod.yaml - configuration for production environment with full observability stack.
3. Running compose configuration
To run the compose configuration, use the following command:
docker compose -f compose.yaml up
# OR
docker compose -f compose.prod.yaml --profile observability up
That's it, project is already preconfigured for running, so no changes before running this are required.
Linting && formatting
Instructions here.
Observability
Structured logs
Health/ready endpoints (/health//ready)
Metrics (/metrics)
System metrics (gc, requests, etc.) and several business metrics (lotty_decide_requests_total, lotty_events_ingested_total).
OTEL
You can enable full observability for backend by setting OTEL_ENABLED=True in .env, also you need to run compose.prod.yaml with observability profile in order to deploy full observability stack.
Also there is some other predefined dashboards for services.
Grafana (localhost/grafana/):
login: admin
password: prooooood
Load testing (k6)
Reproducible k6 profile for POST /api/v1/decide:
- scenario script: infrastructure/k6/decide.js
- runner: infrastructure/k6/run-decide.sh
- guide: infrastructure/k6/README.md
Demo data seed (HTTP)
One-command API seed for demo datasets:
- script: infrastructure/http/seed-demo-data.sh
- runbook section: RUNBOOK.md
Example:
BACKEND_BASE_URL='http://127.0.0.1' \
TG_BOT_TOKEN='<your_bot_token>' \
TG_CHAT_ID='<your_chat_id>' \
./infrastructure/http/seed-demo-data.sh
SMTP can be enabled with SMTP_ENABLED=true and SMTP env settings (see RUNBOOK.md).
Selected extra features
- Notifications
- Learnings Library
- Domain Conflicts














