Open-source people management platform.
Gatewaze is a modular platform for managing people and communities. Out of the box it gives you people management, a public portal, and an admin dashboard — then you extend it with modules to add the capabilities you need. Whether you're running a developer community, a professional association, or any organization, Gatewaze adapts to how you work.
- People & Member Management -- Manage profiles, organizations, membership tiers, and track engagement across your community.
- Admin Dashboard -- Full-featured admin interface for managing your organization and members.
- Public Portal -- A fast, SEO-friendly public site powered by Next.js.
- Configurable Authentication -- Supports Supabase Auth and OIDC providers for flexible identity management.
- Email -- Transactional and bulk email via SendGrid or any SMTP provider, with template management.
- Module System -- Extend the platform through self-contained modules that add UI, API routes, background jobs, and database migrations. Add event management, calendars, registrations, speakers, payments, and more.
Gatewaze's module system lets you pick the capabilities you need. Modules are selected during onboarding and can be enabled or disabled at any time.
The official open-source module collection lives in the gatewaze-modules repository. You can also create your own modules and load them from local paths, git repos, or uploaded packages. See the Module System Guide for full documentation on creating and managing modules.
| Layer | Technology |
|---|---|
| Admin App | React + Vite |
| Public Portal | Next.js |
| API Server | Express |
| Database | PostgreSQL (via Supabase) |
| Auth | Supabase Auth / OIDC |
| Storage | Supabase Storage |
| Edge Functions | Supabase Edge Functions (Deno) |
| Job Queue | Redis + BullMQ |
| UI Components | Radix Themes + Tailwind CSS |
| Package Manager | pnpm (monorepo workspaces) |
+------------------+
| Traefik |
| Reverse Proxy |
+--------+---------+
|
+--------------+--------------+
| |
+---------v---------+ +-----------v-----------+
| Public Portal | | Admin App |
| (Next.js) | | (React + Vite) |
+---------+---------+ +-----------+-----------+
| |
+--------------+--------------+
|
+---------v---------+
| API Server |
| (Express) |
+---------+---------+
|
+--------------+--------------+
| | |
+---------v---+ +------v------+ +----v--------+
| Supabase | | Redis | | Supabase |
| (PostgreSQL | | + BullMQ | | Storage |
| + Auth) | | (Jobs) | | (Files) |
+-------------+ +-------------+ +-------------+
That's it for running with Docker. For development from source, you also need:
# Clone the repository
git clone https://github.com/gatewaze/gatewaze.git
cd gatewaze
# Create your environment config from the example
make init
# Start everything
make upThat's it. The first startup takes ~2 minutes while the database initializes. Check status with:
make ps| Command | Description |
|---|---|
make up |
Start all services (dev mode with hot reload) |
make down |
Stop all services |
make reset |
Stop, remove all volumes, and restart fresh |
make logs |
Tail service logs (Ctrl-C to stop) |
make ps |
Show running containers |
make help |
Show all available commands |
If you manage multiple brands, place brand configs in a sibling gatewaze-environments repo:
parent-directory/
gatewaze/ # This repo
gatewaze-environments/ # Brand-specific .env files
brand1.local.env
brand2.local.env
Then pass the brand name before the command:
make brand1 up # Start the "brand1" brand
make brand1 down # Stop the "brand1" brand
make brand1 reset # Reset the "brand1" brand
make brand2 up # Start a different brandServices are accessible via Traefik .localhost domains (resolve automatically per RFC 6761) and via direct ports:
| Service | Traefik URL | Direct Port |
|---|---|---|
| Admin App | http://gatewaze-admin.localhost | http://localhost:5274 |
| Public Portal | http://gatewaze-app.localhost | http://localhost:3100 |
| API Server | http://gatewaze-api.localhost | http://localhost:3002 |
| Supabase API | http://gatewaze-supabase.localhost | http://localhost:54321 |
| Supabase Studio | http://gatewaze-studio.localhost | http://localhost:54323 |
| PostgreSQL | -- | localhost:54322 |
| Traefik Dashboard | -- | http://localhost:8080 |
- Open the admin app at http://gatewaze-admin.localhost (or http://localhost:5274)
- Enter the default admin email:
admin@example.com - Click "Send Magic Link"
- Open Supabase Studio at http://gatewaze-studio.localhost (or http://localhost:54323)
- Navigate to Authentication to find the magic link in email logs
- Click the magic link to complete sign-in
To use Supabase Cloud instead of self-hosted:
make init
# Edit docker/.env — set SUPABASE_URL, ANON_KEY, SERVICE_ROLE_KEY to your cloud project values
cd docker
docker compose -f docker-compose.cloud.yml up -dSee docs/deployment.md for full deployment options including Kubernetes/Helm.
For contributing or local development without Docker for the app services:
# Install dependencies
pnpm install
# Start infrastructure (Supabase + Redis) via Docker
cd docker
docker compose up -d supabase-db supabase-auth supabase-rest supabase-kong supabase-storage supabase-realtime supabase-edge-functions redis
cd ..
# Start all dev servers
pnpm dev| Service | URL |
|---|---|
| Admin App | http://localhost:5173 |
| Public Portal | http://localhost:3000 |
| API Server | http://localhost:4000 |
See docs/development.md for the full development setup guide.
gatewaze/
Makefile # Development commands (make up, make down, etc.)
packages/
admin/ # React + Vite admin application
portal/ # Next.js public event portal
api/ # Express API server + BullMQ worker + scheduler
shared/ # Shared types, utilities, and constants
supabase/
migrations/ # Database migrations (auto-applied on first startup)
functions/ # Supabase Edge Functions (Deno)
docker/
docker-compose.yml # Full stack (self-hosted Supabase)
docker-compose.cloud.yml # App services only (Supabase Cloud)
docker-compose.quickstart.yml # Pre-built images (no build step)
.env.example # Docker environment configuration
helm/ # Kubernetes Helm chart
docs/ # Project documentation
Detailed documentation is available in the docs/ directory:
- Getting Started
- Architecture Overview
- Configuration Guide
- Deployment Guide
- Module Development
- Authentication
- Development
We welcome contributions from the community! Please read our Contributing Guide before getting started.
Key points:
- You must sign the Contributor License Agreement before your first PR is merged.
- Follow Conventional Commits for commit messages.
- All code must be written in TypeScript and pass linting, type checking, and tests.
Gatewaze is licensed under the Apache License 2.0.
Copyright 2026 Gatewaze Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
See NOTICE for third-party attributions and TRADEMARK.md for trademark usage policy.
Gatewaze is made possible by these outstanding open-source projects:
- Supabase -- The open-source Firebase alternative powering our database, auth, storage, and edge functions.
- React -- The library behind the admin interface.
- Next.js -- The framework powering the public event portal.
- Vite -- Fast build tooling for the admin app.
- Express -- The API server framework.
- BullMQ -- Reliable job queue for background processing.
- Radix Themes -- Beautiful, accessible UI components.
- Tailwind CSS -- Utility-first CSS framework.