Bedrock Review 2026: Enterprise SaaS Boilerplate
TL;DR
Bedrock is the best boilerplate for enterprise-focused SaaS that needs organizations, SAML/SSO, per-seat billing, audit logs, and proper API documentation. At ~$1,500 (team license), it's the most expensive boilerplate — and it earns that price for products targeting mid-market to enterprise customers. For consumer SaaS or early-stage products, the price and complexity are overkill.
Rating: 4/5
What You Get
Price: ~$1,500 (team license) | Creator: Max Stoiber (creator of styled-components, Spectrum chat)
Core features:
- Next.js 14+ + TypeScript (strict mode throughout)
- Multi-tenancy: Organizations, teams, members, roles
- Auth: Passport.js + custom session management
- Enterprise Auth: SAML/SSO via WorkOS integration
- Payments: Stripe with advanced billing (per-seat, usage-based)
- Email: Postmark
- Database: PostgreSQL with careful schema design
- API: REST + Swagger/OpenAPI documentation
- Admin panel: Comprehensive with metrics
- Docker: Full Docker Compose for local + production
- Testing: Jest + Cypress pre-configured
What "Enterprise-Grade" Means in Practice
SAML/SSO Support
Enterprise B2B customers require SSO for security compliance. Bedrock integrates WorkOS for SAML authentication:
// Enterprise login flow — detects org and routes accordingly
export async function enterpriseSignIn(email: string): Promise<void> {
const organization = await findOrganizationByEmail(email);
if (organization?.ssoEnabled) {
// WorkOS SAML flow
const authorizationUrl = await workos.sso.getAuthorizationURL({
organization: organization.workosOrgId,
redirectURI: `${BASE_URL}/auth/callback`,
});
redirect(authorizationUrl);
} else {
redirect(`/login?email=${email}`);
}
}
// Handle SAML callback
export async function handleSAMLCallback(code: string) {
const { profile } = await workos.sso.getProfileAndToken({ code });
let user = await findUserByEmail(profile.email);
if (!user) {
user = await createUserFromSAML({
email: profile.email,
firstName: profile.firstName,
lastName: profile.lastName,
organizationId: profile.organizationId,
});
}
return createSession(user.id);
}
Implementing SAML correctly takes a senior engineer 2-4 days. Bedrock ships it pre-built and tested.
Per-Seat Billing
Enterprise pricing models (seat-based, usage-based, per-module) are more complex than flat subscriptions:
// Team seat billing — charge per active member
export async function addTeamMember(
organizationId: string,
invitedUserId: string
): Promise<void> {
const org = await getOrganization(organizationId);
const currentSeats = await countActiveMembers(organizationId);
const plan = await getSubscriptionPlan(org.stripeSubscriptionId);
if (currentSeats >= plan.maxSeats) {
throw new Error('Seat limit reached. Upgrade to add more members.');
}
await addMember(organizationId, invitedUserId);
// Prorate billing for per-seat plans
if (plan.billing === 'per-seat') {
await stripe.subscriptionItems.update(plan.seatItemId, {
quantity: currentSeats + 1,
proration_behavior: 'create_prorations',
});
}
}
Audit Logging
SOC 2 and enterprise compliance require audit trails for significant actions:
// Every important action logged for compliance
export async function updateOrganizationSettings(
orgId: string,
userId: string,
settings: OrgSettings
): Promise<void> {
const previous = await getOrganization(orgId);
await prisma.organization.update({
where: { id: orgId },
data: settings,
});
await prisma.auditLog.create({
data: {
organizationId: orgId,
userId,
action: 'organization.settings.updated',
metadata: {
before: extractChangedFields(previous, settings),
after: settings,
},
},
});
}
API Documentation
Enterprise customers and integration partners expect OpenAPI documentation. Bedrock generates Swagger docs from JSDoc comments on route handlers:
/**
* @openapi
* /api/organizations:
* get:
* summary: List organizations
* security:
* - apiKey: []
* responses:
* 200:
* description: List of organizations
* content:
* application/json:
* schema:
* type: array
* items:
* $ref: '#/components/schemas/Organization'
*/
export async function GET(req: Request) {
const user = await requireAuth(req);
const orgs = await getUserOrganizations(user.id);
return Response.json(orgs);
}
Getting Started
# After purchase — clone your Bedrock repo
git clone https://your-bedrock-repo.git my-app
cd my-app
# Start all services with Docker Compose
docker-compose up -d
# Run database migrations
npm run db:migrate
# Seed initial data
npm run db:seed
npm run dev # → localhost:3000
The Docker Compose setup includes PostgreSQL, Redis, and a local email preview server (Mailhog):
# docker-compose.yml
services:
app:
build: .
ports: ["3000:3000"]
depends_on: [postgres, redis, mailhog]
postgres:
image: postgres:16
volumes: [postgres_data:/var/lib/postgresql/data]
redis:
image: redis:7-alpine
mailhog:
image: mailhog/mailhog
ports: ["8025:8025"] # Email preview at localhost:8025
One command starts everything. The email preview at :8025 means you can test transactional emails without an external service during development.
Bedrock's Architecture Strengths
Max Stoiber is a senior engineer with production experience at companies at scale. The architectural decisions reflect hard-won patterns:
Strict TypeScript: strict: true with exactOptionalPropertyTypes and noUncheckedIndexedAccess enabled. This catches a class of bugs at compile time that most boilerplates miss.
Database schema design: The schema is carefully designed for multi-tenancy from the start — organization_id foreign keys on the right tables, proper cascade delete rules, and index coverage for common query patterns.
Session management: Custom session handling gives full control over session storage, expiry, and revocation — important for enterprise security requirements (force logout all sessions, revoke specific devices).
Monorepo structure: As covered in our boilerplate monorepo guide, Bedrock's package separation (core, ui, auth, billing, jobs, monitoring) enforces clean architectural boundaries.
Who Should Buy Bedrock
Good fit:
- Enterprise SaaS targeting companies with 50+ employees
- Products where SAML/SSO is required (Fortune 500, government, finance)
- SaaS with per-seat or usage-based billing complexity
- Funded startups investing in the right enterprise foundation
- Teams needing API documentation for enterprise partnerships
Bad fit:
- Consumer SaaS (individual users, no org requirements)
- Early-stage indie SaaS ($1,500 is 5-10x more than alternatives)
- Solo founders (team license pricing is poor ROI for one person)
- Products that don't need enterprise authentication
The Enterprise Sales Checklist
When selling B2B SaaS to mid-market and enterprise buyers, procurement teams send security questionnaires. Bedrock addresses the most common requirements before you write a line of feature code:
SSO requirement: Enterprise IT requires SAML SSO so employees authenticate through their identity provider (Okta, Azure AD, Google Workspace). Without SSO, procurement stalls. Bedrock's WorkOS integration handles this with a single organization configuration — no custom SAML implementation required.
Audit log requirement: SOC 2 Type II and ISO 27001 both require audit trails for administrative actions. Bedrock's audit logging middleware captures user ID, action, timestamp, and before/after state for any registered action. This is the audit trail auditors look for.
Data residency questions: Bedrock's Docker Compose setup means you control where the data lives. PostgreSQL on your infrastructure, in your region — not a multi-tenant SaaS database you don't control.
Role-based access control: Enterprise teams need different permission levels. Bedrock's member/admin/owner role model covers the standard three-tier hierarchy most enterprise customers expect.
The practical impact: enterprise sales cycles that normally require 3-4 engineering sprints to pass procurement security review become checkbox items. Bedrock was built by someone who has shipped enterprise SaaS and knows what the questionnaire asks.
The $1,500 ROI Calculation
Bedrock's price is the highest in the boilerplate market. Here's the honest math:
| Feature | Hours to Build from Scratch | Senior Engineer Cost |
|---|---|---|
| SAML/SSO (WorkOS) | 16-24h | $2,400-$3,600 |
| Per-seat billing (Stripe) | 8-12h | $1,200-$1,800 |
| Audit logging system | 4-8h | $600-$1,200 |
| Multi-tenant data model | 8-16h | $1,200-$2,400 |
| OpenAPI documentation | 4-8h | $600-$1,200 |
| Docker Compose setup | 2-4h | $300-$600 |
| Total | 42-72h | $6,300-$10,800 |
At $150/hour fully-loaded engineering cost, Bedrock's $1,500 represents a 4-7x ROI on implementation time alone. The calculation improves further when you factor in testing time and the cost of getting SAML wrong (a failed security review during enterprise procurement can kill a six-figure deal).
The ROI only holds if your product actually needs enterprise features. For consumer SaaS or early B2B with SMB customers, you're paying for complexity you won't use.
Alternatives at Different Price Points
| Need | Alternative | Price |
|---|---|---|
| Multi-tenancy only | Supastarter | $299-$349 |
| Good code + teams | Makerkit | $249-$499 |
| Free enterprise patterns | Epic Stack | Free |
| SAML without the full kit | BoxyHQ SaaS Starter Kit | Free |
If your product needs SAML SSO but not the full Bedrock feature set, BoxyHQ's SaaS Starter Kit provides enterprise auth for free. See our BoxyHQ SaaS Starter Kit review for a direct comparison.
Final Verdict
Rating: 4/5
Bedrock delivers on its enterprise-grade promise. The SSO, per-seat billing, audit logging, and Docker setup are production quality — they reflect the kind of engineering investment that would cost a week of senior engineer time to replicate. At $1,500, that's a straightforward ROI for the right product.
The question isn't "is Bedrock good?" — it's "does your product need what Bedrock provides?" If you're targeting enterprise sales that require SSO in the procurement checklist, Bedrock is the right foundation. If you're building consumer SaaS, it's paying for complexity you'll never use.
Bedrock's Enterprise Auth in Practice
SAML SSO is the feature that enterprise procurement teams check first. IT administrators need to provision employees through their identity provider (Okta, Microsoft Entra, Google Workspace) and de-provision them instantly when they leave the company. Consumer credentials don't meet this requirement — an employee who forgets to hand over their personal Google account creates a security gap.
Bedrock's SAML implementation handles the IDP metadata exchange, user provisioning callbacks, and session management in a way that IT admins can verify against their compliance checklists. The configuration documentation covers Okta setup specifically, which is the dominant IDP in B2B software.
The audit logging feature works alongside SAML to address the "who did what and when" requirement. For financial services and healthcare, audit logs aren't optional — they're part of the regulatory requirement. Bedrock stores these events in PostgreSQL with the fields that compliance auditors request: user ID, action, resource ID, IP address, timestamp. The underlying data is structured correctly so that exporting logs for an auditor is a straightforward query rather than a retroactive instrumentation project.
For teams building toward SOC 2 certification, Bedrock's audit log and access control patterns map directly onto the access requirements that auditors evaluate. Starting with Bedrock is meaningfully easier than retrofitting audit logging onto an architecture not designed for it.
The per-seat billing model is the other enterprise-specific feature that saves significant implementation time. B2B enterprise customers typically pay per user rather than per team — "5 seats at $50/seat/month" rather than "$250/month for the team." Stripe Metered Billing can model this, but the subscription update logic (adding seats, removing seats, prorating mid-month changes) is complex to implement correctly. Bedrock's billing module handles seat additions and removals with proper proration, which is exactly the billing edge case that causes the most support tickets in enterprise SaaS. The SAML and per-seat billing features together define what "enterprise-ready" actually means in practice — Bedrock ships both correctly, which covers the features that would cost weeks of senior engineering time to implement from scratch for a product targeting mid-market and enterprise buyers. For founders who have been through enterprise sales cycles and know what procurement teams ask for, Bedrock's feature list reads like a checklist of what gets deals unstuck. The enterprise compliance landscape has only become more demanding in 2025 — SOC 2 requirements are increasingly expected at earlier stages of enterprise procurement, and Bedrock's audit logging and access control patterns align with what compliance auditors evaluate, giving teams a meaningful head start on their security posture documentation.
Compare Bedrock with alternatives in our best open-source SaaS boilerplates guide.
See our BoxyHQ SaaS Starter Kit review — free enterprise auth (SAML, SCIM, audit logs) without Bedrock's price tag.
Review Supastarter — multi-tenancy at $299 if you don't need SAML SSO.
Check out this boilerplate
View Bedrockon StarterPick →