Commit Graph
181 Commits
Author SHA1 Message Date
stan 9b87aeb577 prices: line the tab bar up with the full-width CS skins page
Deploy production / deploy (push) Has been cancelled
2026-10-27 10:42:45 +00:00
stan 81b0c51672 prices: fold groceries and CS skins into one price tracker (/trackers/prices) with tabs
Deploy production / deploy (push) Successful in 1m30s
- tab registry in #lib/price-trackers (add a tab = route + entry + icon)
- groceries -> /trackers/prices/groceries (owner-only), CS prices -> /trackers/prices/cs (public)
- old /trackers/groceries/* and /projects/cs-prices/* redirect (301 GET, 308 POST) with query
- nav: one prices entry replaces groceries and skins; cyan price-tag icon
2026-10-27 10:38:10 +00:00
stan 2c8d1bd881 radio: classic ham-site public view (Opa's Radiohoek) with link directory
Deploy production / deploy (push) Successful in 1m23s
- PublicRadio.svelte: websdr.org-style grey page, steel-blue bars, dense tables,
  NL default / EN toggle, radio facts, frequency list per band, banks, ISS, nets
- links.ts: all 34 showcase links, status (online/warn/offline) + archive links
- owner keeps the dashboard; ?view=public lets the owner preview the public page
2026-10-27 09:49:00 +00:00
stan 3a2d3cc78c media: webtoon metadata (English title, artist, synopsis, years, adaptation) and stored covers with a cover grid
Deploy production / deploy (push) Successful in 1m24s
2026-10-27 09:41:12 +00:00
stan 96d7333fe9 radio: public read-only tracker for Opa (NL/EN toggle, bigger type and tap targets)
Deploy production / deploy (push) Successful in 1m22s
Visitors see frequencies, banks, nets, ISS passes and the log without logging in; every
write stays owner-only (actions check the owner, hooks refuse non-GET). The public payload
drops reminder switches, log notes and inactive nets, and the page no longer shows the
observer coordinates (only "Gouda"). Dutch/English toggle (?lang, cookie, Accept-Language,
NL fallback). Larger fonts, high-contrast labels and 44px+ controls for phones and tablets;
radio listed as public (no lock) and in the sitemap; banks CSV public.
2026-10-27 09:23:28 +00:00
stan 079399635d trackers: media hub with webtoons, podcasts and videos; shows and anime filters
Deploy production / deploy (push) Successful in 1m22s
- /trackers/media: one card per child (reading, movies, shows, webtoons, music, podcasts,
  videos) with quick stats, a combined currently-consuming feed and a mixed watchlist
- webtoons, podcasts, videos: new owner-editable trackers on one generic media.items table,
  JSON import (owner form or scripts/media-run.sh)
- shows: /trackers/shows -> /trackers/movies?type=show; anime flag on movies.titles
  (backfilled, set from TMDB, owner toggle) and ?type=anime filter
- nav: media replaces the top-level reading, movies and music entries; their URLs are kept
2026-10-26 23:34:22 +00:00
stan 4ef75f9d25 stats: bare theme URLs (/stats/jobs) open the core selection
Deploy production / deploy (push) Successful in 1m20s
2026-10-26 18:10:12 +00:00
stan b566a1244f stats: jobs & cost of living theme (unemployment by age, vacancies, JOLTS, graduates, job quality, wages, price levels, housing), grad view cards, Beveridge curve; jobs collector (OECD SDMX, Big Mac index, derived series) + Eurostat/World Bank/FRED jobs series, stats-jobs.timer
Deploy production / deploy (push) Successful in 1m20s
2026-10-26 18:08:06 +00:00
stan f2f7bd0a19 stats: place × theme matrix (/stats/<place>/<theme>), sticky place/theme selector, generic metric engine with comparisons, 301s from the old section URLs
Deploy production / deploy (push) Successful in 1m19s
2026-10-26 17:37:47 +00:00
stan 03574a95a7 radio: private radio tracker (/trackers/radio): frequencies, UBC125XLT banks + CSV, nets, ISS passes over Gouda, listening log, ntfy reminders
Deploy production / deploy (push) Successful in 1m26s
2026-10-26 16:58:29 +00:00
stan e24ee7f95d plant: private Cargill Gouda tracker (/trackers/cargill)
Deploy production / deploy (push) Successful in 1m19s
Owner-only tracker for learning the Cargill Bioindustrial plant in Gouda:
schema plant (entries, links with confidence, pending refs), plant.apply_entries
bulk import, overview with clusters and flow diagram, kind tabs, glossary,
questions, detail pages and owner inline editing. Docs in docs/plant-tracker.md.
2026-10-26 13:42:37 +00:00
stan d7e26a3338 math tracker: pannable 2D map of the Napkin (default), list view kept behind ?view=list
Deploy production / deploy (push) Successful in 1m18s
Chapters are nodes grouped into part regions laid out like the book's dependency chart
(roots Abs Alg, Topology, Lin Alg, Set Theory flowing down to AG, AT and ANT). Part
prereqs are routed edges, optional ones (\coreqc in the book) dotted. Status colours,
exercise rings, current-chapter glow, legend, search, minimap, pinch/drag/wheel zoom,
fit and +/- buttons. Tapping a chapter opens the existing panel (side panel on desktop,
bottom sheet on mobile). The view choice is remembered per device.
2026-10-26 12:22:38 +00:00
stan 44379b9a27 math tracker: space before the skipped count
Deploy production / deploy (push) Successful in 1m18s
2026-10-26 11:22:53 +00:00
stan f7a3bb556c math tracker: pass string classes to lucide icons (fixes owner-view 500)
Deploy production / deploy (push) Successful in 1m19s
2026-10-26 11:14:03 +00:00
stan d99245e9fc Math tracker (/trackers/math): Evan Chen's Napkin, chapter by chapter
Deploy production / deploy (push) Failing after 9s
Schema math (parts, chapters, sections, activity), seeded with all 100 chapters
(Ch 0-94, appendix A-E), 647 sections, PDF pages, exercise counts and approximate
prereqs. Triggers stamp started_at/completed_at and log status/exercise/note/section
changes; math.apply_progress(jsonb) applies the JSON format bots send. Private by
default via MATH_PRIVATE in #lib/math (owner-only prefix + lock in every tracker list).
Overall + per-part progress, current chapter, prereq hints, quick status buttons,
exercises stepper, notes, optional section ticks, activity log, dependency chart.
Deploy preflight checks the math schema (4 tables, 100 chapters).
2026-10-26 10:55:16 +00:00
stan 23a43049a0 cs-prices: lime for CSFloat history so it stands apart from CSFloat listings
Deploy production / deploy (push) Successful in 1m13s
2026-10-26 09:35:36 +00:00
stan 3b75fd39b5 AI setup tab: masonry columns, even form controls, one labels-only hint
Deploy production / deploy (push) Has been cancelled
2026-10-26 09:34:38 +00:00
stan 76f063b362 cs-prices: price history backfill (Steam daily median since 2013 from the public listing page, CSFloat daily averages, ECB FX history) in separate *-history streams; labelled on item charts
Deploy production / deploy (push) Successful in 1m13s
2026-10-26 09:32:55 +00:00
stan 7396d23335 AI tracker: owner-only tabs no longer 500 (cache-control set twice: layout + page load)
Deploy production / deploy (push) Successful in 1m14s
2026-10-26 09:27:26 +00:00
stan 8d2da984e0 AI tracker: owner-only Setup tab (per-provider connections, skills, instructions, plugins, routines, agents, plan/key labels, notes; ai.provider_setup_providers + provider_setup_entries, secrets refused)
Deploy production / deploy (push) Failing after 1m3s
2026-10-26 09:09:32 +00:00
stan 9e89a615c6 cs-prices: full ByMykel catalog, every config, daily multi-source prices, item pages with working charts
Deploy production / deploy (push) Successful in 1m18s
- cs.skins catalog (weapons, knives, gloves, stickers, cases, agents, charms, …) refreshed weekly
- every market config: wears in float range, StatTrak, Souvenir, Doppler/Gamma phases
- cs.daily_prices (one row per config/stream/day, idempotent) from Skinport, Steam, CSFloat, Buff163
- cs.price_windows for 24h/7d/30d/90d sale aggregates, cs.fx_rates (ECB)
- scripts/cs-prices.ts daily|catalog|prices; legacy ingest fixed for the new unique index
- skin browser + /projects/cs-prices/[slug] with variant/wear/phase switcher and real charts
- charts show points for short histories and pad sparse time axes
2026-10-26 08:47:57 +00:00
stan 9d79dfb43a worldwide todo list: global map (List/Map toggle, clustered category pins, Global strip, pick on map, location_precision, tasks.geojson)
Deploy production / deploy (push) Successful in 1m13s
2026-10-26 08:38:51 +00:00
stan 0121071af2 Tasks goals: investment income in the €10k/month bar (trailing-12m money.transactions amount_cents>0, category dividend|interest, any account except Joint, ÷12); own segment colour + breakdown line, breakdown amounts with cents
Deploy production / deploy (push) Successful in 1m14s
2026-10-26 07:35:09 +00:00
stan e33afe5387 notes: private Obsidian vault tracker at /trackers/notes
Deploy production / deploy (push) Successful in 1m19s
Vault files stay the source of truth (bind-mounted read-write at /notes):
atomic writes chowned to the vault owner, hash-checked saves (409 on a
newer file), deletes to .trash. notes.* is a full-text/link index kept
current by a recursive watcher plus a 60s rescan; live updates over the
owner-only /ws/notes channel (paths and hashes only). Wikilinks, embeds,
backlinks, tags, callouts, image paste. Owner-only everywhere (404).
2026-10-26 01:28:57 +00:00
stan 5e812271e1 worldwide todo list: public todo list of 68 real, sourced problems (planet to street) at /projects/worldwide-todo. worldtodo schema (categories, tasks, change_requests), idempotent seed on deploy, public add/edit/delete requests with Turnstile + salted daily-rotating IP-hash rate limit, owner-only review queue (approve, edit & approve, reject) with live updates over /ws/worldtodo(-owner), JSON API, detail pages with OSM map and history; listed in projects, header, /start and sitemap
Deploy production / deploy (push) Failing after 9s
2026-10-26 01:26:17 +00:00
stan 807a6b3104 money: day-by-day forecast with real payment dates
The wealth forecast now runs per day instead of per month, so it shows the
same sawtooth as the actual history:

- recurring items hit on the day the bank history shows (most common day of
  the last four months, clamped to month end), else their start date
- "every N weeks" items (Basic-Fit, haircut) run on an exact N-day cadence
  from the last charge; yearly items on their renewal date
- salary and its extras (holiday pay in May, 13th month in November, bonus,
  settlement) land on the payday from history (contract 25th as fallback),
  moved to the Friday before a weekend; toeslagen move to the Monday after
- variable budgets are spread per day, the vacation budget over Jul-Aug
- excess above the buffer is invested the day after payday; returns
  compound daily
- long horizons stay fast (~35 ms for 100 years): the chart thins each
  pixel bucket to its low and high
2026-10-26 01:20:39 +00:00
stan 5d732fc750 Tasks goals: auto metrics (tasks.goals.metric_key/metric_detail/metric_computed_at, tasks.metric_sources cache). €10k/month goal gets a live progress bar: Revolut recurring income (excl. Zorgtoeslag/Joint) computed on page load + trailing-12m paid Moneybird invoices / 12 cached by a daily goal-metrics user timer; stacked bar with %, amount vs target, salary/side-income breakdown, last-updated
Deploy production / deploy (push) Failing after 1m14s
2026-10-26 01:17:29 +00:00
stan 9f8d54d9e3 osu! goals: games.osu_goals (maps to pass/FC from the old list) with osu! API v2 metadata (stars NM/DT/HR/HD, BPM, length, AR/OD/CS/HP, combo, objects, tags, community tags, streams from .osu), my best scores and pass/FC via hourly in-app refresh; Goals section on /trackers/games/osu; retired list URL 301s there
Deploy production / deploy (push) Successful in 1m15s
2026-10-26 00:36:06 +00:00
stan 45841d6f6c stats: core-7 economy page with CPI index levels, rebase and categories
Deploy production / deploy (push) Successful in 1m13s
- /stats/economy defaults multi-country charts to CAN KOR CHN JPN USA NLD CUW,
  with add-a-country chips and an EU 27 comparison line
- CPI index levels rebased to a chosen base year, index/YoY toggle,
  categories (food, energy, housing, core) where the source has them
- new no-key collectors: oecd (CPI categories, 10y yields), statcan (CPI);
  bis WS_LONG_CPI, FRED US CPI categories, Eurostat prc_hicp_minr, WB FP.CPI.TOTL
- Canada added as a region; CBS Curacao fallbacks for growth/unemployment
- timers stats-oecd and stats-statcan
2026-10-26 00:34:27 +00:00
stan 28140bd425 lists: movies-shows-to-watch moves into /trackers/movies (301 to the watchlist once archived)
Deploy production / deploy (push) Successful in 1m13s
2026-10-26 00:31:45 +00:00
stan 71e015d1d0 Add movies & TV tracker: movies schema, Netflix/Letterboxd/Plex/JSON/recs importers, TMDB matching, stats, owner visibility 2026-10-26 00:31:23 +00:00
stan 75571bbfe0 lists: retire scientific-papers (items live in /trackers/books?kind=papers) and cars-trains-planes-to-spot (-> /trackers/spotting); archived list URLs 301, books-to-read too
Deploy production / deploy (push) Successful in 1m15s
2026-10-26 00:24:27 +00:00
stan d71e39f40a stats: world opinions moves to /stats/opinions/world, the energy tracker merges into /stats/energy (live NED section), 301s from /projects/world-opinions and /projects/energy, tracker-style icons for the stats header, nav, sub-tabs and home grid
Deploy production / deploy (push) Successful in 1m18s
2026-10-26 00:16:08 +00:00
stan 3d3f008037 pc tracker: Megekko new build (9950X3D/X870E), dated ordered/leaving badges, future slider
Deploy production / deploy (push) Successful in 1m15s
2026-10-25 23:59:15 +00:00
stan cf0fec973c AI tracker: /trackers/ai with public news, owner-only bots and usage; ai schema (news_items, bot_status, usage_entries); idempotent import scripts; preflight ai grants check
Deploy production / deploy (push) Has been cancelled
2026-10-25 23:58:39 +00:00
stan 9b21220280 stats: /stats/history and History, Politics and Culture sections on NL, Gouda, Curaçao, US and KR pages (step 4)
Deploy production / deploy (push) Successful in 1m13s
Long-run charts (Maddison, HYDE, UN via OWID; CBS and Pew religion), a filterable
sourced timeline, Wikidata office holders and turnout, Nager.Date holidays, UNESCO
sites, Wikidata people by sitelinks, curated food and cultural exports. Wikidata
labels now fall back to mul.
2026-10-25 23:39:34 +00:00
stan 0fe0d36f87 PUBG drop map: live squad map with WebSocket rooms
Deploy production / deploy (push) Successful in 1m15s
- server.js wraps Bun.serve to add /ws/<channel> upgrades (same server and port) and
  serve the map tiles from the host mount; Dockerfile now runs bun ./server.js
- ws hub (channel registry, origin check) + pubg-map channel: rooms by unguessable
  code, validated + rate-limited messages, per-room write queue, presence
- games.pubg_rooms / pubg_matches / pubg_markers; per-match sessions with history
- /trackers/games/pubg/map hub (owner: rooms, landings over time, history) and
  /trackers/games/pubg/map/<code> fullscreen Leaflet map (all 11 maps)
- deploy-remote.sh bind-mounts ~/pubg-maps; scripts/build-pubg-tiles.py rebuilds it
2026-10-25 22:46:30 +00:00
stan d93374bca2 stats step 3 pages: /stats/elections (NL 1918→, turnout, seats, Gouda per polling station, US by state) and /stats/opinions (NL/US/KR polls, Eurobarometer issues and trust, WHR, Google Trends, GDELT themes, CHES and V-Party); nav, cards, sitemap; scatter in the chart wrapper
Deploy production / deploy (push) Successful in 1m15s
2026-10-25 22:44:09 +00:00
stan 42c9351ebd stats step 3: elections, party positions and opinion feeds (schema, collectors, timers); world-opinions data moved into stats.wo_*
Deploy production / deploy (push) Successful in 1m12s
2026-10-25 22:16:25 +00:00
stan 031ee4baf2 stats §8: Curaçao from ILOSTAT (SDMX), OWID, UN SDG 531, UN Comtrade 531 (cwintl + weekly timer), EU trade with CW (Eurostat ext_lt_maineu); CBS Curaçao LFS file pick fix; Curaçao detail panels on /stats/countries/CUW
Deploy production / deploy (push) Successful in 1m10s
2026-10-25 21:47:06 +00:00
stan fa58e5c661 stats B11: EP-Online energy labels (monthly total file → homes per label for NL, Gouda, Gouda PC4s; aggregates only), stats.ep_label_agg, monthly timer with key from ~/.config/stats/ep-online.env, charts on /stats/energy and /stats/gouda
Deploy production / deploy (push) Has been cancelled
2026-10-25 21:28:37 +00:00
stan 2a4466cb82 stats: /stats/countries comparison and /stats/countries/[iso3] profiles (Curaçao via World Bank), more WB indicators, Countries + Curaçao cards, nav/sitemap/start links
Deploy production / deploy (push) Successful in 1m13s
2026-10-25 21:22:20 +00:00
stan d19313035f stats: Eurostat pre-2007 household energy bands (nrg_pc_204_h/202_h folded into nrg_pc_204/202), stitched on /stats/energy; IMF revenue/spending from Fiscal Monitor codes
Deploy production / deploy (push) Successful in 1m10s
2026-10-25 21:14:50 +00:00
stan 7e905b1651 stats: index neighbour growth from 2016 (after mergers), clearer tariff and levy labels
Deploy production / deploy (push) Successful in 1m9s
2026-10-25 20:56:29 +00:00
stan 76bfb3dcec stats: /stats overview, economy, energy and Gouda pages; CBS series map; nav, homepage, /start and sitemap links
Deploy production / deploy (push) Successful in 1m10s
- CBS_SERIES: CPI, household tariffs (2007-now), energy balance, renewables, heat pumps,
  solar, cars, population (monthly, since 1942, components), house prices, housing stock,
  municipal levies for Gouda and its neighbours
- shared StatChart/Kpi/chart helpers with per-chart source attribution
- drop Eurostat nrg_pc_20x_h (404; CBS covers that history)
2026-10-25 20:50:47 +00:00
stan 6dcbcfee25 groceries stats: fix array/json params for the app client (live store filter 500), CPI axis, header spacing
Deploy production / deploy (push) Successful in 1m11s
2026-10-25 20:48:00 +00:00
stan a6ef263c7e groceries: stats page with nightly snapshot (battles, basket, promos, CPI, range)
Deploy production / deploy (push) Successful in 1m19s
2026-10-25 20:39:35 +00:00
stan 3ad13e5828 games: active vs non-active games (games.library.active, owner toggles on the dashboard and each game ⋯ menu; nothing deleted). Header flyout and mobile menu list every game split into active / non-active; /trackers and home tiles show active chips and open both sections on hover; /start shows active with a non-active toggle. Games dashboard moved from /projects/game-tracker to /trackers/games (dashboard of active games only; old URL and /credits 301); deep trackers stay put
Deploy production / deploy (push) Successful in 1m13s
2026-10-25 20:23:15 +00:00
stan 60370d4572 groceries: relevance-ranked search (plain/basic products first)
Deploy production / deploy (push) Successful in 1m13s
- search.ts: score on the core name (brand/size stripped): exact or query+base suffix
  (kipdij+filet), head-final compounds, prefix, inside; penalties per extra word and per
  flavour/processing word (search-words.ts, editable); bonuses for store brands, the
  query's dominant category, store count, favourites; trigram tiebreak
- groceries.synonyms table (seeded: kipdij/kippendij, pasta → spaghetti, …) expands queries
- list rows show all pack sizes of a group; group picker uses the same ranking
- scripts/groceries-search-eval.ts prints top results + latency; preflight now 8 tables
2026-10-25 20:20:34 +00:00
stan 27abff569c start: drag and drop links to reorder within a section or move them to another section (view and edit mode); orderLinks can also change the dragged link's section
Deploy production / deploy (push) Successful in 1m14s
2026-10-25 20:03:54 +00:00