What is Transcendence?
Transcendence allows users to become Family Sages - AI-powered personality profiles that family members can chat with, preserving memories, values, and wisdom across generations. Think of it as a digital legacy that can answer questions and provide guidance even when the person is no longer available. Users speak with the "wisdom keepers" of their family through the Council of Sages.
Three Phases
- Phase 1 - Text: Answer questionnaires, build personality through text responses, chat via text
- Phase 2 - Voice: Record voice samples, clone voice with ElevenLabs, chat with voice responses
- Phase 3 - Video: Upload photo for avatar, D-ID generates holographic video responses
Complete Capability Matrix
End-to-end feature status across all Transcend components.
Profile Creation & Setup
| Capability | Mobile UI | Backend API | External Service | Status |
|---|---|---|---|---|
| Feature access control | intro.page | GET /transcend/access | - | Ready |
| Consent acknowledgment | setup.page | POST /transcend/consent | - | Ready |
| Profile creation | setup.page | POST /transcend/profile | - | Ready |
| View own profile | progress.page | GET /transcend/profile | - | Ready |
| Progress dashboard | progress.page | GET /transcend/progress | - | Ready |
Minor Protection (Under 16)
| Capability | Mobile UI | Backend API | External Service | Status |
|---|---|---|---|---|
| Block minors from self-creation | intro.page (message) | createProfile (age check) | - | Ready |
| Minor status in access check | intro.page | GET /transcend/access | - | Ready |
| Guardian creates profile for minor | - | POST /transcend/guardian/profile | - | Ready |
| Guardian relationship verification | - | verifyGuardianRelationship() | - | Ready |
| Ownership transfer at 18 | - | POST /transcend/ownership/transfer | - | Ready |
| Guardian consent record | - | TranscendConsent entity | - | Ready |
Questionnaire System (112 Questions)
| Capability | Mobile UI | Backend API | External Service | Status |
|---|---|---|---|---|
| Load questions by category | questionnaire.page | GET /transcend/questions | - | Ready |
| Answer question (text) | question.page | POST /transcend/responses | - | Ready |
| Answer question (voice) | question.page + VoiceRecorder | POST /transcend/responses | S3 (storage) | Ready |
| Vector embedding | - | submitResponse handler | OpenAI + Pinecone | Needs API Key |
| Category progress tracking | progress.page | GET /transcend/progress | - | Ready |
Profile Discovery (The Tapestry)
| Capability | Mobile UI | Backend API | External Service | Status |
|---|---|---|---|---|
| List available profiles | profiles.page | GET /transcend/profiles | - | Ready |
| Search profiles | profiles.page (searchbar) | Client-side filter | - | Ready |
| Favorites | profiles.page | localStorage | - | Ready |
| Tapestry view (visual) | profiles.page | - | - | Ready |
| Group by relationship | profiles.page (tapestry) | - | - | Ready |
Chat - Text (Phase 1)
| Capability | Mobile UI | Backend API | External Service | Status |
|---|---|---|---|---|
| Send text message | chat.page | POST /transcend/chat | - | Ready |
| RAG context retrieval | - | chat handler | Pinecone | Needs API Key |
| AI response generation | - | chat handler | Claude | Needs API Key |
| Mock mode responses | chat.page | chat handler | - | Ready |
| Server conversation history | chat.page | DynamoDB | - | Ready |
| Local chat history (opt-in) | privacy-settings.page | IndexedDB | - | Ready |
| Cloud sync (Voice+ only) | ChatHistorySyncService | GET /conversations | - | Ready |
| Test own profile | chat.page (/self) | isTestMode flag | - | Ready |
Chat - Voice (Phase 2)
| Capability | Mobile UI | Backend API | External Service | Status |
|---|---|---|---|---|
| Record voice samples | VoiceRecorderComponent | POST /transcend/voice/upload | S3 | Ready |
| Voice clone creation | setup flow | POST /transcend/voice/clone | Coqui XTTS (Self-Hosted) | Ready |
| Text-to-speech (cloned) | - | chatVoice handler | Coqui XTTS (Self-Hosted) | Ready |
| Voice playback | VoicePlayerComponent | S3 signed URL | - | Ready |
| Waveform visualization | VoicePlayerComponent | - | - | Ready |
| Browser TTS fallback | chat.page | - | Web Speech API | Ready |
Chat - Video Avatar (Phase 3)
| Capability | Mobile UI | Backend API | External Service | Status |
|---|---|---|---|---|
| Photo capture | avatar-setup.page | - | Capacitor Camera | Ready |
| Photo upload | avatar-setup.page | POST /transcend/avatar | S3 | Ready |
| Avatar creation | avatar-setup.page | createAvatar handler | Local storage | Ready |
| Video generation | - | chatVideo handler | Wav2Lip + XTTS (Self-Hosted) | Ready |
| Holographic video player | VideoPlayerComponent | - | - | Ready |
| Scanline effect | VideoPlayerComponent | - | Canvas API | Ready |
| Cyan glow overlay | VideoPlayerComponent | - | Canvas API | Ready |
| Subtitle support (WebVTT) | VideoPlayerComponent | chatVideo handler | - | Ready |
Chat Mode Cycling
| Capability | Mobile UI | Backend API | External Service | Status |
|---|---|---|---|---|
| Text → Voice → Video cycling | chat.page (cycleChatMode) | - | - | Ready |
| Capability-based fallback | chat.page | Profile flags | - | Ready |
| Mode indicator chip | chat.page toolbar | - | - | Ready |
Data & Storage
| Capability | Mobile UI | Backend API | External Service | Status |
|---|---|---|---|---|
| Profile persistence | - | DynamoDB | - | Ready |
| Response persistence | - | DynamoDB | - | Ready |
| Media file storage | - | S3 | MinIO (local) | Ready |
| Vector embeddings | - | Pinecone provider | Pinecone | Needs API Key |
| Conversation history | - | DynamoDB | - | Ready |
Local Development
| Capability | Mobile UI | Backend API | External Service | Status |
|---|---|---|---|---|
| Mock mode chat | chat.page | TRANSCEND_MOCK_MODE | - | Ready |
| Local DynamoDB | - | Docker | DynamoDB Local | Ready |
| Local S3 (MinIO) | - | Docker | MinIO | Ready |
| Feature flag control | - | POST /dev/enable-transcend | - | Ready |
System Architecture
Overview of all Transcend components and how they interact.
(Vector DB)"] Claude["Claude or Ollama
(LLM)"] TTS["Coqui XTTS v2
(Voice - FREE)"] LipSync["Wav2Lip
(Video - FREE)"] Whisper["Faster-Whisper
(STT - FREE)"] end subgraph Storage["Storage Layer"] DDB[("DynamoDB
(Responses)")] S3["S3
(Media Files)"] end UI --> TH VR --> TH TH --> DDB TH --> S3 TH --> Pinecone Chat --> Pinecone Chat --> Claude Voice --> Pinecone Voice --> Claude Voice --> TTS Voice --> Whisper Video --> Pinecone Video --> Claude Video --> TTS Video --> LipSync Video --> Whisper VP --> S3
Data Storage Architecture
How Transcend data is stored across different systems.
Display name, status, settings"] Consent["TRANSCEND#CONSENT
User acknowledgments"] Responses["TRANSCEND#RESPONSE#id
Q&A pairs, metadata"] Messages["TRANSCEND_CONV#...
Chat history"] end subgraph Pinecone["Pinecone (Vector DB)"] Namespace["Namespace: userId"] Vectors["Embedded Q&A vectors
for semantic search"] end subgraph S3["S3 (Media)"] Audio["Voice samples
transcend/userId/voice/"] VideoR["Video responses
transcend/userId/responses/"] Avatar["Avatar photos
transcend/userId/avatar/"] end Responses -->|"Embed text"| Vectors Audio -->|"Voice cloning"| EL["ElevenLabs Voice ID"] Avatar -->|"Avatar creation"| DID["D-ID Avatar ID"]
Profile Creation Flow
How a user creates their Transcend profile step by step.
Minor Protection Flow
Users under 16 cannot create their own Transcendence profiles. Guardians can create profiles for minors, with ownership transferring when the minor turns 18.
Why This Protection?
- Permanence: Transcendence creates an AI representation that persists after death - minors may not fully understand the implications
- Irrevocability: Once shared with family, the profile cannot be fully undone
- Guardian Oversight: Special cases (e.g., terminally ill children) should involve adult decision-making
- Digital Legacy: Protects minors from making irrevocable decisions about their digital legacy
A guardian can create a Sage profile on your behalf." Note over M,DB: Guardian-Created Profile Path participant G as Guardian (18+) G->>App: Create profile for minor App->>API: POST /transcend/guardian/profile API->>DB: Verify guardian relationship API->>DB: Check minor has dateOfBirth API->>API: Calculate ownership transfer date (18th birthday) API->>DB: Create profile with createdByGuardianId API->>DB: Store guardian consent record API-->>App: Profile created! Note over G,DB: Minor can contribute with supervision Note over M,DB: Ownership Transfer at 18 M->>M: Turns 18 G->>App: Initiate transfer App->>API: POST /transcend/ownership/transfer (action: initiate) API-->>App: Transfer initiated M->>App: Accept ownership App->>API: POST /transcend/ownership/transfer (action: accept) API->>DB: Update ownershipTransferStatus: completed API-->>App: Now owns profile!
Guardian Consent Record
When a guardian creates a profile for a minor, a special consent record is created:
TranscendConsent {
consentVersion: '1.0-guardian',
guardianUserId: 'guardian-user-id',
guardianFullName: 'Jane Doe',
guardianConsentAt: '2026-06-01T12:00:00Z',
guardianReason: 'Terminal illness - wants to leave messages for family'
}
Profile Ownership Fields
TranscendProfile {
// ... standard fields ...
// Guardian-Created Profile (for minors)
createdByGuardianId: 'guardian-user-id',
subjectUserId: 'minor-user-id',
guardianConsentAt: '2026-06-01T12:00:00Z',
ownershipTransferredAt: null,
ownershipTransferStatus: 'pending' | 'completed' | 'declined'
}
RAG Chat Flow
How the AI generates responses using Retrieval-Augmented Generation.
(semantic similarity) Vec-->>API: Top 5 relevant responses Note over API: Build personality context
from retrieved Q&As API->>AI: System prompt + context
+ conversation history
+ user message AI-->>API: Response "as" the person API->>DB: Save conversation API-->>App: AI response App-->>V: Display message
Voice Cloning Flow (Phase 2)
How voice cloning works with ElevenLabs.
Video Avatar Flow (Phase 3)
How D-ID creates talking avatar videos.
DynamoDB Schema
Entity structure for Transcend data.
| Entity | PK | SK | Key Attributes |
|---|---|---|---|
| Profile | USER#userId | TRANSCEND#PROFILE | displayName, status, estimatedCompleteness, voiceCloneId, visualAvatarId |
| Consent | USER#userId | TRANSCEND#CONSENT | understandsAI, allowVoiceCloning, allowVisualAvatar, signatureHash |
| Response | USER#userId | TRANSCEND#RESPONSE#responseId | questionId, category, question, response, mediaType, isEmbedded |
| Voice Sample | USER#userId | TRANSCEND#VOICE#sampleId | s3Key, duration, status |
| Message | TRANSCEND_CONV#profileId#visitorId | MSG#timestamp | role, content, audioUrl, videoUrl |
API Endpoints
All Transcend API routes.
| Method | Endpoint | Description |
|---|---|---|
| Profile Management | ||
| GET | /transcend/access | Check if user has Transcend access |
| POST | /transcend/consent | Submit consent acknowledgments |
| POST | /transcend/profile | Create Transcend profile |
| GET | /transcend/profile | Get own profile |
| GET | /transcend/profiles | Get available profiles to chat with |
| Questionnaire | ||
| GET | /transcend/questions | Get all 112 questions |
| POST | /transcend/responses | Submit question response |
| GET | /transcend/progress | Get completion progress |
| Chat | ||
| POST | /transcend/chat | Text chat with profile |
| POST | /transcend/chat/voice | Chat with voice response |
| POST | /transcend/chat/video | Chat with video avatar response |
| GET | /transcend/conversations/{profileUserId} | Get conversation history (Voice+ only) |
| Voice (Phase 2) | ||
| POST | /transcend/voice/upload | Upload voice sample |
| POST | /transcend/voice/clone | Create voice clone |
| Video (Phase 3) | ||
| POST | /transcend/avatar | Create video avatar from photo |
| Minor Protection | ||
| POST | /transcend/guardian/profile | Guardian creates Sage profile for minor |
| POST | /transcend/ownership/transfer | Initiate/accept/decline ownership transfer at 18 |
Service Architecture (Self-Hosted)
90%+ cost reduction through self-hosted ML services with cloud fallbacks.
Faster-Whisper (Self-Hosted)
Purpose: Speech-to-text transcription
Port: 5004
Cost: FREE
Fallback: Replicate Whisper API
Coqui XTTS v2 (Self-Hosted)
Purpose: Voice cloning & TTS
Port: 5002
Cost: FREE
Fallback: ElevenLabs API
Wav2Lip (Self-Hosted)
Purpose: Lip-sync video generation
Port: 5003
Cost: FREE
Fallback: D-ID API
WebGL Hologram FX (Client-Side)
Purpose: Holographic visual effects
Runs: In browser GPU
Cost: FREE
Styles: Leia, Tron, Matrix, Subtle
Claude API (or Ollama)
Purpose: Generate chat responses
Model: Claude 3.5 Sonnet / Llama 3.1
Cost: ~$0.02/response or FREE with Ollama
Pinecone / pgvector
Purpose: Vector database for RAG
Usage: Semantic search for personality context
Cost: Free tier or self-hosted pgvector
Cost Comparison Per Avatar Response
| Stack | Transcription | TTS | Lip-Sync | LLM | Total |
|---|---|---|---|---|---|
| External APIs | $0.003 | $0.03 | $0.10 | $0.02 | $0.15+ |
| Self-Hosted | FREE | FREE | FREE | $0.02 | ~$0.02 |
| Full Self-Hosted | FREE | FREE | FREE | FREE (Ollama) | $0.00 |
Mobile UI Architecture
Transcend pages and components in the mobile app.
Feature introduction"] Setup["setup.page
Profile creation wizard"] Progress["progress.page
Dashboard & progress"] Quest["questionnaire.page
Category selection"] Question["question.page
Individual Q&A"] Profiles["profiles.page
Tapestry view + Favorites"] Chat["chat.page
Conversation interface"] Avatar["avatar-setup.page
Photo upload for D-ID"] end subgraph Components["Shared Components"] VoiceRec["VoiceRecorderComponent"] VoicePlay["VoicePlayerComponent"] VideoPlay["VideoPlayerComponent
(Holographic effect)"] end subgraph Service["TranscendService"] API["API calls"] Models["TypeScript models"] end Intro --> Setup Setup --> Progress Progress --> Quest Quest --> Question Progress --> Profiles Profiles --> Chat Progress --> Avatar Question --> VoiceRec Chat --> VoicePlay Chat --> VideoPlay Pages --> Service
Holographic Avatar Design
The video avatar uses a deliberate holographic visual style.
Why Holographic?
Transcend avatars use a stylized holographic aesthetic, NOT photorealistic rendering. This is an intentional ethical design choice:
- Users always know they're interacting with AI, not the actual person
- Avoids uncanny valley discomfort
- Creates a distinct, respectful representation
- Think "Ready Player One's Anorak" - clearly digital but capturing essence
VideoPlayerComponent Holographic Effect
// Canvas overlay with holographic styling
- Cyan tint overlay (rgba 0, 255, 255)
- Animated scanlines
- Glow/bloom effect
- Subtle flicker animation
Local Development (Mock Mode)
Testing Transcend without real API keys.
Environment Variable
TRANSCEND_MOCK_MODE=true|false
- true: Force mock responses (no API calls)
- false: Force real APIs (requires keys)
- not set: Auto-detect (mock if keys missing)
In mock mode, chat returns pre-defined responses without calling Pinecone, Claude, ElevenLabs, or D-ID.
Monetization Model
Transcend uses a subscription-based billing model with tiered plans for profile creation and access management for posthumous consumption.
Record Voice
Upload Photo"] Prepay["Prepay for X Years
of Posthumous Access"] end subgraph Plans["Transcend Plans"] Basic["Basic £14.99/mo
Text Chat Only
10 years prepaid"] Voice["Voice £24.99/mo
+ Voice Cloning
15 years prepaid"] Complete["Complete £49.99/mo
+ Avatar
25 years prepaid"] Lifetime["Lifetime £499.99
All Features
100 years prepaid"] end subgraph Consumer["Family Consumer (After Creator Passes)"] Access["Access Profile"] Free["Free Tier
5 queries/month"] Family["Family Sub £9.99/mo
Unlimited queries"] Extend["Can Extend
Prepaid Period"] end Subscribe --> Plans Plans --> Create Create --> Build Build --> Prepay Prepay --> Access Access --> Free Access --> Family Family --> Extend
Plan Comparison
| Feature | Basic £14.99/mo |
Voice £24.99/mo |
Complete £49.99/mo |
Lifetime £499.99 |
|---|---|---|---|---|
| Profile Creation | ||||
| Questionnaire | ||||
| Text Chat | ||||
| Voice Cloning | ||||
| Video Avatar | ||||
| Storage | 25 GB | 100 GB | 250 GB | 500 GB |
| Prepaid Access | 10 years | 15 years | 25 years | 100 years |
| Priority Support |
Posthumous Access Model
The Challenge
Once the profile creator passes, they cannot pay ongoing fees. How do we fund the storage and AI costs for decades?
The Solution: Hybrid Model
- Creator Prepays: Each plan includes X years of posthumous access built into the subscription
- Family Can Extend: Family members can optionally pay to extend beyond prepaid period
- Free Tier Always Available: Basic text chat (5 queries/month) always free
- Family Subscription: Unlimited access for family members who want more
Billing Gates in Code
// Backend checks before allowing feature access:
// 1. Profile Creation - requires any Transcend plan
const billing = getLocalBillingProvider();
const canAccess = await billing.canAccessTranscend(userId);
if (!canAccess) {
throw new PaymentRequiredError('Transcend subscription required');
}
// 2. Voice Cloning - requires Voice or Complete plan
const canUseVoice = await billing.canUseTranscendVoice(userId);
if (!canUseVoice) {
throw new TranscendVoiceNotInPlanError();
}
// 3. Avatar - requires Complete plan
const canUseAvatar = await billing.canUseTranscendAvatar(userId);
if (!canUseAvatar) {
throw new TranscendAvatarNotInPlanError();
}
// 4. Consumer access - check quota
const { allowed, remaining } = await billing.checkTranscendAccessQuota(
profileUserId,
accessorUserId
);
if (!allowed) {
throw new TranscendQuotaExceededError(remaining);
}
Database Schema
-- PostgreSQL tables for billing (see 002_transcend_plans.sql)
-- Plans table includes Transcend tiers:
transcend_basic, transcend_voice, transcend_complete, transcend_lifetime
-- Subscriptions table extended with:
transcend_enabled BOOLEAN
transcend_activation_mode VARCHAR(50) -- 'manual', 'scheduled', 'trusted_contact'
transcend_activation_date TIMESTAMP
transcend_trusted_contact_id VARCHAR(255)
transcend_prepaid_until TIMESTAMP -- Key field for posthumous access
-- Access control table:
transcend_access (
profile_user_id, -- Whose profile
accessor_user_id, -- Who can access
access_level, -- 'chat', 'voice', 'video', 'full'
queries_remaining, -- NULL = unlimited
queries_used,
expires_at -- Optional expiry
)
-- Usage tracking:
transcend_usage (
profile_user_id,
accessor_user_id,
usage_type, -- 'chat', 'voice', 'video'
tokens_used,
duration_seconds,
created_at
)