Skip to content

HappyBean 2.0 (new stack)

The next-generation platform. Python FastAPI backend, Next.js web frontend, Flutter mobile app.

R&D phase

There is currently one deployed environment (prod-ce). Developers work locally and deploy manually.

URLs

Production (Canada East)
Web app https://app-happybean-web-prod-ce.azurewebsites.net
API https://app-happybean-api-prod-ce.azurewebsites.net
API docs (Swagger) Disabled in production

A friendly custom domain (e.g. app.happybean.app or per-tenant subdomains) will replace the *.azurewebsites.net URL once cutover begins.

How login works

HappyBean 2.0 supports two ways to log in, and both end up at the same tenant-scoped app.

1. Direct via tenant subdomain (preferred for known tenants)

Go to https://<tenancy-name>.happybean.app (e.g. https://acme.happybean.app). Enter your email + password — you're logged straight into that tenant.

This works the same way as the legacy app (subdomain-per-tenant) — handy for bookmarks, customer-facing links, and impersonation.

2. Via the central login page (when you don't know which tenant)

Go to the central login URL (no subdomain).

  1. Enter your email address.
  2. The system looks up which tenants you belong to:
    • Zero tenants → "host" login (host admins only).
    • One tenant → straight in, redirected to <that-tenant>.happybean.app.
    • Multiple tenants → pick from a list, then redirected to the chosen <tenant>.happybean.app.
  3. Enter your password (or use Google / Microsoft social login).

Key difference from legacy

In the legacy app, the admin user on demo.happybean.app is a completely separate account from the admin user on admin.happybean.app.

In HappyBean 2.0, a single email address can belong to multiple tenants. You log in once with your email, pick the tenant, and you're in. No more juggling separate accounts per customer.

Azure resources

Resource group rg-happybean-prod-ce
Region Canada East
Web App Service app-happybean-web-prod-ce
API App Service app-happybean-api-prod-ce
Database Azure Database for PostgreSQL (Flexible Server)
Container registry GitHub Container Registry (ghcr.io)

Tech stack

  • Backend: Python 3.12, FastAPI, SQLAlchemy (async), Alembic, PostgreSQL 16
  • Frontend: Next.js 15 (App Router), React 19, TypeScript, TailwindCSS, HeroUI
  • Mobile: Flutter 3 / Dart 3
  • Auth: JWT (HS256) in httpOnly cookies; Google + Microsoft social login
  • Background jobs: Celery + Redis
  • Integrations: Xero, QuickBooks Online, SendGrid

→ See Accounts for login credentials.