README.md

April 15, 2026 ยท View on GitHub

SnowShare Logo

SnowShare

SnowShare is a modern, secure file and link sharing platform built with Next.js, Prisma, and NextAuth.
It provides a clean, user-friendly interface for sharing URLs, text snippets, and files with customizable options for expiration, privacy, and access.

Features โœจ

LinkShare ๐Ÿ”—

  • Share any URL with a customizable shortened link
  • Set expiration times (1 day to solar explosion) โณ
  • Option for no expiration (authenticated users)
  • Custom slugs for personalized links
  • Password protection for enhanced security ๐Ÿ”’
  • Instant QR code generation for shared links ๐Ÿ“ฑ

PasteShare ๐Ÿ“‹

  • Share code snippets and text with syntax highlighting ๐ŸŽจ
  • Support for multiple programming languages
  • Expiration options and password protection ๐Ÿ”’
  • Ideal for sharing code samples, configuration files, or any text content

FileShare ๐Ÿ“

  • Secure file uploads with size limits
  • Automatic file type detection
  • Download tracking ๐Ÿ“ฅ
  • Same expiration and protection features

User Management ๐Ÿ‘ฅ

  • User registration and authentication via NextAuth ๐Ÿ”‘

  • Frontend: Next.js 16, React 19.1, TailwindCSS 4

  • Authentication: NextAuth.js with bcrypt password hashing

  • Special Features: QR code generation, custom URL slugs

Getting Started ๐Ÿš€

  • Node.js 24+ and npm/yarn
  • PostgreSQL database

Prerequisites โœ…

  • Node.js 24+ and npm/yarn

  • PostgreSQL database

  • Node.js 24+ and npm/yarn

  • PostgreSQL database

Installation ๐Ÿ› ๏ธ

  1. Clone the repository

    git clone https://github.com/TuroYT/snowshare
    cd snowshare
    
  2. Install dependencies

    npm install
    
  3. Set up environment variables Create a .env file in the root directory with the following variables:

    # Database
    DATABASE_URL="postgresql://username:password@localhost:5432/snowshare"
    
    # NextAuth
    NEXTAUTH_URL="http://localhost:3000"
    NEXTAUTH_SECRET="your-secret-key"
    
    # Auth (allow or disallow user signups)
    ALLOW_SIGNUP=true
    

Docker

Quick start (Docker Hub)

The easiest way to run SnowShare โ€” no build needed, PostgreSQL included.

  1. Create a docker-compose.yml:
version: "3.9"

services:
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: snowshare
    volumes:
      - db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 10

  app:
    image: turodev/snowshare:latest
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    environment:
      DATABASE_URL: postgres://postgres:postgres@db:5432/snowshare
      NEXTAUTH_URL: http://localhost:3000 # Change to your public URL
      NEXTAUTH_SECRET: changeme-replace-with-random-secret # Change this!
      ALLOW_SIGNUP: "true"
    ports:
      - "3000:3000"
    volumes:
      - uploads:/app/uploads

volumes:
  db-data:
  uploads:
  1. Start the stack:
docker compose up -d

Option B โ€” docker run

Start PostgreSQL first:

docker run -d \
  --name snowshare-db \
  --network snowshare-net \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=postgres \
  -e POSTGRES_DB=snowshare \
  -v snowshare-db:/var/lib/postgresql/data \
  postgres:16-alpine

Then start SnowShare:

docker network create snowshare-net

docker run -d \
  --name snowshare \
  --network snowshare-net \
  -p 3000:3000 \
  -e DATABASE_URL="postgres://postgres:postgres@snowshare-db:5432/snowshare" \
  -e NEXTAUTH_URL="http://localhost:3000" \
  -e NEXTAUTH_SECRET="$(openssl rand -base64 32)" \
  -e ALLOW_SIGNUP="true" \
  -v snowshare-uploads:/app/uploads \
  turodev/snowshare:latest

The app will be available at http://localhost:3000.

Note: Change NEXTAUTH_URL to your public domain and use a strong NEXTAUTH_SECRET (generate one with openssl rand -base64 32).

Available tags: latest, 1.3.9, 1.3

Build from source

docker compose up -d --build
  1. Initialize the database

    npx prisma migrate dev
    
  2. Start the development server

    npm run dev
    
  3. Open http://localhost:3000 with your browser to see the result.

Project Structure ๐Ÿ—‚๏ธ

/
โ”œโ”€โ”€ prisma/                # Prisma schema and migrations
โ”œโ”€โ”€ public/                # Static assets
โ””โ”€โ”€ src/
    โ”œโ”€โ”€ app/               # Next.js App Router structure
    โ”‚   โ”œโ”€โ”€ api/           # API routes
    โ”‚   โ”œโ”€โ”€ auth/          # Authentication pages
    โ”‚   โ”œโ”€โ”€ protected/     # Protected slugs and shares
    โ”‚   โ””โ”€โ”€ s/             # Short link redirects
    โ”œโ”€โ”€ components/        # React components
    โ”œโ”€โ”€ hooks/             # Custom React hooks
    โ””โ”€โ”€ lib/               # Utility functions and shared code

๐Ÿ™ Acknowledgments

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License โš–๏ธ

This project is licensed under the MIT License - see the LICENSE file for details.

Privacy & Analytics ๐Ÿ”’

SnowShare uses Plausible Analytics for privacy-friendly, cookie-free usage statistics. Plausible is:

  • GDPR compliant โ€” No personal data collected
  • Cookie-free โ€” No consent banner needed
  • Open source โ€” Transparent and auditable

No personally identifiable information is collected. Analytics help us understand usage patterns to improve the project.

To disable telemetry, add to your .env:

TELEMETRY=false

To use your own Plausible instance:

PLAUSIBLE_DOMAIN=your-domain.com
PLAUSIBLE_HOST=https://your-plausible-instance.com

Star History

Star History Chart

Acknowledgments / Credits ๐Ÿ™Œ