Project snapshot
- Product: Mobile-first peer-to-peer marketplace for Cyprus
- Role: Founder, product owner, and sole engineer
- Engagement: Wandity-owned product
- Status: Web and referral surfaces live; mobile apps being submitted to the App Store and Google Play as of July 2026
- Scope: 62 React Native screens, 1,100+ commits, five languages, real-time chat, and production AI workflows
Outcome and scope
I set out to build a mobile-first way to buy and sell peer to peer in Cyprus. A seller should be able to photograph an item, get help writing the listing, and chat with a buyer who speaks another language. With no existing team or codebase, I handled the full marketplace alone: listings, chat, payments-adjacent credits, moderation, and growth.
Agorani is a React Native app on the New Architecture, using RN 0.86 and Expo 57. A Cloudflare Workers API built with Hono and tRPC backs the app. The pnpm workspaces monorepo contains the Expo mobile client, the Cloudflare Workers backend, an Astro web companion, and a shared TypeScript package for Zod schemas, Drizzle helpers, i18n, and constants. I designed, built, and took everything from the first commit through app-store submission.




Scroll for more →
AI-assisted listings and moderation
Workers AI runs Llama 4 Scout vision models. A seller can take a photo and get a draft title, description, and category to edit before publishing. The same vision models screen images for policy violations.
A 70B Llama model translates listings, services, profiles, messages, and reviews across English, Greek, German, Russian, and Spanish. A smaller Llama model screens text through the same moderation pipeline. It scores seven categories: prohibited items, counterfeits, adult content, weapons, scams, misleading listings, and offensive language. Edge cases go to a human moderator queue, and sellers can appeal disputed decisions.
Real-time chat on Durable Objects
Buyer and seller chat runs on three Cloudflare Durable Object classes with the WebSocket Hibernation API. Connections remain inexpensive to hold open at scale, and each conversation keeps consistent state without a separate message broker.
Referrals, credits, authentication, and trust
A credits system rewards listing and engagement. Its deferred-attribution referral flow credits the right inviter even if the invitee installs the app well after opening the link. Referral links use a separate subdomain, r.agorani.com, outside the main app’s universal-link hosts. This prevents an older installed build from intercepting a link it cannot handle.
Sign in with Apple, Google SSO, and OTP cover authentication. Transactional email runs through Cloudflare Email Routing, while D1 rate limits the anonymous AI flow to prevent abuse.
System architecture
Text description
The Expo React Native app and the Astro public-listing and referral sites were built by Alfonso. Both connect over typed HTTPS to the Hono and tRPC Cloudflare Worker designed and operated by Alfonso, which handles validation, authentication, and business workflows. The Worker sends chat commands to three Durable Objects built by Alfonso, reads and writes relational marketplace data through D1 and Drizzle, checks OTP and refresh-token blacklist data in Workers KV, requests vision, translation, and moderation inference from Workers AI, and sends transactional messages through the external Email Routing service. The mobile app also reports funnels, crashes, and errors to the external PostHog and Sentry services. Gold components and ALFONSO labels mark implementation responsibility within Alfonso's delivery scope, not legal ownership; violet components are data stores, amber identifies the AI service, and gray identifies external services.
Frontend: React Native on the New Architecture through Expo 57. TanStack Query and tRPC v11 provide typed, cached data access throughout the application.
Backend: Cloudflare Workers runs Hono and tRPC. Drizzle ORM over Cloudflare D1 handles relational data, Workers KV handles fast key-value lookups, and Durable Objects keep real-time chat state.
AI: Workers AI runs Llama 4 Scout for listings and image moderation, a 70B Llama model for translation across five languages, and Llama 3.1 8B for text moderation. All three run inline with request handling at the edge.
What I owned
- Product definition, UX, and the Expo application
- Hono/tRPC API design, D1 schema, shared TypeScript package
- Durable Objects chat and referral-credit workflows
- Vision, translation, moderation integrations
- Analytics, crash reporting, native E2E coverage, store-submission work
Key decisions and trade-offs
- Share the product model: A shared TypeScript package aligns mobile, web, and API validation, schema, and business rules. In the pnpm workspaces monorepo, it also holds Zod schemas, Drizzle helpers, i18n, and constants. This reduces drift, but schema changes create coordinated compatibility and release coupling across clients and the API.
- Keep chat state close to each conversation: Durable Objects provide per-conversation real-time state without a separate message broker. The WebSocket Hibernation API keeps long-lived connections inexpensive, at the cost of structuring chat around three stateful Object classes.
- Keep people in control of AI output: AI inference runs inline, which adds latency and model uncertainty. Editable title, description, and category drafts contain that uncertainty, while ambiguous moderation enters human review instead of forcing an automated decision; sellers can appeal disputed decisions.
Technical deep dive
Text description
A seller chooses or captures a photo in the Expo app built by Alfonso. The app uploads it to the Hono and tRPC Worker designed and operated by Alfonso and requests a listing draft. The Worker asks Workers AI vision to extract a title, description, and category, then sends both the image and generated text through the AI moderation service. On the safe path, the Worker persists the structured draft in D1, receives its draft id, and returns an editable result to the app. On the edge-case path, the Worker flags the item for human review and returns a review state instead. In either case, the app returns control to the seller to review, edit, or publish.
Production evidence
- Live surfaces and infrastructure: The public marketplace and referral surface are live behind Cloudflare. Production infrastructure includes the Hono/tRPC Worker, D1, Workers KV, Durable Objects, Workers AI, and Email Routing.
- Delivery history: The product has 1,100+ commits since September 2025, spanning the Expo app, Workers backend, Astro web companion, and shared package.
- Native coverage: A 9-suite Maestro native E2E harness runs 70+ flows against real simulator and emulator builds. The suites cover smoke tests, auth, settings, moderation, products, services, onboarding, referrals, and launch. An automated App Store asset pipeline sits alongside the test harness.
- Production visibility: PostHog tracks the funnel from installation to the first listing and first completed chat. Sentry reports crashes and errors from the React Native client.
- Current mobile status: As of July 2026, Agorani is being submitted to the App Store and Google Play.
Related action
For an offline-first iPad system with a separate B2B web platform, see Abrila. To discuss a similar mobile or full-stack build, get in touch.
