Skip to content

πŸš€ Open-source Backend as a Service (BaaS) β€” Dynamic schema builder, instant REST APIs, authentication, row-level security, webhooks, workflows, and more. Self-hosted alternative to Firebase/Supabase. Built with FastAPI + React + PostgreSQL.

License

Notifications You must be signed in to change notification settings

Auckfmine/backendify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

FastAPI React PostgreSQL Docker TypeScript

πŸš€ Backendify

A self-hosted Backend-as-a-Service (BaaS) platform β€” Build backends without writing backend code.

Backendify is an open-source alternative to Firebase/Supabase that you can run on your own infrastructure. Define your data schema through a visual UI, and get instant REST APIs with authentication, authorization, and real-time capabilities.

Backendify Login


πŸ“Έ Screenshots

Control Center Dashboard

Control Center

Project Overview

Project Dashboard

Schema Builder

Schema Builder

Validation Rules

Validation Rules

User Management

User Management

Authentication Providers

Authentication

Role-Based Access Control

RBAC

File Storage

File Storage

Audit Logs

Audit Logs

Webhooks

Webhooks

Workflows

Workflows

Schema Evolution

Schema Evolution

Relationship Builder

Relations


✨ Features

πŸ—„οΈ Dynamic Schema Builder

  • Create collections (tables) with a visual UI
  • Support for multiple field types: string, int, float, boolean, datetime, text, json
  • Define relationships: belongs_to, has_many
  • Automatic migrations β€” no SQL required

πŸ” Authentication & Authorization

  • Admin Users: Console access for project management
  • App Users: End-user authentication for your applications
  • JWT access tokens + refresh token rotation
  • API key authentication for server-to-server communication
  • Row-level security policies

πŸ›‘οΈ Fine-grained Policies

  • Per-collection, per-action access control (create, read, update, delete, list)
  • Principal-based permissions: admin_user, app_user, api_key, anonymous
  • Condition-based rules (e.g., "users can only edit their own records")
  • Email verification requirements

πŸ” Advanced Querying

  • Filtering: ?field=value, ?field__gt=100, ?field__contains=text
  • Operators: eq, neq, gt, gte, lt, lte, contains, startswith, endswith, in, notin, isnull
  • Sorting: ?sort=-created_at,name (prefix with - for descending)
  • Pagination: ?limit=50&offset=0

πŸ“Š Data Explorer

  • Browse, create, edit, and delete records
  • Visual data management interface
  • Export and import data

πŸ“ Audit Logs

  • Track all data changes automatically
  • Filter by user, action, collection, date
  • Compliance and debugging support

πŸ”— Webhooks

  • HTTP callbacks on data events
  • Configurable per collection
  • Retry with exponential backoff

⚑ Workflows

  • Automate actions on events
  • Chain multiple operations
  • Template variables for dynamic data

πŸ”„ Schema Evolution

  • Track pending schema changes
  • Apply migrations safely
  • Version control for your schema

πŸ”— Relations

  • belongs_to (many-to-one)
  • has_many (one-to-many)
  • Query related data easily

πŸ‘οΈ Views

  • Virtual collections with joins
  • Pre-filtered data
  • Aggregations and computed fields

βœ… Validations

  • Field-level validation rules
  • Email, URL, regex, min/max, enum
  • Custom error messages

πŸ“ File Storage

  • Upload and manage files
  • Organize in folders
  • Secure access control

πŸ‘€ App Auth

  • End-user authentication
  • Separate from admin auth
  • JWT tokens with refresh

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Your Application                          β”‚
β”‚                   (React, Vue, Mobile, etc.)                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                β”‚
                                β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      Backendify API                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚   Auth   β”‚  β”‚   Data   β”‚  β”‚  Schema  β”‚  β”‚     Policies     β”‚ β”‚
β”‚  β”‚  /auth   β”‚  β”‚  /data   β”‚  β”‚ /schema  β”‚  β”‚    /policies     β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                β”‚
                                β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        PostgreSQL                                β”‚
β”‚              (Dynamic tables per project/collection)             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Quick Start

Prerequisites

  • Docker & Docker Compose

1. Clone and Setup

git clone https://github.com/yourusername/backendify.git
cd backendify
cp .env.example .env

2. Start Services

docker compose up --build

3. Access

Service URL
Admin Console http://localhost:5173
API Docs (Swagger) http://localhost:8000/docs
API (ReDoc) http://localhost:8000/redoc

4. Create Your First Project

  1. Register an admin account at http://localhost:5173/register
  2. Create a new project
  3. Use the Schema Builder to define collections
  4. Configure policies for access control
  5. Start using the REST API!

πŸ“š API Reference

Authentication

Admin Authentication

# Register
POST /api/auth/register
{ "email": "admin@example.com", "password": "securepass" }

# Login
POST /api/auth/login
{ "email": "admin@example.com", "password": "securepass" }
# Returns: { "access_token": "...", "refresh_token": "..." }

App User Authentication (for your end users)

# Register app user
POST /api/projects/{project_id}/auth/register
{ "email": "user@example.com", "password": "userpass" }

# Login app user
POST /api/projects/{project_id}/auth/login
{ "email": "user@example.com", "password": "userpass" }

Data Operations

# List records (with filtering & sorting)
GET /api/projects/{project_id}/data/{collection}?published=true&sort=-created_at

# Get single record
GET /api/projects/{project_id}/data/{collection}/{id}

# Create record
POST /api/projects/{project_id}/data/{collection}
{ "title": "Hello World", "content": "..." }

# Update record
PATCH /api/projects/{project_id}/data/{collection}/{id}
{ "title": "Updated Title" }

# Delete record
DELETE /api/projects/{project_id}/data/{collection}/{id}

Advanced Filtering

Operator Example Description
eq (default) ?status=active Equals
neq ?status__neq=deleted Not equals
gt / gte ?price__gte=100 Greater than (or equal)
lt / lte ?price__lt=500 Less than (or equal)
contains ?name__contains=john Contains substring
startswith ?name__startswith=A Starts with
endswith ?email__endswith=@gmail.com Ends with
in ?status__in=active,pending Value in list
notin ?status__notin=deleted Value not in list
isnull ?deleted_at__isnull=true Is null

πŸ”§ Configuration

Environment Variables

Variable Description Default
DATABASE_URL PostgreSQL connection string postgresql://...
JWT_SECRET Secret key for JWT tokens (required)
JWT_ALGORITHM JWT algorithm HS256
ACCESS_TOKEN_EXPIRE_MINUTES Access token TTL 30
REFRESH_TOKEN_EXPIRE_DAYS Refresh token TTL 7
CORS_ORIGINS Allowed CORS origins *

πŸ› οΈ Development

Backend (FastAPI)

cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
uvicorn app.main:app --reload

Frontend (React + Vite)

cd frontend
npm install
npm run dev

Run Tests

cd backend
pytest

πŸ“ Project Structure

backendify/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ alembic/              # Database migrations
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ api/
β”‚   β”‚   β”‚   β”œβ”€β”€ routes/       # API endpoints
β”‚   β”‚   β”‚   └── deps.py       # Dependencies (auth, db)
β”‚   β”‚   β”œβ”€β”€ core/             # Config, security
β”‚   β”‚   β”œβ”€β”€ models/           # SQLAlchemy models
β”‚   β”‚   β”œβ”€β”€ schemas/          # Pydantic schemas
β”‚   β”‚   β”œβ”€β”€ services/         # Business logic
β”‚   β”‚   └── main.py           # FastAPI app
β”‚   └── requirements.txt
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/       # Reusable UI components
β”‚   β”‚   β”œβ”€β”€ routes/           # Page components
β”‚   β”‚   β”œβ”€β”€ lib/              # API client, auth helpers
β”‚   β”‚   └── main.tsx
β”‚   └── package.json
β”œβ”€β”€ examples/
β”‚   β”œβ”€β”€ blog-app/             # Example blog application
β”‚   └── todo-app/             # Example todo application
β”œβ”€β”€ docker-compose.yml
└── README.md

πŸ“– Examples

Blog App Example

A full-featured blog with categories, posts, and comments. See examples/blog-app/.

cd examples/blog-app
npm install
npm run dev

Todo App Example

A simple todo list demonstrating CRUD operations. See examples/todo-app/.


πŸ—ΊοΈ Roadmap

  • Dynamic schema builder
  • JWT authentication (admin + app users)
  • API key authentication
  • Row-level security policies
  • Advanced filtering & sorting
  • Audit logs
  • Webhooks
  • Field validations
  • File/media storage
  • Email verification flow
  • Real-time subscriptions (WebSocket)
  • OAuth/Social login
  • Rate limiting
  • GraphQL API

🀝 Contributing

Contributions are welcome! Please read our contributing guidelines before submitting a PR.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add 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.


πŸ™ Acknowledgments


Made with ❀️ by the Backendify team

About

πŸš€ Open-source Backend as a Service (BaaS) β€” Dynamic schema builder, instant REST APIs, authentication, row-level security, webhooks, workflows, and more. Self-hosted alternative to Firebase/Supabase. Built with FastAPI + React + PostgreSQL.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published