Skip to content

Repository files navigation

SOOV — life events on your device

English · Русский

A small, open-source app for recording life events without an account. Add an event, review a draft extracted from a transcript, and keep a timeline with your own words and sources. No AI API, analytics, cloud database or runtime dependencies.

flowchart LR
    A[Manual entry] --> C[Your review]
    B[JSON from your AI assistant] --> C
    C --> D[Browser storage]
    D --> E[JSON backup]
    E --> F[Restore on another device]
Loading

Run locally

Requires Node.js 22 or later. No dependency installation is needed to run the application.

git clone https://github.com/KiteTools/soov.git
cd soov
npm start

Open http://127.0.0.1:4178/. Keep the server running while using the app. A stable browser profile, hostname and port are important: browser storage belongs to that exact origin. Opening the HTML directly as a file is not supported.

What works

  • Add, edit, delete and search events, with a date, a partial date, an age range or unknown timing.
  • Preserve your own assessment separately from the description; an empty assessment stays empty.
  • Import version 1 JSON, inspect sources and quotes, and save only the events you explicitly select.
  • Persist records in IndexedDB across reloads. Concurrent tabs cannot silently overwrite newer records.
  • Export complete JSON backups and spreadsheet-friendly CSV. Restore by merging new records or explicitly replacing the timeline.
  • Repeat imports without duplicates. Conflicting records with the same ID stop a merge without partial writes.

The interface is in Russian. Documentation is available in both languages. Dates and ages are grouped separately; the app does not infer a birth date to combine them.

Transcript workflow

Open Импорт из транскрипта and copy the included prompt to your chosen assistant. Give that assistant only the material you want it to process, then bring its JSON back for review. SOOV does not process or upload the transcript itself. See the import guide, data schema and fictional sample.

This is a deliberately smaller, independent application informed by the original SOOV event screen in Longevity's source. It does not include the old model's scores, family coefficients, calculations or AI server. Old SOOV/Longevity case files require a separate conversion; direct compatibility is not claimed. Provenance and scope.

Backups and privacy

Local browser storage is not a backup. Clearing site data, changing the browser profile or using private browsing may remove or hide records. Export JSON regularly and verify the downloaded file. CSV is for viewing, not restoration. Storage and exports are not encrypted by the app. Privacy.

Deploy your own copy

Serve only dist/ on any static host, over HTTPS outside localhost. There is no build step, environment variable or mandatory account inside the app. Keep a stable URL to preserve access to browser data. No backend is deployed; synchronization and authentication are future work.

The optional .openai/hosting.json identifies the maintainer's Sites preview, not a service dependency. When creating your own Sites project, remove this file and register your own project; other static hosts ignore it. Never use it to update the maintainer's deployment.

Verification

npm ci --ignore-scripts
npm test
npm run check

Tests exercise validation, selected-only import, safe text rendering, persistence, stale-tab conflicts and backup restoration with an emulated IndexedDB and DOM. They do not certify every browser, private mode, or disk failure. Optional WebMCP tools share the same app actions: read events and stage an import for human review. Their contract is tested with a mock registry; registration in a supporting browser has not been verified.

Part of Skills for Selfdev. MIT license.

About

SOOV: local-first life events. Manual entry, reviewed transcript imports, browser storage and portable backups. Skills for selfdev.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages