v2.0.0 — Single-Click Deployment & Pre-Built Images
· 3 min read
We're proud to announce v2.0.0, our biggest release yet! This major version introduces single-click production deployment and pre-built Docker images across all services!
🎉 Major Release Highlights
This release marks a significant milestone with:
- Zero local builds — All Docker images pre-built via CI/CD
- One-command deployment — Single
install.shscript for full stack - Comprehensive documentation — Complete deployment guides and platform runbook
New Features
Single-Click Deployment
- install.sh Script — Automated full-stack deployment (Rocky Linux 10 compatible)
- Pre-Built Images — All services now use GitHub-built Docker images
- Environment Validation — Step 8b validates .env.production before deployment
- Bash History — Phase 6 bootstrap enables command history with timestamps
Pre-Built Docker Images
- ctms-cube — Cube.js semantic layer with baked-in config and models
- ctms-api-gateway — KrakenD API gateway image
- supabase-seed — Database initialization container
- frappe-marley-health — Custom Frappe Healthcare image
Data Pipeline Improvements
- Ghost Column Cleanup — Removed DLT orphaned columns from staging models
- Drug Prescription Dates — Proper date casting (vs timestamp)
- Patient Location — Null-handling for missing fields
- Phase 2 Cleanup — Removed all unused null-only columns from dbt models
Enhancements
CTMS Platform
- Calendar date picker: UTC storage with local display
- Toast message improvements for user status changes
- Prevent past date selection on Add Sites expected start date
- Study Participants: Enhanced enrollment flow with duplicate prevention
Documentation (Comprehensive Overhaul)
- Single-click deployment guide
- Self-hosted vendor stacks (Supabase + Frappe)
- Individual service deployment guide
- System requirements documentation
- Platform runbook with Make commands reference
- Data pipeline runner guide
DevOps
- Hetzner deployment testing and docs update
- Standardized .env.production naming convention
- Eliminated all client-specific defaults from compose files
- External ctms-network for inter-service communication
API Routing
- Proposal: Consolidate API routing layer (eliminate KrakenD/Next.js duplication)
- Patient composite endpoint (/api/v1/patient/[email])
- Doctype API respects limit_page_length query param
Bug Fixes
CTMS Platform
- Fixed calendar date picker save/display with UTC normalization
- Fixed duplicate subject-study enrollment
- Fixed null encounter on subject add
- Fixed encounter creation disabled in signup APIs
- Fixed LaboratorySelect ReferenceError from variable reordering
- Fixed apiClientUrl for browser-side Patient Encounter calls
- Fixed Docker-internal API URL leaking to browser
Data Pipeline
- Fixed Cube API retry logic for 'Continue wait' responses
- Fixed SSL verification for self-signed certificates
- Fixed AE ghost column (relationship_to_study)
- Fixed patient_encounter orphaned columns
Infrastructure
- Fixed compose validation error from empty volumes key
- Fixed cube dev volume mounts in production
- Fixed SUPABASE_SERVICE_ROLE_KEY in zynexa env
- Fixed install.sh with 6 deployment-tested hardening fixes
Migration Notes
Breaking Changes
- All Docker images now pulled from registry (no local builds required)
.env.client0renamed to.env.production— update your configurations- Cube model files baked into image (remove local volume mounts)
Upgrade Steps
- Pull latest
install.shfrom ctms.devops - Rename
.env.client0to.env.production - Run
./install.shfor automated deployment - Verify with platform runbook checklist
For complete documentation, visit our docs site.
