Rephrase — Native macOS Text-Rewriting Product

Draft case study. Content to be expanded.

Summary

Select text anywhere on macOS, press a global shortcut, and Rephrase captures the selection, streams a rewritten result from a backend, and pastes it back in place (with a copy fallback).

Context and problem

Rewriting selected text in any application normally means copying it into a separate tool and pasting the result back by hand.

My role and ownership

Personal project, designed and built end-to-end: native desktop app, backend API, auth, and data model.

Technical implementation

Architecture

  • Native menu-bar app captures the selection (synthetic ⌘C, manual fallback)
  • Backend streams a rewritten result; the app pastes it back (synthetic ⌘V, copy fallback)
  • Server-owned prompt and presets; LLM access kept backend-only
  • Single server-side authorize() seam; desktop holds no authorization logic
  • Privacy default: do not persist input/output text, metadata only

Stack

  • Language: Swift (SwiftUI/AppKit), TypeScript
  • Framework: Fastify (API), Next.js (web)
  • Infrastructure: Fly.io, Supabase (PostgreSQL), Redis (rate limiting)
  • Tooling: Turborepo + pnpm monorepo

Key decisions and trade-offs

  • Native auth via ASWebAuthenticationSession (Google OAuth, PKCE) — no custom URL scheme
  • Paste-back is part of the v0 core loop, not deferred

Outcome and evidence

v0 core loop working (capture → rewrite → paste-back), trial-gated. Billing (Stripe) deferred to v1.

Links