MeisterGuide
- 3 Devlogs
- 18 Total hours
MeisterGuide is an AI powered overlay that assists you while you play a singleplayer game. If you find yourself with a problem inside your game, just press a hotkey and let Meister help out!
MeisterGuide is an AI powered overlay that assists you while you play a singleplayer game. If you find yourself with a problem inside your game, just press a hotkey and let Meister help out!
Back from vacation, and the app is finally usable! Better yet, there is a live demo now, so you can poke at the overlay in your browser without installing a thing. Quick runthrough of what changed.
You can add any game you want now. This is the big one, you can point Meister at whatever game you play. Add a game, hand it a name, a wiki address, and the game’s .exe, and the overlay switches to it the moment you launch. Under the hood every guide, chat, and setting got tagged with the game it belongs to, so nothing bleeds between them. Minecraft is still around as the founding test game, seeded on first run, but it is just one row in the ledger now instead of the whole world. I kicked the tires on the new path with Subnautica, and it took.
A game you just added has no offline guides, and making you download an entire wiki before your first question is a rude way to say hello. So Meister does not. Ask about a game it has nothing on and it grabs the relevant wiki pages right then and answers from those. The big download is now a thing you do for full offline coverage, not a toll you pay to get started.What if the guides are empty and the wiki does not have the page either? Last resort: a plain web search. Local guides first, then the live wiki, then the open web. I built it on Brave’s API, got it humming, then realized I had quietly made the app need an API key just to function… swapped Brave for DuckDuckGo, which needs no key. That one change settled the app’s whole character: it works online the second you open it, and earns an offline mode once you download guides.
Almost every game wiki lives on Fandom, and I had built the fetch path against minecraft.wiki, which has a tidy extension that hands you clean article text. Fandom does not have it. So for every Fandom game the fetch ran, reported success, and stored exactly zero articles. Subnautica came back empty every single time and nothing was failing, which is the worst kind of bug. The fix was to sniff whether a wiki has that extension and, when it does not, ask for the rendered page and yank the readable text out of the HTML myself. Subnautica started returning real articles. 👍
For three milestones “Meister Guide” meant a folder of Python you ran from a terminal. Now it is a single Windows .exe you double-click, fonts and database and all. But the .exe is Windows-only and asks you to trust a download, which is a lot for someone who just wants a look. So I built a browser version, the same walnut-and-brass overlay, a working wiki reader, the game switcher, and Ask Meister streaming pre-baked answers with their sources, all from one HTML file with no backend and no key. It ships with Minecraft and Subnautica so you can feel the game switch yourself.
Picking up from where we left off, I ended on a list of things I knew were broken or missing. Here is me crossing them off.💔🥀
Phase 1
I’d said “Wolf” and “Redstone” weren’t in the offline database and treated it like a search bug. It wasn’t. Those pages are redirects, signposts that say “you meant the Canine article,” and my scraper skipped every signpost. The content existed, I just never saved the names people type. Now it walks the redirects and folds those names into search, and plurals work too, so “creepers” finds “Creeper.”
Phase 2
Added Claude as an alternative to the local model.Cheap to do, because the chat code already streamed from “a model,” so I made it stop caring which one. Offline stayed the default, opt-in only.
Phase 3
The Settings tab had said “coming later” since the previous Phase 1 last log. Made it real: pick your backend, paste a Claude key, choose a model, rebind the hotkey. Change a setting, hit save, and it switches brains on the spot.
Phase 4
The reversal. I’d shipped local-as-default for privacy, then actually used it: the local answers were slow and the offline dump is shallow. So I flipped it. The default is now “Auto,” which reaches for Claude first if you’ve given it a key and stays fully local if you haven’t.
Phase 5
For ten phases Meister wore work clothes. I finally gave it the carpenter’s-journal face: a walnut panel and a leather spine with stitching and brass studs, painted in code so they stay sharp and tweakable. The window stopped floating and docks to a screen edge, drag it across and it snaps and mirrors so the spine faces your game. Three fonts, bundled for offline. A status pill that goes green when it spots your game, honest tab names, copy that tells the truth about local vs online. This was just the frame, the tab contents get their redesign next.
Next up I’m adding more games to the roster, trying to make the offline model better by filtering the articles better cause as it is now it’s pretty bad and a few more tweaks. I’m close to shipping I hope </3
One big devlog, because I kept meaning to post these and never did. Here is the whole thing.
I wanted a companion that floats over Minecraft like Steam’s overlay, but useful: the whole wiki offline, plus an assistant that answers from those guides without you ever tabbing out or going online. No account, no cloud, nothing leaving my machine. Windows, Python, PySide6, styled like a carpenter’s guild journal. Five phases, and every one had a moment where I was sure it worked and was wrong.
Phase 1 - the window
The hard part every tutorial skips: getting a window to sit on top of a fullscreen game without the OS slapping it down. Frameless plus always-on-top plus a translucent background did it. The hotkey was spicier, so I called the raw Windows RegisterHotKey through ctypes. It registers at the OS level, so even when a game hogs the keyboard, Alt+Insert still reaches me.
Phase 2 - a memory.
It forgot everything on close, bad for an app whose job is remembering. So: a SQLite database for games, guides, chat, settings. Then I taught it to detect when you are playing and hit the trap: the launcher keeps the process alive after you close the window, so it insisted you were mid-game forever.Fixed by watching the real game, and Java Minecraft hides as a generic javaw.exe,so I only count it when its command line mentions minecraft.
Phase 3 - the wiki.
Scraped all ~17,000 articles into a local search database.My first version would have taken five hours. The mistake was pausing a full second between requests, times sixteen thousand, that is an afternoon. I measured it, dropped the wasteful settings, used the API’s own politeness flag, and got it to forty minutes. Stores compressed plain text, resumes if interrupted.
Phase 4 - the voice.
The AI, running locally through Ollama. You ask, it finds the relevant guide passages, hands them to the model, and streams an answer with clickable sources. Private and grounded. Then a code review humbled me and caught three bugs: a leaking connection, half-finished answers being saved, and a crash-on-quit. Fixed all three.
Phase 5 - the aim.
The answers were dumb, and it was not the AI. I traced what the search fed it for “how do creepers work?”: three Bedrock beta changelogs. The real Creeper article lost. I was throwing the whole question into the keyword index, filler words and all, and changelogs repeat those words constantly. So now I strip the question to what matters, boost pages whose title matches, and bury the junk. I also made it pick the strongest model you have installed instead of the smallest. And the last humbling: pages like “Wolf” and “Redstone” are not in my database at all, because they are redirects my scraper skipped. Written down for next time.
Five phases. An overlay that floats over fullscreen Minecraft, a hotkey that survives the game stealing your keyboard, the whole wiki offline, and a private AI that finally points at the right shelf before it opens its mouth. Next up are the fixes I mentioned earlier, an UI overhaul and an overall bettering of the code as it’s pretty rough.
I’m going to sleep now gn o7