What Is Daedelus

Daedelus is a personal life operating system. A native app on both Mac (Tauri) and iPhone (Capacitor) that replaces 20+ apps I was using across trading, finance, fitness, health, and life management — all running on my own VPS, under my own control.

The name comes from the craftsman in Greek mythology who built the labyrinth — and later, wings. The idea is the same: build the tools yourself, however complex, rather than depend on someone else’s.

It started because I wanted one place to see everything. My Taciturn trading system was running on a VPS, my T212 portfolio was in a separate app, my workouts were in a notes app, my contacts were in my head. None of it talked to each other.


How It Started

The first version was a React scaffold — three panels, demo data, built in an afternoon. The goal was simple: show Taciturn’s P&L, T212 portfolio value, and my Obsidian notes in one window.

By v0.3 it had a name, a wing icon, and was running as a native Mac app via Tauri. By v0.4 it was on my iPhone via Capacitor — proper native iOS build, HealthKit entitlements, safe area handling.

The biggest early challenge was the T212 API. Their newer API uses Basic Auth (base64(key:secret)) rather than a bearer token — nothing in the docs made this clear, and it took a full session to debug. Once that was solved, 54 live positions started flowing in.


Architecture

Everything runs on a DigitalOcean VPS in London. The Mac app talks to api.taciturn.uk — a Cloudflare Tunnel pointing at an Express server on port 3001. The iPhone app talks to the same URL. Both devices share the same data.

iPhone / Mac
    │
    ▼
Cloudflare Tunnel (api.taciturn.uk)
    │
    ▼
Express Server — VPS:3001
    │
    ├── T212 API (Basic Auth)
    ├── Taciturn pattern_log.json
    ├── FMP API (dividend calendar)
    ├── Spotify OAuth
    └── userdata.json (synced state)

The sync system checks a _last_modified timestamp every 30 seconds. If the VPS has newer data, both devices pull it. Add something on Mac — it appears on iPhone within 30 seconds, automatically.

All API calls in Finance fire in parallel via Promise.allSettled(). Every response is cached to localStorage (PCACHE) — on reopen, last known data shows instantly while fresh data loads in the background.


What’s Inside

Business — Taciturn Dashboard

The Business tab is the Taciturn command centre. All-time P&L, win rate, today’s P&L, equity curve for the current month, recent trades, and a live open positions card that refreshes every 60 seconds with Close buttons that proxy directly to the Taciturn Flask app.

The What If Calculator uses real data — actual win rate (65.8%), average win/loss from the last 100 trades, estimated trades per month — to project Bear, Base, and Bull scenarios across 1 to 12 months with leverage multipliers from 1× to 10×.

Finance — T212 Portfolio

54 live positions, scrollable, defaulting to Gainers view showing percentage and pound P&L side by side. A dual-line net worth history chart — amber for Taciturn equity, cyan for T212 portfolio — each on its own Y scale so the movements of both are visible regardless of the size difference.

The T212 What If Calculator clones all 54 positions into an editable scenario. Remove a losing position, double a winner, add a hypothetical stock — the impact panel updates in real time showing the difference in value and P&L between base and scenario.

Life — CRM Mind Map

An interactive mind map on a 2000×2000 canvas. Pan, zoom, drag people around. Schools cluster automatically — add Sherborne or university and anyone assigned to that school gets a dashed ring in the school’s colour. Connections between people are bidirectional, with notes on how they know each other. Birthday countdowns. Cut mode to remove connections without touching the keyboard.

Fitness — Full Tracker

Workout tracker with exercise library, set/rep/weight logging, PR detection, rest timer, and history. Body stats with 7-day average and trend. Supplements by time of day. Macros with circular SVG progress rings. 1RM calculator using three formulae simultaneously.


Version History

VersionWhat Was Built
v0.1React scaffold, demo data, 3 panels
v0.2Taciturn live data, Obsidian vault, Ollama AI
v0.3Tauri Mac app, wing icon, named Daedelus
v0.4iPhone via Xcode + Capacitor, HealthKit, responsive layout
v0.5T212 Basic Auth fix, manual bank tracker, macros
v0.6iOS scroll/zoom fixes, 5 themes, notifications
v0.7T212 full (54 positions, movers), net worth, drag-to-reorder
v0.8VPS deployment, Cloudflare tunnel, systemd, server persistence
v0.9Life tab (weather, alarms, Spotify), dividend calendar
v1.0Fitness tab, CRM mind map, debt/subs/bills, bucket list
v1.1Mac↔iPhone sync, CRM schools, net worth chart, T212 What If, leverage What If
v1.2Open positions + close trades, 60s auto-refresh, persistent cache, parallel fetching, onboarding, profile card

Still Building


Tech Stack

Frontend: React 18 · Vite 5 · Tailwind CSS · Framer Motion · @dnd-kit
Desktop: Tauri 2 (Rust)
Mobile: Capacitor 8 · Xcode
Backend: Node.js 20 · Express · DigitalOcean VPS
Tunnel: Cloudflare Tunnel
APIs: Trading 212 · FMP · Spotify · Open-Meteo · OANDA (via Taciturn)