Startup Build

Recallink · macOS Menubar

메뉴바에서 한 번 클릭하면 “지금 연락할 차례인 사람”만 보여주는 Recallink의 읽기 전용 macOS 동반 앱. 웹·모바일과 같은 클라우드 데이터, 같은 rlkenc:v1 암호화.

개인기간 3주기여도 100%2026-072026-08
핵심 지표: 읽기 전용 · 클라우드 쓰기 0 · 웹과 동일 암호화 레시피를 픽스처로 검증
엔지니어링 역할
FrontendEnd-to-End
Startup Build
Recallink · macOS Menubar
WEB
#Product#Frontend#Personal#Tauri 2

개요

PWA가 데스크톱의 본체라면 이 앱은 항상 한 클릭 거리에 있는 훑어보기 표면이다. Tauri 2 트레이 + WKWebView 팝오버(360×480)로 Dock 아이콘 없이 뜨고, Google 로그인은 시스템 브라우저에서 끝난 뒤 recallink:// 딥링크로 PKCE 코드를 돌려받는다. 동기화 패스프레이즈는 실행당 한 번만 묻고 AES 키를 메모리에서만 만든다. 클라우드에 쓰기는 한 줄도 없다.

내가 한 작업

  • Tauri 2 Rust 트레이(Accessory 정책) + deep-link · single-instance 플러그인
  • immutable-id keyset 페이지네이션 + 복호화 작업량 상한으로 클라우드 스캔 바운드
  • 최신 요청만 살리는 single-flight 갱신 · 복호 오류 클래스 분리 · 언락 프로브
  • CSP를 self + *.supabase.co로 고정 · 브랜드 v4.1 아이콘 세트

주요 기능

  • 트레이 `RL` 클릭 → 팝오버 토글, 포커스 잃으면 자동 숨김
  • 트레이 due-count 배지 · 마지막 갱신 시각
  • 시스템 브라우저 Google 로그인 → recallink://auth/callback PKCE 교환
  • 취소 가능한 로그인 대기 — Cancel/Retry · 링크 복사 · 45초 타임아웃
  • 사용자가 고정한 타임존 기준으로 “오늘” 계산

핵심 포인트

  • 웹 Today 패널의 reconnectDueList 로직 1:1 포팅 — 행 클릭 시 웹 앱으로 딥링크
  • PBKDF2-SHA256 250k → AES-256-GCM, 웹과 wire-identical · 크로스플랫폼 픽스처 테스트
  • 패스프레이즈 미저장 — 키는 메모리에만, 앱 종료 시 소멸
  • 가시성·수동·15분 트레이 갱신을 볼트당 하나로 합침
  • 연락처 100,000 · 후보 링크 250,000 초과 시 fail-closed — 무제한 백그라운드 스캔 금지

타임라인

2026-072026-08
역할: 데스크톱 단독 개발
기여도: 100%
협업: 개인

기술 스택

</>Tauri 2 · React 19 · supabase-js · rlkenc:v1

Tauri 2RustReact 19TypeScriptVitesupabase-jsWeb Crypto (AES-256-GCM)Vitest