Local-first, voice-first intelligence engine for capturing ideas before they disappear.
Sotto transforms raw, unfiltered spoken thoughts into deeply structured, searchable idea intelligence reports without cognitive friction.
Traditional note-taking apps force you to categorize, tag, and organize while your mind is still developing an idea. Sotto eliminates that overhead: you open the app, tap record, and speak naturally.
In the background, durable on-device jobs transcribe your voice, research concepts, and synthesize an actionable dossier complete with:
- Core Gist: An executive synthesis of what was said.
- Evidence & Premises: Foundational claims and supporting points.
- Risk & Blindspot Check: Critical scrutiny and hidden failure modes.
- Next Move: Concrete, high-leverage immediate action steps.
- Source Transcript & Audio: Verbatim original words and optional recorded audio playback.
Privacy is not a feature in Sottoβit is the foundational architecture:
| Pillar | Architecture Guarantee |
|---|---|
| Zero App Backend | There are no Sotto servers, no telemetry endpoints, and no middleman proxies. |
| No Account Required | Open the app and start recording instantly. No login, no signup, no tracking. |
| Local SQLite Storage | All records, drafts, discussions, and job pipelines live exclusively in an on-device SQLite database with write-ahead logging (WAL). |
| Hardware Keystore Security | Provider API keys are protected using Android EncryptedSharedPreferences / SecureStore. Keys never leave the device except directly to the provider's HTTPS endpoint. |
| Bring Your Own Provider (BYOP) | Connect your own API keys directly to OpenAI, Anthropic, Groq, Cerebras, OpenRouter, Google Gemini, or custom OpenAI-compatible endpoints. |
- Low-Friction Hero Experience: The app boots directly into a minimalist recorder.
- Real-Time Live Transcription: Watch your thoughts stream as text while you speak.
- Audio Lifecycle Management: Pause, resume, discard, or finish with a single tap.
- Safe State Recovery: Interrupted recordings are automatically preserved as durable drafts.
- Instant Search: Full-text filter across titles, summaries, transcripts, and tags.
- Category Filtering: Organize captures by actionable state, status, or date.
- Bulk Data Operations: Select, export, or delete multiple ideas with atomic cascading.
- Structured Sections: Read your thoughts broken down into Gist, Evidence, Risks, Next Steps, and Raw Transcript.
- Auditable Revisions: Regenerate sections with different prompts or providers while maintaining immutable revision history.
- Publication-Ready Export: Generate polished, branded PDF reports directly on-device with
expo-printandexpo-sharing.
- Interactive Idea Interrogation: Chat directly with your idea to challenge assumptions, explore edge cases, or draft implementation specs.
- Live Proposal Integration: When an AI discussion yields a breakthrough, apply the update directly to the Idea Report.
- Context-Aware Prompt Chips: Fast shortcuts to "Play devil's advocate", "List competitor risks", or "Draft MVP outline".
- SerpApi Integration: Automatically verifies facts, explores industry analogs, and grounds ideas with live web citations.
flowchart LR
A["ποΈ Spoken Audio"] --> B["β‘ Audio Studio Stream"]
B --> C["π Live Transcript"]
B --> D["πΎ Local WAV Storage"]
C --> E["π¦ Durable SQLite Queue"]
D --> E
E --> F["βοΈ Background Job Runner"]
F --> G["π£οΈ STT Provider\n(Whisper / Groq / OpenAI)"]
F --> H["π§ LLM Engine\n(OpenAI / Claude / Gemini)"]
F --> I["π Optional Web Research\n(SerpApi)"]
G --> J["ποΈ SQLite Vault"]
H --> J
I --> J
J --> K["π Structured Idea Dossier"]
J --> L["π¬ AI Discussion Engine"]
J --> M["π PDF Document Export"]
Sotto connects directly from your device to all major frontier and open-weight providers:
| Provider | Speech-to-Text (STT) | Language Model (LLM) | Streaming |
|---|---|---|---|
| OpenAI | Whisper-1 | GPT-4o, GPT-4o-mini, o1, o3-mini | β |
| Anthropic | β | Claude 3.7 Sonnet, Claude 3.5 Haiku | β |
| Groq | Whisper Large v3 (Ultra-Fast) | Llama 3.3 70B, DeepSeek R1 Distill | β |
| Google Gemini | Gemini Speech | Gemini 2.0 Flash, Gemini 1.5 Pro | β |
| Cerebras | β | Llama 3.1 70B / 8B (Extreme Speed) | β |
| OpenRouter | OpenRouter Audio | Any Frontier or Open-Source Model | β |
| Custom Endpoint | OpenAI-Compatible STT | OpenAI-Compatible Chat Completions | β |
- Framework: Expo SDK 54 + React Native 0.81.5
- Routing: Expo Router v6 (File-based typed routing)
- Package Manager & Runtime: Bun
- Compiler: React 19 + React Compiler enabled
- Local Database:
expo-sqlite(SQLite 3 with WAL mode, foreign keys, and subscriber events) - Secure Storage:
expo-secure-store(Android Hardware Keystore / KeyStore encrypted) - Audio Capture:
@siteed/audio-studio+expo-audio - Typography:
@expo-google-fonts/pacifico(Signature Brand Header) &@expo-google-fonts/comic-relief - Iconography:
phosphor-react-native(Phosphor Icons)
- Bun: Install Bun 1.3+ (
curl -fsSL https://bun.sh/install | bashorpowershell -c "irm bun.sh/install.ps1 | iex"). - Android SDK & Java 21: Android Studio with SDK Tools, platform-tools (
adb), and JDK 21 configured. - Android Device or Emulator: Developer options and USB Debugging enabled.
# Clone the repository
git clone https://github.com/codewithevilxd/sotto.git
cd sotto
# Install dependencies using Bun
bun installStart the Metro bundler:
bun run startRun directly on your connected Android device:
bun run androidSotto enforces strict automated verification before any build or commit:
# Typecheck application code (strict TypeScript, zero errors)
bun run typecheck
# Run full Bun unit test suite (38/38 passing)
bun test
# Audit JSDoc headers (@file, @description, @author, @license)
bun run docs:audit
# Run ESLint check
bun run lint
# Check and enforce code formatting (Prettier)
bun run format:check
bun run format
# Test Android Hermes production export
bunx expo export --platform androidsotto/
βββ .github/ # CI/CD Workflows (Android APK release and build pipelines)
βββ scripts/ # Repository maintenance tooling
β βββ audit-jsdoc.js # Enforces JSDoc author and license tagging
βββ src/
β βββ app/ # Expo Router filesystem routes
β β βββ _layout.tsx # Root layout with font loading & runtime hydration
β β βββ index.tsx # Hero home screen (Voice recorder & recent captures)
β β βββ onboarding.tsx# First-run credential & provider setup
β β βββ vault/ # Idea repository and detailed dossier view
β β βββ discuss/ # AI interrogation & interactive idea discussion
β β βββ settings/ # Privacy, providers, web search, and data export
β βββ assets/ # Brand mascot, application icons, and graphics
β βββ components/ # Reusable presentational design system components
β β βββ home/ # Recorder panel, live captions, and greeting
β β βββ vault/ # Idea cards, report sections, audio player
β β βββ discuss/ # Chat messages, action chips, update proposals
β β βββ settings/ # Provider editors, stats charts, configuration
β βββ constants/ # Design tokens (colors, typography, spacing, radii)
β βββ features/ # Core business logic & platform drivers
β βββ capture/ # Recording engine, live transcription, state machine
β βββ discussion/ # LLM chat threads and report amendment logic
β βββ domain/ # TypeScript contracts, error boundaries, types
β βββ export/ # PDF generation and JSON archive exports
β βββ jobs/ # Durable background job scheduler & handlers
β βββ notifications/# Android notification channels & foreground banners
β βββ onboarding/ # Setup wizard and credential validation
β βββ provider/ # STT, LLM, and SerpApi adapter implementations
β βββ runtime/ # Application bootstrap and database singleton
β βββ storage/ # SQLite schema, repositories, and secure storage
βββ tests/ # Automated unit tests for database, providers, and jobs
Automated GitHub Actions workflows build production Android APKs:
- Continuous Integration: Every push to
mainexecutesandroid-build.ymlto ensure compilation and tests pass. - Production Release: Pushing a version tag triggers
android-release.ymlto compile a signed APK and publish a GitHub Release:
git tag v1.0.0
git push origin v1.0.0All contributions adhere to strict development guidelines:
- Package Management: Exclusively use
bun add(nevernpm,yarn, ornpx). - Icons: Exclusively use Phosphor Icons (
phosphor-react-native). - Headers: Every source and test file must have complete JSDoc headers specifying
@author Nishant Gauravand@license MIT. - Formatting: Prettier-enforced code style without exceptions.
Nishant Gaurav
- GitHub: @codewithevilxd
- Repository: https://github.com/codewithevilxd/sotto
This project is licensed under the MIT License - see the LICENSE file for details.
