Fermentum is a brewery management SaaS platform designed for micro-brewery chains that need to coordinate production, inventory, equipment, and team operations across multiple locations. The system is built on a client-server architecture with a C#/.NET Core API backend, two React/Tailwind CSS frontends (operator and admin), and PostgreSQL as the primary data store.
Multi-Tenant
The platform implements a schema-per-tenant multi-tenancy model in PostgreSQL, where each brewery organization gets its own database schema provisioned automatically at signup. Row-level security policies enforce strict data isolation between tenants, with a custom EF Core interceptor injecting the tenant context on every query. The tenant schema contains over 30 tables covering the full brewery domain — recipes, batches, ingredients, equipment, inventory, customers, assignments, and notifications; while a shared public schema manages cross-tenant concerns like user accounts, subscription plans, and invitations.
Secure
Authentication is handled through Stytch, supporting passwordless magic links and OAuth 2.0 flows for Google and Apple sign-in. The API issues JWT tokens for session management, with Redis providing distributed caching and session storage. The authorization model supports role-based access control with configurable permissions per tenant, allowing brewery owners to define roles like Head Brewer, Shift Lead, or Sales Rep with granular access to different parts of the system.
Recipe Management
The recipe management system is one of the platform's core features, built around the BJCP (Beer Judge Certification Program) style guidelines. Brewers compose recipes by selecting from industry-standard databases of grains, hops, yeasts, and additives, then specifying recipe-specific quantities and parameters. The system calculates key brewing metrics — original gravity, final gravity, ABV, IBU, SRM color — and tracks ingredient costs per batch, per gallon, and per serving. Each recipe includes a configurable mash schedule with temperature targets and equipment assignments.
Production Tracking
Production batch tracking follows the full lifecycle from planning through completion. Batches are created from recipes, with each step tracked individually — mashing, boiling, fermentation, conditioning, packaging. The system records actual vs. planned measurements at each stage (gravity readings, temperature, pH) for quality control. Equipment scheduling uses PostgreSQL EXCLUDE constraints to prevent double-booking of fermenters, bright tanks, and other shared resources, with a maintenance tracking system for preventive and corrective maintenance records.
Inventory Management
Inventory management operates at the lot level, tracking individual ingredient receipts with expiration dates and quantities. The system monitors stock levels against configurable thresholds and generates real-time low-stock alerts delivered through SignalR WebSocket connections. A notification hub supports both targeted and broadcast messages, powering the in-app notification center and toast alerts.
Third-Party Integration
Third-party integrations include Stripe for subscription billing and payment method management across four plan tiers (trial, basic, premium, enterprise), and a QuickBooks Online plugin that syncs financial data through OAuth 2.0 for accounting workflows. The plugin architecture is extensible, with a registry system that allows tenants to install, configure, and manage integrations independently.
Responsive UX
The operator UI is a full-featured React SPA with 35+ pages covering every aspect of brewery operations — a guided onboarding flow, production dashboards, recipe builder with tabbed ingredient selection, batch tracking boards, equipment calendars, stock management with lot-level detail, customer records with Google Maps integration, and team task assignments with status workflows. The admin UI provides system-level management capabilities. Both frontends use Axios for API communication and React Context for state management.
