-
-
Landing page - Sophie Chat
-
Guide step 1 - input
-
Guide step 2 - modes
-
Guide step 3 - credit limit
-
Guide step 4 - history
-
Guide step 5 - notes
-
Sophie Chat
-
Signup / log-in
-
Plans
-
Scratch analyzer
-
Scratch analysis done
-
Example Migration analysis Image
-
Migration analysis result interpretation
-
Regulatory architect
-
Usage & Users
Inspiration
We weren't trying to build an AI assistant.
CLYTE started in Ithaca, New York building physical tools for pre-clinical biomedical labs — our first was CytCut, a wound-healing assay device. While testing it with researchers, we kept hitting a wall that had nothing to do with our hardware: younger scientists couldn't get reliable, validated protocols. They were improvising assays from fragmented papers, and the resulting data often wasn't reproducible.
That's a worse problem than a missing tool. An irreproducible experiment doesn't just waste a week — it can send a whole research direction down the wrong path. So we built Soφ (Sophie) to close what we now call the operational distance: the gap between having a research question and having a defensible answer.
What it does
Sophie is an AI specialist for biomedical and life-science R&D. Four capabilities, all delivered without a human in the loop:
🔬 Scratch Analyzer — our most-used feature. Upload cell-migration/wound-healing microscopy images and get quantified gap closure with visual overlays and an Excel report: up to 200 images in under five minutes, versus a full workday tracing them by hand in ImageJ. Closure is computed per timepoint as
$$\text{Closure}(t) = \frac{A_0 - A_t}{A_0} \times 100\%$$
where $A_0$ is the initial gap area and $A_t$ the area at time $t$.
📋 Grounded protocol expertise — assay design and troubleshooting answered from a proprietary corpus of validated SOPs (59,134 chunks across 449 documents) via Vertex AI Vector Search, not from general web knowledge.
📊 Plain-English statistics — ANOVA, regression, survival analysis, PCA, IC50 — described in words, executed as real code, no GraphPad licence or scripting required.
⚖️ Regulatory Architect — FDA device classification and 510(k) pathway strategy, grounded in FDA guidance, 21 CFR, and live 510(k) precedents pulled from openFDA with full PDF text extraction.
How we built it
Everything runs on Google Cloud, and every LLM call is Gemini on Vertex AI.
Browser → Firebase Hosting (SPA)
→ API Gateway (public edge)
→ BFF on Cloud Run ← PRIVATE, ~29 API routes
├── Firebase Auth · Firestore · Stripe · Resend
└── 4 engines (private Cloud Run, per-request IAM ID tokens)
├── Main Chat ....... Gemini + Vector Search + code execution
├── Regulatory ...... Gemini + openFDA + 21 CFR
├── Scratch Analyzer OpenCV pipeline (Sobel/CLAHE) + Cloud Storage
└── Visualizer ...... Gemini image generation
Google Cloud in production: Vertex AI (Gemini + embeddings + Vector Search), Cloud Run, Firebase Auth/Hosting/Firestore, API Gateway, Cloud Storage, Secret Manager, Cloud Build, Cloud Logging/Monitoring.
We built it with AI, deliberately divided. Roughly half our production code is AI-written — Gemini for framework development, architecture, and strategy; Claude Code for debugging, refactoring, and hardening. Four founders shipped a standalone frontend, a 29-route BFF, Firebase auth, Firestore, Stripe billing from scratch, a transactional email system, and a full ad-attribution stack in ninety days. What we never delegated is judgment: our biomedical co-founder validates domain correctness, because in a regulated scientific setting a confidently wrong answer is worse than no answer.
Challenges we ran into
Thinking models can starve their own output. We moved to a Gemini 3 preview tier and started
seeing responses come back completely empty with finish_reason=MAX_TOKENS. The cause: on thinking
models, reasoning tokens and answer tokens share the same max_output_tokens budget — the model
reasoned itself right up to the ceiling and had nothing left to answer with. Some requests looped
until they blew our 120-second timeout.
Then the newer GA model hit a quota wall. Gemini 3.x flash is served on Vertex's global
endpoint, but our engines are pinned to us-central1 because that's where our vector index lives —
so the regional call 404'd. Reaching the global endpoint required finishing our SDK migration first,
and once we got there we hit hard 429 RESOURCE_EXHAUSTED at our request rate. We made the
unglamorous call: revert to Gemini 2.5 in production and plan the upgrade deliberately rather
than keep taking hits in front of users.
A model upgrade is a behavioral change, not a config change. This was our most valuable lesson. After a model bump, our Regulatory Architect began re-introducing itself every single turn. Nothing in that code path had changed — but the new model classified meta questions like "tell me more" as greetings, which tripped a directive that force-fires the intro. The bug had been latent for months; a smarter model surfaced it. We now treat every model change as requiring a behavioral regression pass.
Deprecation on a deadline. The Vertex generative_models SDK was being removed, so we migrated
both engines to google-genai — stateless clients, prompt-level config, a new safety-settings shape,
and reworked tool wiring — while keeping the same production behavior.
Racing ourselves. Our async job pattern wrote per-job state to disk non-atomically, so a poll that
landed mid-write read a truncated file and 500'd. Fixed with atomic os.replace writes plus a
defensive read that degrades to "pending" instead of failing.
Leaving Wix without leaving users behind. Sophie began as an embedded custom element inside a Wix site — which can't even size itself vertically. Going standalone meant rebuilding auth, database, and billing while preserving existing accounts, chat history, and subscriptions through an email-keyed claim-on-login flow.
Security we couldn't shortcut. Our organization enforces Domain Restricted Sharing, so
--allow-unauthenticated was never an option. Public traffic terminates at API Gateway, which invokes
a private Cloud Run BFF as an authorized IAM member; the BFF reaches each engine with per-request
ID tokens; Firestore rules are deny-all.
What we learned
Retention came from our narrowest feature. The Scratch Analyzer — the least "AI-looking" thing we built, a classical OpenCV pipeline — converts at 80% of users to accounts, and it's what our paying customers actually buy. Solving one concrete, painful, repeated task beat breadth.
Grounding is the moat, not the model. Anyone can call Gemini. The defensible asset is a validated internal corpus plus the retrieval scoring on top of it.
Content is compounding distribution. Our technical articles now draw ~1.5M search impressions a quarter and 9,300 monthly active users — ranking for the exact problems Sophie solves ("how to use ImageJ for scratch assay", "t-test vs ANOVA").
Traction
352 registered accounts · 13 paying subscribers (5 with no relationship to the company) · 80% Scratch Analyzer → account conversion · >50% repeat usage · infrastructure fully covered by credits · paid acquisition live with closed-loop offline conversion attribution.
Beginning Fall 2026, fellows in Cornell's Life Science Technology Innovation Fellowship — run through the SC Johnson College of Business and inclusive of Memorial Sloan Kettering Cancer Center and Rockefeller University — receive access to Sophie Pro.
What's next
More one-click vision features, requested directly by users — extending the computer-vision capability our customers already pay for. Then our first two hires: an engineer and a growth specialist.
Try it: https://sophie.clyte.tech
Log in or sign up for Devpost to join the conversation.