Back to Projects

Shortlink Platform

A deliberately simple URL shortener wrapped in a production-grade DevOps stack—Docker, Kubernetes, Helm, ArgoCD GitOps, Terraform, and full observability. The app is boring; the infrastructure is the point.

ReactTypeScriptFastAPIPostgreSQLDockerKubernetesHelmArgoCDTerraformPrometheusGrafanaGitHub Actions

Problem

Modern platform engineering spans containerization, orchestration, CI/CD, infrastructure-as-code, and observability—but these practices are hard to demonstrate coherently on a real application. A feature-heavy app buries the infrastructure; a toy script never exercises it.

Approach

Shortlink Platform is intentionally minimal at the application layer—paste a long URL, get a short code, track click counts on a dashboard—so the full production DevOps stack around it becomes the focus:

  1. Application: A React + Vite + TypeScript frontend served through nginx, backed by an async FastAPI service with PostgreSQL, SQLAlchemy ORM, and Alembic migrations.
  2. Containerization: Multi-stage Docker builds with Docker Compose for local development.
  3. Orchestration: Kubernetes (kind locally, Azure AKS in production) with Helm for templated, environment-parameterized deployments.
  4. CI/CD & GitOps: GitHub Actions builds and Trivy-scans images, pushes to GHCR, and ArgoCD continuously syncs the desired state from Git.
  5. Infrastructure as Code: Terraform provisions the Azure AKS cluster and managed PostgreSQL.
  6. Observability: kube-prometheus-stack (Prometheus, Grafana, Alertmanager) with custom dashboards and k6 load testing.
  7. AI Operations: A LangGraph-based diagnostic agent (local Ollama or Azure OpenAI) with read-only, RBAC-scoped in-cluster tooling.

Architecture & Deployment

Requests enter through a single LoadBalancer to nginx, which serves the React frontend and proxies API calls to FastAPI; PostgreSQL handles persistence. Prometheus scrapes application metrics, while ArgoCD reconciles the cluster to the Git repository.

To run locally:

docker compose up --build
# App available at http://localhost:8080

Kubernetes deployments use Helm with parameterized values across environments.

What I Learned

  • GitOps discipline: Letting ArgoCD reconcile cluster state from Git makes deployments declarative, auditable, and reversible.
  • Templating for portability: Helm value files cleanly separate the kind-based local cluster from Azure AKS production.
  • Secure supply chain: Wiring Trivy image scanning into GitHub Actions catches vulnerabilities before images reach GHCR.
  • Observability by default: Baking Prometheus/Grafana and k6 load tests into the platform surfaces performance behavior early, not after an incident.