# ycsarahli/face-cloak-app architecture

> Architecture diagram of the GitHub repository ycsarahli/face-cloak-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ycsarahli/face-cloak-app
- Repository: https://github.com/ycsarahli/face-cloak-app

## Overview

Face Cloak App is a server-rendered web frontend for privacy controls over detected faces in images; the API owns persistence and authorization. A browser user logs in or registers, browses images, and can upload images or manage face assignments. The app also supports Google SSO, account management, image history, and secure sessions. The graph reflects the sampled routing and session code plus README-documented capabilities; unsampled controller and service internals limit confidence about some individual call paths.

Main entry points: [`app/controllers/app.rb`](https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/app.rb) (Web app routes), [`app/controllers/images.rb`](https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/images.rb) (Image routes), [`app/controllers/auth.rb`](https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/auth.rb) (Auth routes), [`app/services`](https://github.com/ycsarahli/face-cloak-app/tree/main/app/services) (Image services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web routing"]
  node_app["Web app routes<br/>[app.rb]"]
  node_security_routes["Security headers<br/>[security.rb]"]
end

subgraph group_identity["Identity and security"]
  node_auth_routes["Auth routes<br/>[auth.rb]"]
  node_auth_forms["Auth validation<br/>[auth.rb]"]
  node_form_base["Form helpers<br/>[form_base.rb]"]
  node_current_session["Current session<br/>[current_session.rb]"]
  node_secure_session["Secure session<br/>[secure_session.rb]"]
  node_secure_message["Message encryption<br/>[secure_message.rb]"]
  node_google_client["Google OAuth client"]
  node_auth_services["Authentication services"]
end

subgraph group_image["Image workflows"]
  node_image_routes["Image routes<br/>[images.rb]"]
  node_assignment_form["Assignment validation<br/>[face_assignment.rb]"]
  node_image_services["Image services"]
  node_image_models["Image and face data<br/>[image.rb]"]
  node_image_logs["Image history<br/>[image_log.rb]"]
  node_image_helpers["Image presentation helpers"]
  node_face_helpers["Face assignment helpers"]
end

subgraph group_account["Account workflows"]
  node_account_routes["Account routes<br/>[account.rb]"]
  node_account_services["Account services"]
end

subgraph group_integration["API integration"]
  node_signed_message["Request signing<br/>[signed_message.rb]"]
  node_api_client["API client<br/>[api_client.rb]"]
end

node_browser(("Browser user"))
node_api{{"Face Cloak API"}}
node_google{{"Google identity"}}
node_session_store[("Rack session store")]

node_browser -->|"requests pages"| node_app
node_app -->|"dispatches routes"| node_auth_routes
node_app -->|"dispatches routes"| node_account_routes
node_app -->|"dispatches routes"| node_image_routes
node_app -->|"configures headers"| node_security_routes
node_auth_routes -->|"validates credentials"| node_auth_forms
node_auth_forms -->|"uses shared rules"| node_form_base
node_image_routes -.->|"validates assignment"| node_assignment_form
node_auth_routes -->|"sets account"| node_current_session
node_app -->|"reads account"| node_current_session
node_current_session -.->|"stores securely"| node_secure_session
node_secure_session -->|"encrypts values"| node_secure_message
node_auth_routes -->|"starts OAuth"| node_google_client
node_google_client -->|"exchanges tokens"| node_google
node_auth_routes -->|"authenticates account"| node_auth_services
node_auth_services -.->|"sends requests"| node_api_client
node_auth_services -->|"signs requests"| node_signed_message
node_account_routes -.->|"manages accounts"| node_account_services
node_image_routes -.->|"handles images"| node_image_services
node_app -->|"lists images"| node_image_services
node_image_services -.->|"sends requests"| node_api_client
node_image_services -.->|"returns image data"| node_image_models
node_image_routes -.->|"shows history"| node_image_logs
node_image_routes -.->|"renders image details"| node_image_helpers
node_image_routes -.->|"renders face controls"| node_face_helpers
node_api_client -->|"calls API"| node_api
node_app -->|"uses Rack sessions"| node_session_store

click node_app "https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/app.rb"
click node_auth_routes "https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/auth.rb"
click node_account_routes "https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/account.rb"
click node_image_routes "https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/images.rb"
click node_security_routes "https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/security.rb"
click node_auth_forms "https://github.com/ycsarahli/face-cloak-app/blob/main/app/forms/auth.rb"
click node_assignment_form "https://github.com/ycsarahli/face-cloak-app/blob/main/app/forms/face_assignment.rb"
click node_form_base "https://github.com/ycsarahli/face-cloak-app/blob/main/app/forms/form_base.rb"
click node_current_session "https://github.com/ycsarahli/face-cloak-app/blob/main/app/models/current_session.rb"
click node_secure_session "https://github.com/ycsarahli/face-cloak-app/blob/main/app/lib/secure_session.rb"
click node_secure_message "https://github.com/ycsarahli/face-cloak-app/blob/main/app/lib/secure_message.rb"
click node_signed_message "https://github.com/ycsarahli/face-cloak-app/blob/main/app/lib/signed_message.rb"
click node_google_client "https://github.com/ycsarahli/face-cloak-app/blob/main/app/services/google_oauth_client.rb"
click node_api_client "https://github.com/ycsarahli/face-cloak-app/blob/main/app/services/api_client.rb"
click node_auth_services "https://github.com/ycsarahli/face-cloak-app/tree/main/app/services"
click node_account_services "https://github.com/ycsarahli/face-cloak-app/tree/main/app/services"
click node_image_services "https://github.com/ycsarahli/face-cloak-app/tree/main/app/services"
click node_image_models "https://github.com/ycsarahli/face-cloak-app/blob/main/app/models/image.rb"
click node_image_logs "https://github.com/ycsarahli/face-cloak-app/blob/main/app/models/image_log.rb"
click node_image_helpers "https://github.com/ycsarahli/face-cloak-app/tree/main/app/lib"
click node_face_helpers "https://github.com/ycsarahli/face-cloak-app/blob/main/app/lib/face_assignment_helper.rb"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_security_routes,node_browser toneBlue
class node_auth_routes,node_auth_forms,node_form_base,node_current_session,node_secure_session,node_secure_message,node_google_client,node_auth_services,node_session_store toneAmber
class node_image_routes,node_assignment_form,node_image_services,node_image_models,node_image_logs,node_image_helpers,node_face_helpers,node_api toneMint
class node_account_routes,node_account_services toneRose
class node_signed_message,node_api_client,node_google toneIndigo
```

## Components

### Web routing

- [Web app routes](https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/app.rb): `app/controllers/app.rb`
- [Security headers](https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/security.rb): `app/controllers/security.rb`

### Identity and security

- [Auth routes](https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/auth.rb): `app/controllers/auth.rb`
- [Auth validation](https://github.com/ycsarahli/face-cloak-app/blob/main/app/forms/auth.rb): `app/forms/auth.rb`
- [Form helpers](https://github.com/ycsarahli/face-cloak-app/blob/main/app/forms/form_base.rb): `app/forms/form_base.rb`
- [Current session](https://github.com/ycsarahli/face-cloak-app/blob/main/app/models/current_session.rb): `app/models/current_session.rb`
- [Secure session](https://github.com/ycsarahli/face-cloak-app/blob/main/app/lib/secure_session.rb): `app/lib/secure_session.rb`
- [Message encryption](https://github.com/ycsarahli/face-cloak-app/blob/main/app/lib/secure_message.rb): `app/lib/secure_message.rb`
- [Google OAuth client](https://github.com/ycsarahli/face-cloak-app/blob/main/app/services/google_oauth_client.rb): `app/services/google_oauth_client.rb`
- [Authentication services](https://github.com/ycsarahli/face-cloak-app/tree/main/app/services): `app/services`

### Image workflows

- [Image routes](https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/images.rb): `app/controllers/images.rb`
- [Assignment validation](https://github.com/ycsarahli/face-cloak-app/blob/main/app/forms/face_assignment.rb): `app/forms/face_assignment.rb`
- [Image services](https://github.com/ycsarahli/face-cloak-app/tree/main/app/services): `app/services`
- [Image and face data](https://github.com/ycsarahli/face-cloak-app/blob/main/app/models/image.rb): `app/models/image.rb`
- [Image history](https://github.com/ycsarahli/face-cloak-app/blob/main/app/models/image_log.rb): `app/models/image_log.rb`
- [Image presentation helpers](https://github.com/ycsarahli/face-cloak-app/tree/main/app/lib): `app/lib`
- [Face assignment helpers](https://github.com/ycsarahli/face-cloak-app/blob/main/app/lib/face_assignment_helper.rb): `app/lib/face_assignment_helper.rb`

### Account workflows

- [Account routes](https://github.com/ycsarahli/face-cloak-app/blob/main/app/controllers/account.rb): `app/controllers/account.rb`
- [Account services](https://github.com/ycsarahli/face-cloak-app/tree/main/app/services): `app/services`

### API integration

- [Request signing](https://github.com/ycsarahli/face-cloak-app/blob/main/app/lib/signed_message.rb): `app/lib/signed_message.rb`
- [API client](https://github.com/ycsarahli/face-cloak-app/blob/main/app/services/api_client.rb): `app/services/api_client.rb`

### Other components

- **Browser user**
- **Face Cloak API**
- **Google identity**
- **Rack session store**

## Connections

- Browser user → Web app routes: requests pages
- Web app routes → Auth routes: dispatches routes (evidence: `app/controllers/auth.rb`)
- Web app routes → Account routes: dispatches routes (evidence: `app/controllers/account.rb`)
- Web app routes → Image routes: dispatches routes (evidence: `app/controllers/images.rb`)
- Web app routes → Security headers: configures headers (evidence: `app/controllers/security.rb`)
- Auth routes → Auth validation: validates credentials (evidence: `app/controllers/auth.rb`)
- Auth validation → Form helpers: uses shared rules (evidence: `app/forms/auth.rb`)
- Image routes → Assignment validation: validates assignment
- Auth routes → Current session: sets account (evidence: `app/controllers/auth.rb`)
- Web app routes → Current session: reads account (evidence: `app/controllers/app.rb`)
- Current session → Secure session: stores securely
- Secure session → Message encryption: encrypts values (evidence: `app/lib/secure_session.rb`)
- Auth routes → Google OAuth client: starts OAuth (evidence: `app/controllers/auth.rb`)
- Google OAuth client → Google identity: exchanges tokens
- Auth routes → Authentication services: authenticates account (evidence: `app/controllers/auth.rb`)
- Authentication services → API client: sends requests
- Authentication services → Request signing: signs requests
- Account routes → Account services: manages accounts
- Image routes → Image services: handles images
- Web app routes → Image services: lists images (evidence: `app/controllers/app.rb`)
- Image services → API client: sends requests
- Image services → Image and face data: returns image data
- Image routes → Image history: shows history
- Image routes → Image presentation helpers: renders image details
- Image routes → Face assignment helpers: renders face controls
- API client → Face Cloak API: calls API
- Web app routes → Rack session store: uses Rack sessions
