my prefect server setup prefect-metrics.waow.tech
python orchestration
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Python 47.9%
Svelte 22.3%
TypeScript 13.3%
Just 11.0%
HCL 3.8%
JavaScript 0.7%
HTML 0.5%
Dockerfile 0.4%
CSS 0.1%
85 1 0

Clone this repository

https://tangled.org/zzstoatzz.io/my-prefect-server https://tangled.org/did:plc:xbtmt2zjwlrfegqvch7fboei/my-prefect-server
git@tangled.org:zzstoatzz.io/my-prefect-server git@tangled.org:did:plc:xbtmt2zjwlrfegqvch7fboei/my-prefect-server

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

personal data pipeline that digests my github and tangled.org activity, scores items by importance, and generates an LLM-curated briefing. self-hosted on a single hetzner VM (k3s) running prefect OSS.

hub · grafana

github API ──► gh-notifications ──► raw_github_issues ──┐
               (hourly :00)                              │
                                                         ▼
                                                  enrich (dbt, :05)
                                                         │
tangled PDS ──► tangled-items ───► raw_tangled_items ────┘
               (hourly :02)                              │
                                                         ▼
                                                  hub_action_items
                                                    (top 200)
                                                         │
                                          ┌──────────────┼──────────┐
                                          ▼              ▼          ▼
                                    curate (:10)    /api/cards   hub UI
                                          │
                                          ▼
                                    briefing.json

see docs/hub.md for the full pipeline breakdown.

deployment

prerequisites#

  • terraform
  • just
  • uv (Python 3.14+)
  • a hetzner cloud API token
  • a domain with DNS you control

setup#

cp .env.example .env
# fill in: HCLOUD_TOKEN, POSTGRES_PASSWORD, AUTH_STRING, DOMAIN, LETSENCRYPT_EMAIL
uv sync                # install workspace (mps + root)

deploy#

just init              # terraform init
just infra             # create the VM
just kubeconfig        # wait for k3s, fetch kubeconfig
just deploy            # cert-manager, prefect server, monitoring, dashboards
just worker            # deploy the kubernetes worker
just storage           # create analytics hostPath + results PVC, patch work pool

after deploy, point your DNS:

  • $DOMAIN → server IP (just server-ip)
  • $GRAFANA_DOMAIN → same IP (default: prefect-metrics.waow.tech)
  • hub.waow.tech → same IP

verify#

just health               # curl the /api/health endpoint
just status               # node + pod resource usage
just prefect work-pool ls

operations#

just logs                 # tail prefect-server logs (default)
just logs worker          # tail worker logs
just prefect flow-run ls  # run any prefect CLI command remotely
just dashboards           # reload grafana dashboards from deploy/dashboards/
just ssh                  # ssh into the server

flow deployments are registered automatically on every push to main via .tangled/workflows/deploy.yml.

hub (sveltekit frontend)#

just web    # build + push + deploy hub.waow.tech

analytics (dbt + duckdb)#

just init-analytics   # first-time: dbt deps, seed, compile