- Python 60.6%
- HTML 18.9%
- C# 12.1%
- Makefile 6.7%
- Shell 0.9%
- Other 0.8%
|
Some checks are pending
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 |
||
|---|---|---|
| .claude | ||
| .coily | ||
| .github/workflows | ||
| deploy | ||
| docs | ||
| mod | ||
| src/eco_spec_tracker | ||
| tests | ||
| .dockerignore | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .trufflehog-exclude | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| coily.yaml | ||
| Dockerfile | ||
| LICENSE | ||
| Makefile | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
eco-jobs-tracker
Naming.
eco-jobs-trackeris the canonical name (repo, subdomaineco-jobs-tracker.coilysiren.me, modEcoJobsTracker). Deploy internals still carry the oldeco-spec-trackername (k8s namespace, Python package, image, SSM key, Sentry project). Renaming those is a separate, riskier surgery (k8s teardown + Sentry break). Do not changeconfig.yml'sname- 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
Live at eco-jobs-tracker.coilysiren.me.
How it works
Two processes:
- 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 siblingeco-mcp-app[2]. - C# Eco mod (
mod/src/) - standard ModKit [3] UserCode mod, registersGET /api/v1/skills. Themod/shell/project is an ASP.NET Core harness on:5100with 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
- https://play.eco/
- https://github.com/coilysiren/eco-mcp-app
- https://github.com/StrangeLoopGames/EcoModKit
- https://github.com/coilysiren/backend
- https://www.strangeloopgames.com/
See also
- AGENTS.md - agent-facing operating rules.
- docs/FEATURES.md - inventory of what ships today.
- .coily/coily.yaml - allowlisted commands.
Cross-reference convention from coilysiren/agentic-os#59.