GitHub - Vibra-Labs/Atrium: A self-hosted client portal for agencies and freelancers. Manage projects, share files, and give clients a branded portal to track progress

3 min read Original article ↗

A self-hosted client portal for agencies and freelancers.

Website | Documentation | GitHub Issues

Created by @edgarjc -- Built out of frustration with the tools I was using to manage client work.

License: ELv2

Why Atrium?

Most agencies juggle shared drives, spreadsheets, and scattered emails to keep clients in the loop. Atrium replaces all of that with a single branded portal your clients can log into -- no more "can you resend that file?" emails. Unlike managed SaaS platforms, you own the data and host it yourself.

alt text

Features

  • Project management -- Customizable status pipeline per organization
  • File sharing -- Upload and deliver files via S3, MinIO, Cloudflare R2, or local storage
  • White-label branding -- Custom colors and logo applied to the client portal
  • Role-based access -- Owner/admin roles for your team, member role for clients
  • Authentication -- Magic link and email/password auth via Better Auth
  • Multi-tenant -- Each agency operates as its own isolated organization

Tech Stack

Layer Technology
API NestJS 11
Frontend Next.js 15, React 19
Database PostgreSQL 16, Prisma ORM
Auth Better Auth
Styling Tailwind CSS
Email Resend + React Email
Monorepo Turborepo + Bun

Getting Started

Local Development

Prerequisites: Bun (v1.0+) and Docker (for PostgreSQL).

git clone https://github.com/Vibra-Labs/Atrium.git
cd atrium
bun install
bun run setup
bun run dev

This starts the web app at localhost:3000 and the API at localhost:3001. The setup script handles env files, database, and seed data automatically.

Docker (Production)

A pre-built image is available on Docker Hub:

docker pull vibralabs/atrium:latest

The quickest way to run Atrium with PostgreSQL:

curl -O https://raw.githubusercontent.com/Vibra-Labs/Atrium/main/docker-compose.yml
BETTER_AUTH_SECRET=$(openssl rand -base64 32) \
POSTGRES_PASSWORD=your-secure-password \
docker compose up -d

Or build from source:

git clone https://github.com/Vibra-Labs/Atrium.git
cd atrium
docker compose up --build -d

The unified image (vibralabs/atrium) bundles the API, web app, and a Caddy reverse proxy into a single container on port 8080. It works with any container platform — Docker Compose, Coolify, Portainer, Unraid, etc.

First Use

  1. Open localhost:3000/signup and create your account
  2. Create projects, upload files, and manage statuses from the dashboard
  3. Invite clients by email -- they access the client portal at /portal

Documentation

Roadmap

  • Billing & subscriptions (Stripe)
  • Setup wizard for new organizations
  • Email notifications (Resend + SMTP)
  • Docker Hub image (vibralabs/atrium)
  • Unraid Community App template
  • Contract signatures
  • Client-facing invoice payments
  • Webhooks / Zapier integration

Contributing

Contributions are welcome! Here's how to get involved:

  1. Open an issue first -- Whether it's a bug report, feature idea, or improvement, start with a GitHub Issue so we can discuss before you write code.
  2. Keep PRs focused -- Small, single-purpose pull requests are easier to review and merge.
  3. Bug fixes and improvements welcome -- New features should be discussed in an issue first to make sure they align with the project direction.

Community & Support

If you find Atrium useful, consider giving it a star -- it helps others discover the project.

License

Atrium is source-available software licensed under the Elastic License 2.0 (ELv2). You are free to use, modify, and self-host Atrium. The license restricts offering it as a managed service to third parties.