Skip to content
Piyush ๐Ÿ‘‹
all writing

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.