Create, Edit, Customize and share your code snippets with your Friends, Family and Co-Workers in just a few clicks.
- Next.js 16 (App Router, Server Actions) and React 19
- Clerk for authentication
- Supabase for storage (accessed only on the server)
- Tailwind CSS 4
- Shiki for syntax highlighting and CodeMirror 6 for the editor
cp .env.example .env.local # fill in your Supabase and Clerk keys
npm install
npm run devDeploy this repository with the Dockerfile at the project root. The container listens on 0.0.0.0:3091; set the application's container port to 3091 in Dokploy. Add CLERK_PUBLISHABLE_KEY and CLERK_SECRET_KEY as runtime environment variables in Dokploy; the publishable key is public, but Clerk needs it at runtime for server rendering and middleware. Set Supabase runtime values (SUPABASE_URL and SUPABASE_SECRET_KEY, or SUPABASE_PUBLISHABLE_KEY) and PASTE_UNLOCK_SECRET there as well. NEXT_PUBLIC_SITE_URL and optional NEXT_PUBLIC_GA_ID can be supplied as Docker build arguments. Supabase and Clerk credentials are not needed during the Docker build.
| Script | What it does |
|---|---|
npm run dev |
Start the dev server |
npm run build |
Production build |
npm run lint |
ESLint |
npm run typecheck |
TypeScript without emit |
npm run format |
Prettier |
The app uses the existing Pastes table:
id, code, title, description, language, public, private, createdAt, userId, pasteId, pastePassword, hasVanity.
Paste passwords are stored as bcrypt hashes; older plain-text passwords are upgraded the first time someone unlocks the paste.