A macOS menu bar app that reads your focused KakaoTalk conversation and suggests three replies you can send without breaking flow.
Sayless is a lightweight reply assistant for macOS. Press a global shortcut while your KakaoTalk input is focused, and Sayless opens a glassy overlay with three context-aware replies. Pick one, refresh the set, or ask for a different tone.
The app is built as a native Swift menu bar utility with a Fastify backend for AI generation, authentication, database-backed usage, and future billing.
- Global shortcut overlay for focused KakaoTalk chats
- Three AI-generated reply options per request
- Refresh and tone adjustment controls
- Custom instruction input for reply style
- Native macOS glass UI
- Preferences window with General and Account tabs
- Clerk authentication in the macOS app
- Fastify backend with Clerk token verification
- Turso + Drizzle schema for users, subscriptions, and usage events
- Sparkle-ready update packaging scripts
- App: Swift, SwiftUI, AppKit, Accessibility APIs
- Auth: Clerk
- Backend: Node.js, Fastify, TypeScript
- Database: Turso, Drizzle ORM
- AI providers: Gemini, OpenAI-compatible providers, Groq
- Updates: Sparkle
Sayless/
Sayless/ macOS app source
Config/ app Info.plist and build config inputs
backend/ Fastify API server
scripts/ release, DMG, and appcast helpers
assets/ README and project assets
- macOS
- Xcode
- Node.js 20.11+
- A Clerk application
- A Turso database
- An AI provider key
xcodebuild \
-project Sayless.xcodeproj \
-scheme Sayless \
-configuration Debug \
buildFor a release build:
scripts/build-release.shcd backend
npm install
npm run devRequired backend environment variables:
CLERK_SECRET_KEY=
CLERK_PUBLISHABLE_KEY=
TURSO_DATABASE_URL=
TURSO_AUTH_TOKEN=
AI_PROVIDER=gemini
GEMINI_API_KEY=See backend/.env.example for the current template.
Generate and apply Drizzle migrations:
cd backend
npm run db:generate
npm run db:migrateThe current schema includes:
userssubscriptionsusage_events
Sayless uses Clerk in two places:
- The macOS app uses ClerkKit and ClerkKitUI for sign-in, sign-up, and profile management.
- The backend verifies Clerk session tokens on protected API routes.
When signed in, the app attaches a Clerk session token to /suggestions requests:
Authorization: Bearer <clerk-session-token>Create a first-install DMG:
APP_PATH=/path/to/Sayless.app scripts/create-dmg.shCreate a Sparkle update ZIP:
APP_PATH=/path/to/Sayless.app scripts/release-local.shDo not commit generated files from dist/.
Sayless is early-stage software. Core overlay generation and authentication are implemented. Billing, usage limits, and polish around account state are still in progress.
Sayless is licensed under the GNU Affero General Public License v3.0.