No description
  • Python 60.6%
  • HTML 18.9%
  • C# 12.1%
  • Makefile 6.7%
  • Shell 0.9%
  • Other 0.8%
Find a file
Kai Siren 2dd00e75b3
Some checks are pending
build-publish-deploy / test (push) Waiting to run
build-publish-deploy / build-publish (push) Blocked by required conditions
build-publish-deploy / deploy (push) Blocked by required conditions
TruffleHog / Scan for secrets (push) Waiting to run
feat(deploy): in-Pod tailscale sidecar replaces operator ts-proxy
closes #42

Same shape as coilysiren/eco-mcp-app#60 and the canary at
coilysiren/infrastructure#201. Templated SA + Role + RoleBinding,
ExternalSecret pulling /coilysiren/eco-spec/ts-authkey, ts container
in kernel mode, privileged, pinned to kai-server. Drops
tailscale.com/expose from the Service. Public Ingress unchanged.

After CI redeploys, http://eco-spec resolves over the tailnet without
the broken operator at coilysiren/infrastructure#198.

Audit-log: none
2026-05-20 00:57:11 -07:00
.claude chore(lockdown): adopt agent-guard pre-tool-use delegate 2026-05-16 13:59:11 -07:00
.coily rename: update cross-repo refs after coilyco-ai to agentic-os-kai 2026-05-15 02:28:52 -07:00
.github/workflows chore(ci): remove codex-review-gate + undraft-and-poke-codex workflows 2026-05-16 15:42:38 -07:00
deploy feat(deploy): in-Pod tailscale sidecar replaces operator ts-proxy 2026-05-20 00:57:11 -07:00
docs chore: trim README + AGENTS + FEATURES under cap 2026-05-16 00:09:49 -07:00
mod fix: highlight 'active' (within 7d) instead of 'online' players 2026-05-08 23:00:48 -07:00
src/eco_spec_tracker fix: keep dashboard live when mod is still pre-lastSeen 2026-05-08 23:31:17 -07:00
tests fix: keep dashboard live when mod is still pre-lastSeen 2026-05-08 23:31:17 -07:00
.dockerignore Scaffold FastAPI + Jinja2 + HTMX tracker with mock data 2026-04-20 19:51:34 -07:00
.gitignore chore: commit coily lockdown baseline, gitignore host-local Claude state 2026-04-24 15:42:37 -07:00
.pre-commit-config.yaml chore: trim README + AGENTS + FEATURES under cap 2026-05-16 00:09:49 -07:00
.trufflehog-exclude wire sentry sdk for fastapi 2026-04-23 16:21:42 -07:00
AGENTS.md chore: trim README + AGENTS + FEATURES under cap 2026-05-16 00:09:49 -07:00
CLAUDE.md Convert CLAUDE.md symlink to @AGENTS.md import 2026-04-23 13:35:43 -07:00
coily.yaml deploy: rename config.yml to coily.yaml 2026-05-13 22:50:08 -07:00
Dockerfile Drop requirements.txt, use uv.lock directly in Docker 2026-05-14 06:21:28 -07:00
LICENSE Prep mod.io publish: LICENSE, version, listing copy, logo 2026-04-24 05:13:33 -07:00
Makefile Drop requirements.txt, use uv.lock directly in Docker 2026-05-14 06:21:28 -07:00
pyproject.toml build: replace pyinvoke with Makefile + coily 2026-05-08 23:00:16 -07:00
README.md chore: trim README + AGENTS + FEATURES under cap 2026-05-16 00:09:49 -07:00
uv.lock build: replace pyinvoke with Makefile + coily 2026-05-08 23:00:16 -07:00

eco-jobs-tracker

Naming. eco-jobs-tracker is the canonical name (repo, subdomain eco-jobs-tracker.coilysiren.me, mod EcoJobsTracker). Deploy internals still carry the old eco-spec-tracker name (k8s namespace, Python package, image, SSM key, Sentry project). Renaming those is a separate, riskier surgery (k8s teardown + Sentry break). Do not change config.yml's name - it cascades into every k8s resource and the image tag at deploy.

Read-only "who can make what" board for an Eco [1] server in 300 lines of FastAPI. Lists every player, profession, learned specialty, with live active / total counts.

Paired with a small C# Eco mod that exposes GET /api/v1/skills: the mod is the source of truth, this app is the view. Today the app reads mock data (UPSTREAM_URL unset); point it at the shell harness on :5100 or the real mod and it switches over.

Screenshot

eco-jobs-tracker

Live at eco-jobs-tracker.coilysiren.me.

How it works

Two processes:

  1. FastAPI app (src/eco_spec_tracker/main.py) - Jinja2 + HTMX + Tailwind CDN. Serves /, /professions, /specialties, /players, HTMX partials under /partials/*, JSON mirror under /api/v1/*. The live server-status card imports directly from sibling eco-mcp-app [2].
  2. C# Eco mod (mod/src/) - standard ModKit [3] UserCode mod, registers GET /api/v1/skills. The mod/shell/ project is an ASP.NET Core harness on :5100 with canned data so you can iterate without booting Eco.

upstream.py calls /api/v1/skills when UPSTREAM_URL is set, falls back to mock data otherwise.

Quick start

make build-native
make run-native      # http://localhost:4100 with autoreload

Plus the C# shell harness in a second terminal:

make run-shell                                     # :5100
UPSTREAM_URL=http://localhost:5100/api/v1/skills make run-native

Tests

make test

Smoke suite under tests/test_smoke.py: every page, every /api/v1/*, /partials/eco-card with upstream stubbed via respx, parser fed a mod-shaped fixture.

Build the real mod

make build-mod       # mod/src/bin/Release/net10.0/EcoJobsTracker.dll

Drops into an Eco server's Mods/EcoJobsTracker/ directory.

Publishing to mod.io

See docs/modio.md for the canonical listing copy + zip shape. Bump <Version> in mod/src/EcoJobsTracker.csproj before each upload.

Deploy

Follows the coilysiren/backend template [4]. Target: eco-jobs-tracker.coilysiren.me.

License & credits

MIT. Eco is a trademark of Strange Loop Games [5]; unofficial fan tool, not affiliated.

References

  1. https://play.eco/
  2. https://github.com/coilysiren/eco-mcp-app
  3. https://github.com/StrangeLoopGames/EcoModKit
  4. https://github.com/coilysiren/backend
  5. https://www.strangeloopgames.com/

See also

Cross-reference convention from coilysiren/agentic-os#59.