Files
prompt/README.md
T
TZGyn f3e6fc8fa6 Poll sync cheaply and make the server deployable
Polling re-downloaded the whole store, photos included, every five
seconds. The app now checks a tiny version endpoint and only fetches the
payload when it actually moved, and the server gained request logging,
graceful shutdown, and self-hosting docs so it can run on a VPS instead
of only on localhost.

💘 Generated with Crush

Assisted-by: Crush:kimi-k3
2026-10-08 10:19:55 +08:00

86 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Prompt
A native macOS app for keeping prompts and photos, in the spirit of
[Copper](https://shadcn.com/copper) by shadcn: a floating panel that sits next
to your work. Click anything to copy it back to your clipboard.
- **Click to copy** — text notes go back as text, photos go back as images.
- **Capture from anywhere** — select text in any app and tap **Left Shift twice**.
- **Photos** — paste (Cmd+V), drag & drop, or add via the photo button.
- **Sections** — type `# Name` in the composer; Cmd+K switches sections.
- **Copy as List** — Cmd+click to multi-select, right-click → Copy as List
(or Shift+Cmd+C) for a numbered list ready to paste into a chat.
- **Merge Notes, Mark as Done, Edit, Move To** — right-click any item.
- **Search** — Cmd+F searches across all sections.
- **Sync (optional)** — generate an 8-digit code (`1234-5678`) on one Mac and
enter it on the other; no account, no login. The code is the only secret.
- **Local & private** — everything lives in
`~/Library/Application Support/Prompt/` (`store.json` + `Images/`). No
account, no sync, no telemetry.
## Shortcuts
| Action | Shortcut |
| --- | --- |
| Capture current selection | Left Shift ×2 (or Cmd+Shift+C) |
| Show/hide panel | Right Shift ×2 (or Cmd+Shift+Space) |
| Switch/create section | Cmd+K |
| Search | Cmd+F |
| Focus composer | Cmd+N |
| Sync settings | Cmd+, |
| Copy selection as numbered list | Shift+Cmd+C |
| Close panel | Esc |
Double-Shift gestures require **Accessibility access** (Prompt reads the
selection by simulating Cmd+C, then restores your clipboard untouched). The
Cmd+Shift fallbacks work without it. Bare keys like Space and Cmd+C are
deliberately not bound inside the panel so they never conflict with typing in
the composer.
## Install
```bash
brew tap TZGyn/tap https://gitea.tzgyn.dev/TZGyn/homebrew-tap.git
brew trust TZGyn/tap
brew install --cask prompt
```
## Sync server
Sync is optional and needs the small Go backend in `Server/`. There is no
authentication: a sync group is identified by an 8-digit code, and whoever has
the code can read and write the group.
```bash
createdb prompt_sync
cd Server
PROMPT_SYNC_DATABASE_URL="postgres://localhost:5432/prompt_sync?sslmode=disable" \
go run . # listens on :8080
```
Then in the panel: click the sync icon, set the server URL (e.g.
`http://192.168.1.10:8080` or an HTTPS host), and either **Generate Code** on
the first Mac or paste the code into **Join** on the other.
Notes:
- Both Macs must be able to reach the server. A LAN address or a Tailscale
hostname works; `localhost` only works if the server runs on the same Mac.
See [Server/README.md](Server/README.md) to deploy it on a VPS or home server.
- Joining a group that already has notes replaces what's on that Mac.
- The app polls every 5 seconds (a tiny version check) and pushes 1.5s after a
change; last write wins, and changes that came from the server are not echoed
back.
- Verify sync from a terminal with `Prompt --sync-check`.
## Build from source
```bash
swift build # debug build
swift run Prompt # dev run (menu bar icon appears)
./build-app.sh 0.1.0 # release build + Prompt.app + icon + codesign
./release.sh 0.1.0 # build + dist/Prompt.zip (+ notarization when configured)
```
Requires macOS 14+.