[{"data":1,"prerenderedAt":312},["ShallowReactive",2],{"navigation":3,"\u002Fprojects\u002Fmymind":50,"projects":199},[4],{"title":5,"path":6,"stem":7,"children":8,"page":49},"Blog","\u002Fblog","blog",[9,13,17,21,25,29,33,37,41,45],{"title":10,"path":11,"stem":12},"On an EPC Job, 'Sure, No Problem' Is the Most Expensive Sentence Onsite. An Agent Would Have Checked the Contract First.","\u002Fblog\u002Fconstruction-agents","blog\u002Fconstruction-agents",{"title":14,"path":15,"stem":16},"I Run AI Agents Around the Clock and My Best Productivity Tool This Year Has No Battery","\u002Fblog\u002Fde-digitizing","blog\u002Fde-digitizing",{"title":18,"path":19,"stem":20},"I Built a Bot Army to Attack My Own Game Server, and 45 of Them Took It Down","\u002Fblog\u002Fgame-server-scaling","blog\u002Fgame-server-scaling",{"title":22,"path":23,"stem":24},"I Chased Four Benchmark Points and Almost Missed the Model That's Twice as Fast","\u002Fblog\u002Flocal-ai-moe-vs-dense","blog\u002Flocal-ai-moe-vs-dense",{"title":26,"path":27,"stem":28},"I Spent $5K on GPUs Just to Learn That One GPU Was Enough","\u002Fblog\u002Flocal-ai-rig","blog\u002Flocal-ai-rig",{"title":30,"path":31,"stem":32},"I Billed Myself for 6.7 Billion Tokens and the Total Came Out to $35.85","\u002Fblog\u002Flocal-ai-true-cost","blog\u002Flocal-ai-true-cost",{"title":34,"path":35,"stem":36},"I Spent a Saturday Trying to Replace My Local AI to Save on Tokens. The Server Voted No.","\u002Fblog\u002Flocal-ai-upgrade","blog\u002Flocal-ai-upgrade",{"title":38,"path":39,"stem":40},"Building a Roguelike Game with Amazon Q","\u002Fblog\u002Fq-roguelike","blog\u002Fq-roguelike",{"title":42,"path":43,"stem":44},"I Spent 22 Years Programming Just to Fail at Making a Skeleton Swing a Sword","\u002Fblog\u002Fthundoria-architecture","blog\u002Fthundoria-architecture",{"title":46,"path":47,"stem":48},"Build First - Learn Later","\u002Fblog\u002Fvectly-scaling","blog\u002Fvectly-scaling",false,{"id":51,"title":52,"body":53,"description":175,"extension":176,"featured":177,"images":178,"meta":183,"navigation":177,"path":184,"priority":185,"seo":186,"sitemap":187,"stem":189,"tags":190,"type":98,"__hash__":198},"projects\u002Fprojects\u002Fmymind.md","MyMind",{"type":54,"value":55,"toc":168},"minimark",[56,61,65,68,79,83,86,138,142],[57,58,60],"h2",{"id":59},"project-overview","Project Overview",[62,63,64],"p",{},"MyMind is the single front door to everything I would otherwise scatter across a dozen apps: a Markdown knowledge base with a real editor, a ShareX-compatible image host with OCR, a kanban, a clipboard that syncs between my machines, and a memory system that turns my AI coding sessions into durable, searchable notes. It runs on my homelab, uses my own GPUs for the AI work, and is exposed to the internet only where I choose.",[62,66,67],{},"The part I use most is the memory loop. Claude Code and Hermes hooks stream session transcripts in, a background job extracts atomic, deduplicated memories with confidence scores (\"prefers pnpm\", \"this project uses Drizzle + pgvector\"), high-confidence ones auto-file and the rest land in a review queue. Then an MCP server hands all of it back to the agents: search memories and docs, save a memory, create and edit tasks and projects. My coding agents read my knowledge and write back to it, which is the whole point.",[62,69,70,71,78],{},"It is also a portfolio piece in the literal sense: the \"Live from the rig\" strip on this site's homepage is served by MyMind's analytics slice, which already reads Prometheus, vLLM, and LiteLLM for my own dashboard. The source is public at ",[72,73,77],"a",{"href":74,"rel":75},"https:\u002F\u002Fgithub.com\u002FPatrity\u002Fmymind",[76],"nofollow","github.com\u002FPatrity\u002Fmymind"," under MIT.",[57,80,82],{"id":81},"design","Design",[62,84,85],{},"One Nuxt 4 service does all of it, the web app, the HTTP API, and the MCP server, from a single deployable:",[87,88,89,102,108,114,120,126,132],"ul",{},[90,91,92,96,97,101],"li",{},[93,94,95],"strong",{},"Frontend:"," Nuxt UI, live across devices over SSE (every mutation publishes a change, every list refetches), a ",[98,99,100],"code",{},"⌘K"," palette that searches documents, memories, image OCR and tags, tasks, and projects in one query",[90,103,104,107],{},[93,105,106],{},"Search:"," hybrid semantic + keyword, pgvector embeddings fused with trigram matching, so you find the thing by what it means, not the words you happen to remember",[90,109,110,113],{},[93,111,112],{},"Data:"," Postgres + pgvector via Drizzle, canonical projects keyed on the git remote so the same repo cloned to five machines resolves to one identity",[90,115,116,119],{},[93,117,118],{},"AI:"," everything runs against models on my rig through LiteLLM (embeddings, vision OCR, transcription, memory extraction, TTS), reviewable and never silently \"magic\"",[90,121,122,125],{},[93,123,124],{},"Voice:"," a hands-free agent with Silero VAD in the browser, faster-whisper STT and Kokoro TTS on the rig, barge-in that actually works, and a Three.js particle reactor with 50k particles in a custom vertex shader that breathes when idle and erupts with the reply",[90,127,128,131],{},[93,129,130],{},"Analytics:"," a read-only dashboard over the homelab's Prometheus and LiteLLM (per-GPU telemetry, engine activity, token and spend history), plus one curated public endpoint for this site",[90,133,134,137],{},[93,135,136],{},"Deploy:"," native systemd app in a Proxmox LXC, Postgres and SearXNG in Docker beside it, GitHub Actions test + deploy on every push to master",[57,139,141],{"id":140},"lessons-learned","Lessons learned",[87,143,144,150,156,162],{},[90,145,146,149],{},[93,147,148],{},"The AI proposes, I approve."," Nothing auto-mutates the corpus. The review queue looked like friction at first and turned out to be the reason I trust the memories at all.",[90,151,152,155],{},[93,153,154],{},"Persist the minimum."," MyMind stores no live telemetry, it reads Prometheus on demand. The one exception is a daily LiteLLM rollup, because Prometheus retention capped the history I wanted to chart. Every exception like that is written down next to the code so a future me does not \"fix\" it back.",[90,157,158,161],{},[93,159,160],{},"Build it in cycles."," Each system was its own brainstorm, spec, plan, build, handover, and wiki page. The wiki describes what runs today, the handovers describe how it got there, and the specs stay frozen at intent. Stale docs misled sessions more than once before that discipline existed.",[90,163,164,167],{},[93,165,166],{},"Live by default is a contract, not a feature."," Once one page updated across devices without a refresh, every page had to, or the ones that didn't felt broken.",{"title":169,"searchDepth":170,"depth":170,"links":171},"",2,[172,173,174],{"id":59,"depth":170,"text":60},{"id":81,"depth":170,"text":82},{"id":140,"depth":170,"text":141},"A self-hosted, AI-native second brain. Documents, memories distilled from my coding sessions, tasks, images, a device-sync clipboard, and a voice agent, all running on my own hardware and exposed to my agents over MCP. Open source, MIT.","md",true,[179,180,181,182],"\u002Fimages\u002Fprojects\u002Fmymind\u002Fdocuments.webp","\u002Fimages\u002Fprojects\u002Fmymind\u002Fcommand-palette.webp","\u002Fimages\u002Fprojects\u002Fmymind\u002Fmemories.webp","\u002Fimages\u002Fprojects\u002Fmymind\u002Ftasks.webp",{},"\u002Fprojects\u002Fmymind",1,{"title":52,"description":175},{"loc":184,"lastmod":188},"2026-08-18","projects\u002Fmymind",[191,192,193,194,195,196,197],"AI","TypeScript","Nuxt","PostgreSQL","pgvector","MCP","Open Source","QX3EsSiurrijko2jiiFjh4nTte769YzaNMD56xLyXtY",[200,211,224,237,248,251,261,272,281,292,302],{"title":201,"description":202,"images":203,"tags":205,"navigation":177,"path":208,"stem":209,"id":210},"Cognova","An AI agent workspace built for Claude -- started as a self-hosted platform, pivoted to a full SaaS at cognova.dev with custom tools, knowledge bases, and team collaboration.",[204],"\u002Fimages\u002Fprojects\u002Fcognova\u002Fbanner.webp",[191,192,193,194,206,207,196],"Drizzle ORM","Stripe","\u002Fprojects\u002Fcognova","projects\u002Fcognova","projects\u002Fprojects\u002Fcognova.md",{"title":212,"description":213,"images":214,"tags":216,"navigation":177,"path":221,"stem":222,"id":223},"Fireship","A comprehensive overview of my work with Fireship, highlighting key contributions and lessons learned.",[215],"\u002Fimages\u002Fprojects\u002Ffireship\u002Fbanner.webp",[217,218,219,220],"Marketing","Community Management","Video Editing","Content Creation","\u002Fprojects\u002Ffireship","projects\u002Ffireship","projects\u002Fprojects\u002Ffireship.md",{"title":225,"description":226,"images":227,"tags":229,"navigation":177,"path":234,"stem":235,"id":236},"Kronos","A 3D third-person online multiplayer game inspired by the MMORPG Runescape",[228],"\u002Fimages\u002Fprojects\u002Fkronos\u002Fkronos.webp",[230,231,232,233],"GameDev","Java","Kotlin","Rest API","\u002Fprojects\u002Fkronos","projects\u002Fkronos","projects\u002Fprojects\u002Fkronos.md",{"title":238,"description":239,"images":240,"tags":242,"navigation":177,"path":245,"stem":246,"id":247},"Safemoon's MoonCraft","A comprehensive overview of my work on Safemoon's MoonCraft project, highlighting key contributions and lessons learned.",[241],"\u002Fimages\u002Fprojects\u002Fmooncraft\u002Fbanner.webp",[230,231,232,233,243,244,193],"Web Development","VueJS","\u002Fprojects\u002Fmooncraft","projects\u002Fmooncraft","projects\u002Fprojects\u002Fmooncraft.md",{"title":52,"description":175,"images":249,"tags":250,"navigation":177,"path":184,"stem":189,"id":51},[179,180,181,182],[191,192,193,194,195,196,197],{"title":252,"description":253,"images":254,"tags":256,"navigation":177,"path":258,"stem":259,"id":260},"Nobility Tracker","A comprehensive overview of my work on the Nobility Tracker project, an open source web3 dApp.",[255],"\u002Fimages\u002Fprojects\u002Fnobility-tracker\u002Fdashboard.webp",[244,193,257,243],"Web3","\u002Fprojects\u002Fnobility-tracker","projects\u002Fnobility-tracker","projects\u002Fprojects\u002Fnobility-tracker.md",{"title":262,"description":263,"images":264,"tags":267,"navigation":177,"path":269,"stem":270,"id":271},"PCR","PCR is a full-stack web application that I developed for in-house use at a construction company. The application aggregated data from multiple sources to streamline workflows.",[265,266],"\u002Fimages\u002Fprojects\u002Fpcr\u002Fdashboard.png","\u002Fimages\u002Fprojects\u002Fpcr\u002Fmetrics.png",[243,244,193,194,268],"Supabase","\u002Fprojects\u002Fpcr","projects\u002Fpcr","projects\u002Fprojects\u002Fpcr.md",{"title":273,"description":274,"images":275,"tags":277,"navigation":177,"path":278,"stem":279,"id":280},"Quadzilla","An ecommerce store for the largest 4-wheeler part supplier in the UK.",[276],"\u002Fimages\u002Fprojects\u002Fquadzilla\u002Fhome.png",[244,243],"\u002Fprojects\u002Fquadzilla","projects\u002Fquadzilla","projects\u002Fprojects\u002Fquadzilla.md",{"title":282,"description":283,"images":284,"tags":286,"navigation":177,"path":289,"stem":290,"id":291},"RepCord","A small Discord bot that turned into a large-scale web application that allowed users to report bad actors in Discord servers.",[285],"\u002Fimages\u002Fprojects\u002Frepcord\u002Fbanner.webp",[231,232,287,243,244,288],"Discord API","React","\u002Fprojects\u002Frepcord","projects\u002Frepcord","projects\u002Fprojects\u002Frepcord.md",{"title":293,"description":294,"images":295,"tags":297,"navigation":177,"path":299,"stem":300,"id":301},"TakeoffHelper","A modern SaaS platform that empowered construction professionals to manage their quantity takeoffs and estimates with ease.",[296],"\u002Fimages\u002Fprojects\u002Ftakeoffhelper\u002Fconcrete.webp",[243,244,193,298],"ThreeJS","\u002Fprojects\u002Ftakeoffhelper","projects\u002Ftakeoffhelper","projects\u002Fprojects\u002Ftakeoffhelper.md",{"title":303,"description":304,"images":305,"tags":307,"navigation":177,"path":309,"stem":310,"id":311},"Vectly","An AI-powered developer chat platform with RAG capabilities, multi-model support, and GitHub integration for code-aware conversations.",[306],"\u002Fimages\u002Fprojects\u002Fvectly\u002Fbanner.webp",[191,192,193,308,268,207],"Fastify","\u002Fprojects\u002Fvectly","projects\u002Fvectly","projects\u002Fprojects\u002Fvectly.md",1787076381485]