Transcendence Architecture

Family Sages - "Wisdom That Transcends Time"

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
54
Features Ready
2
Optional API Keys
9
Mobile Pages
24
API Endpoints

System Architecture

Overview of all Transcend components and how they interact.

flowchart TB subgraph Mobile["Mobile App"] UI["Transcend UI"] VR["Voice Recorder"] VP["Video Player"] end subgraph API["API Layer"] TH["Transcend Handlers"] Chat["Chat Handler"] Voice["Voice Chat Handler"] Video["Video Chat Handler"] end subgraph AI["AI Services (Self-Hosted + Fallback)"] Pinecone["Pinecone/pgvector
(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.

flowchart LR subgraph DynamoDB["DynamoDB (Primary Store)"] Profile["TRANSCEND#PROFILE
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.

sequenceDiagram participant U as User participant App as Mobile App participant API as Backend API participant DB as DynamoDB participant Vec as Pinecone U->>App: Start Transcend setup App->>API: POST /transcend/consent API->>DB: Store consent record API-->>App: Consent recorded App->>API: POST /transcend/profile API->>DB: Create profile (status: building) API-->>App: Profile created loop Answer Questions (112 total) U->>App: Answer question App->>API: POST /transcend/responses API->>DB: Store response API->>Vec: Embed & index response API-->>App: Progress updated end Note over U,Vec: Profile reaches 50% → status: testing Note over U,Vec: User can test chat with own profile

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
sequenceDiagram participant M as Minor (Under 16) participant App as Mobile App participant API as Backend API participant DB as DynamoDB M->>App: Try to create Transcendence profile App->>API: POST /transcend/profile API->>API: Check age (isMinor) API-->>App: 403 Forbidden App-->>M: "Transcendence is not available for users under 16.
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.

sequenceDiagram participant V as Visitor participant App as Mobile App participant API as Chat Handler participant Vec as Pinecone participant AI as Claude participant DB as DynamoDB V->>App: "What's your advice on marriage?" App->>API: POST /transcend/chat API->>Vec: Vector search
(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.

sequenceDiagram participant U as User participant App as Mobile App participant API as Backend participant S3 as S3 participant EL as ElevenLabs Note over U,EL: Voice Sample Collection loop 3+ samples required U->>App: Record voice sample App->>API: POST /transcend/voice/upload API->>S3: Store audio file API-->>App: Sample uploaded end U->>App: Create voice clone App->>API: POST /transcend/voice/clone API->>S3: Get all samples API->>EL: Create voice clone EL-->>API: Voice clone ID API->>DB: Store voice clone ID API-->>App: Voice ready! Note over U,EL: Voice Chat U->>App: Send chat message App->>API: POST /transcend/chat/voice API->>Claude: Generate text response API->>EL: text-to-speech (cloned voice) EL-->>API: Audio file URL API-->>App: Text + audio response

Video Avatar Flow (Phase 3)

How D-ID creates talking avatar videos.

sequenceDiagram participant U as User participant App as Mobile App participant API as Backend participant S3 as S3 participant DID as D-ID Note over U,DID: Avatar Setup U->>App: Upload/capture photo App->>API: POST /transcend/avatar API->>S3: Store photo API->>DID: Create avatar from photo DID-->>API: Avatar ID API->>DB: Store avatar ID API-->>App: Avatar ready! Note over U,DID: Video Chat U->>App: Send chat message App->>API: POST /transcend/chat/video API->>Claude: Generate text response API->>EL: text-to-speech (cloned voice) EL-->>API: Audio URL API->>DID: Generate video (avatar + audio) loop Poll for completion API->>DID: Check video status DID-->>API: Status (processing/done) end DID-->>API: Video URL API->>S3: Cache video API-->>App: Text + video response App->>App: Play holographic video

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.

flowchart TB subgraph Pages["Transcend Pages"] Intro["intro.page
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.

flowchart TB subgraph Creator["Profile Creator (Living)"] Subscribe["Subscribe to Transcend Plan"] Create["Create Profile"] Build["Answer Questions
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
)