Idea: "aprovechar el lote, comprar semillas pa' sembrar papa" → saved to Trojes 🤗
Trojes is an idea capture built for the moments inspiration strikes. Optimized for speed of entry, not elaborate categorization at the point of capture.
- Frictionless capture — Press
i, type, save with⌘↵. Done. - Keyboard-first — Navigate ideas with
j/k, act withEnter, no mouse needed. - Masonry grid — Pinterest-style layout.
- Markdown support — Write with bold, italics, lists, code blocks, headings, and more. Rendered inline on cards.
- Pin & organize — Pin important ideas to a persistent tray, archive the rest.
- Trash with recovery — Soft delete with time tracking, permanent delete option.
- API-first capture — Generate API keys from Settings, POST ideas from any tool.
- PWA ready — Install on mobile home screen, works offline.
- Offline-first sync — Ideas are saved to a device-local SQLite mirror (PowerSync) and synced to the server when connectivity returns.
- Dark mode — Light, dark, and system themes with a single keystroke (
d).
bun install
bun run db:migrate
bun devOpen http://localhost:3000 — sign in with Google.
Trojes uses Drizzle ORM with Neon PostgreSQL:
bun run db:generate # Create migration
bun run db:migrate # Apply migration
bun run db:studio # Open Drizzle StudioEnvironment variables: see .env.example — only DATABASE_URL is required.
Trojes is offline-first: the client reads and writes to a local SQLite mirror backed by PowerSync, which syncs bidirectionally with Neon PostgreSQL. Capture always works — even offline — and local changes are uploaded when connectivity returns.
DATABASE_URLremains required for the server database.POWERSYNC_INSTANCE_URL,POWERSYNC_JWT_SECRET,POWERSYNC_JWT_KID, andPOWERSYNC_JWT_AUDIENCEare required for sync. Your PowerSync instance must be connected to the same Postgres database (logical replication), and theideastable must be in a publication tracked by PowerSync.- The client serves its worker from
public/@powersync/(regenerated on install via thepostinstallscript).
| Key | Action |
|---|---|
i |
New idea |
j / k |
Navigate down / up |
h / l |
Navigate left / right |
Enter |
Open card menu |
e |
Edit selected idea |
Esc / q |
Close menu / deselect |
q |
Close dialog |
e |
Open settings |
d |
Toggle light/dark theme |
Ctrl+E / Cmd+E |
Expand / restore settings |
Ctrl+1 |
Switch to Archived |
Ctrl+2 |
Switch to Inbox |
Ctrl+3 |
Switch to Trash |
Send ideas to Trojes from any tool that speaks HTTP.
Authorization: Bearer trojes_your_api_key_hereGenerate keys from Settings → API Keys (visible once on creation).
Create idea — POST /api/ideas
{ "content": "My brilliant idea" }List ideas — GET /api/ideas?status=inbox|archived|deleted&search=keyword
Update idea — PATCH /api/ideas/{id}
{ "status": "archived", "pinned": true, "background_color": "mint" }Delete permanently — DELETE /api/ideas/{id}
Available background colors
coral, peach, sand, mint, sage, fog, storm, dusk, lavender, blossom, rose
curl -X POST "http://localhost:3000/api/ideas" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer trojes_your_api_key_here" \
-d '{"content":"Idea from terminal"}'| Framework | Next.js 16 (App Router, React 19) |
| Database | Neon (Serverless PostgreSQL via Drizzle ORM) |
| Offline sync | PowerSync (local SQLite mirror + bidirectional sync) |
| Auth | NextAuth.js (Google OAuth) |
| Styling | Tailwind CSS v4 + shadcn/ui |
| Data fetching | SWR (API keys) + PowerSync useQuery (ideas) |
| State | Zustand |
| Deployment | Vercel |
Track the full roadmap on Fizzy.
Open to collaborate, feedback, or just a good idea — alwaaays learniiing.
MIT — see LICENSE.



