shreyas@portfolio:~/projects/project-metis
$ cat projects/project-metis.md
# Project Metis — Heroku-like PaaS on Kubernetes | Go / Kubernetes / cobra | 577 LOC
# repo: github.com/shreyasganesh0/project-metis
# tags: cloud, k8s, go, platform

A miniature Platform-as-a-Service in Go: a CLI (metisctl) and a manifest generator that compiles a simple metis.yaml into the Kubernetes API objects needed to run an application. Built to understand what’s load-bearing in Heroku and Cloud Foundry’s “git push and it runs” abstractions.

Implemented

  • A metis.yaml schema with just enough fields to define an app: name, image, port, replica count.
  • A Go generator that turns the YAML into appsv1.Deployment and corev1.Service objects via the official kubernetes-go client.
  • A metisctl deploy command (built on cobra) that parses the YAML, calls the generator, and applies the resulting objects to whatever cluster kubectl is pointed at.
  • A sample app (test-apps/hello-world) with a /metrics endpoint and structured logging, plus a prometheus-values.yaml for service discovery.

Why bother

Two reasons. First, the gap between “I know how to write a Kubernetes manifest” and “I know what the official Go client expects and how to construct the resource hierarchy from scratch” is bigger than it looks. Going through the client-go path forces you to handle pointer-vs-value semantics, label selectors, and resource versioning explicitly.

Second, this is the abstraction muscle that platform-engineering roles ask you to demonstrate. Most ICs at this seniority can write a Helm chart; fewer can defend why a particular generator pattern produces a Deployment vs a StatefulSet, or what the implications are for rolling updates.


← all projects · view on github →

perf: ·