2025-11-26 00:49:11 +01:00
2025-11-26 00:49:11 +01:00
2025-11-25 12:21:14 +01:00
2025-11-25 12:21:14 +01:00
2025-11-25 12:21:14 +01:00
2025-11-25 12:21:14 +01:00
2025-11-25 12:21:14 +01:00

Multi-Tenant Nova/Salesforce-like Platform

A multi-tenant application platform where tenants can define custom objects, fields, applications, and pages.

Architecture

  • Backend: NestJS + Fastify + Prisma + Redis + BullMQ
  • Frontend: Nuxt 3 + Vue 3 + Tailwind CSS + shadcn-vue
  • Database: Percona (MySQL-compatible)
  • Cache/Queue: Redis + BullMQ

Project Structure

neo/
  backend/         # NestJS + Prisma + BullMQ
    src/
    prisma/
    package.json
    tsconfig.json
    Dockerfile
  frontend/        # Nuxt 3 + Vue 3 + Tailwind + shadcn-vue
    app/
    package.json
    nuxt.config.ts
    Dockerfile
  infra/
    docker-compose.yml
  .env.api
  .env.web
  README.md

Getting Started

Prerequisites

  • Docker & Docker Compose
  • Node.js 22+ (for local development)

Development Setup

  1. Clone the repository
  2. Start all services:
cd infra
docker-compose up --build

This will start:

Running Migrations

# From the infra directory
docker-compose exec api npx prisma migrate dev

Features

Multi-Tenancy

  • Single database with tenantId on all tenant-specific rows
  • Tenant context via x-tenant-id header

Object & Field Management

  • Define custom objects and fields via /api/setup/objects
  • Runtime CRUD operations via /api/runtime/objects/:objectApiName/records

Application Builder

  • Create applications with multiple pages
  • Access apps via /app/:appSlug/:pageSlug
  • Configure apps via /setup/apps

Security

  • JWT-based authentication
  • Role-based access control (RBAC) with Spatie-like permissions
  • Field-level security (FLS)
  • Record ownership and sharing rules

API Endpoints

Runtime APIs

  • GET /api/runtime/apps - List apps for current user
  • GET /api/runtime/apps/:appSlug - Get app with pages
  • GET /api/runtime/apps/:appSlug/pages/:pageSlug - Get page metadata
  • GET /api/runtime/objects/:objectApiName/records - List records
  • GET /api/runtime/objects/:objectApiName/records/:id - Get record
  • POST /api/runtime/objects/:objectApiName/records - Create record
  • PUT /api/runtime/objects/:objectApiName/records/:id - Update record
  • DELETE /api/runtime/objects/:objectApiName/records/:id - Delete record

Setup APIs

  • GET /api/setup/objects - List object definitions
  • POST /api/setup/objects - Create custom object
  • POST /api/setup/objects/:objectApiName/fields - Add field
  • GET /api/setup/apps - List apps
  • POST /api/setup/apps - Create app
  • POST /api/setup/apps/:appSlug/pages - Add page

Frontend Routes

  • /app/:appSlug - App home (redirects to first page)
  • /app/:appSlug/:pageSlug - Page view (list/board/dashboard)
  • /app/:appSlug/:pageSlug/:recordId - Record detail view
  • /setup/apps - App builder UI
  • /setup/objects - Object/field builder UI

License

MIT

Description
No description provided
Readme 519 KiB
Languages
Vue 61.1%
TypeScript 33.9%
CSS 1.7%
JavaScript 1.5%
Shell 1.1%
Other 0.7%