Corporate ChatGPT is blocked. So I built ToolChat.
Jun 2026 ยท 7 min read
The itch was embarrassingly practical: on some office networks, ChatGPT is blocked and the approved alternatives are clunky. I had a Gemini API key and a weekend. ToolChat is what came out โ a clean chat app at pitools.vercel.app that does the 20% of ChatGPT I actually use every day.
The shape is deliberately borrowed: sidebar threads, a streaming-ish message view, markdown answers. I didn't redesign chat โ the idea was familiarity in a place the real thing can't reach. Underneath it's Next.js with Genkit flows doing the LLM work:generate-response for answers and a separate summarize-chat flow that compresses long threads when they sprawl. Two small flows beat one god-prompt.
Three decisions I'm fond of. First, history lives in localStorage โ your threads never touch my database, because there is no database. In a corporate-adjacent tool, "we can't leak what we don't store" is a feature, not a missing backend. Second, bookmarking: one click pins a useful answer above the scrollback, because the half-life of a good LLM answer is about forty seconds of scrolling. Third, a login gate โ basic username/password, just enough that a public Vercel URL isn't an open key-burner.
The honest footnote: the repo contains an /api/proxy route exploring whether a Next.js endpoint can tunnel traffic past network restrictions. Verdict, documented in the README: it's conceptual. True egress bypass needs dedicated infrastructure, not a serverless function. I kept the experiment visible instead of deleting it โ the negative result is the documentation.
Trade-offs, stated plainly: basic auth is a gate, not security; localStorage doesn't sync across devices; and a personal Gemini key has rate limits a team would blow through by lunch. For one engineer on a locked-down network, though, it's exactly enough โ and it shipped in days, not sprints.
keep reading
Bulk uploads beat dashboards: cutting remittance TAT 80%4 minBenchmark 10 classifiers before trusting one5 minPending transactions need a tracer4 minI built my own bitly โ with the analytics Bitly hides.7 minGroup chat on REST and polling. No WebSockets. (On purpose.)6 minStreaming LLMs through a 20-line edge proxy.5 min