# jcarlosrt/jcleaner architecture

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

- Interactive diagram: https://gitdiagram.com/jcarlosrt/jcleaner
- Repository: https://github.com/jcarlosrt/jcleaner

## Overview

JCLEANER is an offline Android storage and device-health cleaner. The user enters through the Compose app, chooses a tool, reviews measured files or device data, and confirms cleanup or contact changes; deleted files can be restored from the seven-day trash. The graph preserves the documented chats, blurry-photo, unused-app, space-map, cache, battery, history, and reminder capabilities. Several screens and integrations are represented from the README and SOURCE INDEX rather than inspected source, so those links cite documentation where applicable; no external network service is involved.

Main entry points: [`app/src/main/java/cl/jcleaner/data/Motor.kt`](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Motor.kt) (Task coordinator), [`app/src/main/java/cl/jcleaner/ui/App.kt`](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/App.kt) (Compose navigation), [`app/src/main/java/cl/jcleaner/data/Escaner.kt`](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Escaner.kt) (File scanner), [`app/src/main/java/cl/jcleaner/data/Trabajos.kt`](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Trabajos.kt) (Scheduled jobs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App shell"]
  node_activity["Android activity<br/>[MainActivity.kt]"]
  node_navigation["Compose navigation<br/>[App.kt]"]
  node_home["Home dashboard<br/>[PantallaInicio.kt]"]
  node_cleanui["Junk cleanup<br/>[PantallaBasura.kt]"]
  node_chatsui["Chat files<br/>[PantallaChats.kt]"]
  node_dupsui["Duplicate photos"]
  node_cacheui["App cache<br/>[PantallaCache.kt]"]
  node_trashui["Trash manager"]
  node_spaceui["Space browser<br/>[PantallaEspacio.kt]"]
  node_healthui["Health screen<br/>[PantallaSalud.kt]"]
  node_contactsui["Contact tools"]
  node_filesui["File categories"]
end

subgraph group_cleanup["Storage cleanup"]
  node_scanner["File scanner<br/>[Escaner.kt]"]
  node_duplicates["Duplicate analysis<br/>[Duplicados.kt]"]
  node_trash[("Trash storage<br/>[Papelera.kt]")]
end

subgraph group_device["Device insights"]
  node_cache["App measurements<br/>[CacheApps.kt]"]
  node_battery["Device health<br/>[Salud.kt]"]
end

subgraph group_people["Contacts"]
  node_contacts["Contact analysis<br/>[Contactos.kt]"]
end

subgraph group_runtime["Runtime services"]
  node_engine["Task coordinator<br/>[Motor.kt]"]
  node_models["Domain models<br/>[Modelos.kt]"]
  node_jobs["Scheduled jobs<br/>[Trabajos.kt]"]
end

node_user(("Phone user"))
node_android["Android system"]

node_user -->|"opens app"| node_activity
node_activity -->|"initializes"| node_engine
node_activity -->|"schedules"| node_jobs
node_activity -->|"shows UI"| node_navigation
node_navigation -->|"routes to"| node_home
node_navigation -->|"routes to"| node_cleanui
node_navigation -->|"routes to"| node_chatsui
node_navigation -->|"routes to"| node_dupsui
node_navigation -->|"routes to"| node_cacheui
node_navigation -->|"routes to"| node_trashui
node_navigation -->|"routes to"| node_spaceui
node_navigation -->|"routes to"| node_healthui
node_navigation -->|"routes to"| node_contactsui
node_navigation -->|"routes to"| node_filesui
node_home -->|"requests data"| node_engine
node_home -->|"reads battery"| node_battery
node_cleanui -->|"requests cleanup"| node_engine
node_chatsui -->|"requests scan"| node_engine
node_dupsui -->|"requests analysis"| node_engine
node_cacheui -->|"loads apps"| node_engine
node_trashui -->|"requests actions"| node_engine
node_spaceui -->|"requests map"| node_engine
node_healthui -->|"reads health"| node_battery
node_contactsui -->|"runs contact tasks"| node_contacts
node_engine -->|"dispatches scans"| node_scanner
node_engine -->|"dispatches analysis"| node_duplicates
node_engine -->|"loads measurements"| node_cache
node_engine -->|"manages items"| node_trash
node_scanner -->|"reads storage"| node_android
node_duplicates -->|"uses file records"| node_scanner
node_trash -->|"uses file records"| node_scanner
node_contacts -->|"reads contacts"| node_android
node_cache -->|"queries app stats"| node_android
node_battery -->|"reads device metrics"| node_android
node_jobs -.->|"sends reminders"| node_android
node_jobs -->|"records history"| node_battery
node_jobs -->|"purges expired"| node_trash
node_jobs -->|"checks junk"| node_scanner
node_models -.->|"defines task data"| node_engine
node_filesui -.->|"browses categories"| node_scanner

click node_activity "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/MainActivity.kt"
click node_navigation "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/App.kt"
click node_home "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaInicio.kt"
click node_cleanui "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaBasura.kt"
click node_chatsui "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaChats.kt"
click node_dupsui "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaDuplicados.kt"
click node_cacheui "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaCache.kt"
click node_trashui "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaPapelera.kt"
click node_spaceui "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaEspacio.kt"
click node_healthui "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaSalud.kt"
click node_contactsui "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaContactos.kt"
click node_filesui "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaArchivos.kt"
click node_engine "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Motor.kt"
click node_models "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Modelos.kt"
click node_scanner "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Escaner.kt"
click node_duplicates "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Duplicados.kt"
click node_trash "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Papelera.kt"
click node_cache "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/CacheApps.kt"
click node_battery "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Salud.kt"
click node_contacts "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Contactos.kt"
click node_jobs "https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Trabajos.kt"

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_activity,node_navigation,node_home,node_cleanui,node_chatsui,node_dupsui,node_cacheui,node_trashui,node_spaceui,node_healthui,node_contactsui,node_filesui,node_user toneBlue
class node_scanner,node_duplicates,node_trash toneAmber
class node_cache,node_battery toneMint
class node_contacts toneRose
class node_engine,node_models,node_jobs,node_android toneIndigo
```

## Components

### App shell

- [Android activity](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/MainActivity.kt): `app/src/main/java/cl/jcleaner/MainActivity.kt`
- [Compose navigation](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/App.kt): `app/src/main/java/cl/jcleaner/ui/App.kt`
- [Home dashboard](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaInicio.kt): `app/src/main/java/cl/jcleaner/ui/PantallaInicio.kt`
- [Junk cleanup](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaBasura.kt): `app/src/main/java/cl/jcleaner/ui/PantallaBasura.kt`
- [Chat files](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaChats.kt): `app/src/main/java/cl/jcleaner/ui/PantallaChats.kt`
- [Duplicate photos](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaDuplicados.kt): `app/src/main/java/cl/jcleaner/ui/PantallaDuplicados.kt`
- [App cache](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaCache.kt): `app/src/main/java/cl/jcleaner/ui/PantallaCache.kt`
- [Trash manager](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaPapelera.kt): `app/src/main/java/cl/jcleaner/ui/PantallaPapelera.kt`
- [Space browser](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaEspacio.kt): `app/src/main/java/cl/jcleaner/ui/PantallaEspacio.kt`
- [Health screen](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaSalud.kt): `app/src/main/java/cl/jcleaner/ui/PantallaSalud.kt`
- [Contact tools](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaContactos.kt): `app/src/main/java/cl/jcleaner/ui/PantallaContactos.kt`
- [File categories](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/ui/PantallaArchivos.kt): `app/src/main/java/cl/jcleaner/ui/PantallaArchivos.kt`

### Storage cleanup

- [File scanner](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Escaner.kt): `app/src/main/java/cl/jcleaner/data/Escaner.kt`
- [Duplicate analysis](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Duplicados.kt): `app/src/main/java/cl/jcleaner/data/Duplicados.kt`
- [Trash storage](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Papelera.kt): `app/src/main/java/cl/jcleaner/data/Papelera.kt`

### Device insights

- [App measurements](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/CacheApps.kt): `app/src/main/java/cl/jcleaner/data/CacheApps.kt`
- [Device health](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Salud.kt): `app/src/main/java/cl/jcleaner/data/Salud.kt`

### Contacts

- [Contact analysis](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Contactos.kt): `app/src/main/java/cl/jcleaner/data/Contactos.kt`

### Runtime services

- [Task coordinator](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Motor.kt): `app/src/main/java/cl/jcleaner/data/Motor.kt`
- [Domain models](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Modelos.kt): `app/src/main/java/cl/jcleaner/data/Modelos.kt`
- [Scheduled jobs](https://github.com/jcarlosrt/jcleaner/blob/main/app/src/main/java/cl/jcleaner/data/Trabajos.kt): `app/src/main/java/cl/jcleaner/data/Trabajos.kt`

### Other components

- **Phone user**
- **Android system**

## Connections

- Phone user → Android activity: opens app (evidence: `app/src/main/java/cl/jcleaner/MainActivity.kt`)
- Android activity → Task coordinator: initializes (evidence: `app/src/main/java/cl/jcleaner/MainActivity.kt`)
- Android activity → Scheduled jobs: schedules (evidence: `app/src/main/java/cl/jcleaner/MainActivity.kt`)
- Android activity → Compose navigation: shows UI (evidence: `app/src/main/java/cl/jcleaner/MainActivity.kt`)
- Compose navigation → Home dashboard: routes to (evidence: `app/src/main/java/cl/jcleaner/ui/App.kt`)
- Compose navigation → Junk cleanup: routes to (evidence: `app/src/main/java/cl/jcleaner/ui/App.kt`)
- Compose navigation → Chat files: routes to (evidence: `app/src/main/java/cl/jcleaner/ui/App.kt`)
- Compose navigation → Duplicate photos: routes to (evidence: `app/src/main/java/cl/jcleaner/ui/App.kt`)
- Compose navigation → App cache: routes to (evidence: `app/src/main/java/cl/jcleaner/ui/App.kt`)
- Compose navigation → Trash manager: routes to (evidence: `app/src/main/java/cl/jcleaner/ui/App.kt`)
- Compose navigation → Space browser: routes to (evidence: `app/src/main/java/cl/jcleaner/ui/App.kt`)
- Compose navigation → Health screen: routes to (evidence: `app/src/main/java/cl/jcleaner/ui/App.kt`)
- Compose navigation → Contact tools: routes to (evidence: `app/src/main/java/cl/jcleaner/ui/App.kt`)
- Compose navigation → File categories: routes to (evidence: `app/src/main/java/cl/jcleaner/ui/App.kt`)
- Home dashboard → Task coordinator: requests data (evidence: `app/src/main/java/cl/jcleaner/ui/PantallaInicio.kt`)
- Home dashboard → Device health: reads battery (evidence: `app/src/main/java/cl/jcleaner/ui/PantallaInicio.kt`)
- Junk cleanup → Task coordinator: requests cleanup (evidence: `app/src/main/java/cl/jcleaner/ui/PantallaBasura.kt`)
- Chat files → Task coordinator: requests scan (evidence: `app/src/main/java/cl/jcleaner/ui/PantallaChats.kt`)
- Duplicate photos → Task coordinator: requests analysis (evidence: `app/src/main/java/cl/jcleaner/ui/PantallaDuplicados.kt`)
- App cache → Task coordinator: loads apps (evidence: `app/src/main/java/cl/jcleaner/ui/PantallaCache.kt`)
- Trash manager → Task coordinator: requests actions (evidence: `app/src/main/java/cl/jcleaner/ui/PantallaPapelera.kt`)
- Space browser → Task coordinator: requests map (evidence: `app/src/main/java/cl/jcleaner/ui/PantallaEspacio.kt`)
- Health screen → Device health: reads health (evidence: `app/src/main/java/cl/jcleaner/ui/PantallaSalud.kt`)
- Contact tools → Contact analysis: runs contact tasks (evidence: `app/src/main/java/cl/jcleaner/ui/PantallaContactos.kt`)
- Task coordinator → File scanner: dispatches scans (evidence: `app/src/main/java/cl/jcleaner/data/Motor.kt`)
- Task coordinator → Duplicate analysis: dispatches analysis (evidence: `app/src/main/java/cl/jcleaner/data/Motor.kt`)
- Task coordinator → App measurements: loads measurements (evidence: `app/src/main/java/cl/jcleaner/data/Motor.kt`)
- Task coordinator → Trash storage: manages items (evidence: `app/src/main/java/cl/jcleaner/data/Motor.kt`)
- File scanner → Android system: reads storage (evidence: `app/src/main/java/cl/jcleaner/data/Escaner.kt`)
- Duplicate analysis → File scanner: uses file records (evidence: `app/src/main/java/cl/jcleaner/data/Duplicados.kt`)
- Trash storage → File scanner: uses file records (evidence: `app/src/main/java/cl/jcleaner/data/Papelera.kt`)
- Contact analysis → Android system: reads contacts
- App measurements → Android system: queries app stats (evidence: `README.md`)
- Device health → Android system: reads device metrics (evidence: `README.md`)
- Scheduled jobs → Android system: sends reminders (evidence: `README.md`)
- Scheduled jobs → Device health: records history (evidence: `app/src/main/java/cl/jcleaner/data/Trabajos.kt`)
- Scheduled jobs → Trash storage: purges expired (evidence: `app/src/main/java/cl/jcleaner/data/Trabajos.kt`)
- Scheduled jobs → File scanner: checks junk (evidence: `app/src/main/java/cl/jcleaner/data/Trabajos.kt`)
- Domain models → Task coordinator: defines task data
- File categories → File scanner: browses categories (evidence: `README.md`)
