Docker Compose, Edge CDN, Email Tracking & Content-Addressable Storage
Docker Compose as a first-class deployment preset, Edge CDN proxy with ECIES-encrypted TLS distribution, email open/click tracking, content-addressable static asset storage, container exec, and CLI deploy commands.
- •Docker Compose as a first-class deployment preset: deploy multi-container apps via git-push with automatic pipeline orchestration
- •Compose override: user-provided YAML merged at deploy time for port remapping, volume overrides, and command changes
- •Public ports model: explicit control over which compose service ports are proxied publicly, each with its own subdomain
- •Service-specific custom domain routing: custom domains can target a specific compose service
- •Compose file picker in project creation: filters files by root directory
- •Per-service URLs in container list and detail views
- •Screenshot capture for Docker Compose deployments
- •Temps system environment variables injected into all compose services via auto-generated override
- •Volume preservation across redeployments; full cleanup on project/environment deletion
- •`temps edge` CLI command: lightweight, stateless CDN proxy node powered by Pingora — no database required
- •Automatic registration with the control plane via X25519 public key exchange
- •ECIES-encrypted TLS certificate delivery with forward secrecy (fresh ephemeral keypair per sync)
- •Content-addressable local cache with LRU eviction
- •Heartbeat reporting every 30 seconds with cache statistics
- •Region labels for analytics grouping
- •SSRF protection for edge node address validation
- •Email open tracking: transparent tracking pixel injected into outgoing HTML emails
- •Email click tracking: all links rewritten to route through tracking endpoint with 302 redirect
- •`email_events` and `email_links` tables for granular tracking event storage
- •Authenticated tracking data endpoints for summary, events, and per-link click stats
- •Open/click count columns in the Sent Emails table with tracking stats card on Email Detail page
- •116 tests covering tracking service, HTTP handlers, and full E2E flow
- •Static asset caching via SHA-256 content hashing with git-style blob sharding
- •DB-backed URL→hash mapping for proxy-level asset resolution
- •Asset cache purge API and Purge Asset Cache button in environment settings UI
- •Nightly garbage collection for unreferenced blobs
- •One-shot command execution and persistent terminal via WebSocket with PTY resize support
- •`temps deploy image`: deploy pre-built Docker images from any registry
- •`temps deploy static`: deploy static file directories or archives
- •`temps deploy git`: trigger build pipeline from a specific commit, branch, or tag
- •All deploy commands support `--wait` with configurable timeout
- •Replaced all `Command::new("git")` CLI calls with `git2` (libgit2) — git CLI is no longer a runtime dependency
- •`FsFileStore` rewritten as content-addressable store: identical content shares a single blob
- •`persist_static_assets` job no longer blocks `mark_deployment_complete`; runs in parallel
- •Standalone `temps-compose` crate and Stacks UI removed; Docker Compose is now a deployment preset
- •Fixed workflow context clobbering: parallel jobs overwrote each other's outputs — root cause of containers not registering after deployment
- •Fixed container registration silently skipped: `persist_static_assets` blocking `mark_deployment_complete`
- •Fixed orphaned container teardown: added slug-based fallback cleanup
- •Fixed SQL injection surface: ORDER BY identifiers now quoted for CamelCase PostgreSQL column support
- •Fixed CPU stats always showing 0.0% by switching Docker stats API from one-shot to stream mode
- •Fixed compose override port parsing for both quoted and unquoted port entries
- •Fixed GitHub API rate limiting on public repos: all endpoints use authenticated tokens
- •Fixed `temps deploy static` runtime panic from duplicate short alias
- •Fixed edge proxy `.unwrap()` calls: replaced with `?` error propagation
- •Fixed incorrect `corepack` command for pnpm in Next.js preset
- •Fixed network throughput display showing cumulative total instead of actual rate
- •Fixed erroneous `--` in git checkout command (#40)