Profile Pulse rewrite

August 28, 2026 · View on GitHub

Branch / worktree: main (merged from mrdgh2821/docs/rewrite-planning)
Human plan: profile-pulse-app.md
Architecture: 2026-08-22-rewrite-architecture-design.md
Implementation spec: 2026-08-22-rewrite-implementation-spec.md
Phase 0 plan: 2026-08-22-rewrite-phase-0-foundation.md
Roadmap: ROADMAP.md
Updated: 2026-08-22

Locked decisions

TopicChoice
UI frameworkDioxus 0.7 (not Iced)
v1 platformsDesktop + website (PWA) — mobile dropped
Live contact bookA — app-owned store; OS / Google / Apple / Outlook / CardDAV are adapters
Product focus (human plan)Sync profile pics from social platforms into contacts; import/export/sync adapters
ProfileNamed local contact book. After create, user can sync contacts to Google, Apple, Outlook, CardDAV, and OS all at once (multi-target).
Sync semanticsC+ — push-only by default; separate explicit pull. Background remote-change check: if any linked target has edits, prompt user to pull.
Pull conflictsC — per-contact: Keep local / Take remote / Review
On-disk formatDvdir live (one .vcf per contact); maintain/export aggregated single VCF for backups
Profile pic sourcesProfile pic source plugin architecture — built-ins: GitHub, GitLab, Gravatar; other platforms as optional/experimental pic source plugins
Pic source plugin namingSee design spec: ProfilePicSourcePlugin, .pp-pic-source-plugin, pic-source-plugins/, manifest kind = "profile-pic-source"
User pic source format (v1)WASM .pp-pic-source-plugin only — works on desktop and web
Native user pic source pluginsDesktop only; deferred to v1.1 (C ABI escape hatch)
Sync adaptersFirst-party only — not profile pic source plugins (OAuth / contact writes)
Web deploymentStatic PWA, local-first; no required backend for v1
Desktop storageFilesystem vdir + SQLite index
Web storageOPFS vdir layout + IDB/SQLite index; encrypted secret vault

Open (next question)

TopicOptions discussed
Auth for cloud targetsOAuth PKCE / app passwords
Remote-check UX detailsPoll interval; per-target vs any-target prompt
SQLite roleIndex/search/pic cache only vs more
Web secret storagePassphrase-encrypted IDB v1 vs WebAuthn later
CORS / scraping on webPublic-API-only pic source plugins vs desktop proxy

Human plan summary

Note: profile-pulse-app.md still says “desktop & mobile”. Platform decision above supersedes that for the rewrite.

  • Primary job: fetch/scrape profile pics → apply to contacts
  • Platforms: WhatsApp, Facebook, Instagram, Twitter, Discord, GitHub, GitLab, Gravatar, LinkedIn, Twitch
  • Import: VCF, Google Contacts, Outlook, CardDAV
  • Profiles: separate sources; per-profile settings + cache; shared pic cache OK
  • UI: contact search; contact has tabs — details / editor / pic selector
  • Websites: multiple links; convenience UI in pic selector
  • Backups: VCF + profile import/export; scheduled; pre-write backup always
  • Sync out: OS (desktop only), Google, Outlook, iCloud; per-contact Sync button

Explicitly deferred

  • Native desktop pic source plugin runtime (v1.1)
  • Profile pic source plugin marketplace / signing
  • Mobile apps
  • Treating old OpenSpec as gospel (human plan is the rewrite source)

Implementation docs (ready)