# AlwaysOnRecorder - App de Recording Continu

**Status**: WIP
**Type**: Mobile App (Android)
**Stack**: React Native, SQLite, AES-256, Whisper (optional)
**Priority**: HIGH (Protection juridique + Life tool)
**Target MVP**: 10-15h dev
**Start Date**: 16 décembre 2025

---

## Vue d'ensemble

**AlwaysOnRecorder** est une application mobile de recording audio continu conçue pour :

- **Protection juridique** : Enregistrement conversations avec Tingting (gaslighting, mensonges, refus accord)
- **Mémoire conversationnelle** : Archive searchable de toutes conversations importantes
- **Discrétion** : Background service, pas besoin d'activation manuelle
- **Sécurité** : Encryption AES-256, stockage local, pas de cloud auto-upload

**Use cases** :
1. **Court terme** (3 semaines) : Protection divorce Tingting
2. **Long terme** (vie) : Mémoire conversations, journal audio, recherche historique

**Contexte légal** : One-party consent recording légal en Chine

---

## Architecture MVP (10-15h)

### Core Features

**1. Background Recording Service**
```javascript
// Détecte voix automatiquement (VAD - Voice Activity Detection)
// Si silence > 30s → Pause recording
// Si voix détectée → Resume recording
// Économie batterie + storage
```

**2. Local Encrypted Storage**
```javascript
// SQLite database
// Schema:
// - id (INT)
// - start_time (DATETIME)
// - end_time (DATETIME)
// - duration (INT seconds)
// - file_path (TEXT) → encrypted audio file
// - tags (TEXT) → "tingting", "maelle", "work", etc.
// - transcription (TEXT, nullable)
// - is_protected (BOOL) → ne peut pas être supprimé
```

**3. Simple UI**
```
┌─────────────────────────────┐
│  AlwaysOn Recorder          │
│  ○ Recording (12:34:56)     │  ← Status + uptime
├─────────────────────────────┤
│  Today:                     │
│  ├─ 09:23 - 09:45 (22min)  │  ← Liste recordings
│  ├─ 14:12 - 14:58 (46min)  │
│  └─ 18:30 - ongoing         │
├─────────────────────────────┤
│  [⏸️ Pause] [🔍 Search]     │
│  [⚙️ Settings]              │
└─────────────────────────────┘
```

**4. Tagging System**
```javascript
// Auto-tagging (optionnel) :
// - Détection contact phone (si call)
// - Détection location (home/work/campus)
//
// Manual tagging :
// - Longpress recording → "Tag as Tingting"
// - Swipe → "Important" flag
```

---

## Stack Technique

### Framework
- **React Native** (cross-platform, fast dev)
- **Expo** (managed workflow, fast iteration) OU Bare React Native (plus de contrôle)

### Audio Recording
```javascript
// Option 1: react-native-audio-recorder-player
import AudioRecorderPlayer from 'react-native-audio-recorder-player';

// Option 2: expo-av (si Expo managed)
import { Audio } from 'expo-av';
```

### Background Service
```javascript
// react-native-background-actions
import BackgroundService from 'react-native-background-actions';

// Foreground service (Android) → Notification persistante
// Seul moyen de garantir pas killed par OS
```

### Storage
```javascript
// SQLite local
import SQLite from 'react-native-sqlite-storage';

// Encryption files
import RNFS from 'react-native-fs';
import CryptoJS from 'crypto-js';
```

### VAD (Voice Activity Detection)
```javascript
// Option 1: Analyse amplitude audio (simple)
if (amplitude > threshold) {
  recording = true;
} else if (silence_duration > 30s) {
  recording = false;
}

// Option 2: Librairie ML (plus précis mais heavier)
// @tensorflow/tfjs + VAD model
```

---

## Fonctionnalités

### MVP (Phase 1 - 10-15h)

**Essentiels** :
- ✅ Background recording avec foreground service
- ✅ VAD simple (amplitude-based)
- ✅ SQLite storage avec metadata
- ✅ AES-256 encryption files audio
- ✅ Simple UI (ON/OFF toggle, liste recordings)
- ✅ Manual tags (Tingting, Maëlle, Work, etc.)
- ✅ Export manuel (share audio file)
- ✅ Protected flag (recordings importants ne peuvent pas être supprimés accidentellement)

**Architecture** :
```
AlwaysOnRecorder/
├── src/
│   ├── components/
│   │   ├── RecordingStatus.tsx
│   │   ├── RecordingList.tsx
│   │   └── TagSelector.tsx
│   ├── services/
│   │   ├── BackgroundRecorder.ts
│   │   ├── VADDetector.ts
│   │   ├── EncryptionManager.ts
│   │   └── DatabaseManager.ts
│   ├── screens/
│   │   ├── HomeScreen.tsx
│   │   ├── SettingsScreen.tsx
│   │   └── SearchScreen.tsx
│   └── utils/
│       ├── permissions.ts
│       └── constants.ts
└── App.tsx
```

### Phase 2 (Après move out - Long terme)

**Advanced Features** :
- ⏳ Transcription automatique (Whisper)
- ⏳ Recherche sémantique dans transcriptions
- ⏳ Auto-tagging via ML (speaker recognition)
- ⏳ Cloud backup (chiffré, S3/IPFS/Backblaze)
- ⏳ Export formats (MP3, WAV, M4A)
- ⏳ Compression intelligente (quality vs storage)
- ⏳ Multi-langue transcription (EN/FR/CN)
- ⏳ Timeline visualization
- ⏳ Statistiques (temps parole, patterns, etc.)

---

## Développement

### Étapes MVP

**1. Setup Projet (1-2h)**
```bash
# React Native bare
npx react-native init AlwaysOnRecorder

# OU Expo managed
npx create-expo-app AlwaysOnRecorder
```

**2. Background Service + Recording (3-4h)**
- Permissions (microphone, storage, background)
- Foreground service setup
- AudioRecorder integration
- Start/Stop logic

**3. VAD Simple (2-3h)**
- Amplitude monitoring
- Silence detection (30s threshold)
- Auto pause/resume

**4. Storage + Encryption (2-3h)**
- SQLite schema
- Save recording metadata
- AES-256 file encryption
- File management (delete, protected flag)

**5. UI Basique (2-3h)**
- Home screen (status + recording list)
- Settings (thresholds, storage limit)
- Tag selector
- Search simple (by date, by tag)

**Total MVP** : 10-15h

---

## Problèmes Techniques Anticipés

### 1. Battery Drain

**Problème** : Recording continu = CPU + microphone actif = batterie drainée

**Solutions** :
- VAD pause recording pendant silence (économie 70%+)
- Sample rate réduit (16kHz au lieu de 44.1kHz, qualité suffisante pour voix)
- Compression adaptive (moins de writes disque)
- Foreground service avec notification = user aware

**Estimation** : 5-10% batterie/heure avec VAD optimisé

### 2. Storage Management

**Problème** : 1h audio ≈ 30-60MB (16kHz, mono)

**Solutions** :
- Compression audio (Opus codec, 20-30KB/minute pour voix)
- Auto-delete recordings > 30 jours (sauf protected)
- Storage limit user-configurable (ex: max 5GB)
- Warning quand approche limite

**Estimation** : 30 jours recordings ≈ 2-4GB avec compression

### 3. Android Background Service Restrictions

**Problème** : Android 8+ kill background services agressivement

**Solutions** :
- **Foreground service** avec notification persistante (seul moyen fiable)
- Battery optimization exemption (demander user)
- Notification permanente (légalement requis pour foreground service)

**Trade-off** : Notification visible en permanence (prix à payer pour garantir recording)

### 4. Découverte par Tingting

**Problème** : Si elle voit notification/app sur phone

**Mitigations** :
- App icon + nom générique ("System Logger", "Audio Notes")
- Notification discrète (juste icône microphone, pas de texte explicite)
- Lock app (PIN/biometric avant ouverture)
- Cacher icon dans launcher (option Android)

### 5. Legal Compliance

**One-party consent** (Chine) :
- ✅ Légal d'enregistrer conversations auxquelles tu participes
- ✅ Utilisable en procédure divorce (preuve mensonges/gaslighting)
- ⚠️ NE PAS enregistrer conversations privées autres (écoute clandestine)

---

## Configuration Recommandée

### Settings Optimaux MVP

```javascript
const DEFAULT_CONFIG = {
  // Audio
  sampleRate: 16000,           // 16kHz (voix quality)
  channels: 1,                 // Mono
  encoding: 'opus',            // Compression efficace

  // VAD
  silenceThreshold: -40,       // dB (ajustable)
  silenceDuration: 30,         // seconds before pause

  // Storage
  maxStorageGB: 5,             // Auto-delete old si dépassé
  autoDeleteDays: 30,          // Recordings non-protected

  // Security
  encryption: true,            // AES-256
  requireAuth: true,           // PIN/biometric

  // UI
  notificationText: "Audio Logger Active"
};
```

---

## Priorité dans Timeline Globale

### Cette Semaine (16-22 Décembre)

**CRITIQUE (faire avant app)** :
1. ✅ Visa check (URGENT - today/tomorrow)
2. ✅ Wise setup (protection actifs)

**Parallèle** :
3. AlwaysOnRecorder MVP (10-15h) + 40 applications freelance

**Ordre recommandé** :
- Lundi 16 : Visa check + Wise setup
- Mardi 17-Mercredi 18 : AlwaysOnRecorder dev (sprint 10-12h)
- Jeudi 19-Samedi 21 : 40 applications freelance + finalisation app
- Dimanche 22 : Review + test app en conditions réelles

---

## Utilisation Prévue

### Court Terme (Décembre-Janvier)

**Objectif** : Protection juridique divorce

**Situations à enregistrer** :
- Conversations avec Tingting (refus divorce, menaces, gaslighting)
- Négociations déménagement/argent
- Toute interaction potentiellement litigieuse

**Extraction** :
- Tag immédiatement après conversation importante
- Marquer "Protected" si besoin comme preuve
- Export vers Wise/cloud backup si critique

### Long Terme (Post-Divorce)

**Objectif** : Mémoire conversationnelle générale

**Use cases** :
- Retrouver détails conversation professionnelle
- Journal audio personnel
- Recherche dans historique (avec transcription Phase 2)
- Archive vie quotidienne

---

## Alternatives Considérées

| Solution | Avantages | Inconvénients | Verdict |
|----------|-----------|---------------|---------|
| **Apps existantes** (Call Recorder, etc.) | 0h dev, disponible maintenant | Pas de VAD smart, cloud forced, privacy concerns | ❌ Rejeté |
| **Manual recording** (phone app) | 0h dev, simple | Oubli fréquent, pas automatique, gaps | ❌ Trop unreliable |
| **Hardware recorder** (dictaphone) | Fiable, pas de battery phone | Device supplémentaire, pas searchable, pas encrypted | ❌ Moins pratique |
| **Custom app** (ce projet) | Control total, features sur mesure, long-term utility | 10-15h dev | ✅ **Choisi** |

---

## Success Metrics

### MVP Ready Si

- ✅ Enregistre automatiquement en background (foreground service)
- ✅ VAD fonctionne (pause silence > 30s)
- ✅ Files encryptés AES-256
- ✅ UI permet voir/taguer/exporter recordings
- ✅ Battery drain < 10%/heure
- ✅ Pas de crash pendant 8h recording continu
- ✅ Protected recordings ne peuvent pas être supprimés accidentellement

### Phase 2 Ready Si

- ✅ Transcription automatique Whisper
- ✅ Recherche texte dans transcriptions
- ✅ Cloud backup optionnel
- ✅ Export formats multiples

---

## Risques

### Technique

| Risque | Probabilité | Impact | Mitigation |
|--------|-------------|--------|------------|
| Android kill background service | 30% | HIGH | Foreground service + battery exemption |
| Battery drain excessif | 40% | MEDIUM | VAD optimisé + user config |
| Storage plein | 20% | LOW | Auto-delete + warnings |
| Découverte par Tingting | 50% | MEDIUM | App camouflage + lock |

### Planning

| Risque | Probabilité | Impact | Mitigation |
|--------|-------------|--------|------------|
| Dépasse 15h dev | 60% | LOW | Scope creep control, MVP strict |
| Détourne du freelance | 40% | HIGH | Time-boxing (max 15h), parallèle 40 apps |
| Procrastination disguisée | 30% | HIGH | Deadline hard : App ready avant 22 décembre |

---

## Liens

**Ressources Externes** :
- React Native Audio : https://github.com/hyochan/react-native-audio-recorder-player
- Background Tasks : https://github.com/jamesmontemagno/react-native-background-actions
- Expo Audio : https://docs.expo.dev/versions/latest/sdk/audio/
- Whisper : https://github.com/openai/whisper

**Projets Associés** :
- `couple_backlog/14_decembre_2025_pivot_strategique.md` (contexte)
- `plan_discussion/plan_final_14_decembre_2025.md` (timeline globale)

---

**Créé** : 16 décembre 2025
**Type** : Protection juridique + Life tool
**MVP Target** : 22 décembre 2025
**Long-term utility** : Conversation memory, searchable archive
