36Blocks was created to remove the burden of building authentication from scratch. We believe every
- developer deserves a production-ready, secure auth stack they can drop in within minutes — not months.
+ developer should be able to configure authentication, understand failures, and enforce application access
+ with clear boundaries.
@@ -118,7 +119,9 @@
What We Bui
Ready to get started?
-
Ship auth in 5 minutes. Free forever on the Starter plan.
+
+ Explore the configured capabilities and read the integration guide before connecting your application.
+
+
+
diff --git a/apps/36-blocks/src/app/website/docs/docs.component.ts b/apps/36-blocks/src/app/website/docs/docs.component.ts
new file mode 100644
index 00000000..de1dcddf
--- /dev/null
+++ b/apps/36-blocks/src/app/website/docs/docs.component.ts
@@ -0,0 +1,30 @@
+import { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core';
+import { Meta, Title } from '@angular/platform-browser';
+import { RouterModule } from '@angular/router';
+import { WIDGET_EXAMPLE } from './widget-example';
+
+@Component({
+ changeDetection: ChangeDetectionStrategy.OnPush,
+ selector: 'proxy-docs',
+ imports: [RouterModule],
+ templateUrl: './docs.component.html',
+})
+export class DocsComponent implements OnInit {
+ private readonly title = inject(Title);
+ private readonly meta = inject(Meta);
+ public readonly example = WIDGET_EXAMPLE;
+
+ public ngOnInit(): void {
+ this.title.setTitle('Integration guide — 36Blocks');
+ this.meta.updateTag({
+ name: 'description',
+ content:
+ 'Mount the 36Blocks authentication widget and understand application, session, and permission boundaries.',
+ });
+ this.meta.updateTag({ property: 'og:title', content: 'Integration guide — 36Blocks' });
+ this.meta.updateTag({
+ property: 'og:description',
+ content: 'Widget configuration and application security boundaries.',
+ });
+ }
+}
diff --git a/apps/36-blocks/src/app/website/docs/widget-example.ts b/apps/36-blocks/src/app/website/docs/widget-example.ts
new file mode 100644
index 00000000..13ca3908
--- /dev/null
+++ b/apps/36-blocks/src/app/website/docs/widget-example.ts
@@ -0,0 +1,22 @@
+/** Authorization mode mounts at the configured reference ID. */
+export const WIDGET_EXAMPLE = `
+
+
+`;
diff --git a/apps/36-blocks/src/app/website/home/home.component.html b/apps/36-blocks/src/app/website/home/home.component.html
index e2f5b2cf..361b2f10 100644
--- a/apps/36-blocks/src/app/website/home/home.component.html
+++ b/apps/36-blocks/src/app/website/home/home.component.html
@@ -38,8 +38,8 @@
- Launch secure user signup, login, roles, and access control in minutes — without building complex
- authentication systems from scratch.
+ Configure user signup, login, roles, and access controls for your application. Investigate failures and
+ manage users from one panel.
- Simple pricing.
- No enterprise drama.
+ Plan your integration.
+ Confirm your service terms.
- Built for SaaS founders who want authentication done — without complexity.
+ Current prices, limits, and service commitments require confirmation for your environment.
- Everything you need to ship auth fast and scale confidently.
+ Understand your configuration and verify the integration before launch.
diff --git a/apps/36-blocks/src/app/website/pricing/pricing.component.ts b/apps/36-blocks/src/app/website/pricing/pricing.component.ts
index 8076e43c..9e089a14 100644
--- a/apps/36-blocks/src/app/website/pricing/pricing.component.ts
+++ b/apps/36-blocks/src/app/website/pricing/pricing.component.ts
@@ -1,6 +1,7 @@
import { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core';
import { Meta, Title } from '@angular/platform-browser';
import { CommonModule } from '@angular/common';
+import { RouterModule } from '@angular/router';
import { MatIconModule } from '@angular/material/icon';
export interface PricingFeature {
@@ -36,7 +37,7 @@ export interface TrustItem {
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'proxy-pricing',
- imports: [CommonModule, MatIconModule],
+ imports: [CommonModule, MatIconModule, RouterModule],
templateUrl: './pricing.component.html',
})
export class PricingComponent implements OnInit {
@@ -47,112 +48,57 @@ export class PricingComponent implements OnInit {
this.titleService.setTitle('Pricing — 36Blocks');
this.metaService.updateTag({
name: 'description',
- content:
- 'Simple, transparent pricing for 36Blocks. Start free with 1,000 MAU. Upgrade as you grow. No hidden fees, no contracts.',
+ content: 'Confirm current 36Blocks pricing, usage limits, and service terms with the team.',
});
this.metaService.updateTag({ name: 'robots', content: 'index, follow' });
this.metaService.updateTag({ property: 'og:title', content: 'Pricing — 36Blocks' });
this.metaService.updateTag({
property: 'og:description',
- content: 'Start free. Scale with confidence. Transparent usage-based pricing.',
+ content: 'Contact the team for current pricing and service terms.',
});
this.metaService.updateTag({ property: 'og:type', content: 'website' });
}
public readonly plans: PricingPlan[] = [
{
- name: 'Starter',
- price: '$0',
- period: '/ month',
- description: 'Everything you need to get started with authentication.',
+ name: 'Plan and environment review',
+ price: 'Contact us',
+ period: '',
+ description: 'Confirm current commercial terms and enabled capabilities for your application.',
highlight: false,
features: [
- { text: '1,000 Monthly Active Users', included: true },
- { text: '3 Blocks', included: true },
- { text: '7-day logs', included: true },
- { text: '3-hour sessions', included: true },
- { text: 'Email authentication', included: true },
- { text: 'SMS (Not available)', included: false },
- { text: '36Blocks branding', included: true },
+ { text: 'Review login methods and provider configuration', included: true },
+ { text: 'Confirm usage limits and billing terms', included: true },
+ { text: 'Confirm session and retention policies', included: true },
],
- cta: 'Start Free',
- ctaStyle: 'outline',
- },
- {
- name: 'Growth',
- price: '$49',
- period: '/ month',
- description: 'Scale your product with powerful auth and branding control.',
- highlight: true,
- badge: 'Most Popular',
- features: [
- { text: '10,000 MAU included', included: true },
- { text: '10 Blocks', included: true },
- { text: '30-day logs', included: true },
- { text: '12-hour sessions', included: true },
- { text: 'Custom branding', included: true },
- { text: 'SMS available (usage-based)', included: true },
- { text: 'Auto multi-org mapping', included: true },
- { text: 'Extra Usage: +$10 per 5k MAU', included: true, bold: true },
- { text: '+$5 per extra Block', included: true, bold: true },
- ],
- cta: 'Upgrade to Growth',
- ctaStyle: 'primary',
- },
- {
- name: 'Scale',
- price: '$149',
- period: '/ month',
- description: 'Enterprise-grade auth for high-volume, complex SaaS products.',
- highlight: false,
- features: [
- { text: '50,000 MAU included', included: true },
- { text: 'Unlimited Blocks', included: true },
- { text: '24-hour sessions', included: true },
- { text: 'Advanced org rules', included: true },
- { text: 'SMS available (usage-based)', included: true },
- { text: 'Extra Usage: +$25 per 25k MAU', included: true, bold: true },
- ],
- cta: 'Choose Scale',
+ cta: 'Discuss your setup',
ctaStyle: 'outline',
},
];
public readonly infoBanners: InfoBanner[] = [
{
- icon: 'bar_chart',
- title: 'Transparent usage-based pricing',
+ icon: 'info',
+ title: 'Current terms require confirmation',
description:
- 'MAU = unique logged-in users per calendar month. Usage visible in real time. No hidden fees. No contracts.',
+ 'Plan names and limits in older material may differ from your environment. Confirm pricing, usage allowances, and enabled providers with the team before purchase.',
},
{
icon: 'sms',
- title: 'Optional Add-ons',
+ title: 'Provider dependencies',
description:
- 'Transactional SMS on paid plans. Billed per message by destination country. Requires a configurable monthly spending cap.',
+ 'SMS, email, and social login require the appropriate provider configuration. Confirm provider costs and availability for your environment.',
},
];
public readonly trustItems: TrustItem[] = [
+ { title: 'Widget integration', description: 'Use your configured block reference ID.', icon: 'code' },
+ { title: 'Application boundaries', description: 'Your product enforces business authorization.', icon: 'lock' },
+ { title: 'Environment review', description: 'Confirm enabled providers and service terms.', icon: 'settings' },
{
- title: '5-minute setup',
- description: 'Minimal configuration. Production-ready instantly.',
- icon: 'bolt',
- },
- {
- title: 'No vendor lock-in',
- description: 'Simple architecture and predictable APIs.',
- icon: 'lock_open',
- },
- {
- title: 'Cancel anytime',
- description: 'No contracts. Upgrade or downgrade freely.',
- icon: 'autorenew',
- },
- {
- title: 'Security-first',
- description: 'Encrypted in transit and at rest.',
- icon: 'security',
+ title: 'Investigation tools',
+ description: 'Inspect request failures and recorded activity.',
+ icon: 'search',
},
];
}
diff --git a/apps/36-blocks/src/app/website/privacy/privacy.component.html b/apps/36-blocks/src/app/website/privacy/privacy.component.html
index 405b0626..2a16ea2d 100644
--- a/apps/36-blocks/src/app/website/privacy/privacy.component.html
+++ b/apps/36-blocks/src/app/website/privacy/privacy.component.html
@@ -199,9 +199,9 @@
4. Data Sharin
>
5. Data Retention
- Account data is retained for the life of your account. End-user authentication logs are retained per
- your plan (7 days on Starter, 30 days on Growth, 90 days on Scale). On account deletion, all data is
- purged within 30 days.
+ Retention and deletion schedules depend on the deployed environment and applicable service terms.
+ Contact the team to confirm the current policy for account data, request logs, and activity records
+ before sending personal data. No fixed retention or deletion schedule is published here.
- We take security seriously. Every layer of 36Blocks is designed with your users' data and trust in mind.
+
Security at 36Blocks
+
+ Understand the access boundaries and configuration that protect your connected applications.
-
Last updated: January 2026
-
-
-
-
-
-
-
-
-
-
-
Infrastructure & Hosting
-
- 36Blocks runs on enterprise-grade cloud infrastructure with automatic failover, redundancy, and
- geographic distribution. All services are containerised and isolated to prevent cross-tenant
- data leakage.
-
-
-
+
+
+
Authentication configuration
+
+ Blocks support configurable login methods, provider settings, session expiry, and hCaptcha integration.
+ Availability and enforcement depend on the selected block and deployment. Configure the providers and
+ verify failure, expiry, and recovery behavior for your application before launch.
+
-
-
-
-
-
-
-
-
Data Encryption
-
- All data is encrypted both in transit and at rest. We use TLS 1.2+ for all network communication
- and AES-256 for data stored on disk. Passwords are hashed using bcrypt and are never stored in
- plaintext.
-
-
- @for (
- item of [
- 'TLS 1.2+ for all API and dashboard traffic',
- 'AES-256 encryption at rest',
- 'bcrypt password hashing',
- 'Encrypted database backups',
- ];
- track item
- ) {
-
-
- {{ item }}
-
- }
-
-
-
+
+
Identity and application access
+
+ Authentication identifies a user. It does not grant access to every application or organization. Roles
+ and permissions help model membership, while each connected product remains responsible for resource
+ ownership and business authorization on its backend.
+
+
+ Do not rely on a browser callback or hidden UI control to protect a resource. Your application must
+ verify authentication results, expiry, membership, and permissions before granting access.
+
-
-
-
-
-
-
-
-
Authentication Security
-
- 36Blocks implements industry best practices for authentication flows including OTP expiry, rate
- limiting, brute-force protection, and bot prevention via hCaptcha.
-
-
- @for (
- item of [
- 'hCaptcha bot protection on all public endpoints',
- 'OTP codes expire within 10 minutes',
- 'Rate limiting on login and OTP requests',
- 'Session tokens with configurable expiry',
- 'Secure, HttpOnly cookies where applicable',
- ];
- track item
- ) {
-
-
- {{ item }}
-
- }
-
-
-
+
+
Investigation and activity history
+
+ Request logs help investigate API failures. Sensitive-operation activity history records the operations
+ that have been instrumented, including Login as attempts. Coverage and availability depend on the
+ deployed version and permissions.
+
+
+ Confirm retention, operator access, and the required investigation coverage with the team. Use activity
+ records within their documented coverage.
+
-
-
-
-
-
-
-
-
- Access Control & Audit Logs
-
-
- Role-Based Access Control (RBAC) is built into the core of 36Blocks. Every action is logged with
- a full audit trail so you can see who did what, when. Logs are retained per your plan and are
- tamper-evident.
-
-
-
+
+
Deployment responsibilities
+
+ Transport protection, database encryption, backups, recovery, and availability depend on the hosting
+ environment. Confirm these controls and any service commitments for your deployment. Ask the team for
+ environment-specific availability and recovery commitments.
+
-
-
-
-
-
-
-
-
Responsible Disclosure
-
- If you discover a security vulnerability, please contact us at
- security@36blocks.com. We will respond within 48 hours and work with you to resolve the issue responsibly.
-
-
-
+
+
Report a security concern
+
+ Contact the team through the contact page.
+ Include the affected flow and safe reproduction steps. Do not include passwords, session tokens, or
+ personal data in your initial message.
+
diff --git a/apps/36-blocks/src/app/website/security/security.component.ts b/apps/36-blocks/src/app/website/security/security.component.ts
index 61aa948e..92383c7e 100644
--- a/apps/36-blocks/src/app/website/security/security.component.ts
+++ b/apps/36-blocks/src/app/website/security/security.component.ts
@@ -17,13 +17,13 @@ export class SecurityComponent implements OnInit {
this.metaService.updateTag({
name: 'description',
content:
- 'Learn how 36Blocks keeps your users safe with enterprise-grade encryption, hCaptcha bot protection, rate limiting, RBAC audit logs, and responsible disclosure.',
+ 'Understand authentication configuration, application access boundaries, and investigation coverage in 36Blocks.',
});
this.metaService.updateTag({ name: 'robots', content: 'index, follow' });
this.metaService.updateTag({ property: 'og:title', content: 'Security — 36Blocks' });
this.metaService.updateTag({
property: 'og:description',
- content: 'Enterprise-grade security built into every layer of 36Blocks.',
+ content: 'Authentication configuration and application security boundaries.',
});
this.metaService.updateTag({ property: 'og:type', content: 'website' });
}
diff --git a/apps/36-blocks/src/app/website/terms/terms.component.html b/apps/36-blocks/src/app/website/terms/terms.component.html
index dead6ff8..546ae106 100644
--- a/apps/36-blocks/src/app/website/terms/terms.component.html
+++ b/apps/36-blocks/src/app/website/terms/terms.component.html
@@ -38,9 +38,9 @@
1. Acceptance of Terms
- By accessing or using the 36Blocks platform, APIs, SDKs, or any related services (collectively, the
- "Service"), you agree to be bound by these Terms of Service ("Terms"). If you do not agree, do not use
- the Service.
+ By accessing or using the 36Blocks platform, APIs, browser widget, or any related services
+ (collectively, the "Service"), you agree to be bound by these Terms of Service ("Terms"). If you do not
+ agree, do not use the Service.