# ulquiorraciffer/ceromailer architecture

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

- Interactive diagram: https://gitdiagram.com/ulquiorraciffer/ceromailer
- Repository: https://github.com/ulquiorraciffer/ceromailer

## Overview

CeroMailer sends files from an institute computer to a recipient by email, through either a webpage or a CLI. Both clients obtain an upload session, upload files directly to Supabase Storage, and submit message details to the serverless send endpoint. That endpoint fetches the session’s files, checks limits and logs the send in Supabase, delivers the email through Gmail SMTP, then removes temporary uploads. The README documents the webpage workflow and safeguards; its source was not sampled, so frontend wiring is shown only at that documented level.

Main entry points: [`api/send.py`](https://github.com/ulquiorraciffer/ceromailer/blob/main/api/send.py) (Send API), [`index.html`](https://github.com/ulquiorraciffer/ceromailer/blob/main/index.html) (Webpage), [`cli.py`](https://github.com/ulquiorraciffer/ceromailer/blob/main/cli.py) (CLI), [`api/create-session.py`](https://github.com/ulquiorraciffer/ceromailer/blob/main/api/create-session.py) (Session API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["User clients"]
  node_web["Webpage<br/>[index.html]"]
  node_cli["CLI<br/>[cli.py]"]
end

subgraph group_api["Serverless API"]
  node_session["Session API<br/>[create-session.py]"]
  node_send["Send API<br/>[send.py]"]
end

subgraph group_supabase["Supabase services"]
  node_storage[("Supabase Storage")]
  node_sendlog[("Send limits and log")]
end

subgraph group_delivery["Email delivery"]
  node_gmail["Gmail SMTP"]
end

node_user(("Sender"))

node_user -->|"uses"| node_web
node_user -->|"uses"| node_cli
node_web -.->|"requests session"| node_session
node_cli -->|"requests session"| node_session
node_session -.->|"returns session ID"| node_web
node_session -->|"returns session ID"| node_cli
node_web -.->|"uploads files"| node_storage
node_cli -->|"uploads files"| node_storage
node_web -.->|"submits message"| node_send
node_cli -->|"submits message"| node_send
node_send -->|"lists and downloads"| node_storage
node_send -->|"checks limits and logs"| node_sendlog
node_send -->|"sends email"| node_gmail
node_send -->|"deletes temporary files"| node_storage

click node_web "https://github.com/ulquiorraciffer/ceromailer/blob/main/index.html"
click node_cli "https://github.com/ulquiorraciffer/ceromailer/blob/main/cli.py"
click node_session "https://github.com/ulquiorraciffer/ceromailer/blob/main/api/create-session.py"
click node_send "https://github.com/ulquiorraciffer/ceromailer/blob/main/api/send.py"
click node_sendlog "https://github.com/ulquiorraciffer/ceromailer/blob/main/supabase-schema.sql"

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_web,node_cli toneBlue
class node_session,node_send toneAmber
class node_storage,node_sendlog toneMint
class node_gmail toneRose
class node_user toneIndigo
```

## Components

### User clients

- [Webpage](https://github.com/ulquiorraciffer/ceromailer/blob/main/index.html): `index.html`
- [CLI](https://github.com/ulquiorraciffer/ceromailer/blob/main/cli.py): `cli.py`

### Serverless API

- [Session API](https://github.com/ulquiorraciffer/ceromailer/blob/main/api/create-session.py): `api/create-session.py`
- [Send API](https://github.com/ulquiorraciffer/ceromailer/blob/main/api/send.py): `api/send.py`

### Supabase services

- **Supabase Storage**
- [Send limits and log](https://github.com/ulquiorraciffer/ceromailer/blob/main/supabase-schema.sql): `supabase-schema.sql`

### Email delivery

- **Gmail SMTP**

### Other components

- **Sender**

## Connections

- Sender → Webpage: uses
- Sender → CLI: uses
- Webpage → Session API: requests session
- CLI → Session API: requests session
- Session API → Webpage: returns session ID
- Session API → CLI: returns session ID
- Webpage → Supabase Storage: uploads files
- CLI → Supabase Storage: uploads files
- Webpage → Send API: submits message
- CLI → Send API: submits message
- Send API → Supabase Storage: lists and downloads
- Send API → Send limits and log: checks limits and logs
- Send API → Gmail SMTP: sends email
- Send API → Supabase Storage: deletes temporary files
