It started as a bot that answered
one question.
βWhen does the boss come back?β Everything on this site grew out of that β and out of the fact that EverQuest will happily tell you what just happened, as long as something is reading the log.
Four pieces, built in about six weeks, still shipping. Scroll β
A Discord bot, and a text file
Someone kills a boss, someone types it in Discord, and the bot does the arithmetic nobody wants to do at 11pm β respawn windows, variance, the whole board of who is up and who is hours away.
That was the entire product. It was already worth it.
One Node process on Railway, redeploying on every push to main. State lived in a JSON file on disk.
Which is fine, right up until the host restarts and the file is gone. That single fact is why the next chapter exists.
The agent β reading the log, on your machine
EverQuest writes everything you see to a text file. A small program watches that file and turns it into parses, attendance, buff coverage and boss kills β with no typing, and no one having to remember.
And not everyone has to run it. Each log sees the whole fight, so the uploads merge into one record β a raid night here averages 0 raiders, and a fraction of them parsing covers everyone. The most we've seen upload in one night is 0.
Officer chat, tells and private channels are filtered out on your own PC, before anything is sent. That is a design constraint, not a setting.
A JSON file could not hold this. Supabase (Postgres) became the memory β 0 migrations later it still is.
The bot grew an authenticated HTTP surface for uploads, and GitHub Actions started building and publishing the agent so people could actually get it.
wolfpack.quest β somewhere to look at it
Parses you can open and read. Attendance that explains itself. Every character's gear, buffs, spells and DKP. A raid guide, boards, leaderboards β and /me, where you can see exactly what we hold on you and switch any of it off.
Next.js on Vercel, signing in through Discord, gated on guild role. Officer pages sit behind a second check.
Same Postgres as the bot, read directly β no second copy of the truth to drift.
Mimic β the part you see mid-fight
A desktop app that carries the agent, installs without admin rights, updates itself, and puts overlays on top of the game: DPS, tank, triggers, charm, pets, mob info, the buff queue.
Two of them are below, running the same way they run in a raid.
Electron bundling its own Node runtime, shipping on three separate update channels β stable, beta, and one for Steam Deck.
Releases are cut by version bump, built in CI, and pulled by the app itself. Nobody hand-installs anything.
The tank bar with the CH chain landing on it, and the rampage target riding out the hits under Divine Aura β with the heals already in the air for the moment it drops.
Boss HP, the death-touch clock, who is being rampaged, healer mana lowest-first, and which clerics still have Divine Intervention β pulled from every raider's log at once.
The Complete Heal rotation as a rhythm game: your number comes up, you get the GO!, your cast bar runs, and the landing is graded. Nobody counts to ten out loud anymore.
It follows you, not one character
Every other log parser points at one selected log file. Change character and it is watching the wrong one until you go and re-point it.
Mimic tails every character's log in your EQ folder at once and follows whoever you are actually playing. The overlays re-aim themselves. Nothing to switch, mid-raid, with eleven people waiting.
It is also why the platform counts people, not character names: plenty of raiders are on a different character by the last pull than the one they zoned in on, and everything β attendance, parses, loot β has to know those are the same person.
Ticks, loot, and not missing your shot at it
Attendance records itself at 8:30, 9:30, 10:30 and 11:30 β who was actually in the raid at that moment, written down before the live roster is overwritten. Filing the tick stays a deliberate officer action; the record is just there so nobody gets missed, including on the nights we take the last tick early.
Loot is read straight out of guild and raid chat β by the time an officer opens the post screen, the drops are already listed and two clicks from being up for bids. (Pasting works too.) Each item comes back tagged π NEW if the guild has never seen it and π ULTRA RARE if it has dropped once and sits in the bottom quarter of that boss's table β checked against our own history and the drop tables, not somebody's memory.
The live raid roster is overwritten every few seconds and pruned within the hour, so who was there at 8:30 genuinely cannot be recovered at 9:30. It has to be captured at the moment or it is gone β that is why this is a scheduled job and not a query.
Bids are sealed: encrypted at rest and readable only by the bot, so nobody can see what anyone else put in β including whoever is running the auction.
Mimic says it out loud and puts the countdowns on screen. Two minutes is not long when you are mid-fight, tabbed out, or not reading chat β this way the window reaches you anyway, and nobody misses their shot at a bid.
The bid box is on the dashboard, next to the parse. Your characters come from OpenDKP, your DKP balance is right there, and it remembers what the item last went for and what you bid last time.
Which matters when the auction opens while you are tanking. No alt-tab hunt for a website, no working out whether you can afford it.
And then: not breaking it
Raids happen three nights a week at a fixed time. Something that breaks at 8pm on a Wednesday does not stop the raid β the guild raided for years without any of this β but every convenience that fails becomes hand-work for the people already spending their evening running the night. They volunteer their time; the platform's job is to never hand it back to them broken.
0 tests over 0 files, a golden-log fixture that replays real combat through the parser, and a deploy freeze that blocks pushes during the raid window.
Plus a kill switch: the whole fleet of agents can be paused from a web page, without anyone updating anything.
Live numbers
Read from the database when this page was built. Nothing here is illustrative.
All of it is optional, and all of it is yours
Turn logging off and nothing is collected. Exclude a character and it stops counting. Every line of this is open source, and the privacy page says plainly what is kept and who can see it.