Multi-stage build (node build -> nginx:alpine serve), docker-compose
with a configurable HOST_PORT (default 47174, an unusual port left
free for nginx proxy manager to front later), and a Gitea Actions
workflow that builds/pushes the image on push to main.
Verified: image builds, container serves the app and all art assets
on port 47174.
Mirrors the depth pass djupet just got, but targeting this project's own
actual gaps (its Kodex/lore.ts was already well-built, confirmed via
survey -- left untouched):
- text_language required flag: 'has_language', which no choice anywhere
ever set -- a genuinely dead, unreachable event. Worse: the character
Maja unlocks via unlockEventId: 'text_language', so she was
unreachable too. Added language_choice (learn to speak Thörnepherian
vs. only understand it) to actually set the flag, fixing both at once.
- eko had exactly one spender (exert_echo, fixed 30 cost, no scaling).
Added echo_network (unlock) -> call_in_echo (repeatable, scaling cost,
restores fäste) plus erase_the_search, which pays off Jonna's
disappearance thread (discord_erik_missing) by having the private
investigator looking for her lose the trail permanently.
- researcher_joins (doktorand) was a flat effect event; converted to a
choice (full trust vs. arm's length) mirroring djupet's Hassan arc.
- Neither new arc's flags touched the win/lose ending text -- same issue
djupet had. showOverlay now picks a variant based on which flags are
set, most-specific match first.
- barare past nine was flavor-only (nine_masks_carved exists but no
event marks outgrowing it); added barare_overflow + bigger_mill,
mirroring djupet's troende>9 branch.
- Campus (6 of 9 locations were flavor-only, same shape as djupet's
Möllan/Universitet gap) got its first real tie: campus_regular event
+ campus_access upgrade.
- yra pool skewed entirely heavy/unsettling with no comic-relief beat
(inverse of djupet's original all-comic kaos pool) -- added two
lighter entries for tonal variety.
No test suite exists for this project (unlike djupet) -- verified via
typecheck, build, and real browser checks against injected save state:
all upgrade gating (echo_network -> call_in_echo/erase_the_search,
campus_regular -> campus_access) confirmed correct, call_in_echo's cost
scaling and faste restoration confirmed by inspecting state before/after
two real purchases, and all five new ending variants (plus the combined
doktorand+language case) render correctly with proper priority ordering.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Idle/incremental game about a small circle of "bärare" weaving open a
breach to Thön from a disused sawmill in Skellefteå, Sweden. Reskins
the Djupet engine (passive resources, map-click visits, escalating
events, win/lose meters) around Vildhjarta's mythology — masks, the
Thörnepherian language, and a discoverable lore codex.
Vanilla TypeScript + Vite + Leaflet, with generated key art, location
art, and character portraits under public/img/.