Enterprise project management with Okta SSO, SCIM provisioning, and Microsoft Teams integration — deployment-ready for Azure.
Azure East US pricing for 2,000 licensed users. Infrastructure sized for ~600-800 concurrent sessions at peak (30-40% daily active).
| Component | Configuration | Monthly |
|---|---|---|
| PostgreSQL Flexible Server | B_Standard_B2s (2 vCPU, 4GB RAM) 64GB storage | $58 |
| Container Apps | 1 vCPU / 2GB RAM 1-3 replicas, auto-scaling | $86 |
| Container Registry | Basic SKU 10GB included | $5 |
| Key Vault | Standard tier Secrets access | $1 |
| Virtual Network | VNet + private subnets | $0 |
| Log Analytics | ~5GB/mo ingestion Free tier | $0 |
| DNS / TLS | Custom domain + managed cert | $1 |
| Bandwidth (egress) | ~500GB/mo at 40% daily active | $43 |
| Terraform State | Blob storage | $1 |
| Production Total | ~$195/mo | |
Not required to launch. The application already ships with Okta SSO, RBAC, encrypted transport, security headers, private networking, Key Vault, and a full audit trail. These are additional layers for specific risk profiles.
A content delivery network that sits in front of the application and inspects every incoming request before it reaches the server. Includes a Web Application Firewall that blocks known attack patterns (SQL injection, cross-site scripting, bot abuse, DDoS floods).
A small in-memory database used to coordinate rate limiting across multiple application replicas. Rate limiting prevents any single caller from flooding an API endpoint with requests.
Scans container images for known software vulnerabilities (CVEs) before and after deployment. Alerts you if a dependency has a published security issue.
| Add-On | Monthly | Required? |
|---|---|---|
| Azure Front Door + WAF | $49 | No |
| Azure Cache for Redis | $16 | No |
| Azure Defender for Cloud | $15 | No |
| Production + all add-ons | ~$275/mo |
ProjectForge ships with a comprehensive security stack. These are built in — not add-ons.
Two items to address before go-live. Neither requires additional Azure services or spend.
The demo used a simplified login that bypasses Okta. The route exists in the codebase, gated by an environment variable (DEMO_MODE). We remove it entirely from the production build so it cannot be accidentally enabled.
Azure PostgreSQL has 7-day automatic backups configured. We write a one-page runbook: how to restore, expected recovery time, who to contact. Optionally increase retention to 35 days at no extra cost.
~2 hours $0Longer-term items that do not affect launch readiness.
Free with existing Log Analytics. Configure after launch once baseline traffic patterns are established. Alerts on failed auth, anomalous access.
Current CSP allows inline scripts/styles (standard). A nonce-based CSP is stricter. Only relevant for non-Teams routes — Teams requires inline for iframe compatibility.
Azure encrypts database storage at rest by default. Customer-managed keys only required if your compliance policy explicitly mandates them.
Standard practice before broad exposure. Typically $5K-$15K one-time. Schedule based on your security team's cadence.
5 phases across 2-3 business days. All infrastructure provisioned via Terraform — no manual Azure Portal clicks.
Resource group + storage account for Terraform remote state.
Copy terraform.tfvars.example and populate with production values:
Provisions VNet, PostgreSQL, Container Registry, Key Vault, Container Apps, and Log Analytics. ~15 minutes.
Multi-stage build (Node 20 Alpine), pushed to Azure Container Registry.
Prisma migrations against the Azure PostgreSQL instance.
https://projectforge.yourdomain.com/api/saml/callbackhttps://projectforge.yourdomain.comhttps://projectforge.yourdomain.com/api/scim/v2https://projectforge.yourdomain.com/api/teams/messagesUpdate teams-manifest/manifest.json with production URLs and Bot App ID. Upload to Teams Admin Center or sideload for testing.
Add hostname to Container App, create CNAME record, bind managed certificate.
Full technology stack and Azure infrastructure layout.
Authentication: User → Okta SAML → ProjectForge validates assertion → JWT session created
Provisioning: Okta SCIM → automatic account creation and role assignment
Application: Container Apps (auto-scaling 1-3 replicas) → PostgreSQL over private VNet
Notifications: Bot Framework pushes Adaptive Cards to linked Teams users
Secrets: All credentials stored in Azure Key Vault, injected at container runtime