← Selected work · Nov 2025 – Feb 2026

Aitopia.

Sole mobile engineer for an AI startup with 1M+ Chrome extension users. Built a production React Native app for iOS and Android from zero in under 4 months.

Period
Nov 2025 – Feb 2026 (~4 months)
Role
Founding Engineer, sole mobile engineer. Owned the React Native app end-to-end: architecture, API layer, streaming, UI, release.
Stack
React Native (Expo), TypeScript, Zustand, Zod, custom SSE streaming, React Navigation v7
Output
331 commits · 253,488 net lines · 586 passing tests in 61 suites · iOS + Android from one codebase
Status
Shipped. Engagement concluded Feb 2026.

Overview

Aitopia is an AI Agent Marketplace based in Istanbul. The Chrome extension had over 1 million users when I joined as Founding Engineer in November 2025. There was no mobile codebase, no architecture decisions made, and no mobile team. I owned the React Native app end-to-end for the next four months.

Problem

The company had a successful Chrome extension and needed to ship a mobile app fast. The app had to support 10+ AI models, real-time streaming, a model comparison feature, an agent marketplace, voice input, and image generation. All on a timeline measured in months, not years. I was the first and only mobile engineer.

Constraints

  • Solo engineer, no mobile foundation to build on
  • One codebase had to ship to both iOS and Android
  • API was undocumented. No specs, no Postman collection
  • API responses returned as AES-encrypted blobs ({ct, iv, s, k}). I had to reverse-engineer the decryption layer from the extension
  • Two backends on two domains, with non-standard auth (custom HOPEKEY header plus a static Bearer token that disabled response encryption)

Decisions

  • Lock architecture on day one: Zustand stores, Zod validation, modular API layer, before writing the first screen. Prevents the refactor debt that kills mobile projects at scale.
  • Build the API layer as 16 modular files (client.ts, encryption.ts, streaming.ts, polling.ts, etc.) with automatic encryption/decryption injection. Future protocol changes stay cheap.
  • Treat the model comparison engine as an isolated dual-stream container, not a tab. Users compare model outputs side by side mid-conversation without session context bleeding from one model to the other.
  • Adaptive navigation: bottom tabs on mobile, drawer on tablet and web. One product, three layouts.

What I built

  • React Native (Expo) app from zero. iOS and Android from a single codebase.
  • Multi-model AI chat with 10+ models (GPT-4o, GPT-5, Claude, DeepSeek, Llama, custom fine-tuned)
  • Real-time SSE streaming with encrypted dual-token authentication
  • Model comparison engine: side-by-side output triggerable mid-conversation
  • AI Agent Marketplace with WebView and token bridge
  • Voice input (Whisper) and image generation (DALL-E 3)
  • Custom SSE parser. The backend returned choices as an object, not an array; getFirstChoice() handles both shapes
  • Three-mode auth: Guest, Email/Password, Google OAuth, with a model-fallback system so a single provider outage does not stop the conversation

Hard problems worth naming

I reverse-engineered the AES protocol from the Chrome extension to make the mobile app talk to the same backend. I also discovered that beta_api.aitopia.ai failed on React Native because the underscore in the domain breaks native URL parsing. The CTO did not know. Late in the engagement I caught a backend bug where responses were returned one request behind their own promise: the answer to the current request was actually the answer to the previous one. None of this was in the API docs because there were no API docs.

Result

  • 331 commits in ~3 months (19 Nov 2025 to 11 Feb 2026)
  • 253,488 net lines of code. 3,043 file changes. 764 files in the final repo.
  • 586 passing tests across 61 test suites
  • iOS and Android shipped on schedule. Zero security incidents.

Reflection

The first 2.5 months I spent too long on the design system and architecture and not enough on shipping. When the team finally asked for the UI specifically, I delivered it in 1.5 days. The honest lesson: if the team wants a Monica clone, build the Monica clone, then have the architecture conversation. Ship first, optimize later. Communicate weekly, not at the end of a deliverable. And test your own builds. Expo Updates silently overwrote one of mine and made it look like I had not fixed anything.

I left by choice on 12 February 2026. The work itself stayed clean even when the relationship around it broke down. Your standards for the product should not be contingent on the environment around you.

Have a similar product to build?

Founding-engineer or technical-partner work on AI-native products is exactly the shape I am looking for.