Inspiration
The internet was built for reading, not doing.
Living in Lagos, I see the "Interface Tax" every day. Millions of people are excluded from the digital economy—not because they lack internet access, but because they cannot navigate the chaotic, broken, and complex interfaces of essential services.
Whether it’s renewing a driver’s license on the FRSC portal, filing taxes, or applying for a visa, the process is a nightmare of bad UI, confusing forms, and legacy code. In Nigeria, an entire informal industry of "agents" and "touts" exists just to help people click buttons on a screen.
I asked myself a First Principles question: Why do we force humans to learn how to talk to computers? Why can't computers learn how to navigate reality for us?
We don't need another chatbot to tell us how to do it. We need an agent to do it. That is why I built Ona (Yoruba for "The Way"). It is the "Do It For Me" button for the web.
What it does
Ona is a Visual Reasoning Agent that turns any complex website into a simple conversation. It decouples the intent from the interface.
- The Command: You simply type: "Renew my Lagos Driver's License" or "Book a passport appointment."
- The Reasoning: Ona acts as a proxy. It spins up a secure, headless browser instance in the cloud.
- The Vision: Using Gemini 3 Pro, Ona "sees" the website exactly like a human does. It identifies buttons, interprets CAPTCHAs, handles dropdowns, and detects errors visually. It doesn't rely on brittle HTML parsing that breaks when code changes.
- The Execution: It fills out forms, uploads documents from your encrypted vault, and navigates multi-step workflows.
- The "God Mode": The user watches a live, low-latency video stream of the AI performing the work in real-time, maintaining full transparency and trust.
How I built it
I rejected the standard "wrapper" approach. I engineered a high-performance distributed system designed for speed and concurrency.
- The Brain (AI Cortex): Built with Python (FastAPI) and Google Vertex AI. I leveraged Gemini 3 Pro's Multimodal Vision capabilities to process screenshots of the DOM rather than raw HTML. This allows the agent to navigate legacy government sites that are heavy on JavaScript and messy code.
- The Nervous System (Backend): Built with Go (Golang). I avoided standard enterprise bloat (no heavy ORMs or dependency injection frameworks). Instead, I used a clean, functional architecture with Chi for routing and Render for structured responses. This manages the fleet of headless browsers (Playwright) and handles the high-concurrency WebSocket streams.
- The Face (Frontend): A Nuxt 3 application designed with a "Command Center" aesthetic. It connects via WebSockets to render the live browser view.
- Infrastructure: The entire stack is containerized with Docker. I used Redis for session state management and PostgreSQL (pgx) for persistent user data.
Challenges I ran into
- The Latency War: Streaming a live browser view (30fps) while simultaneously sending screenshots to Gemini 3 for inference is heavy. I had to heavily optimize the Go routines and image compression pipelines to ensure the user didn't feel the "AI lag."
- Hallucinations vs. Reality: Early versions of the agent would try to click buttons that were overlaid by popups. I implemented a "Self-Healing Loop" where Gemini analyzes the result of a click to verify success before moving to the next step.
- State Management: Keeping a headless browser session alive through 2FA prompts and redirects was difficult. I had to architect a robust session manager in Redis that allows the browser to "wait" for user input (like an OTP code) without timing out.
Accomplishments that I'm proud of
- Functional Go Architecture: I successfully implemented a clean, functional backend pattern that is easy to test and scales horizontally, proving that you don't need complex OOP patterns to build robust systems.
- Visual Navigation: I achieved a state where the AI navigates purely by "sight." It feels like magic to watch the cursor move and click on its own based on visual reasoning.
- Real-World Impact: This isn't just a toy; it's a tool that can democratize access to services for the elderly, the non-tech-savvy, and those with disabilities.
What I learned
I learned that Gemini 3 is not just a text generator; it is a reasoning engine. When you give it visual input and a specific goal, it can plan, execute, and correct itself in ways that previous models couldn't.
I also deepened my understanding of Browser Orchestration. Managing headless browsers at scale is difficult, but it is the key to automating the "last mile" of the internet.
What's next for Ona
- Voice Mode: Integrating Gemini Multimodal Audio so users can just speak to Ona. "Ona, handle my tax filing."
- The Identity Vault: A secure enclave where users store their Passport/ID once, and Ona auto-injects it into any form securely via the backend (never exposing it to the LLM context).
- Mobile App: Bringing the "Remote Control for the Web" to iOS and Android.
Ona: Don't fight the system. Find the Way.
Built With
- chi
- docker
- fastapi
- go
- google-gemini
- nuxt.js
- playwright
- postgresql
- python
- redis
- vertex-ai
- websockets