e7a1bfb5af0e51f61f3b9a6d66bfd1a1ed573f4b
The non-renewable Resource (a Stock with no inflow) becomes a renewable fishery with a true point of no return — an Allee threshold. Spawning scales with density (~Fish^2) while natural deaths are linear (~Fish), so below a critical density the deaths win and the stock slides to an extinction it never recovers from; crowding deaths (~Fish^3) cap a healthy stock at carrying capacity. A reinvesting fleet (Boats, Reinforcing) overshoots the renewal rate and drags the fish under the threshold, then starves and scraps itself. The negative-positive-negative regrowth curve is the one shape the proportional rule can't draw alone, so two relay Converters build it (density to lift spawning to ~Fish^2, crowding for the ~Fish^3 ceiling) — the Limits-to-growth crowding trick, doubled. At 16 nodes this is the gallery's largest model and the only one with a Converter feeding a Converter. Tuned against the engine: Fish hold near 1000, cross the threshold (~200) at t~40 as the catch overshoots, then go extinct and stay there; Boats overshoot to ~450 and collapse back near their start by t=150. No divergence; loops classify as expected (R: fleet reinvestment, birth engine; B: natural/crowding/catch drains, scrapping).
meadows
A canvas for thinking in systems — stocks, flows, converters, and feedback loops. Inspired by Donella Meadows' Thinking in Systems.
Deployed at https://meadows.apoena.dev
Design & docs
- CONTEXT.md — the ubiquitous language: Stock, Flow, Converter, Information Link, Polarity, and the Feedback Loops (Reinforcing / Balancing) the wiring forms.
- DESIGN.md — goal-driven design (QFD): goals → functions → components, the House of Quality, the performance budget, and recorded tradeoffs.
- Architecture decisions (
docs/adr/):- ADR-0001 — feedback loops are detected from structure, not stored.
- ADR-0002 — Vue Flow is the editor substrate; the domain Model is the source of truth.
- ADR-0003 — a Flow is a node; Source/Sink clouds are materialised nodes.
- ADR-0004 — simulation behaviour comes from a small fixed vocabulary of rules over Information Links, not free-form formulas.
- ADR-0005 — uPlot draws the behaviour-over-time chart; a charting dependency that earns its keep.
Stack
Vite + Vue 3 + TypeScript, Tailwind v4, DaisyUI. Lint/format via oxc (oxlint + oxfmt). SPA-only — diagram model is client-side.
Develop
pnpm install
pnpm dev # frontend on :5173
pnpm lint # oxlint (pnpm lint:fix to autofix)
pnpm fmt # oxfmt (pnpm fmt:check to verify only)
pnpm build # type-check + production build (what Coolify runs)
Deploy
Pushes to main are picked up by Coolify at https://platform.apoena.dev.
Description
Languages
TypeScript
70.7%
Vue
28.4%
CSS
0.6%
HTML
0.2%
Dockerfile
0.1%