System design

One ecosystem. Clear service boundaries.

GitHub remains the source of truth. Google services host and run the application. Auth0 identifies users. The API makes every sensitive authorization decision.

This is the architecture proposal from Lesson 6. The frontend later moved to Cloudflare Pages; Lesson 9 describes the deployed API milestone.

Selected stack

ResponsibilityServiceReason
SourceGitHubVersion control, reviews, tests, deployment workflows
FrontendFirebase HostingFast static hosting, HTTPS, custom domain, preview deployments
IdentityAuth0Universal Login and role-based identity
BackendCloud Run + FastAPIServer-side token validation and business rules
DataFirestoreServerless document database integrated with Google Cloud
FilesPrivate Cloud StorageProtected PDFs and uploads through short-lived access
SecretsSecret ManagerNo secrets in repositories or browser code

Protected request flow

1. User signs in
2. Auth0 issues token
3. Browser calls API
4. API verifies role
5. Data is returned
Security boundary: hiding a button is user-interface behavior. The Cloud Run API must independently verify the token, role, ownership, and requested operation.

Repository model

RepositoryVisibilityPurpose
Become-SWEPublicLessons, PDFs, tutorials, mistakes, and learning record
swe-tickerbellPublicFrontend HTML, CSS, JavaScript, images, and safe configuration
swe-backendPrivatePython API, authorization, models, tests, and migrations

Non-negotiable rules

  • No Auth0 client secret, API key, service-account key, password, or customer data in GitHub.
  • Use GitHub-to-Google workload identity rather than long-lived deployment keys.
  • Give the Cloud Run service account only the Firestore and Storage permissions it needs.
  • Store protected PDFs in a private bucket, never in the public frontend repository.
  • Record admin changes in an audit log.

Implementation phases

  1. Run this frontend locally and review the page structure.
  2. Create Auth0 tenant and connect login/logout.
  3. Deploy frontend preview to Firebase Hosting.
  4. Create private FastAPI backend and one protected profile endpoint.
  5. Add Firestore learner profile and progress documents.
  6. Add team content operations and admin analytics.

Contact · Budapest

Let’s build a conversation.

Collaborations, partnerships, or a question about the journey.

info@tickerbell.biz

Népfürdő u. 22B · 1138 Budapest, Hungary
Monday–Friday, 9:00–17:00 CET / CEST

Find our office