# littlenet655-sketch/littlemuse architecture

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

- Interactive diagram: https://gitdiagram.com/littlenet655-sketch/littlemuse
- Repository: https://github.com/littlenet655-sketch/littlemuse

## Overview

LittleNet is a child-safe social and learning platform. A child signs in through the mobile app, explores age- and relationship-filtered content, and can post only through parent controls and server-side safety checks; media stays private until processing and moderation allow publication. Parent workflows manage account approval, relationships, screen time, and review, while learning breaks gate feed use. The map reflects the documented architecture and sampled route behavior; internal wiring for unsampled subsystems is shown only where the README supports it.

Main entry points: [`database/connection.py`](https://github.com/littlenet655-sketch/littlemuse/blob/main/database/connection.py) (PostgreSQL), [`mobile`](https://github.com/littlenet655-sketch/littlemuse/tree/main/mobile) (Mobile APIs), [`services/media_processor.py`](https://github.com/littlenet655-sketch/littlemuse/blob/main/services/media_processor.py) (Media processing), [`uploadPost/routes.py`](https://github.com/littlenet655-sketch/littlemuse/blob/main/uploadPost/routes.py) (Post and story upload)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Mobile experience"]
  node_mobile_app["Expo mobile app<br/>[App.tsx]"]
  node_mobile_api["Mobile APIs"]
end

subgraph group_accounts["Identity and oversight"]
  node_auth["Authentication<br/>[routes.py]"]
  node_parent_controls["Parent controls<br/>[routes.py]"]
  node_admin["Admin review<br/>[routes.py]"]
end

subgraph group_social["Social and learning"]
  node_child_social["Feed and discovery<br/>[routes.py]"]
  node_search["Content search<br/>[search_routes.py]"]
  node_messaging["Approved messaging<br/>[routes.py]"]
  node_quiz["Learning breaks<br/>[routes.py]"]
  node_upload["Post and story upload<br/>[routes.py]"]
end

subgraph group_safety_media["Safety and media"]
  node_safety["Safety moderation"]
  node_media_processing["Media processing<br/>[media_processor.py]"]
  node_publication["Publication lifecycle"]
  node_outbox["Durable media outbox<br/>[media_outbox.py]"]
end

subgraph group_platform["Platform services"]
  node_database[("PostgreSQL<br/>[connection.py]")]
  node_object_storage["Private media storage<br/>[object_storage.py]"]
end

node_child(("Child"))
node_parent(("Parent"))
node_moderator(("Admin moderator"))
node_modal_ai{{"Modal AI"}}
node_r2[("Cloudflare R2")]
node_email["Email delivery"]

node_child -->|"uses"| node_mobile_app
node_parent -->|"uses"| node_mobile_app
node_mobile_app -->|"HTTPS requests"| node_mobile_api
node_mobile_api -->|"authenticates"| node_auth
node_auth -->|"reads and writes"| node_database
node_auth -.->|"sends verification"| node_email
node_mobile_api -->|"serves social APIs"| node_child_social
node_mobile_api -->|"serves upload APIs"| node_upload
node_child_social -->|"reads and writes"| node_database
node_child_social -->|"searches content"| node_search
node_search -->|"queries visible content"| node_database
node_mobile_api -->|"serves chat APIs"| node_messaging
node_messaging -->|"reads and writes"| node_database
node_mobile_api -->|"serves quiz APIs"| node_quiz
node_quiz -->|"reads and writes"| node_database
node_parent -->|"manages child"| node_parent_controls
node_parent_controls -->|"reads and writes controls"| node_database
node_upload -->|"evaluates content"| node_safety
node_upload -->|"records post state"| node_database
node_upload -->|"queues media work"| node_outbox
node_outbox -->|"dispatches work"| node_media_processing
node_media_processing -->|"requests AI analysis"| node_modal_ai
node_media_processing -->|"moderates media"| node_safety
node_media_processing -->|"persists accepted media"| node_object_storage
node_object_storage -->|"stores objects"| node_r2
node_media_processing -->|"updates processing state"| node_database
node_publication -->|"updates publication state"| node_database
node_publication -->|"publishes approved media"| node_object_storage
node_moderator -->|"reviews safety items"| node_admin
node_admin -->|"resolves review state"| node_database

click node_mobile_app "https://github.com/littlenet655-sketch/littlemuse/blob/main/mobile_app/App.tsx"
click node_mobile_api "https://github.com/littlenet655-sketch/littlemuse/tree/main/mobile"
click node_auth "https://github.com/littlenet655-sketch/littlemuse/blob/main/auth/routes.py"
click node_parent_controls "https://github.com/littlenet655-sketch/littlemuse/blob/main/parent/routes.py"
click node_admin "https://github.com/littlenet655-sketch/littlemuse/blob/main/admin/routes.py"
click node_child_social "https://github.com/littlenet655-sketch/littlemuse/blob/main/child/routes.py"
click node_search "https://github.com/littlenet655-sketch/littlemuse/blob/main/child/search_routes.py"
click node_messaging "https://github.com/littlenet655-sketch/littlemuse/blob/main/childMessage/routes.py"
click node_quiz "https://github.com/littlenet655-sketch/littlemuse/blob/main/quiz/routes.py"
click node_upload "https://github.com/littlenet655-sketch/littlemuse/blob/main/uploadPost/routes.py"
click node_safety "https://github.com/littlenet655-sketch/littlemuse/tree/main/safety"
click node_media_processing "https://github.com/littlenet655-sketch/littlemuse/blob/main/services/media_processor.py"
click node_publication "https://github.com/littlenet655-sketch/littlemuse/blob/main/services/publication_lifecycle.py"
click node_outbox "https://github.com/littlenet655-sketch/littlemuse/blob/main/services/media_outbox.py"
click node_database "https://github.com/littlenet655-sketch/littlemuse/blob/main/database/connection.py"
click node_object_storage "https://github.com/littlenet655-sketch/littlemuse/blob/main/services/object_storage.py"

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_mobile_app,node_mobile_api toneBlue
class node_auth,node_parent_controls,node_admin,node_r2 toneAmber
class node_child_social,node_search,node_messaging,node_quiz,node_upload toneMint
class node_safety,node_media_processing,node_publication,node_outbox toneRose
class node_database,node_object_storage,node_child,node_parent,node_moderator,node_modal_ai,node_email toneIndigo
```

## Components

### Mobile experience

- [Expo mobile app](https://github.com/littlenet655-sketch/littlemuse/blob/main/mobile_app/App.tsx): `mobile_app/App.tsx`
- [Mobile APIs](https://github.com/littlenet655-sketch/littlemuse/tree/main/mobile): `mobile`

### Identity and oversight

- [Authentication](https://github.com/littlenet655-sketch/littlemuse/blob/main/auth/routes.py): `auth/routes.py`
- [Parent controls](https://github.com/littlenet655-sketch/littlemuse/blob/main/parent/routes.py): `parent/routes.py`
- [Admin review](https://github.com/littlenet655-sketch/littlemuse/blob/main/admin/routes.py): `admin/routes.py`

### Social and learning

- [Feed and discovery](https://github.com/littlenet655-sketch/littlemuse/blob/main/child/routes.py): `child/routes.py`
- [Content search](https://github.com/littlenet655-sketch/littlemuse/blob/main/child/search_routes.py): `child/search_routes.py`
- [Approved messaging](https://github.com/littlenet655-sketch/littlemuse/blob/main/childMessage/routes.py): `childMessage/routes.py`
- [Learning breaks](https://github.com/littlenet655-sketch/littlemuse/blob/main/quiz/routes.py): `quiz/routes.py`
- [Post and story upload](https://github.com/littlenet655-sketch/littlemuse/blob/main/uploadPost/routes.py): `uploadPost/routes.py`

### Safety and media

- [Safety moderation](https://github.com/littlenet655-sketch/littlemuse/tree/main/safety): `safety`
- [Media processing](https://github.com/littlenet655-sketch/littlemuse/blob/main/services/media_processor.py): `services/media_processor.py`
- [Publication lifecycle](https://github.com/littlenet655-sketch/littlemuse/blob/main/services/publication_lifecycle.py): `services/publication_lifecycle.py`
- [Durable media outbox](https://github.com/littlenet655-sketch/littlemuse/blob/main/services/media_outbox.py): `services/media_outbox.py`

### Platform services

- [PostgreSQL](https://github.com/littlenet655-sketch/littlemuse/blob/main/database/connection.py): `database/connection.py`
- [Private media storage](https://github.com/littlenet655-sketch/littlemuse/blob/main/services/object_storage.py): `services/object_storage.py`

### Other components

- **Child**
- **Parent**
- **Admin moderator**
- **Modal AI**
- **Cloudflare R2**
- **Email delivery**

## Connections

- Child → Expo mobile app: uses
- Parent → Expo mobile app: uses
- Expo mobile app → Mobile APIs: HTTPS requests
- Mobile APIs → Authentication: authenticates
- Authentication → PostgreSQL: reads and writes
- Authentication → Email delivery: sends verification
- Mobile APIs → Feed and discovery: serves social APIs
- Mobile APIs → Post and story upload: serves upload APIs
- Feed and discovery → PostgreSQL: reads and writes
- Feed and discovery → Content search: searches content
- Content search → PostgreSQL: queries visible content
- Mobile APIs → Approved messaging: serves chat APIs
- Approved messaging → PostgreSQL: reads and writes
- Mobile APIs → Learning breaks: serves quiz APIs
- Learning breaks → PostgreSQL: reads and writes
- Parent → Parent controls: manages child
- Parent controls → PostgreSQL: reads and writes controls
- Post and story upload → Safety moderation: evaluates content
- Post and story upload → PostgreSQL: records post state
- Post and story upload → Durable media outbox: queues media work
- Durable media outbox → Media processing: dispatches work
- Media processing → Modal AI: requests AI analysis
- Media processing → Safety moderation: moderates media
- Media processing → Private media storage: persists accepted media
- Private media storage → Cloudflare R2: stores objects
- Media processing → PostgreSQL: updates processing state
- Publication lifecycle → PostgreSQL: updates publication state
- Publication lifecycle → Private media storage: publishes approved media
- Admin moderator → Admin review: reviews safety items
- Admin review → PostgreSQL: resolves review state
