# vondereich/voncms architecture

> Architecture diagram of the GitHub repository vondereich/voncms, 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/vondereich/voncms
- Repository: https://github.com/vondereich/voncms

## Overview

VonCMS is a PHP/MySQL CMS with a React admin and public-site application. The main workflow is that a publisher creates or edits content and media in the dashboard, saves it through PHP APIs, and visitors browse the resulting themed site and search or read published content. Separate capabilities cover user and settings administration, contact and newsletter tools, SEO output, analytics, and extensions. The README documents the runtime split; sampled source confirms selected React-to-API calls, but does not establish wiring for every listed feature.

Main entry points: [`src/App.tsx`](https://github.com/vondereich/voncms/blob/main/src/App.tsx) (React application), [`src/plugins/von-core/features/public/PublicSite.tsx`](https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/public/PublicSite.tsx) (Theme rendering), [`public/api`](https://github.com/vondereich/voncms/tree/main/public/api) (Content endpoints), [`public/index.php`](https://github.com/vondereich/voncms/blob/main/public/index.php) (Public PHP entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_admin["Admin and authoring"]
  node_react["React application<br/>[App.tsx]"]
  node_contact_manager["Contact manager<br/>[ContactManager.tsx]"]
  node_user_manager["User management<br/>[UserManager.tsx]"]
  node_settings["Site settings"]
  node_admin_features["Admin features"]
end

subgraph group_content["Content and media"]
  node_content_editor["Content editor<br/>[PostEditor.tsx]"]
  node_media_manager["Media manager<br/>[MediaManager.tsx]"]
  node_uploads[("Uploads directory<br/>[upload_file.php]")]
end

subgraph group_public["Public site"]
  node_public_discovery["Public discovery"]
  node_public_render["Theme rendering<br/>[PublicSite.tsx]"]
  node_seo_runtime["SEO and feeds"]
end

subgraph group_api["PHP runtime"]
  node_php_entry["Public PHP entry<br/>[index.php]"]
  node_api_entry["PHP API<br/>[index.php]"]
  node_content_api["Content endpoints"]
  node_media_api["Media endpoints<br/>[upload_file.php]"]
  node_contact_api["Contact endpoints<br/>[save_form.php]"]
  node_newsletter_api["Newsletter endpoints"]
  node_database[("MySQL database")]
end

subgraph group_extensions["Extensions and themes"]
  node_theme_system["Theme system<br/>[ThemeEngine.ts]"]
  node_plugins["Built-in plugins<br/>[registry.tsx]"]
end

node_visitor(("Visitor or publisher"))

node_visitor -->|"uses"| node_react
node_react -->|"opens editor"| node_content_editor
node_content_editor -->|"saves content"| node_content_api
node_react -->|"opens media"| node_media_manager
node_media_manager -->|"requests media"| node_media_api
node_media_api -->|"writes files"| node_uploads
node_react -->|"opens forms"| node_contact_manager
node_contact_manager -->|"loads and saves"| node_contact_api
node_react -->|"administers users"| node_user_manager
node_react -->|"configures site"| node_settings
node_settings -->|"saves settings"| node_api_entry
node_react -->|"routes admin"| node_admin_features
node_visitor -->|"requests site"| node_php_entry
node_php_entry -->|"renders metadata"| node_seo_runtime
node_php_entry -->|"serves site"| node_public_render
node_public_render -->|"loads listings"| node_public_discovery
node_public_discovery -->|"fetches posts"| node_content_api
node_public_render -->|"applies theme"| node_theme_system
node_public_render -->|"renders extensions"| node_plugins
node_visitor -->|"subscribes"| node_newsletter_api
node_api_entry -->|"dispatches"| node_content_api
node_content_api -->|"reads and writes"| node_database
node_media_api -->|"updates media records"| node_database
node_contact_api -->|"stores forms"| node_database
node_newsletter_api -->|"stores subscriptions"| node_database

click node_react "https://github.com/vondereich/voncms/blob/main/src/App.tsx"
click node_content_editor "https://github.com/vondereich/voncms/blob/main/src/components/PostEditor.tsx"
click node_media_manager "https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/media/MediaManager.tsx"
click node_contact_manager "https://github.com/vondereich/voncms/blob/main/src/pages/admin/ContactManager.tsx"
click node_user_manager "https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/users/UserManager.tsx"
click node_settings "https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/settings/SettingsManager.tsx"
click node_admin_features "https://github.com/vondereich/voncms/tree/main/src/plugins/von-core/features"
click node_public_discovery "https://github.com/vondereich/voncms/blob/main/src/hooks/usePublicPostsQuery.ts"
click node_public_render "https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/public/PublicSite.tsx"
click node_theme_system "https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/themes/ThemeEngine.ts"
click node_php_entry "https://github.com/vondereich/voncms/blob/main/public/index.php"
click node_api_entry "https://github.com/vondereich/voncms/blob/main/public/api/index.php"
click node_content_api "https://github.com/vondereich/voncms/tree/main/public/api"
click node_media_api "https://github.com/vondereich/voncms/blob/main/public/api/upload_file.php"
click node_contact_api "https://github.com/vondereich/voncms/blob/main/public/api/contact/save_form.php"
click node_newsletter_api "https://github.com/vondereich/voncms/blob/main/public/api/newsletter_subscribe.php"
click node_seo_runtime "https://github.com/vondereich/voncms/blob/main/public/seo_response_helper.php"
click node_plugins "https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/plugins/registry.tsx"
click node_uploads "https://github.com/vondereich/voncms/blob/main/public/api/upload_file.php"

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_react,node_contact_manager,node_user_manager,node_settings,node_admin_features toneBlue
class node_content_editor,node_media_manager,node_uploads toneAmber
class node_public_discovery,node_public_render,node_seo_runtime toneMint
class node_php_entry,node_api_entry,node_content_api,node_media_api,node_contact_api,node_newsletter_api,node_database toneRose
class node_theme_system,node_plugins,node_visitor toneIndigo
```

## Components

### Admin and authoring

- [React application](https://github.com/vondereich/voncms/blob/main/src/App.tsx): `src/App.tsx`
- [Contact manager](https://github.com/vondereich/voncms/blob/main/src/pages/admin/ContactManager.tsx): `src/pages/admin/ContactManager.tsx`
- [User management](https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/users/UserManager.tsx): `src/plugins/von-core/features/users/UserManager.tsx`
- [Site settings](https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/settings/SettingsManager.tsx): `src/plugins/von-core/features/settings/SettingsManager.tsx`
- [Admin features](https://github.com/vondereich/voncms/tree/main/src/plugins/von-core/features): `src/plugins/von-core/features`

### Content and media

- [Content editor](https://github.com/vondereich/voncms/blob/main/src/components/PostEditor.tsx): `src/components/PostEditor.tsx`
- [Media manager](https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/media/MediaManager.tsx): `src/plugins/von-core/features/media/MediaManager.tsx`
- [Uploads directory](https://github.com/vondereich/voncms/blob/main/public/api/upload_file.php): `public/api/upload_file.php`

### Public site

- [Public discovery](https://github.com/vondereich/voncms/blob/main/src/hooks/usePublicPostsQuery.ts): `src/hooks/usePublicPostsQuery.ts`
- [Theme rendering](https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/public/PublicSite.tsx): `src/plugins/von-core/features/public/PublicSite.tsx`
- [SEO and feeds](https://github.com/vondereich/voncms/blob/main/public/seo_response_helper.php): `public/seo_response_helper.php`

### PHP runtime

- [Public PHP entry](https://github.com/vondereich/voncms/blob/main/public/index.php): `public/index.php`
- [PHP API](https://github.com/vondereich/voncms/blob/main/public/api/index.php): `public/api/index.php`
- [Content endpoints](https://github.com/vondereich/voncms/tree/main/public/api): `public/api`
- [Media endpoints](https://github.com/vondereich/voncms/blob/main/public/api/upload_file.php): `public/api/upload_file.php`
- [Contact endpoints](https://github.com/vondereich/voncms/blob/main/public/api/contact/save_form.php): `public/api/contact/save_form.php`
- [Newsletter endpoints](https://github.com/vondereich/voncms/blob/main/public/api/newsletter_subscribe.php): `public/api/newsletter_subscribe.php`
- **MySQL database**

### Extensions and themes

- [Theme system](https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/themes/ThemeEngine.ts): `src/plugins/von-core/features/themes/ThemeEngine.ts`
- [Built-in plugins](https://github.com/vondereich/voncms/blob/main/src/plugins/von-core/features/plugins/registry.tsx): `src/plugins/von-core/features/plugins/registry.tsx`

### Other components

- **Visitor or publisher**

## Connections

- Visitor or publisher → React application: uses
- React application → Content editor: opens editor
- Content editor → Content endpoints: saves content
- React application → Media manager: opens media
- Media manager → Media endpoints: requests media
- Media endpoints → Uploads directory: writes files
- React application → Contact manager: opens forms
- Contact manager → Contact endpoints: loads and saves
- React application → User management: administers users
- React application → Site settings: configures site
- Site settings → PHP API: saves settings
- React application → Admin features: routes admin
- Visitor or publisher → Public PHP entry: requests site
- Public PHP entry → SEO and feeds: renders metadata
- Public PHP entry → Theme rendering: serves site
- Theme rendering → Public discovery: loads listings
- Public discovery → Content endpoints: fetches posts
- Theme rendering → Theme system: applies theme
- Theme rendering → Built-in plugins: renders extensions
- Visitor or publisher → Newsletter endpoints: subscribes
- PHP API → Content endpoints: dispatches
- Content endpoints → MySQL database: reads and writes
- Media endpoints → MySQL database: updates media records
- Contact endpoints → MySQL database: stores forms
- Newsletter endpoints → MySQL database: stores subscriptions
