No description
  • Go 53.2%
  • TypeScript 22.5%
  • CSS 11.5%
  • Just 6.6%
  • HCL 3.3%
  • Other 2.9%
Find a file
2026-08-21 08:43:47 +02:00
.forgejo/workflows ci: fix go test run 2026-08-19 17:02:45 +02:00
docs docs: move notes 2026-08-21 08:42:14 +02:00
frontend style: make login/signup more catchy 2026-08-19 16:21:44 +02:00
kubernetes fix: tempo span creation 2026-08-20 13:26:50 +02:00
out ci: print coverage 2026-08-20 11:45:54 +02:00
scripts ci: setup deployment via pipeline 2026-08-19 14:12:35 +02:00
src refactor: remove unnecessary method 2026-08-21 07:57:37 +02:00
terraform infra: fix cluster 2026-08-06 14:32:25 +02:00
week1 chore: move files to root 2026-08-03 11:29:21 +02:00
.env.example fix: tempo span creation 2026-08-20 13:26:50 +02:00
.gitignore docs: move notes 2026-08-21 08:42:14 +02:00
.httpyak.json chore: move files to root 2026-08-03 11:29:21 +02:00
AGENTS.md ci: rework invite-code passing 2026-08-19 14:37:08 +02:00
api.http fix: ES cluster creation 2026-08-07 08:04:40 +02:00
config.sdk.yaml refactor: simplify SDK 2026-08-18 14:06:42 +02:00
config.server.yaml feat: setup HTTP server 2026-08-05 16:33:21 +02:00
config.types.yaml feat: setup HTTP server 2026-08-05 16:33:21 +02:00
Dockerfile ci: fix image gen stuff 2026-08-19 14:59:24 +02:00
elastic-search.http chore: move files to root 2026-08-03 11:29:21 +02:00
go.mod chore: tidy go mod 2026-08-20 15:15:51 +02:00
go.sum feat: setup tracing 2026-08-18 11:11:27 +02:00
INVITE_CODE ci: rework invite-code passing 2026-08-19 14:37:08 +02:00
justfile ci: print coverage 2026-08-20 11:45:54 +02:00
README.md docs: update readme 2026-08-21 08:43:47 +02:00

Built A Cloud

This project was created as part of the "Built a Cloud" track at Level3. It's a facade API for provisioning and managing Elasticsearch deployments on Kubernetes via the ECK operator, plus document indexing and search.

Features

  • Auth: Argon2id password hashing + PASETO v4 local tokens (24h). Optional invite-only registration via the INVITE_CODE build flag.
  • Elasticsearch lifecycle: create / get / list / delete ES clusters through the ECK Elasticsearch CR. Owner isolation via the paas-instance-owner label.
  • Search: index, search (wildcard), delete documents; list indices. Default index default.
  • Audit log: per-instance operation history (GetInstanceLogs).
  • Observability in-cluster: OTel traces to Tempo, Prometheus metrics at /metrics, structured JSON logs to Loki.

Domains

Domain Serves
pagedb.stackit.gg Backend API + embedded SPA (TLS terminated at Traefik Gateway)
moni.pagedb.stackit.gg Grafana

SDK (Go)

Setup your project to pull from the private Git Repo:

  1. Go here to create a new Access Token
  2. Tell Git to use the token to fetch stuff from that URL using that token:
git config url."https://<your_token>@level3.git.onstackit.cloud".insteadOf "https://level3.git.onstackit.cloud"
  1. Install the SDK:
go get level3.git.onstackit.cloud/LEVEL3/gabriel/src/sdk
  1. Create your beautiful client, potentially something like this (pls pls, handle errors :D):
import "level3.git.onstackit.cloud/LEVEL3/gabriel/src/sdk"
ctx := context.Background()
c, _ := sdk.NewClient("https://pagedb.stackit.gg", "")
reg, _ := c.Register(ctx, "alice", "s3cureP@ssw0rd", "sunset-rocket-42") // invite code only in invite-only mode

authed, _ := sdk.NewClient("https://pagedb.stackit.gg", reg.Token)
inst, _ := authed.CreateInstance(ctx, "my-es")
_,  _ = authed.StoreDocument(ctx, inst.ID, model.IndexDocReq{Text: "hello world"})
docs, _ := authed.SearchDocuments(ctx, inst.ID, model.SearchQuery{Query: "hello"})

Full lifecycle (register → login → provision → index → search → list indices → delete doc → delete instance) in src/sdk/example_test.go.

Documentation

Doc Covers
docs/infra.md Terraform + Kubernetes manifests, TLS/DNS, deployment template, observability stack — with mermaid resource graphs
docs/backend.md Request path, components, in-memory state, ES instance model, full API table, OTel endpoint + custom metrics
docs/cicd.md justfile recipes by group, image build, typical flows, Forgejo Actions CI

Tech stack

  • Backend: Go 1.26, ECK v3.4.1, oapi-codegen, Argon2id, PASETO v4, controller-runtime k8s client, go-elasticsearch v8
  • Frontend: SolidJS, Pico CSS, Deno, Vite
  • Infra: STACKIT SKE (Terraform), Kubernetes, Gateway API (Traefik), cert-manager + STACKIT DNS-01 webhook
  • Observability: OpenTelemetry (traces only), Prometheus, Loki, Promtail, Tempo, Grafana