A US grief-tech startup asked for something a general chatbot cannot do: let someone who has lost a parent, a partner or a child keep talking to them, in the voice that person actually had. You bring what you already own - WhatsApp threads, an iPhone backup, Facebook and Instagram exports, Discord logs, a letter you typed out - and about twenty minutes later there is a private chat that answers the way they did. We built the whole thing: web and mobile apps, the ingestion layer that reads eight kinds of chat history, and the AI platform that turns those messages into a personality profile, a graph of facts and a fine-tuned adapter of one specific person.
Web client in React and Vite, iOS and Android in React Native, a Node and Express API on PostgreSQL for accounts, subscriptions and message storage, and a two-tier AI stack behind it. A Python gateway parses ten chat-export formats into one normalised message table, works out which participant is the person being remembered, and encrypts every message at ingest with per-message AES-256-GCM under a KMS envelope key. Above it an ML platform runs the pipeline as a chain of contracts - personality profile, ten hard facts, dataset build, LoRA SFT and LoRA CPT on Qwen2.5-7B with 4-bit QLoRA, RAG preparation and a fact graph in Neo4j - with vLLM loading the right adapter at request time. Two companions fill the gaps the browser cannot reach: an Electron app that lifts iMessage out of an iPhone backup, and a Chrome extension that exports Discord history.
The result is a product where the hard part is invisible. A user uploads a file and waits about twenty minutes; underneath, seven contract types run across CPU and GPU workers, an adapter lands in S3, a graph of facts lands in Neo4j, and the chat picks up whichever stage is ready - base model, personality only, LoRA SFT, or LoRA CPT - so a conversation is always possible even when training is not finished. The same platform carries the parts a grief product cannot avoid: encryption at ingest, one-click deletion of everything, US-state billing rules checked on every payment, and prompts that live in the database with a version history so the tone can be tuned without a release.
Project overview
Industry: Grief technology, digital legacy, consumer AI
Scope: Full product - web, iOS, Android, backend, AI platform, desktop and browser companions, admin panel, payments, store submissions
Front end: React 18, Vite, TypeScript, Tailwind; React Native 0.80 for iOS and Android
Back end: Node.js 22, Express, Drizzle, PostgreSQL, Stripe, Apple IAP, AWS KMS and S3
AI platform: Python, FastAPI, Celery, PostgreSQL, Neo4j, Redis, MLflow, vLLM, LiteLLM, Qwen2.5-7B with 4-bit QLoRA, LoRA SFT and LoRA CPT, RunPod serverless workers
Companions: Electron desktop app (macOS arm64 and x64, Windows), Chrome extension
Sources: WhatsApp export and live sync, Facebook, Instagram, Discord, iMessage, Android SMS, pasted text, .txt
Security: Per-message AES-256-GCM under a KMS envelope key at ingest; no shared models trained on user data