AI-Powered Real-Time Transcription & Meeting Intelligence Platform
NexusScribe is a self-hosted, enterprise-grade transcription platform that transforms meetings into actionable intelligence. Built for organizations requiring on-premises data sovereignty, it delivers real-time speech-to-text transcription with speaker diarization, powered by local AI inference.
- Features
- Architecture
- Quick Start
- Installation
- Configuration
- Security
- Compliance
- API Reference
- Crate Documentation
- Performance
- Deployment
- Development
- Contributing
- License
- Multi-tenant architecture with organization-based data isolation
- Stripe billing integration with subscription plans and metered usage
- Self-service signup with email verification via Resend
- S3 cloud storage for recordings and transcripts with presigned URLs
- Usage tracking with quota enforcement (402 responses when exceeded)
- Plan tiers: Free (5 meetings/month), Pro ($29/month), Enterprise (custom)
- Sub-200ms latency speech-to-text using Whisper models
- Multiple compute backends: CPU (64GB+ RAM), CUDA GPU, Hailo NPU (8/10-H)
- Automatic language detection with support for 99 languages
- Word-level timestamps for precise navigation and search
- Configurable model sizes: tiny, base, small, medium, large-v2, large-v3
- MFCC-based voice embeddings for speaker identification
- Real-time speaker separation during live meetings
- Voice profile training for improved accuracy over time
- Clustering algorithms for unknown speaker detection
- Automatic summarization with key points extraction
- Action item detection and assignment tracking
- Sentiment analysis per speaker and segment
- Topic clustering and keyword extraction
- Searchable transcript archive
- Real-time collaborative editing with operational transformation (OT)
- Inline comments with threaded discussions
- Version history with full audit trail
- Export to PDF, DOCX, JSON, SRT, VTT formats
- Timestamp-linked commenting
- Microsoft Teams bot integration with audio capture
- Zoom meeting transcription via bot
- Google Meet support
- LiveKit native video conferencing with WebRTC
- Custom WebSocket audio streaming API
- Cross-platform iOS and Android support via Expo SDK 54
- Real-time transcription with waveform visualization
- AI Studio with editing tools (clarity, tone, filler removal, chapters)
- External meeting transcription - connect bots to Zoom/Teams/Meet
- Offline support with automatic sync when online
- Push notifications for meeting reminders and transcription completion
- Secure authentication with MFA support
- Share & export transcripts in multiple formats
- Role-based access control (RBAC) with Admin, Editor, Viewer, Guest roles
- Multi-factor authentication (TOTP) with backup codes
- JWT authentication with refresh token rotation and blacklisting
- SSO/SAML authentication (Okta, Azure AD, Google Workspace, OneLogin)
- Webhook integrations with HMAC-SHA256 signatures and retry logic
- Custom vocabulary for domain-specific terminology and acronyms
- Meeting templates with preset titles, descriptions, and participants
- HashiCorp Vault integration for secrets management at scale
- Rate limiting with token bucket algorithm (5/min auth, 100/min API)
- Security headers (CSP, HSTS, X-Frame-Options)
- Account lockout after failed login attempts
- API-first architecture for integrations
- Multi-tenant organization support
- HIPAA compliance with audit logging, AES-256-GCM encryption, BAA tracking
- SOC 2 Type II controls with security events, access reviews, incident tracking
- GDPR compliance with data subject rights (access, portability, erasure, consent)
- CCPA compliance with Do Not Sell flag and CA consumer rights
- FERPA compliance for educational institutions with student record protection
- Data retention policies with configurable retention periods and auto-deletion
- Compliance reporting with exportable audit trails for regulators
┌─────────────────────────────────────────────────────────────────────────┐
│ NexusScribe Platform │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Next.js │ │ React │ │ Axum │ │ Meeting │ │
│ │ Web App │ │ Native │ │ REST API │ │ Bots │ │
│ │ (Web UI) │ │ (Mobile) │ │ (Rust) │ │ (Node.js) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ └─────────────────┴────────┬────────┴─────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ WebSocket │ │
│ │ Gateway │ │
│ └────────┬────────┘ │
│ │ │
│ ┌─────────────────────────────────┴─────────────────────────────────┐ │
│ │ Core Services Layer │ │
│ ├────────────┬────────────┬────────────┬────────────┬───────────────┤ │
│ │ Audio │Transcription│ Speaker │Collaboration│ Auth │ │
│ │ Pipeline │ Engine │Diarization │ Engine │ Service │ │
│ │ │ (Whisper) │ (MFCC) │ (OT) │ (JWT/MFA) │ │
│ └─────┬──────┴─────┬──────┴─────┬──────┴─────┬──────┴───────┬──────┘ │
│ │ │ │ │ │ │
│ └────────────┴─────┬──────┴────────────┴──────────────┘ │
│ │ │
│ ┌────────────┼────────────┐ │
│ │ │ │ │
│ ┌─────▼─────┐ ┌────▼────┐ ┌─────▼─────┐ │
│ │ CPU │ │ CUDA │ │ Hailo │ │
│ │ (Whisper) │ │ GPU │ │ NPU │ │
│ │ │ │ │ │ (40 TOPS) │ │
│ └───────────┘ └─────────┘ └───────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Aegis-DB │ │
│ │ ┌───────────┐ │ │
│ │ │Relational │ │ (Users, Meetings, Transcripts) │
│ │ │TimeSeries │ │ (Audio Metrics, System Stats) │
│ │ │ Document │ │ (Comments, Insights, Exports) │
│ │ │ Graph │ │ (Relationships, Topics) │
│ │ └───────────┘ │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
Audio Input → Preprocessing (16kHz mono, VAD) → Inference Engine →
Speaker Diarization → WebSocket Broadcast → Aegis-DB Storage →
Collaborative Editor → Export (PDF/DOCX/JSON/SRT)
- Rust 1.75+ with cargo
- Node.js 20+ with npm
- PM2 process manager (
npm install -g pm2) - Aegis-DB (bundled or separate installation)
- Whisper model (auto-downloaded or manual)
# Clone the repository
git clone https://github.com/AutomataNexus/NexusScribe.git
cd NexusScribe
# Build everything
./nexus-ctl build
# Initialize the database (first time only)
./nexus-ctl db-init
# Download Whisper model (base, ~142MB)
mkdir -p models/whisper
curl -L -o models/whisper/ggml-base.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.bin
# Start all services via PM2
./nexus-ctl start
# Check status
./nexus-ctl statusOpen http://localhost:3000 in your browser.
# Start all services
./nexus-ctl start # or: pm2 start ecosystem.config.js
# Stop all services
./nexus-ctl stop # or: pm2 stop all
# Restart all services
./nexus-ctl restart # or: pm2 restart all
# View logs
./nexus-ctl logs # All logs
./nexus-ctl logs nexus-backend # Backend only
./nexus-ctl logs nexus-web # Frontend only
./nexus-ctl logs aegis-db # Database only
# Monitor dashboard
pm2 monit
# Enable startup on boot
pm2 startup
pm2 save# Build the Rust backend
cargo build --release
# Download Whisper model
mkdir -p models/whisper
curl -L -o models/whisper/ggml-base.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.bin
# Start Aegis-DB
./deploy/aegis-db/start.sh start
# Start the backend
WHISPER_MODEL_PATH=./models/whisper/ggml-base.bin \
./target/release/nexus-scribe &
# Start the web app
cd web && npm install && npm run dev# Install individual crates
cargo add nexus-scribe-core
cargo add nexus-scribe-auth
cargo add nexus-scribe-transcriptiongit clone https://github.com/AutomataNexus/NexusScribe.git
cd NexusScribe
cargo build --release --workspace# Build image
docker build -t nexus-scribe:latest .
# Run with docker-compose
docker-compose up -d# Add ARM64 target
rustup target add aarch64-unknown-linux-gnu
# Cross-compile
RUSTFLAGS="-C target-cpu=cortex-a76" \
cargo build --release --target aarch64-unknown-linux-gnuCreate config/nexus-scribe.toml:
[server]
host = "0.0.0.0"
port = 8080
[database]
url = "aegis://localhost:9091/nexus_scribe"
pool_size = 10
timeout = 30
[auth]
jwt_secret = "your-secret-key-min-32-chars"
access_token_expiry = 3600 # 1 hour
refresh_token_expiry = 604800 # 7 days
[transcription]
model_path = "/opt/NexusScribe/models/whisper/ggml-base.bin"
device = "auto" # auto, cpu, cuda, hailo
language = "en" # or "auto" for detection
threads = 0 # 0 = auto-detect
[hailo]
enabled = false
device_id = 0
batch_size = 1
timeout_ms = 5000
[models]
models_path = "/opt/NexusScribe/models"| Variable | Description | Default |
|---|---|---|
WHISPER_MODEL_PATH |
Path to Whisper GGML model | models/whisper/ggml-base.bin |
JWT_SECRET |
Secret for JWT signing (required) | - |
RUST_LOG |
Log level | info |
DATABASE_URL |
Aegis-DB connection | aegis://localhost:9091 |
HAILO_ENABLED |
Enable Hailo NPU | false |
RESEND_API_KEY |
Resend API key for transactional emails | - |
STRIPE_SECRET_KEY |
Stripe secret key for billing | - |
STRIPE_WEBHOOK_SECRET |
Stripe webhook signing secret | - |
STRIPE_PRICE_PRO |
Stripe Price ID for Pro plan | - |
AWS_ACCESS_KEY_ID |
AWS access key for S3 storage | - |
AWS_SECRET_ACCESS_KEY |
AWS secret key for S3 storage | - |
AWS_S3_BUCKET |
S3 bucket name for file storage | - |
AWS_S3_REGION |
S3 bucket region | us-east-1 |
| Model | Size | VRAM | Speed | Accuracy |
|---|---|---|---|---|
tiny |
75MB | 1GB | Fastest | Basic |
base |
142MB | 1GB | Fast | Good |
small |
466MB | 2GB | Medium | Better |
medium |
1.5GB | 5GB | Slow | High |
large-v2 |
2.9GB | 10GB | Slowest | Highest |
large-v3 |
2.9GB | 10GB | Slowest | Best |
NexusScribe implements enterprise-grade security. See SECURITY.md for complete documentation.
| Feature | Description |
|---|---|
| Authentication | JWT with refresh tokens, MFA (TOTP), account lockout |
| Authorization | RBAC (Admin/Editor/Viewer/Guest), IDOR protection |
| Secrets | HashiCorp Vault integration or environment variables |
| Transport | TLS 1.3 via nginx or native (--features tls) |
| Input Validation | SQL injection protection, path traversal prevention |
| Rate Limiting | Token bucket (5/min auth, 100/min API) |
| Headers | CSP, HSTS, X-Frame-Options, X-Content-Type-Options |
| WebSocket | JWT auth, origin validation, message size limits |
# Generate secure secrets
export JWT_SECRET=$(openssl rand -base64 48)
export DB_PASSWORD=$(openssl rand -base64 32)
# Production mode (enforces secret validation)
export NEXUS_SCRIBE_ENV=production
# Optional: HashiCorp Vault for enterprise
cargo build --release --features vault
export NEXUS_SCRIBE_VAULT__ENABLED=true
export NEXUS_SCRIBE_VAULT__ADDRESS=https://vault.example.com:8200| Flag | Description |
|---|---|
--features vault |
HashiCorp Vault secrets management |
--features tls |
Native TLS termination (alternative to nginx) |
--features hailo |
Hailo NPU acceleration (Pi5 hardware) |
--features saml |
SSO/SAML authentication support |
--features compliance |
Full compliance suite (HIPAA, SOC 2, GDPR) |
NexusScribe supports enterprise compliance requirements out of the box.
| Feature | Description |
|---|---|
| Audit Logging | 6-year retention of all PHI access events |
| Encryption | AES-256-GCM encryption for data at rest |
| Access Controls | Role-based access with minimum necessary principle |
| BAA Tracking | Business Associate Agreement management |
| Breach Detection | Automated monitoring for unauthorized access |
| Control | Description |
|---|---|
| Security Events | Real-time logging of security-relevant events |
| Access Reviews | Periodic access certification workflows |
| Incident Management | Incident tracking with root cause analysis |
| Vendor Management | Third-party risk assessment tracking |
| Change Management | Audit trail for system changes |
| Right | Implementation |
|---|---|
| Right to Access | Self-service data export (JSON format) |
| Right to Portability | Machine-readable data download |
| Right to Erasure | Automated data deletion workflow |
| Consent Management | Granular consent tracking per purpose |
| DPA Tracking | Data Processing Agreement management |
| Feature | Description |
|---|---|
| Do Not Sell | Opt-out flag for data sales |
| Consumer Rights | Access, deletion, and correction requests |
| Privacy Notice | Required disclosures at collection |
| CA Resident | California residency declaration |
| Feature | Description |
|---|---|
| Student Records | Protected education records handling |
| Directory Opt-out | Student opt-out from directory information |
| Consent Tracking | Parental/eligible student consent |
| Access Logs | Record of all education record access |
Configure retention policies per data type:
[compliance.retention]
transcripts = "7 years" # Meeting transcripts
audit_logs = "6 years" # HIPAA requirement
user_data = "account_lifetime + 30 days"
recordings = "90 days" # Audio/video files# Register new user
curl -X POST http://localhost:8080/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "SecurePass123!",
"display_name": "John Doe"
}'
# Login
curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "SecurePass123!"
}'
# Response: { "access_token": "...", "refresh_token": "...", "user": {...} }
# Get current user
curl http://localhost:8080/api/v1/auth/me \
-H "Authorization: Bearer <access_token>"# List meetings
curl http://localhost:8080/api/v1/meetings \
-H "Authorization: Bearer <token>"
# Create meeting
curl -X POST http://localhost:8080/api/v1/meetings \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"title": "Weekly Standup",
"description": "Team sync meeting"
}'
# Get meeting
curl http://localhost:8080/api/v1/meetings/<meeting_id> \
-H "Authorization: Bearer <token>"
# Get transcript
curl http://localhost:8080/api/v1/meetings/<meeting_id>/transcript \
-H "Authorization: Bearer <token>"// Connect to transcription stream
const ws = new WebSocket('ws://localhost:8080/ws/transcription/<meeting_id>');
ws.onopen = () => {
console.log('Connected to transcription stream');
};
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
switch (message.type) {
case 'transcript':
console.log(`[${message.speaker}]: ${message.text}`);
break;
case 'partial':
console.log(`(typing): ${message.text}`);
break;
case 'speaker_change':
console.log(`Speaker changed to: ${message.speaker}`);
break;
}
};// For meeting bots to stream audio
const ws = new WebSocket('ws://localhost:8080/ws/audio/<meeting_id>?bot_id=<bot_id>');
// Send audio start message
ws.send(JSON.stringify({
type: 'bot_audio_start',
bot_id: 'bot-123',
meeting_id: 'meeting-456',
sample_rate: 16000,
channels: 1,
format: 's16le'
}));
// Stream raw PCM audio (s16le format)
ws.send(audioBuffer); // Binary data
// Send audio stop message
ws.send(JSON.stringify({
type: 'bot_audio_stop',
bot_id: 'bot-123',
meeting_id: 'meeting-456'
}));# Create organization
curl -X POST http://localhost:8080/api/v1/organizations \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name": "Acme Corp", "slug": "acme"}'
# Invite member
curl -X POST http://localhost:8080/api/v1/organizations/<org_id>/members \
-H "Authorization: Bearer <token>" \
-d '{"email": "user@acme.com", "role": "editor"}'
# Get usage stats
curl http://localhost:8080/api/v1/organizations/<org_id>/usage \
-H "Authorization: Bearer <token>"# Get billing portal URL
curl http://localhost:8080/api/v1/billing/portal \
-H "Authorization: Bearer <token>"
# Create checkout session
curl -X POST http://localhost:8080/api/v1/billing/checkout \
-H "Authorization: Bearer <token>" \
-d '{"price_id": "price_xxx", "success_url": "...", "cancel_url": "..."}'
# Get current subscription
curl http://localhost:8080/api/v1/billing/subscription \
-H "Authorization: Bearer <token>"# Configure SSO provider
curl -X POST http://localhost:8080/api/v1/sso/config \
-H "Authorization: Bearer <token>" \
-d '{
"provider": "okta",
"entity_id": "https://your-app.okta.com/...",
"sso_url": "https://your-app.okta.com/app/.../sso/saml",
"certificate": "-----BEGIN CERTIFICATE-----..."
}'
# Initiate SSO login
curl http://localhost:8080/api/v1/sso/login?org=acme
# Redirects to IdP# Create webhook
curl -X POST http://localhost:8080/api/v1/webhooks \
-H "Authorization: Bearer <token>" \
-d '{
"url": "https://your-server.com/webhook",
"events": ["meeting.started", "meeting.ended", "transcript.completed"],
"secret": "your-webhook-secret"
}'
# List webhooks
curl http://localhost:8080/api/v1/webhooks \
-H "Authorization: Bearer <token>"# Add vocabulary term
curl -X POST http://localhost:8080/api/v1/vocabulary \
-H "Authorization: Bearer <token>" \
-d '{"term": "NexusScribe", "pronunciation": "NEX-us-scribe", "category": "product"}'
# Import vocabulary
curl -X POST http://localhost:8080/api/v1/vocabulary/import \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"terms": [{"term": "API", "expansion": "Application Programming Interface"}]}'# Create template
curl -X POST http://localhost:8080/api/v1/templates \
-H "Authorization: Bearer <token>" \
-d '{
"name": "Weekly Standup",
"default_title": "Team Standup - {{date}}",
"default_description": "Weekly team sync",
"default_participants": ["team@example.com"]
}'
# Create meeting from template
curl -X POST http://localhost:8080/api/v1/meetings \
-H "Authorization: Bearer <token>" \
-d '{"template_id": "<template_id>"}'# Request data export (GDPR)
curl -X POST http://localhost:8080/api/v1/privacy/export \
-H "Authorization: Bearer <token>"
# Request data deletion
curl -X POST http://localhost:8080/api/v1/privacy/delete \
-H "Authorization: Bearer <token>" \
-d '{"confirm": true}'
# Update consent
curl -X PUT http://localhost:8080/api/v1/privacy/consent \
-H "Authorization: Bearer <token>" \
-d '{"marketing": false, "analytics": true}'
# Set Do Not Sell (CCPA)
curl -X PUT http://localhost:8080/api/v1/privacy/ccpa \
-H "Authorization: Bearer <token>" \
-d '{"do_not_sell": true}'# Search transcripts
curl "http://localhost:8080/api/v1/search?q=action+items&type=transcript" \
-H "Authorization: Bearer <token>"
# Search with filters
curl "http://localhost:8080/api/v1/search?q=budget&from=2024-01-01&to=2024-12-31" \
-H "Authorization: Bearer <token>"NexusScribe is organized as a Rust workspace with 12 specialized crates:
| Crate | Description | Docs |
|---|---|---|
nexus-scribe-core |
Core types, configuration, error handling | README |
nexus-scribe-utils |
Utility functions, validators, sanitizers | README |
nexus-scribe-db |
Aegis-DB client (4 paradigms) | README |
nexus-scribe-auth |
JWT, Argon2, TOTP MFA, RBAC | README |
nexus-scribe-api |
REST/WebSocket type definitions | README |
nexus-scribe-web |
Axum HTTP server | README |
nexus-scribe-audio |
Audio capture, VAD, resampling | README |
nexus-scribe-transcription |
Whisper integration | README |
nexus-scribe-speaker |
Speaker diarization | README |
nexus-scribe-collaboration |
Real-time OT engine | README |
nexus-scribe-hailo |
Hailo NPU integration | README |
nexus-scribe-models |
ML model management | README |
| Configuration | Latency | Concurrent Streams | Memory |
|---|---|---|---|
| Raspberry Pi 5 + Hailo 10-H | < 200ms | 15 | 12GB |
| x86_64 + CUDA (RTX 3080) | < 100ms | 50 | 8GB |
| x86_64 CPU (32 cores) | < 500ms | 10 | 16GB |
| Audio Quality | Model | WER |
|---|---|---|
| Clear (studio) | large-v3 | 2-3% |
| Good (conference room) | large-v3 | 4-6% |
| Noisy (open office) | large-v3 | 8-12% |
| Phone quality | base | 10-15% |
- Model Selection: Use
basefor real-time with acceptable accuracy,large-v3for post-processing - Audio Quality: Ensure 16kHz mono input, use noise suppression
- Batching: Enable batching for multiple concurrent streams
- Memory: Use quantized models on memory-constrained devices
- Set strong
JWT_SECRET(32+ characters) - Enable HTTPS with valid certificates
- Configure firewall rules
- Set up log rotation
- Enable database backups
- Configure monitoring (Prometheus/Grafana)
- Set resource limits
- Configure PM2 startup on boot
PM2 is the recommended process manager for production:
# Deploy all services
pm2 start ecosystem.config.js --env production
# Enable startup on boot
pm2 startup
pm2 save
# Zero-downtime reload
pm2 reload all
# View real-time monitoring
pm2 monit
# View logs
pm2 logsThe ecosystem.config.js file manages all services:
| Service | Name | Port | Description |
|---|---|---|---|
| Aegis-DB | aegis-db |
7001 | Multi-paradigm database |
| Backend | nexus-backend |
8080 | Rust/Axum API server |
| Frontend | nexus-web |
3000 | Next.js web application |
| Mobile Dev | nexus-mobile-dev |
19000 | Expo dev server (disabled by default) |
# Initialize database (first time or full reinit)
./nexus-ctl db-init
# Apply schema only (preserves data)
./nexus-ctl db-schema
# Start in cluster mode (multi-node)
./nexus-ctl db-cluster
# View database status
curl http://127.0.0.1:7001/health# /etc/systemd/system/nexus-scribe.service
[Unit]
Description=NexusScribe Transcription Server
After=network.target aegis-db.service
[Service]
Type=simple
User=nexus
WorkingDirectory=/opt/NexusScribe
Environment=RUST_LOG=info
Environment=WHISPER_MODEL_PATH=/opt/NexusScribe/models/whisper/ggml-base.bin
ExecStart=/opt/NexusScribe/target/release/nexus-scribe
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetupstream nexus_scribe {
server 127.0.0.1:8080;
}
server {
listen 443 ssl http2;
server_name transcribe.example.com;
ssl_certificate /etc/letsencrypt/live/transcribe.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/transcribe.example.com/privkey.pem;
location / {
proxy_pass http://nexus_scribe;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}cd mobile
npm install
npm start # Start Expo dev serverScan the QR code with Expo Go (iOS/Android) to run on your device.
| Feature | Description |
|---|---|
| Dashboard | Quick access to recording, meetings, external transcription, AI Studio |
| Recording | Record meetings with real-time audio level visualization |
| Studio | Waveform playback with AI tools (edit for clarity, remove fillers, add chapters) |
| External Meetings | Connect transcription bots to Zoom, Teams, or Google Meet |
| Offline Mode | Queue actions when offline, sync automatically when connected |
| Share/Export | Export transcripts as TXT, JSON, PDF, or DOCX |
npm test # Run 78 unit tests
npx tsc --noEmit # TypeScript checkmobile/
├── src/
│ ├── screens/ # 10 screens (Login, Dashboard, Studio, etc.)
│ ├── components/ # Reusable UI components
│ ├── services/ # API client, audio, websocket, notifications
│ ├── store/ # Zustand state management
│ ├── hooks/ # Custom React hooks
│ ├── theme/ # Colors, typography, spacing
│ └── types/ # TypeScript type definitions
├── assets/ # App icons and splash screen
└── __tests__/ # Unit tests
# Debug build
make build-dev
# Release build
make build
# Run tests
make test
# Run linter
make lint
# Format code
make fmt
# Check without building
make check# All tests
cargo test --workspace
# Specific crate
cargo test -p nexus-scribe-auth
# Specific test
cargo test -p nexus-scribe-auth test_password_hash
# With output
cargo test -- --nocapture- Follow Rust 2021 edition idioms
- Use
rustfmtfor formatting (runcargo fmt) - Run
clippybefore committing (runcargo clippy) - Document public APIs with rustdoc comments
- Write tests for all public functions
We welcome contributions! Please see our Contributing Guidelines.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
cargo test --workspace) - Run linter (
cargo clippy) - Commit (
git commit -m 'feat: add amazing feature') - Push (
git push origin feature/amazing-feature) - Open a Pull Request
type(scope): description
Types: feat, fix, docs, refactor, test, perf, chore
Licensed under the Business Source License 1.1 (LICENSE).
- Use Limitation: Production use limited to single organization with ≤50 users
- Change Date: January 26, 2030
- Change License: Apache License 2.0
After the Change Date, this software will be available under the Apache License 2.0.
For enterprise licensing (unlimited users, multiple organizations), contact sales@automatanexus.com.
- Whisper.cpp - High-performance Whisper inference
- whisper-rs - Rust bindings for whisper.cpp
- Hailo - NPU acceleration
- Aegis-DB - Multi-paradigm database
- Axum - Rust web framework
- LiveKit - Real-time video infrastructure
- Documentation: docs.nexusscribe.dev
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: support@automatanexus.com
Built with Rust by AutomataNexus Development Team
Version 1.0.0
