Epic: one Eco website replacing DiscordLink's read-only features (DLT), jobs-tracker merged in #37

Open
opened 2026-07-03 05:16:12 +00:00 by coilysiren · 1 comment
Owner

Thesis

Kai wants a single Eco website that owns every read-only server surface for Sirens, so DiscordLink can be stripped down to the one thing it does well: chat sync. In Kai's framing - read-only info does not belong in Discord, websites are a better platform for it, and DiscordLink's non-chat features are "poorly maintained fluff." This is the "Kai version of DLT that actually works" (DLT here = DiscordLink's read-only display/tooling feature set, the server-info embeds it posts into Discord).

Two supporting reasons:

  • A few modders push read-only data into Eco's own web UI (a trading mod does this), but that web UI is unreliable, and SLG has signaled it may tear down parts of it - for example when voting moves in-game. Owning the data pull on Kai's own site avoids that dependency.
  • Kai already has the website platform (eco-app / eco-mcp-app plus the jobs tracker). This is pure code, no new infra - the job is getting the new info flowing, not standing up new services.

End state

  1. One website (eco-app.coilysiren.me) is the canonical read-only surface for the Sirens server - status, players, jobs, economy, elections and laws, and the rest of DiscordLink's display set.
  2. eco-jobs-tracker merged in so there is a single site to maintain, not two.
  3. DiscordLink reduced to chat-sync only - every display and embed feature off, leaving the chat bridge plus the single linked-account role (eco-ops#18). Chat sync is the big value-add. Everything else retires as the website reaches parity.

What already exists (reuse, do not rebuild)

The eco-mcp-app data layer already pulls much of the DiscordLink parity set from Eco's /info, admin /datasets, and the exporters: server status, economy, world map, milestones, species, government + elections, laws, climate. Jobs data comes from the EcoJobsTracker mod endpoint. So the epic is mostly surfacing this on the website coherently and closing the parity gaps, not building the pipes from scratch.

Breakdown (candidate child issues)

  1. Inventory DiscordLink's active display features on Sirens - the exact parity target (status embeds, player list, elections and votes, laws, trades, work parties, and so on). This list drives everything below.
  2. Merge eco-jobs-tracker into eco-app - one site. Mind the naming debt (internals still say eco-spec-tracker - k8s namespace, package, image, Sentry project).
  3. Close parity gaps on the website - build the read-only pages DiscordLink has that the site does not yet, reusing existing work: trades ledger (eco-app#6), economic dashboard (eco-app#12), crafting atlas (eco-app#17), biodiversity (eco-app#20), climate (eco-app#8), plus elections/laws/voting displays.
  4. Burn down DiscordLink - as each website surface reaches parity, disable the matching DiscordLink display feature. First step already filed: strip auto-roles to the linked role only (eco-ops#18). End when only chat-sync remains.
  5. Design pass - make the merged site the single beautiful eco-app surface (eco-app#2).

Non-goals

  • Chat sync stays in Discord via DiscordLink. It is not being replaced.
  • No changes to in-game systems, and no scraping of Eco's own web UI - own the data pull directly, since SLG may tear that UI down.
  • No new infra.
  • eco-ops#18 (DiscordLink role burn-down - the first burn-down step)
  • eco-app#2, #6, #8, #11, #12, #17, #20 (component surfaces)
  • eco-app#31 (EcoJobsTracker mod-side rollout - feeds the jobs data)
  • eco-ops#13 (server roadmap - this is the phase-3 app-side counterpart)
## Thesis Kai wants a single Eco website that owns every **read-only** server surface for Sirens, so DiscordLink can be stripped down to the one thing it does well: **chat sync**. In Kai's framing - read-only info does not belong in Discord, websites are a better platform for it, and DiscordLink's non-chat features are "poorly maintained fluff." This is the "Kai version of DLT that actually works" (DLT here = DiscordLink's read-only display/tooling feature set, the server-info embeds it posts into Discord). Two supporting reasons: - A few modders push read-only data into Eco's own web UI (a trading mod does this), but that web UI is unreliable, and SLG has signaled it may tear down parts of it - for example when voting moves in-game. Owning the data pull on Kai's own site avoids that dependency. - Kai already has the website platform (eco-app / eco-mcp-app plus the jobs tracker). This is **pure code, no new infra** - the job is getting the new info flowing, not standing up new services. ## End state 1. **One website** (eco-app.coilysiren.me) is the canonical read-only surface for the Sirens server - status, players, jobs, economy, elections and laws, and the rest of DiscordLink's display set. 2. **eco-jobs-tracker merged in** so there is a single site to maintain, not two. 3. **DiscordLink reduced to chat-sync only** - every display and embed feature off, leaving the chat bridge plus the single linked-account role (eco-ops#18). Chat sync is the big value-add. Everything else retires as the website reaches parity. ## What already exists (reuse, do not rebuild) The eco-mcp-app data layer already pulls much of the DiscordLink parity set from Eco's `/info`, admin `/datasets`, and the exporters: server status, economy, world map, milestones, species, government + elections, laws, climate. Jobs data comes from the EcoJobsTracker mod endpoint. So the epic is mostly **surfacing this on the website coherently and closing the parity gaps**, not building the pipes from scratch. ## Breakdown (candidate child issues) 1. **Inventory DiscordLink's active display features on Sirens** - the exact parity target (status embeds, player list, elections and votes, laws, trades, work parties, and so on). This list drives everything below. 2. **Merge eco-jobs-tracker into eco-app** - one site. Mind the naming debt (internals still say eco-spec-tracker - k8s namespace, package, image, Sentry project). 3. **Close parity gaps on the website** - build the read-only pages DiscordLink has that the site does not yet, reusing existing work: trades ledger (eco-app#6), economic dashboard (eco-app#12), crafting atlas (eco-app#17), biodiversity (eco-app#20), climate (eco-app#8), plus elections/laws/voting displays. 4. **Burn down DiscordLink** - as each website surface reaches parity, disable the matching DiscordLink display feature. First step already filed: strip auto-roles to the linked role only (eco-ops#18). End when only chat-sync remains. 5. **Design pass** - make the merged site the single beautiful eco-app surface (eco-app#2). ## Non-goals - Chat sync stays in Discord via DiscordLink. It is not being replaced. - No changes to in-game systems, and no scraping of Eco's own web UI - own the data pull directly, since SLG may tear that UI down. - No new infra. ## Related - eco-ops#18 (DiscordLink role burn-down - the first burn-down step) - eco-app#2, #6, #8, #11, #12, #17, #20 (component surfaces) - eco-app#31 (EcoJobsTracker mod-side rollout - feeds the jobs data) - eco-ops#13 (server roadmap - this is the phase-3 app-side counterpart)
Author
Owner

Trade & store logistics wave filed (children of this epic)

Kai is focused on trade and store logistics and on meeting-then-exceeding DiscordLink's trade surface without needing a server restart for a couple of hours. That constraint drove the decomposition below. DiscordLink reads live store shelves in-process (a new C# plugin, which means a restart), but the CurrencyTrade exporter already ships every individual trade (#6), so nearly the whole surface is buildable from already-exported data with zero reset. The one live-shelf piece is isolated into a single reset-gated issue built offline against a C# shell harness, so nothing else waits on the clock.

DiscordLink trade/store surface being matched: Trades <name> lookup, WatchTradeFeed / WatchTradeDisplay watchers, Currency / Currencies money-supply. Exceeded via store-owner (a DiscordLink gap), price trend + fair-value, arbitrage and supply-gap logistics, and website + MCP delivery instead of Discord DMs (this epic's own thesis).

Foundation - #6 trades ledger (the normalized CurrencyTrade model everything below consumes).

Children filed:

  • #49 - per-item market price intelligence + fair-value cross-reference (wires in-game median into fair_price.py). No reset.
  • #50 - store & trader directory, surfaces the store owner DiscordLink omits. No reset.
  • #51 - logistics engine: cheapest-source, arbitrage spreads, supply-gap finder. The core "where to buy/sell/haul." No reset.
  • #52 - host-agnostic trade watchers (meets WatchTradeFeed/Display, delivered to site + MCP). No reset.
  • #53 - currency & money-supply surface (meets Currency/Currencies, probe-gated on holder export). No reset.
  • #54 - SPA /trade route, the product surface tying it together. No reset.
  • #55 - [reset-gated] live store-offer exporter mod, built offline against a shell harness, deploys at the next natural restart. Upgrades #50/#51/#52 from history-derived to shelf-accurate.

Dependency spine: #6 is the keystone. #49/#50/#52/#53 build on it. #51 consumes #49/#50. #54 consumes all data planes. #55 is independent to build. Dispatched as sibling headless runs.

## Trade & store logistics wave filed (children of this epic) Kai is focused on **trade and store logistics** and on meeting-then-exceeding DiscordLink's trade surface **without needing a server restart for a couple of hours**. That constraint drove the decomposition below. DiscordLink reads live store shelves in-process (a new C# plugin, which means a restart), but the `CurrencyTrade` exporter already ships **every individual trade** ([#6](https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/6)), so nearly the whole surface is buildable from **already-exported data with zero reset**. The one live-shelf piece is isolated into a single reset-gated issue built offline against a C# shell harness, so nothing else waits on the clock. DiscordLink trade/store surface being matched: `Trades <name>` lookup, `WatchTradeFeed` / `WatchTradeDisplay` watchers, `Currency` / `Currencies` money-supply. Exceeded via store-owner (a DiscordLink gap), price trend + fair-value, arbitrage and supply-gap logistics, and website + MCP delivery instead of Discord DMs (this epic's own thesis). **Foundation** - [#6](https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/6) trades ledger (the normalized `CurrencyTrade` model everything below consumes). **Children filed:** * [#49](https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/49) - per-item market price intelligence + fair-value cross-reference (wires in-game median into `fair_price.py`). No reset. * [#50](https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/50) - store & trader directory, surfaces the store owner DiscordLink omits. No reset. * [#51](https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/51) - logistics engine: cheapest-source, arbitrage spreads, supply-gap finder. The core "where to buy/sell/haul." No reset. * [#52](https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/52) - host-agnostic trade watchers (meets WatchTradeFeed/Display, delivered to site + MCP). No reset. * [#53](https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/53) - currency & money-supply surface (meets Currency/Currencies, probe-gated on holder export). No reset. * [#54](https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/54) - SPA `/trade` route, the product surface tying it together. No reset. * [#55](https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/55) - **[reset-gated]** live store-offer exporter mod, built offline against a shell harness, deploys at the next natural restart. Upgrades #50/#51/#52 from history-derived to shelf-accurate. Dependency spine: #6 is the keystone. #49/#50/#52/#53 build on it. #51 consumes #49/#50. #54 consumes all data planes. #55 is independent to build. Dispatched as sibling headless runs.
Sign in to join this conversation.
No description provided.