PocketChest
Secure, serverless file and text sharing built on Cloudflare with large file support.
Install / Use
/learn @Hzao/PocketChestREADME
PocketChest
Secure, temporary file sharing. Upload files or text, get a code, share anywhere.
PocketChest is a modern file sharing service built with Cloudflare Workers and Pages. Share files and text content securely with automatic expiration and no account required.
💡 What is a "Chest"?
A chest is simply a collection of files and text that you upload together. Each chest gets a unique 6-character code (like ABC123) that you share with others to download everything inside it.
✨ Features
- 📤 File & Text Sharing - Upload files or paste text content (optionally restrict uploads to trusted users with TOTP authentication)
- 📦 Large File Support - Handles files up to 200GB using multipart uploads to Cloudflare R2
- 🔐 Secure Codes - 6-character retrieval codes for access
- ⏰ Auto Expiry - Files expire after 1, 3, 7, or 15 days (or permanent)
- 🚀 No Registration - No accounts, just upload and share
- 🔐 Optional TOTP Auth - Restrict access with authenticator apps
- 📱 Responsive - Works on desktop and mobile
- ⚡ Fast - Built on Cloudflare's global edge network
📺 Demo
Upload & Share (15 seconds, with TOTP protected)

Retrieve Files (10 seconds)

🏗️ Architecture
- Backend: Cloudflare Workers + D1 Database + R2 Storage
- Frontend: Next.js 14 + Tailwind CSS (deployed on Cloudflare Pages)
- Language: TypeScript
🚀 Quick Start
For complete deployment instructions, see DEPLOYMENT.md
Prerequisites
- Cloudflare account with a domain
- Wrangler CLI
Local Development
First, copy the template files:
# Copy configuration templates
cp pocket-chest-backend/wrangler.jsonc.template pocket-chest-backend/wrangler.jsonc
cp pocket-chest-frontend/.env.local.template pocket-chest-frontend/.env.local
Backend:
cd pocket-chest-backend
npm install
npm run dev # http://localhost:8787
Frontend:
cd pocket-chest-frontend
npm install
npm run dev # http://localhost:3000
📁 Project Structure
PocketChest-OpenSource/
├── assets/ # Demo assets
│ ├── pocket-chest-upload-demo.gif
│ └── pocket-chest-retrieve-demo.gif
│
├── pocket-chest-backend/ # Cloudflare Workers API
│ ├── src/
│ │ ├── index.ts # Main worker entry point
│ │ ├── schema.sql # Database schema
│ │ ├── types.ts # TypeScript types
│ │ └── utils.ts # Utility functions
│ ├── test/ # Test suite
│ │ ├── auth.spec.ts # Authentication tests
│ │ ├── chest-creation.spec.ts # Chest creation tests
│ │ ├── file-upload.spec.ts # File upload tests
│ │ ├── multipart-upload.spec.ts # Large file upload tests
│ │ ├── retrieval.spec.ts # File retrieval tests
│ │ ├── utils/ # Test utilities
│ │ │ ├── test-factories.ts
│ │ │ ├── test-helpers.ts
│ │ │ └── test-setup.ts
│ │ └── ... # Additional test files
│ ├── scripts/ # Utility scripts
│ │ ├── generate-secrets.js # Secret generation
│ │ └── test-ci.sh # CI test script
│ ├── wrangler.jsonc # Cloudflare configuration
│ ├── wrangler.jsonc.template # Configuration template
│ ├── package.json # Dependencies
│ ├── tsconfig.json # TypeScript config
│ ├── vitest.config.mts # Test configuration
│ └── eslint.config.js # Linting configuration
│
├── pocket-chest-frontend/ # Next.js frontend
│ ├── src/
│ │ ├── app/ # App Router pages
│ │ │ ├── page.tsx # Home page
│ │ │ ├── layout.tsx # Root layout
│ │ │ ├── globals.css # Global styles
│ │ │ ├── share/ # Upload/share page
│ │ │ │ └── page.tsx
│ │ │ └── retrieve/ # File retrieval page
│ │ │ └── page.tsx
│ │ ├── components/ # React components
│ │ │ ├── FileUpload.tsx # File upload component
│ │ │ ├── TextInput.tsx # Text input component
│ │ │ ├── UploadProgress.tsx # Upload progress display
│ │ │ ├── RetrieveClient.tsx # File retrieval interface
│ │ │ ├── TOTPModal.tsx # TOTP authentication modal
│ │ │ └── ExpirySelector.tsx # Expiration time selector
│ │ ├── hooks/ # Custom React hooks
│ │ │ └── usePocketChest.ts # Main API hook
│ │ └── lib/ # API client & types
│ │ ├── api.ts # API client functions
│ │ └── types.ts # TypeScript types
│ ├── public/ # Static assets
│ │ └── favicon.png
│ ├── package.json # Dependencies
│ ├── next.config.js # Next.js configuration
│ ├── tailwind.config.js # Tailwind CSS config
│ ├── postcss.config.js # PostCSS config
│ ├── tsconfig.json # TypeScript config
│ └── _headers # Cloudflare Pages headers
│
├── DEPLOYMENT.md # Deployment guide
├── LICENSE # MIT license
└── README.md # This file
🔒 Security Features
- TOTP Authentication - Optional two-factor authentication
- JWT Session Tokens - Secure session management
- Auto Expiration - Files automatically deleted after expiry
- Automated Cleanup - Hourly cron job removes expired content
- Input Validation - File type and size restrictions
🚢 Deployment
See DEPLOYMENT.md for complete deployment instructions including:
- Cloudflare Workers setup
- D1 database configuration
- R2 storage setup
- TOTP authentication setup
- Custom domain configuration
- Environment variables
- Troubleshooting guide
🤝 Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
📄 License
MIT License - see LICENSE file for details. Use at your own risk.
Related Skills
openhue
347.9kControl Philips Hue lights and scenes via the OpenHue CLI.
sag
347.9kElevenLabs text-to-speech with mac-style say UX.
weather
347.9kGet current weather and forecasts via wttr.in or Open-Meteo
tweakcc
1.6kCustomize Claude Code's system prompts, create custom toolsets, input pattern highlighters, themes/thinking verbs/spinners, customize input box & user message styling, support AGENTS.md, unlock private/unreleased features, and much more. Supports both native/npm installs on all platforms.
