3 Commits
Author SHA1 Message Date
Fredrik Johansson 1cf768183d Add Docker deployment, matching Djupet's setup
Docker / build-and-push (push) Successful in 1m17s
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.
2026-08-09 21:55:04 +02:00
Fredrik JohanssonandClaude Sonnet 5 442c28e107 Content pass: fix a dead event/character, give eko a purpose, branch endings
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>
2026-08-09 21:12:45 +02:00
Fredrik Johansson f0b123a471 Initial commit: Thön, a Vildhjarta-inspired idle game
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/.
2026-08-08 22:01:05 +02:00