# rpy2006/phoneserver architecture

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

- Interactive diagram: https://gitdiagram.com/rpy2006/phoneserver
- Repository: https://github.com/rpy2006/phoneserver

## Overview

PhoneServer is an Android app that serves shared phone storage and hosted content over a local HTTP server, while also acting as a client for other PhoneServer devices. The main workflow is to start the local server, let a browser or peer request content or perform file operations, and have the server handle requests against device storage and report live statistics. The app also supports remote browsing, server profiles, QR onboarding, website and mock-API authoring, and on-device model chat. Some subsystem links reflect README documentation because their implementations were not sampled.

Main entry points: [`app/src/main/java/com/yadaventerprise/phoneserver/SimpleHttpServer.java`](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/SimpleHttpServer.java) (HTTP server), [`app/src/main/java/com/yadaventerprise/phoneserver/ServerProfileStore.java`](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ServerProfileStore.java) (Server profiles), [`app/src/main/java/com/yadaventerprise/phoneserver/DashboardFragment.java`](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/DashboardFragment.java) (Live dashboard), [`app/src/main/java/com/yadaventerprise/phoneserver/RemoteApiClient.java`](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/RemoteApiClient.java) (Remote API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_hosting["Local hosting"]
  node_home["Home controls<br/>[HomeFragment.java]"]
  node_service["Foreground service<br/>[ServerService.java]"]
  node_http["HTTP server"]
  node_content["Shared content<br/>[ContentStore.java]"]
  node_fileui["Local file manager<br/>[FilesActivity.java]"]
  node_viewers["File viewers"]
end

subgraph group_remote["Remote access"]
  node_profiles["Server profiles"]
  node_qr["QR onboarding<br/>[QrFragment.java]"]
  node_remotebrowse["Remote browser"]
  node_remoteapi["Remote API client"]
end

subgraph group_monitor["Monitoring"]
  node_dashboard["Live dashboard"]
  node_stats["Server metrics<br/>[ServerStats.java]"]
  node_device["Device telemetry<br/>[DeviceStats.java]"]
end

subgraph group_authoring["Content authoring"]
  node_webedit["Website editor"]
  node_api_edit["API editor"]
  node_api_config["API endpoint config"]
end

subgraph group_ai["On-device AI"]
  node_chat["AI chat<br/>[ChatFragment.java]"]
  node_model["Model storage<br/>[ModelStore.java]"]
  node_engine["LLM engine<br/>[LlmEngine.java]"]
end

node_owner(("Phone owner"))
node_browser(("Browser / peer"))
node_peer(("Remote PhoneServer"))

node_owner -->|"starts service"| node_home
node_home -->|"starts or stops"| node_service
node_service -->|"starts server"| node_http
node_browser -->|"sends HTTP requests"| node_http
node_http -->|"reads and changes files"| node_content
node_http -->|"records activity"| node_stats
node_fileui -->|"manages files"| node_content
node_fileui -->|"opens supported files"| node_viewers
node_owner -->|"saves profiles"| node_profiles
node_qr -->|"creates scanned profile"| node_profiles
node_remotebrowse -->|"loads profile"| node_profiles
node_remotebrowse -->|"requests remote files"| node_remoteapi
node_remoteapi -->|"sends API requests"| node_peer
node_dashboard -->|"reads local metrics"| node_stats
node_dashboard -->|"loads remote profiles"| node_profiles
node_dashboard -->|"polls remote metrics"| node_remoteapi
node_stats -->|"collects device metrics"| node_device
node_webedit -->|"manages hosted files"| node_content
node_api_edit -->|"saves endpoint mappings"| node_api_config
node_http -->|"serves configured endpoints"| node_api_config
node_chat -->|"imports model"| node_model
node_chat -->|"generates responses"| node_engine
node_engine -->|"loads model"| node_model

click node_home "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/HomeFragment.java"
click node_service "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ServerService.java"
click node_http "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/SimpleHttpServer.java"
click node_content "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ContentStore.java"
click node_fileui "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/FilesActivity.java"
click node_viewers "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ImageViewerActivity.java"
click node_profiles "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ServerProfileStore.java"
click node_qr "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/QrFragment.java"
click node_remotebrowse "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/RemoteBrowseActivity.java"
click node_remoteapi "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/RemoteApiClient.java"
click node_dashboard "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/DashboardFragment.java"
click node_stats "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ServerStats.java"
click node_device "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/DeviceStats.java"
click node_webedit "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/WebsiteFilesActivity.java"
click node_api_edit "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ApiEditorActivity.java"
click node_api_config "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ApiEndpointStore.java"
click node_chat "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ChatFragment.java"
click node_model "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ModelStore.java"
click node_engine "https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/LlmEngine.java"

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_home,node_service,node_http,node_content,node_fileui,node_viewers,node_browser toneBlue
class node_profiles,node_qr,node_remotebrowse,node_remoteapi toneAmber
class node_dashboard,node_stats,node_device,node_peer toneMint
class node_webedit,node_api_edit,node_api_config toneRose
class node_chat,node_model,node_engine,node_owner toneIndigo
```

## Components

### Local hosting

- [Home controls](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/HomeFragment.java): `app/src/main/java/com/yadaventerprise/phoneserver/HomeFragment.java`
- [Foreground service](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ServerService.java): `app/src/main/java/com/yadaventerprise/phoneserver/ServerService.java`
- [HTTP server](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/SimpleHttpServer.java): `app/src/main/java/com/yadaventerprise/phoneserver/SimpleHttpServer.java`
- [Shared content](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ContentStore.java): `app/src/main/java/com/yadaventerprise/phoneserver/ContentStore.java`
- [Local file manager](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/FilesActivity.java): `app/src/main/java/com/yadaventerprise/phoneserver/FilesActivity.java`
- [File viewers](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ImageViewerActivity.java): `app/src/main/java/com/yadaventerprise/phoneserver/ImageViewerActivity.java`

### Remote access

- [Server profiles](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ServerProfileStore.java): `app/src/main/java/com/yadaventerprise/phoneserver/ServerProfileStore.java`
- [QR onboarding](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/QrFragment.java): `app/src/main/java/com/yadaventerprise/phoneserver/QrFragment.java`
- [Remote browser](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/RemoteBrowseActivity.java): `app/src/main/java/com/yadaventerprise/phoneserver/RemoteBrowseActivity.java`
- [Remote API client](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/RemoteApiClient.java): `app/src/main/java/com/yadaventerprise/phoneserver/RemoteApiClient.java`

### Monitoring

- [Live dashboard](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/DashboardFragment.java): `app/src/main/java/com/yadaventerprise/phoneserver/DashboardFragment.java`
- [Server metrics](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ServerStats.java): `app/src/main/java/com/yadaventerprise/phoneserver/ServerStats.java`
- [Device telemetry](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/DeviceStats.java): `app/src/main/java/com/yadaventerprise/phoneserver/DeviceStats.java`

### Content authoring

- [Website editor](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/WebsiteFilesActivity.java): `app/src/main/java/com/yadaventerprise/phoneserver/WebsiteFilesActivity.java`
- [API editor](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ApiEditorActivity.java): `app/src/main/java/com/yadaventerprise/phoneserver/ApiEditorActivity.java`
- [API endpoint config](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ApiEndpointStore.java): `app/src/main/java/com/yadaventerprise/phoneserver/ApiEndpointStore.java`

### On-device AI

- [AI chat](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ChatFragment.java): `app/src/main/java/com/yadaventerprise/phoneserver/ChatFragment.java`
- [Model storage](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/ModelStore.java): `app/src/main/java/com/yadaventerprise/phoneserver/ModelStore.java`
- [LLM engine](https://github.com/rpy2006/phoneserver/blob/main/app/src/main/java/com/yadaventerprise/phoneserver/LlmEngine.java): `app/src/main/java/com/yadaventerprise/phoneserver/LlmEngine.java`

### Other components

- **Phone owner**
- **Browser / peer**
- **Remote PhoneServer**

## Connections

- Phone owner → Home controls: starts service
- Home controls → Foreground service: starts or stops
- Foreground service → HTTP server: starts server
- Browser / peer → HTTP server: sends HTTP requests
- HTTP server → Shared content: reads and changes files
- HTTP server → Server metrics: records activity
- Local file manager → Shared content: manages files
- Local file manager → File viewers: opens supported files
- Phone owner → Server profiles: saves profiles
- QR onboarding → Server profiles: creates scanned profile
- Remote browser → Server profiles: loads profile
- Remote browser → Remote API client: requests remote files
- Remote API client → Remote PhoneServer: sends API requests
- Live dashboard → Server metrics: reads local metrics
- Live dashboard → Server profiles: loads remote profiles
- Live dashboard → Remote API client: polls remote metrics
- Server metrics → Device telemetry: collects device metrics
- Website editor → Shared content: manages hosted files
- API editor → API endpoint config: saves endpoint mappings
- HTTP server → API endpoint config: serves configured endpoints
- AI chat → Model storage: imports model
- AI chat → LLM engine: generates responses
- LLM engine → Model storage: loads model
