Loading repository data…
Loading repository data…
EvgeniyMalykh / repository
Production-ready Django SaaS boilerplate — Docker, JWT auth, teams, Stripe billing, Celery
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Django SaaS Boilerplate. Ship faster.
Shipyard gives you a production-ready Django backend with multi-tenancy, Stripe billing, async tasks, and a fully containerized dev environment — so you can focus on your product instead of scaffolding.
| Module | What you get |
|---|---|
| Authentication | JWT-based login/register, token refresh, email-based auth with UUID primary keys |
| Teams | Full multi-tenancy — create teams, invite members, manage roles via TeamMembership |
| Billing | Stripe-ready models: Plan, Subscription, Invoice, WebhookEvent |
| Async Tasks | Celery 5 + Celery Beat + Flower dashboard, DB-backed periodic tasks |
| Notifications | EmailLog model for outbound email tracking |
| Base Models | TimestampedModel and UUIDModel mixins |
| Docker Stack | Single docker compose up spins up all 6 services |
| REST API | DRF with versioned endpoints, CORS configured |
git clone https://github.com/EvgeniyMalykh/Shipyard.git
cd Shipyard
cp .env.example .env
docker compose up --build
docker compose exec web python manage.py createsuperuser
| Service | URL |
|---|---|
| Django API | http://localhost:8000 |
| Django Admin | http://localhost:8000/admin |
| Flower | http://localhost:5555 |
| Layer | Technology |
|---|---|
| Web framework | Django 5.0.6 |
| REST API | Django REST Framework 3.15 |
| Auth | djangorestframework-simplejwt |
| Database | PostgreSQL 16 |
| Cache / Broker | Redis 7 |
| Task queue | Celery 5 + Celery Beat + Flower |
| Containerization | Docker + Docker Compose |
All endpoints prefixed with /api/v1/.
| Method | Endpoint | Description |
|---|---|---|
POST | /auth/register/ | Create account |
POST | /auth/login/ | Get JWT tokens |
POST | /auth/refresh/ | Refresh token |
| Method | Endpoint | Description |
|---|---|---|
GET/PATCH | /users/me/ | Profile |
POST | /users/me/password/ | Change password |
| Method | Endpoint | Description |
|---|---|---|
GET/POST | /teams/ | List / create |
GET/PUT/DELETE | /teams/<id>/ | Detail |
GET | /teams/<id>/members/ | Members |
POST | /teams/<id>/invite/ | Invite |
| Method | Endpoint | Description |
|---|---|---|
GET | /billing/plans/ | Plans |
GET | /billing/subscription/ | Current subscription |
GET | /billing/invoices/ | Invoices |
| Variable | Required | Description |
|---|---|---|
SECRET_KEY | Yes | Django secret key |
DEBUG | Yes | True / False |
DATABASE_URL | Yes | postgres://user:pass@db:5432/shipyard |
REDIS_URL | Yes | redis://redis:6379/0 |
CELERY_BROKER_URL | Yes | Same as REDIS_URL |
DJANGO_SETTINGS_MODULE | Yes | config.settings.development |
MIT. You own the code. No runtime license checks, no lock-in.