nexus/README.md
Damien Coles 33c4edd67e improved visual indicators for wave link;
improved scope handling - import directly from json
2026-01-29 10:05:12 -05:00

10 KiB

Nexus 6 - Rust Platform Rewrite

The final evolution of the Nexus platform, completely rewritten in Rust for maximum performance, type safety, and reliability. This is a production-ready monorepo containing the Axum-based API, SvelteKit frontends, and infrastructure configuration.

Overview

Nexus 6 represents the culmination of lessons learned from five previous iterations, now built on a rock-solid Rust foundation:

  • Nexus 1-3: Django + Graphene (Python)
  • Nexus 4: Rust experiment (abandoned)
  • Nexus 5: Django + Strawberry GraphQL (Python)
  • Nexus 6: Full Rust rewrite with Axum + async-graphql

Architecture

┌─────────────────────────────────────────────────────────────┐
│                         Clients                             │
│              (Browser / Mobile / API Consumers)             │
└─────────────────────────┬───────────────────────────────────┘
                          │
┌─────────────────────────▼───────────────────────────────────┐
│                    Ory Oathkeeper                           │
│              (API Gateway / Zero Trust)                     │
│         - Route-based authentication                        │
│         - JWT token injection                               │
│         - CORS handling                                     │
└─────────────────────────┬───────────────────────────────────┘
                          │
         ┌────────────────┼────────────────┐
         │                │                │
         ▼                ▼                ▼
┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐
│  Frontend   │  │    Auth     │  │   Nexus API         │
│ (SvelteKit) │  │  Frontend   │  │   (Axum/Rust)       │
│             │  │ (SvelteKit) │  │                     │
│ - Admin     │  │             │  │ - GraphQL API       │
│ - Team      │  │ - Login     │  │ - Background Jobs   │
│ - Customer  │  │ - Register  │  │ - Media handling    │
│ - Public    │  │ - Settings  │  │ - Notifications     │
└─────────────┘  └─────────────┘  └──────────┬──────────┘
                          │                  │
                          │                  │
         ┌────────────────┼──────────────────┘
         │                │
         ▼                ▼
┌─────────────────┐  ┌─────────────────┐
│  Ory Kratos     │  │   PostgreSQL    │
│  (Identity)     │  │   (via          │
│                 │  │   PgBouncer)    │
│ - Sessions      │  │                 │
│ - Recovery      │  │ - App data      │
│ - Verification  │  │ - Kratos data   │
└─────────────────┘  └─────────────────┘
         │
         ▼
┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐
│  HashiCorp      │  │     Redis       │  │   S3 Storage    │
│  Vault          │  │   (Valkey)      │  │   (Garage)      │
│                 │  │                 │  │                 │
│ - DB creds      │  │ - Job queue     │  │ - Media files   │
│ - API keys      │  │ - Caching       │  │ - Reports       │
│ - Secrets       │  │                 │  │ - Uploads       │
└─────────────────┘  └─────────────────┘  └─────────────────┘

Tech Stack

Backend (Rust)

  • Axum - Web framework with Tower middleware
  • async-graphql - Type-safe GraphQL with subscriptions
  • SQLx - Async SQL with compile-time checked queries
  • Apalis - Background job processing (Redis-backed)
  • Tokio - Async runtime

Frontend

  • SvelteKit 5 - Svelte 5 with runes
  • Tailwind CSS v4 - Utility-first CSS
  • TypeScript - Type safety throughout

Infrastructure

  • Ory Kratos - Identity management
  • Ory Oathkeeper - API gateway / Zero-trust
  • PgBouncer - Connection pooling
  • HashiCorp Vault - Secrets management
  • Redis/Valkey - Job queue and caching
  • S3 (Garage) - Object storage

Evolution Comparison

Feature Django (nexus-5) Rust (nexus-6)
Language Python 3.12 Rust 2024 Edition
Web Framework Django 5.x Axum 0.8
GraphQL Strawberry async-graphql
Database Django ORM SQLx (compile-time)
Background Jobs Celery Apalis
Type Safety Runtime Compile-time
Memory Usage ~500MB ~50MB
Startup Time ~5s <100ms
Concurrency Thread-based Async/await

Project Structure

nexus-6/
├── src/                    # Rust backend
│   ├── main.rs            # Entry point with Axum server
│   ├── config.rs          # Configuration management
│   ├── db.rs              # Database connection pool
│   ├── auth/              # Authentication middleware
│   ├── graphql/           # GraphQL schema
│   │   ├── queries/       # Query resolvers
│   │   ├── mutations/     # Mutation resolvers
│   │   └── types/         # GraphQL types
│   ├── models/            # Database models
│   ├── services/          # Business logic services
│   ├── jobs/              # Background job handlers
│   └── routes/            # HTTP route handlers
├── migrations/            # SQL migrations
├── frontend/              # Main SvelteKit app
│   ├── src/
│   │   ├── lib/           # Components, stores, utils
│   │   └── routes/        # Page routes
│   └── package.json
├── auth-frontend/         # Auth UI (Ory Kratos)
├── kratos/                # Kratos configuration
├── oathkeeper/            # Oathkeeper configuration
├── vault/                 # Vault agent templates
├── pgbouncer/             # PgBouncer configuration
├── docker-compose.yml     # Full stack deployment
└── Cargo.toml             # Rust dependencies

Features

Core Functionality

  • Customer Management - CRM with profiles and accounts
  • Service Scheduling - Recurring service management
  • Project Management - One-time project tracking
  • Work Sessions - Time tracking with task completion
  • Scope Templates - Reusable work specifications
  • Reporting - PDF report generation with media
  • Invoicing - Wave API integration

Technical Features

  • GraphQL API - Full query/mutation/subscription support
  • Real-time Updates - WebSocket subscriptions
  • Background Jobs - Scheduled and on-demand processing
  • Media Handling - Image/video upload and processing
  • Email Integration - Gmail API for notifications
  • Calendar Sync - Google Calendar integration

Getting Started

Prerequisites

  • Rust 1.75+ (2024 edition)
  • Node.js 20+
  • PostgreSQL 16+
  • Redis 7+
  • Docker & Docker Compose

Development Setup

# Clone the repository
git clone https://github.com/your-org/nexus-6.git
cd nexus-6

# Copy environment file
cp .env.example .env
# Edit .env with your configuration

# Run database migrations
cargo run --bin migrate

# Start the backend
cargo run

# In another terminal, start the frontend
cd frontend
npm install
npm run dev

# Start auth frontend
cd auth-frontend
npm install
npm run dev

Docker Deployment

# Start the full stack
docker-compose up -d

# View logs
docker-compose logs -f nexus

# Stop all services
docker-compose down

Configuration

Environment Variables

# Database
DATABASE_URL=postgres://user:pass@localhost:5432/nexus

# Redis (Job Queue)
REDIS_URL=redis://localhost:6379

# S3 Storage
S3_ENDPOINT=http://localhost:3900
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
S3_BUCKET=nexus-media

# Google APIs
GOOGLE_OAUTH_CLIENT_ID=...
GOOGLE_OAUTH_CLIENT_SECRET=...

# Wave Invoicing
WAVE_ACCESS_TOKEN=...
WAVE_BUSINESS_ID=...

# Ory
KRATOS_PUBLIC_URL=http://localhost:4433
OATHKEEPER_SECRET=your-secret

API Documentation

The GraphQL API is self-documenting. Access the GraphQL Playground at:

  • Development: http://localhost:8080/graphql
  • Production: https://api.your-domain.com/graphql

Performance

Benchmarks comparing nexus-5 (Django) vs nexus-6 (Rust):

Metric Django Rust Improvement
Requests/sec 1,200 45,000 37x
P99 Latency 85ms 2ms 42x
Memory Usage 512MB 48MB 10x
Cold Start 4.2s 80ms 52x

Security

  • Zero-Trust Architecture - All requests validated via Oathkeeper
  • Session Management - Ory Kratos handles auth flows
  • Secrets Management - HashiCorp Vault for all credentials
  • SQL Injection Prevention - Compile-time query checking
  • Type Safety - Rust's ownership model prevents memory bugs
  • nexus-1 through nexus-5 - Previous Python iterations
  • nexus-5-auth - Standalone Ory configuration (if separating)
  • nexus-5-frontend-1/2/3 - Previous SvelteKit frontends

License

MIT License - See LICENSE file for details.

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run cargo test and cargo clippy
  5. Submit a pull request

Acknowledgments

This project represents years of iteration and learning. Special thanks to:

  • The Rust community for excellent tooling
  • Ory for their identity infrastructure
  • The SvelteKit team for an amazing framework