Skip to content

pixelcop/clientshare

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ClientShare logo

ClientShare is a secure, branded client portal for teams that need a better way to send files, collect uploads, and keep sensitive document exchange out of email threads.

ClientShare prioritizes self-hosted deployments, with sensible defaults for small firms and room to grow into more advanced hosted setups. Out of the box, it gives you a private portal for sharing files, requesting documents, managing access, and presenting a more professional client experience.

Why ClientShare

  • Keep client files in one place instead of scattered across inboxes and shared links.
  • Give clients a clean upload and download experience with branded portal settings.
  • Control access with users, roles, permissions, and secure links.
  • Start with SQLite and local storage, then move to Postgres, MySQL, or S3-compatible storage when needed.
  • Run it yourself without stitching together separate tools for auth, file exchange, and portal UX.

Feature Highlights

  • Secure client portal for sending files and collecting uploads
  • Expiring secure links for controlled external access
  • User and role-based access control
  • Client, folder, and file organization
  • Email-driven workflows for invites and password resets
  • Branding controls for site title, logo, and primary color
  • Local-first self-hosting defaults with optional hosted-oriented tenancy mode
  • Vue frontend bundled into the Go app for a single deployable service

Quick Start

Prerequisites

  • Docker
  • Docker Compose

1. Setup and configure

mkdir clientshare
cd clientshare
mkdir config data storage
wget https://raw.githubusercontent.com/pixelcop/clientshare/refs/heads/main/docker/docker-compose.yml
wget https://raw.githubusercontent.com/pixelcop/clientshare/refs/heads/main/config/config.yaml.sample -O config/config.yaml

Update these values in config/config.yaml:

  • auth.jwt_secret
  • auth.invite_token_secret
  • secure_links.signing_key
  • admin.bootstrap_email
  • admin.bootstrap_password

The sample config defaults to:

  • single-tenant mode
  • SQLite
  • local file storage

2. Start ClientShare with Docker

docker compose up -d

Run this from the repository root so Docker uses docker-compose.yml. The container mounts your local config, data, and storage directories, so configuration, database files, and uploads persist on the host.

Open http://localhost:8080.

Building

Source build prerequisites

  • Go
  • Bun
  • GNU Make
  • A C toolchain with SQLite development headers for local Go builds

Build from source

Build frontend and backend components:

make build-web build

This produces the main server binary plus the migration and import tools:

  • clientshare
  • goose
  • importclients

Build a Docker image

make build-docker

This uses docker/Dockerfile to build the frontend, generate email templates, compile the Go binaries, and package the runtime image.

Development

Backend

make run

Frontend dev server

make run-web

With dev_mode: true, the Go app can proxy to the Vite dev server during development.

Tests

make test
make test-web
make test-all

Migrations

make migrate
make migrate-down
make migrate-create name=add_feature

Configuration

Most runtime settings live in config/config.yaml.sample.

Useful defaults and options include:

  • tenancy.mode: single or hosted
  • database.driver: sqlite, postgres, or mysql
  • storage.type: local filesystem or S3-compatible object storage
  • branding: site title, logo path, and primary color
  • internal_api: disabled by default for self-hosted installs

For local development overrides, see docs/env.md.

Stack

  • Go backend
  • Fiber web server
  • GORM models and Goose-style migrations
  • Vue 3 frontend with Vite
  • SQLite by default for the easiest self-hosted setup

Project Layout

Deployment Notes

ClientShare defaults to a simple self-hosted setup:

  • SQLite database
  • local storage under ./storage
  • bundled frontend served by the Go application

For more advanced deployments, you can switch to Postgres or MySQL, use S3-compatible storage, and enable hosted-oriented tenancy features when needed.

Status

ClientShare is an active open-source project focused on secure client document exchange and self-hosted deployments.

If you need a branded client portal for file requests, sensitive uploads, or recurring document handoff, this repo is the place to start.

License

AGPL, Copyright (C) 2026 Pixelcop Research, Inc.

About

ClientShare is a secure, branded client portal for teams

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors