Find a file
2026-11-04 20:24:43 -06:00
context chore: add README screenshots and history entry 2026-11-04 20:24:43 -06:00
docs chore: add README screenshots and history entry 2026-11-04 20:24:43 -06:00
public chore: migrate deployment from Dokploy to Cloudflare Workers 2026-05-31 13:29:43 -05:00
src fix: remove double line spacing in Shiki code blocks 2026-11-04 20:12:04 -06:00
.gitignore chore: ignore .playwright-mcp/ directory 2026-06-03 17:40:53 -05:00
CLAUDE.md feature: add Cmd+K command palette with item search and quick nav 2026-06-16 07:45:43 -05:00
components.json feat: initial commit 2026-03-30 23:14:58 -05:00
drizzle.config.ts chore: migrate database from Dokploy Postgres to Neon 2026-05-31 00:48:14 -05:00
eslint.config.mjs chore: initial project scaffold with Next.js setup and project context 2026-03-12 22:10:48 -05:00
LICENSE docs: rewrite README to portfolio standard, add LICENSE 2026-11-03 20:39:51 +00:00
next.config.ts chore: migrate deployment from Dokploy to Cloudflare Workers 2026-05-31 13:29:43 -05:00
open-next.config.ts chore: migrate deployment from Dokploy to Cloudflare Workers 2026-05-31 13:29:43 -05:00
package-lock.json feature: add JSON and Markdown ZIP export for items and collections 2026-06-04 12:49:33 -05:00
package.json docs: rewrite README to portfolio standard, add LICENSE 2026-11-03 20:39:51 +00:00
postcss.config.mjs chore: initial project scaffold with Next.js setup and project context 2026-03-12 22:10:48 -05:00
README.md chore: add README screenshots and history entry 2026-11-04 20:24:43 -06:00
tsconfig.json chore: initial project scaffold with Next.js setup and project context 2026-03-12 22:10:48 -05:00
worker-configuration.d.ts feature: add AI features powered by Claude Haiku 2026-06-03 18:41:00 -05:00
wrangler.jsonc feature: add AI features powered by Claude Haiku 2026-06-03 18:41:00 -05:00

DevStash

License: MIT

Live demo: devstash.labnerd.net. Click Try the demo to explore without signing up — it creates a throwaway account that resets hourly.

Dashboard Item detail Command palette

A centralized developer knowledge hub for storing and searching code snippets, AI prompts, notes, commands, URLs, files, and images — all in one place, instead of scattered across editor snippets, chat history, bookmarks and random text files.

Features

  • Seven item types (snippet, prompt, note, command, file, image, URL), plus custom types
  • Collections for organizing mixed item types together
  • Full-text search across content, tags, titles and types (Postgres to_tsvector)
  • Favorites, pinned items, and a "recently used" list
  • Command palette (Cmd+K) for fast navigation and item creation (Cmd+N)
  • AI features (Anthropic Claude Haiku): auto-tagging, summaries, "explain this code," and prompt optimization
  • Rich editing: CodeMirror 6 for code-type items, TipTap for notes, Shiki for syntax-highlighted display views
  • File uploads to Cloudflare R2 (images, docs, templates)
  • Export to JSON or Markdown
  • One-click demo mode — no signup required

Engineering Highlights

  • AI endpoints built with an explicit trust boundary. The tag-suggestion and summary actions document their own trade-off in code: any authenticated user can send arbitrary content under the app's shared Anthropic API key, mitigated by a 4000-character truncation on every call. Flagged as acceptable for a single-user deployment with a note to add per-user rate limiting before opening to untrusted users — the kind of limitation that's easy to miss and easy to regret.
  • Demo mode is isolated by construction. A reserved demo account (demo@devstash.app) is reset on a fixed interval rather than sharing state with real users, so visitors can explore freely without the data living forever or colliding with anyone else's.
  • Full-text search without a search service. Postgres's own to_tsvector/tsquery indexes content, tags, titles and types — no Elasticsearch, no external dependency, for a workload that doesn't need one.
  • Three different editors, one consistent experience. CodeMirror 6 (code), TipTap (rich text notes) and Shiki (read-only syntax highlighting) are each the right tool for their item type rather than forcing one editor to do everything.

Tech Stack

Layer Technology
Framework Next.js 16 (App Router), React 19
Language TypeScript (strict mode)
Database PostgreSQL + Drizzle ORM
Auth better-auth (email/password)
AI Anthropic Claude Haiku (auto-tagging, summaries, code explanations)
Editing CodeMirror 6 (code), TipTap (notes), Shiki (display highlighting)
File storage Cloudflare R2
Styling Tailwind CSS v4 + shadcn/ui
Deployment Dokploy (self-hosted)

Local Development

npm install
npm run dev

App runs at http://localhost:3000.

Environment Variables

DATABASE_URL=postgresql://user:password@host/dbname
BETTER_AUTH_SECRET=your-secret-here
BETTER_AUTH_URL=http://localhost:3000
ALLOWED_EMAILS=you@example.com  # comma-separated; leave empty to allow all

Commands

npm run dev      # Start dev server
npm run build    # Production build
npm run lint     # Run ESLint

Project Structure

src/
  app/           # Next.js App Router pages and layouts
  components/    # UI components
  actions/       # Server Actions
  lib/           # Utilities and helpers
  db/            # Drizzle schema, migrations, seed
context/         # Project documentation and specs

License

MIT