Philosophy

Sound

Every sound should feel like it belongs in nature—warm chimes, soft tones, organic textures. Never harsh, never robotic.

Haptics

Touch feedback that feels like communication—breathing rhythms, heartbeats, gentle acknowledgments. Felt, not noticed.

Timing

Synchronize with user actions. Immediate for confirmations, gentle delays for emotional moments. Never jarring.

Sound Library

All sounds are designed to feel warm and organic. Each category serves a specific emotional purpose.

System Sounds

Core application feedback—connection, thinking, session state.

startup 2000ms
preload -6dB

Warm welcome when app launches. Sets the emotional tone.

connectionSuccess 1200ms
preload -6dB

Voice connection established. Relief and readiness.

connectionLost 1500ms
preload -9dB

Connection dropped. Concern but not alarm.

thinking 3000ms
loop -18dB

Ambient thinking sound. Subtle presence while processing.

Celebration Sounds

Moments of joy and achievement—scaled to the win.

small 1800ms
-3dB

Quick win. Task complete, small milestone.

big 2500ms
0dB

Major achievement. Goal reached, breakthrough moment.

milestone 3000ms
-3dB

Life milestone. Rare, meaningful, memorable.

streak 2000ms
-6dB

Consistency win. 7-day streak, 30-day streak.

teamUnlock 2500ms
-3dB

New team member unlocked. Arrival, potential, excitement.

Persona Handoff Sounds

Each persona has a unique audio signature for transitions.

Ferni 1500ms

Warm, grounding, like coming home

Maya 1300ms

Steady, rhythmic, focused energy

Peter 1200ms

Quick, curious, analytical sparkle

Alex 1400ms

Clear, empathetic, smooth flow

Jordan 1500ms

Joyful, bouncy, celebration energy

Nayan 2000ms

Deep, resonant, philosophical space

Ambient Sounds

Background textures for extended sessions. User-controlled, very quiet.

Zen Garden

3 min loop -24dB

Cozy Interior

3 min loop -24dB

Focused Calm

2 min loop -30dB

Night Mode

5 min loop -36dB

Haptic Patterns

Haptics are not decoration—they're communication. Every vibration should feel intentional and human.

Intensity Scale

Whisper Level 1 Subtle acknowledgment
Soft Level 2 Default interactions
Medium Level 3 Confirmations
Strong Level 4 Important moments
Emphasis Level 5 Celebrations only

Organic Patterns

Ferni's signature haptics—breathing, pulsing, living.

Ferni Breath

300ms Intensity 2 Sine curve

Core breathing pattern. Warm, grounding, nurturing.

Connection established, presence confirmation

Warm Pulse

250ms Intensity 3 Ease-in-out

Gentle warmth pulse. Emotional acknowledgment.

Empathy moment, understanding

Heartbeat

800ms Intensity 3, 2.5 Double-beat

Connection and love. Deep milestone moments.

Deep connection, milestone

Slow Breath

500ms Intensity 2 Sine curve

Extended breath. Calm, wisdom, contemplation.

Sage persona, reflection

Quick Breath

200ms Intensity 2 Ease-out

Short energetic breath. Curiosity, discovery.

Researcher energy, eureka

Persona Signatures

Each persona has a unique haptic fingerprint reflecting their personality.

Ferni

Warm, grounding, nurturing—life coach energy

Speaking ferniBreath, 300ms
Acknowledgment doubleTap, 40ms gap
Insight heartbeat, 300ms

Maya

Steady, rhythmic, reliable—architect energy

Speaking steadyRhythm, 300ms interval
Task Complete click, 20ms
Progress ramp, 400ms

Peter

Curious, energetic, quick—researcher energy

Speaking quickBreath, 200ms
Discovery burst, 300ms
Eureka bigWin, 350ms

Alex

Clear, empathetic, smooth—communicator energy

Speaking smoothBreath, 350ms
Empathy warmPulse, 250ms
Clarity doubleTap, 35ms

Jordan

Joyful, bouncy, celebratory—event planner energy

Speaking bouncyPulse, 250ms
Excitement sparkle, 350ms
Celebration bigWin, 500ms

Nayan

Deep, integrative, philosophical—wisdom energy

Speaking deepBreath, 600ms
Contemplation slowBreath, 800ms
Integration heartbeat, 600ms

Emotional Haptics

Haptic responses to detected emotional states. Making the invisible visible through touch.

💛

Empathy

Like a gentle hand on shoulder

warmPulse, 300ms, intensity 3
💪

Encouragement

Supportive energy

quickBreath, 200ms, intensity 2
🤝

Understanding

I get it

heartbeat, 500ms, intensity 2
🌿

Concern

Calming presence

slowBreath, 400ms, intensity 2
🎉

Celebration

Pure joy

bigWin, 400ms, intensity 3

Curiosity

Tell me more

quickBreath, 180ms, intensity 2

Accessibility

Sensory feedback must respect user preferences and never be the only feedback channel.

System Preferences

  • Always check isReduceMotionEnabled
  • Always check isHapticsEnabled
  • Reduce intensity 50% in low power mode

Fallbacks

  • Haptics disabled → Visual + audio feedback only
  • Audio disabled → Visual + haptic feedback
  • Always provide visual confirmation

Principles

  • Never make haptics the only feedback
  • Always pair with visual or audio
  • Provide option to disable all haptics
  • Test on real devices, not simulators

Implementation

iOS (Swift)

// Ferni Breath Pattern
let generator = UIImpactFeedbackGenerator(style: .medium)
generator.prepare()

func playFerniBreath() {
    let pattern: [Double] = [0.2, 0.4, 0.6, 0.8, 1.0, 0.8, 0.6, 0.4, 0.2, 0]
    for (index, intensity) in pattern.enumerated() {
        DispatchQueue.main.asyncAfter(deadline: .now() + Double(index) * 0.03) {
            generator.impactOccurred(intensity: CGFloat(intensity))
        }
    }
}

Android (Kotlin)

// Ferni Breath Pattern
fun playFerniBreath(vibrator: Vibrator) {
    val timings = longArrayOf(0, 30, 30, 30, 30, 30, 30, 30, 30, 30)
    val amplitudes = intArrayOf(0, 51, 102, 153, 204, 255, 204, 153, 102, 51)
    val effect = VibrationEffect.createWaveform(timings, amplitudes, -1)
    vibrator.vibrate(effect)
}

Web (Limited Support)

// Web haptics have limited support
// Use visual pulse as fallback
function playFerniBreath() {
    if ('vibrate' in navigator) {
        navigator.vibrate([30, 30, 30, 30, 30, 30, 30, 30, 30, 30]);
    }
    // Always show visual feedback
    element.classList.add('pulse-animation');
}