End-to-end DevOps pipeline architecture for the Competency Bot, a private-firm assessment platform used to evaluate employee skills and track professional development across multiple departments.
The challenge: the client's existing deployment process was entirely manual — engineers would SSH into a VM, pull the latest code, and restart the service. Deployments took 30+ minutes, rollbacks were near-impossible, and there was zero visibility into what was running in production.
We designed and implemented a fully automated CI/CD pipeline using GitHub Actions with multi-environment support. The pipeline handles linting, type-checking, unit tests, Docker image builds, and deployments — all triggered automatically on push to staging or production branches.
Infrastructure was provisioned on Google Cloud Platform. The application runs on Cloud Run with auto-scaling configured to handle traffic spikes during assessment periods (when 500+ employees submit evaluations simultaneously). We migrated static assets to Cloud Storage buckets with CDN-backed delivery, which cut cold-start times by 60% and reduced container image sizes from 1.2GB to under 200MB.
Secrets management was a critical focus — we implemented a layered approach using Google Secret Manager integrated with GitHub Actions secrets, ensuring API keys, database credentials, and OAuth tokens are never exposed in code or logs. Environment-specific configurations are injected at deploy time with strict separation between staging and production.
Branch-based deployment strategies enable the team to ship with confidence: feature branches deploy to ephemeral preview environments, the staging branch auto-deploys to the staging Cloud Run service, and production deploys require a manual approval gate. Automated rollback triggers on health-check failures, reverting to the last known-good revision within 30 seconds.
Key outcomes: deployment time reduced from 30+ minutes to under 3 minutes, zero-downtime deployments achieved, and the engineering team can now ship multiple times per day instead of once a week.

