# denny/shinycms-ruby architecture

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

- Interactive diagram: https://gitdiagram.com/denny/shinycms-ruby
- Repository: https://github.com/denny/shinycms-ruby

## Overview

ShinyCMS is a Rails content-management platform whose main workflow is a visitor requesting site content, with optional feature plugins supplying pages, news, blog posts, and reusable content. Site administrators manage content and access through the admin area. The README also documents separate branches for audience features, search, email, analytics, and themes. Plugin implementation details were not sampled, so edges show only documented relationships; the feature nodes use exact plugin directories as their paths.

Main entry points: [`plugins/ShinyCMS`](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyCMS) (ShinyCMS core), [`plugins/ShinyCMS/app/controllers/shinycms/admin`](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyCMS/app/controllers/shinycms/admin) (Admin area), [`plugins/ShinyCMS/app/controllers/shinycms/comments_controller.rb`](https://github.com/denny/shinycms-ruby/blob/main/plugins/ShinyCMS/app/controllers/shinycms/comments_controller.rb) (Comments), [`plugins/ShinyForms`](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyForms) (Form handlers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_platform["CMS platform"]
  node_cms["ShinyCMS core"]
  node_admin["Admin area"]
  node_acl["Access control"]
  node_themes["Themes"]
end

subgraph group_publishing["Publishing features"]
  node_pages["Pages"]
  node_inserts["Content inserts"]
  node_news["News section"]
  node_blog["Blog"]
  node_comments["Comments"]
end

subgraph group_audience["Audience features"]
  node_forms["Form handlers"]
  node_mailing["Mailing lists"]
  node_newsletters["Newsletters"]
  node_profiles["User profiles"]
  node_search["Site search"]
  node_shop["Online shop"]
end

subgraph group_operations["Site operations"]
  node_site_config["Settings and flags"]
  node_analytics["Web and email stats"]
  node_dashboards["Charts and dashboards"]
  node_email["Email templates"]
  node_external_services{{"Optional services"}}
end

node_visitor(("Site visitor"))
node_administrator(("Site administrator"))

node_visitor -->|"requests site"| node_cms
node_administrator -->|"manages site"| node_admin
node_admin -->|"checks permissions"| node_acl
node_cms -->|"enables plugin"| node_pages
node_cms -->|"enables plugin"| node_inserts
node_cms -->|"enables plugin"| node_news
node_cms -->|"enables plugin"| node_blog
node_cms -->|"provides feature"| node_comments
node_cms -->|"enables plugin"| node_forms
node_cms -->|"enables plugin"| node_mailing
node_cms -->|"enables plugin"| node_newsletters
node_cms -->|"enables plugin"| node_profiles
node_cms -->|"enables plugin"| node_search
node_cms -.->|"includes plugin"| node_shop
node_cms -->|"supports themes"| node_themes
node_cms -->|"provides administration"| node_site_config
node_cms -->|"records statistics"| node_analytics
node_analytics -->|"feeds analytics"| node_dashboards
node_cms -->|"supports templates"| node_email
node_forms -.->|"uses protection"| node_external_services
node_comments -.->|"uses moderation"| node_external_services

click node_cms "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyCMS"
click node_admin "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyCMS/app/controllers/shinycms/admin"
click node_acl "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyAccess"
click node_themes "https://github.com/denny/shinycms-ruby/tree/main/themes"
click node_pages "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyPages"
click node_inserts "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyInserts"
click node_news "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyNews"
click node_blog "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyBlog"
click node_comments "https://github.com/denny/shinycms-ruby/blob/main/plugins/ShinyCMS/app/controllers/shinycms/comments_controller.rb"
click node_forms "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyForms"
click node_mailing "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyLists"
click node_newsletters "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyNewsletters"
click node_profiles "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyProfiles"
click node_search "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinySearch"
click node_shop "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyShop"
click node_site_config "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyCMS/app/controllers/shinycms/admin"
click node_analytics "https://github.com/denny/shinycms-ruby/tree/main/app/models/ahoy"
click node_dashboards "https://github.com/denny/shinycms-ruby/blob/main/app/controllers/blazer/application_controller.rb"
click node_email "https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyCMS/app/public/models/concerns/shinycms"

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_cms,node_admin,node_acl,node_themes toneBlue
class node_pages,node_inserts,node_news,node_blog,node_comments toneAmber
class node_forms,node_mailing,node_newsletters,node_profiles,node_search,node_shop toneMint
class node_site_config,node_analytics,node_dashboards,node_email,node_external_services toneRose
class node_visitor,node_administrator toneIndigo
```

## Components

### CMS platform

- [ShinyCMS core](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyCMS): `plugins/ShinyCMS`
- [Admin area](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyCMS/app/controllers/shinycms/admin): `plugins/ShinyCMS/app/controllers/shinycms/admin`
- [Access control](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyAccess): `plugins/ShinyAccess`
- [Themes](https://github.com/denny/shinycms-ruby/tree/main/themes): `themes`

### Publishing features

- [Pages](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyPages): `plugins/ShinyPages`
- [Content inserts](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyInserts): `plugins/ShinyInserts`
- [News section](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyNews): `plugins/ShinyNews`
- [Blog](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyBlog): `plugins/ShinyBlog`
- [Comments](https://github.com/denny/shinycms-ruby/blob/main/plugins/ShinyCMS/app/controllers/shinycms/comments_controller.rb): `plugins/ShinyCMS/app/controllers/shinycms/comments_controller.rb`

### Audience features

- [Form handlers](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyForms): `plugins/ShinyForms`
- [Mailing lists](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyLists): `plugins/ShinyLists`
- [Newsletters](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyNewsletters): `plugins/ShinyNewsletters`
- [User profiles](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyProfiles): `plugins/ShinyProfiles`
- [Site search](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinySearch): `plugins/ShinySearch`
- [Online shop](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyShop): `plugins/ShinyShop`

### Site operations

- [Settings and flags](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyCMS/app/controllers/shinycms/admin): `plugins/ShinyCMS/app/controllers/shinycms/admin`
- [Web and email stats](https://github.com/denny/shinycms-ruby/tree/main/app/models/ahoy): `app/models/ahoy`
- [Charts and dashboards](https://github.com/denny/shinycms-ruby/blob/main/app/controllers/blazer/application_controller.rb): `app/controllers/blazer/application_controller.rb`
- [Email templates](https://github.com/denny/shinycms-ruby/tree/main/plugins/ShinyCMS/app/public/models/concerns/shinycms): `plugins/ShinyCMS/app/public/models/concerns/shinycms`
- **Optional services**

### Other components

- **Site visitor**
- **Site administrator**

## Connections

- Site visitor → ShinyCMS core: requests site (evidence: `README.md`)
- Site administrator → Admin area: manages site (evidence: `README.md`)
- Admin area → Access control: checks permissions (evidence: `README.md`)
- ShinyCMS core → Pages: enables plugin (evidence: `README.md`)
- ShinyCMS core → Content inserts: enables plugin (evidence: `README.md`)
- ShinyCMS core → News section: enables plugin (evidence: `README.md`)
- ShinyCMS core → Blog: enables plugin (evidence: `README.md`)
- ShinyCMS core → Comments: provides feature (evidence: `README.md`)
- ShinyCMS core → Form handlers: enables plugin (evidence: `README.md`)
- ShinyCMS core → Mailing lists: enables plugin (evidence: `README.md`)
- ShinyCMS core → Newsletters: enables plugin (evidence: `README.md`)
- ShinyCMS core → User profiles: enables plugin (evidence: `README.md`)
- ShinyCMS core → Site search: enables plugin (evidence: `README.md`)
- ShinyCMS core → Online shop: includes plugin
- ShinyCMS core → Themes: supports themes (evidence: `README.md`)
- ShinyCMS core → Settings and flags: provides administration (evidence: `README.md`)
- ShinyCMS core → Web and email stats: records statistics (evidence: `README.md`)
- Web and email stats → Charts and dashboards: feeds analytics (evidence: `README.md`)
- ShinyCMS core → Email templates: supports templates (evidence: `README.md`)
- Form handlers → Optional services: uses protection (evidence: `README.md`)
- Comments → Optional services: uses moderation (evidence: `README.md`)
