Upload Bucket

May 17, 2026 · View on GitHub

A file collection platform that enables event organizers to create shareable upload links for attendees. Attendees upload files (photos, videos, documents) that only they and the organizer can see, ensuring privacy among participants.

Features

  • Easy Setup: Create an event, share a link, receive uploads
  • Privacy-First: Attendees only see their own uploads
  • Multiple Access Modes: Anonymous, authenticated, or password-protected links
  • Mobile-Optimized: Fast, responsive upload experience
  • Organizer Dashboard: View, download, and manage all uploaded files
  • Tier-Based Limits: Freemium and Pro tiers with configurable quotas

Tech Stack

ComponentTechnology
BackendHono on Cloudflare Workers
FrontendNuxt 4 with Nuxt UI
DatabaseNeon PostgreSQL with Drizzle ORM
StorageCloudflare R2
AuthBetter Auth

Documentation

DocumentDescription
User GuideHow to use Upload Bucket as an organizer
API ReferenceWorker HTTP API (auth, profile, payslip)
Developer SetupLocal development and deployment guide
Admin CLICommand-line tools for administrators
Product SpecFull product specification

Quick Start

Prerequisites

  • Node.js v20+
  • pnpm v8+
  • Cloudflare account
  • Neon database

Installation

# Clone the repository
git clone <repository-url>
cd shindig

# Install dependencies
pnpm install

# Set up environment variables
cp backend/.dev.vars.example backend/.dev.vars
cp frontend/.env.example frontend/.env
# Edit both files with your credentials

# Apply database migrations
cd backend && pnpm exec drizzle-kit push

# Start development servers
pnpm exec pm2 start ecosystem.config.js

See Developer Setup for detailed instructions.

Project Structure

shindig/
├── backend/          # Hono API (Cloudflare Workers)
├── frontend/         # Nuxt 4 SPA
├── docs/             # Documentation
└── packages/         # Shared packages

Development

pnpm / nuxt prepare fails (unstorage / Invalid module .pnpm/...)

The published unstorage drivers use relative imports such as ./utils/index.mjs. If those files under node_modules instead contain specifiers starting with .pnpm/, the install tree is corrupted or stale. From the repo root run:

pnpm run reinstall

That removes workspace node_modules, prunes the pnpm store, and reinstalls. If it still fails, delete pnpm-lock.yaml as well and run pnpm install again.

# Run tests
cd backend && pnpm run test
cd frontend && pnpm run test

# Lint and type check
cd backend && pnpm run lint:fix && pnpm run typecheck
cd frontend && pnpm run lint:fix && pnpm run typecheck

Deployment

# Deploy backend to Cloudflare Workers
cd backend && pnpm run deploy

# Build frontend for production
cd frontend && pnpm run build

License

Private - All rights reserved

Contributing

Please consult CONTRIBUTING for guidelines on contributing to this project.