Trybe
The problem
Most social platforms optimise for attention. Trybe optimises for depth: an AI "Gatekeeper" runs a therapeutic intake interview, builds a living Soul Document from it, scores how genuinely self-aware someone is, and matches on that instead of on a profile picture. That thesis needs a lot of machinery behind it, and none of it is worth anything if people can't get through the front door on their phone.
My role
Contributor, not owner. Trybe is developed under Cracked Lemonade Stand, where I have worked as a remote engineer since 2023. The architecture, the Rust services, and the matching engine were in place before I joined the project; I came in as an engineer on the client side and the agent layer.
What I actually built:
- The entire Expo mobile app, from
expo initonward. Routing, the auth stack (login, forgot password, reset), an eleven-screen onboarding flow, the chat interface, thread management, blind rooms, and the shared component and theming layer underneath all of it. - Thread and chat management on the Next.js web client: the thread drawer and history view, async message sending, and pinning, renaming, and deleting threads.
- Auth and error handling across both clients: session handling and redirect logic on token refresh, and an error humanizer that turns raw API failures into something a person can read.
- Fixes in the Python agent layer: restored memory recall in Aria, the matchmaker agent, by removing a prompt-driven matching path that was overriding it, and fixed dependency resolution in the agents Dockerfile.
Everything below describes the system I was working inside. The parts I wrote are the ones listed above.
Key decisions
Mobile-first onboarding, built as a flow rather than a form. Trybe's whole premise is that the intake interview is the product. Eleven screens (identity, purpose, values, causes, intent, archetype, interests, social preferences, horizon, invite code, account creation) each get their own screen with a shared step-shell, so the sequence can be reordered or extended without touching the individual steps. Onboarding options live in one constants file, not scattered through components.
Deferred invite code consumption. Codes were being consumed at the point of entry rather than at account creation, so any failure later in the flow burned the code and hit a constraint violation on retry. Moving consumption to the end of the transaction fixed a class of bugs rather than one symptom.
Errors that read like sentences. humanizeApiError sits between the API and both clients. Auth and onboarding are where users are least invested and most likely to bail, so a raw 422 there costs you the user.
Stack
- Mobile: React Native 0.86 + Expo 57, expo-router, TypeScript, NativeWind.
expo-secure-storefor tokens. - Web: Next.js 15 (App Router, Turbopack) + TypeScript.
- Backend: Rust (Axum, Tokio, SQLx), split into gateway, auth, matching, and messaging services behind Caddy.
- AI layer: Python (FastAPI, LangGraph, Deep Agents). DeepSeek for the LLM, Gemini for 3072-dimension embeddings, Mem0 for cross-session memory.
- Data: PostgreSQL 16 with row-level security via PgBouncer, Qdrant for vector search, Neo4j for the concept graph, Redis for cache and pub-sub.
Challenges & solutions
Building a client against a system still being built. The Rust services and the agent layer were moving while the mobile app was going up. Keeping the app's data layer in hooks (use-chat, use-conversations, use-referral-code, use-blind-room) meant that when an endpoint changed shape, the change landed in one file instead of across every screen that touched it.
Debugging an agent that had quietly stopped remembering. Aria's memory recall looked fine in isolation but wasn't surfacing in conversation. The cause wasn't the memory layer at all: a prompt-driven matching path added later was taking precedence over it. Removing that path restored recall. Agent systems fail like this a lot: the broken component is usually not the one behaving oddly.
Status
In active development. The platform is not launched. Auth, the Gatekeeper interview, Soul Documents, personality analysis, and the suggestions feed are complete on the backend; Tribes and encrypted messaging are scaffolded; KYC and the Tender blockchain integration are still ahead. The mobile app I built covers onboarding through chat and is being iterated on alongside the rest of the team's work.