Building ARPA Chat Solo: 500+ Organic Users, What We Learned, and Why We Rebuilt Everything
My honest journey learning TypeScript, GCP, and GenAI on the fly to build ARPA Chat, hitting 500+ organic users, and rebuilding voice and agent cognition from scratch. I have been building ARPA Chat solo since late
My honest journey learning TypeScript, GCP, and GenAI on the fly to build ARPA Chat, hitting 500+ organic users, and rebuilding voice and agent cognition from scratch.
I have been building ARPA Chat solo since late last year.
After months of nonstop tinkering, I finally sat down to ship a whole batch of major upgrades that I had been postponing for quite some time. Before diving into what is new, I want to share where this project came from, the technical trenches I crawled through, and why this update was overdue.
Context and Background
ARPA Chat started out strictly as an experimental side project. I had no marketing budget, ran zero paid ads, published no hype threads, and had no launch campaign. It grew purely through word of mouth, which for me is crazy considering I only shared it with a handful of friends to try and test initially. The purpose of the app was vague from the beginning, even tho we got into an accelerator and were approached by a dozen investors, but for us this was always more of a testing hall for AI features rather than a commercial AI app.
It served initially as a personal training ground for I wanted to learn how to deploy and maintain a full-blown production app without relying on external devs or design studios, a personal challenge, if you like.
Obviously a vibe coder can tell you that you can build any app in less than a week with Claude Code. But in my case, I didn't want to use Lovable, Supabase, or host some generic MVP that looks like every other vibe-coded project spat out on Vercel.
So initially, I had to brainstorm with Gemini (back then Gemini 2), and figure out the architecture, approach, stack, and challenges to consider.
We ended up with GCP x Firebase, even though I had zero prior experience with either. I was naturally closer to the Google ecosystem, and since our parent company ARPA Hellenic Logical Systems was recently incorporated, Google gave us $2k in startup credits until January 2027. It would not be wise to just let them rot.
The initial UI was the easiest part, lit vibe coded with Gemini and Claude via Cursor in a matter of days. It wasn't perfect, but it had the essentials like the basic chat area, past convos, and basic settings. The real challenge was setting up the backend. I picked Python simply because it was the only language I was versatile at, not for any other reason.
Firebase was a piece of cake. I already had a bunch of ARPA-related domains, including arpa.chat, so I pointed that to Firebase, set up Auth and Firestore, and had authentication running smoothly. On the other hand, setting up GCP was a massive pain in the ass. But bwoy, the experience I gained was invaluable, and I now feel confident deploying almost anything on Google Cloud, managing VMs, compute optimization, AI/ML Ops, IAM policies, key management, prompt injection firewalls, Cloud Run containers, you name it. And that, was the real goal with arpa.chat. Learn how real apps used by millions are wired to the bone.
Plus, living on GCP makes it easy to implement native Google ecosystem features like Maps, image search, and real-time live voice.
The worst part of all was probably output formatting, rendering, storing correctly different schemas and self-healing, especially for complex cards like interactive maps, or diff reviews.
ARPA ID & 3 Distinct Personas
An interesting part was building the ARPA ID schema design to serve user customizations and agent preferences as we unlock new platform capabilities. If a user customizes an agent with a specific system prompt, settings, or custom voice, those settings persist specifically for that agent without dirtying global defaults (unless explicitly specified).
We also didn't want just one monolith AI that users prompt into a blank box. Instead, as in real life you don't only interact with one person, we built 3 distinct models and personas with individual lineages and characteristics:
- C3: Your reliable, plain, neutral AI assistant for daily work.
- PHO-TN: A warm Greek ladyβlike someone's favorite aunt, who helps netizens with Byzantine bureaucracy, cooking proper Kokkinisto, or local gossip.
- OPSIE: A sharp, serious, high-end corporate operative who feels like a character straight out of a cyberpunk world.
Moving Away from ElevenLabs: The Real-Time Voice Pivot
The biggest user request was voice. In earlier iterations, we followed the standard pipeline: microphone audio -> Speech-to-Text -> LLM generation -> ElevenLabs TTS -> browser playback. This worked in 2024, was okish in 2025, but extremely outdated in 2026 and beyond.
On paper, ElevenLabs sounded great. In practice, the UX was broken:
- Compounding Latency: Daisy-chaining STT + LLM + TTS caused a 2 to 4 second lag. It felt like talking over a sluggish satellite phone.
- Punishing Costs: Character-based TTS quotas burned credits rapidly once people had real, open-ended conversations.
- Zero Natural Flow: You couldn't naturally interrupt an agent mid-sentence without messy cancellation hacks and audio buffer tearing, unless you used conversational ai api, but that needed it's own rag native to XI Labs.
So, we moved away from ElevenLabs and rebuilt our voice engine using native bidirectional WebSockets with Gemini 3.8 Live.
The difference is night and day. Audio flows full-duplex over a single live socket with sub-second latency. The agent hears you while it speaks, gracefully yielding the floor the moment you speak up. We also mapped custom Verbal Spectrums so any agent can have their own unique voice.
Why Should You Care?
On most AI platforms, customizing an assistant requires one of two extremes: writing a 500-word prompt essay, or learning complex workflow automations with webhooks and API keys.
ARPA Chat takes a tactile approach. You don't need to be an AI engineer or learn prompt wizardry. You customize agents using simple buttons, faders, and dropdown choices. Want deeper analytical reasoning or snappier cadence? Slide a fader. Want to change an agent's demeanor or vocal spectrum? Pick from a dropdown. The underlying multi-layer cognition configures itself automatically.
Where This Leads: Skillware, 3D Avatars, and Harp Island (HI)
Besides the obvious next updates that bring videogen, audiogen, and more apps (currently we have interactive chess you can play with your AI), what we have today is just the launchpad for where we are heading:
- Skillware: We are integrating modular skills that any agent can utilize out of the box with zero code, zero "vibe coding", no debugging nightmares, no sandboxing headaches, no API keys, and no brittle n8n or Python connectors. You simply pick the skill, configure it for your needs, and your agent can utilize it indefinitely. We open-sourced the underlying specification on GitHub at arpahls/skillware.
- 3D Interactive Avatars: Chat bubbles are only the first step. We are actively working on web-based 3D interactive avatars over at arpahls/avatar.
- Harp Island (HI): These 3D avatars will power HI (Harp Island), a shared, multiplayer web environment where humans and autonomous AI agents interact, collaborate, and explore shared spaces.
Final Thoughts
To the 500+ people who adopted ARPA Chat purely through word of mouth and stuck with a solo builder through the early bugs: thank you. This update is for you.
Feel free to check out what we've shipped, play with the live voice engine, and drop your honest thoughts below! Any kind of feedback more than just appreciated <3
Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes β full credit and traffic to the original publisher.





