# sysens/1branding architecture

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

- Interactive diagram: https://gitdiagram.com/sysens/1branding
- Repository: https://github.com/sysens/1branding

## Overview

This is a multilingual branding-agency website with a Nuxt public frontend and a Strapi CMS backend. Visitors browse agency, service, portfolio, news, and pricing content; the frontend also exposes SEO-oriented outputs. Strapi manages editable content and media, with bootstrap routines for selected content and contact-upload cleanup. The excerpts show app-level rendering and several internal dependencies, but do not establish most page-to-CMS request paths, so those links are omitted rather than inferred.

Main entry points: [`backend/src/index.ts`](https://github.com/sysens/1branding/blob/main/backend/src/index.ts) (CMS bootstrap), [`frontend/server/utils/seoSitemap.ts`](https://github.com/sysens/1branding/blob/main/frontend/server/utils/seoSitemap.ts) (Sitemap builder), [`frontend/app/app.vue`](https://github.com/sysens/1branding/blob/main/frontend/app/app.vue) (Nuxt app shell), [`frontend/app/utils/servicePages.ts`](https://github.com/sysens/1branding/blob/main/frontend/app/utils/servicePages.ts) (Service catalog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Public website"]
  node_nuxt_app["Nuxt app shell<br/>[app.vue]"]
  node_site_pages["Site pages"]
  node_site_components["Page components"]
  node_service_catalog["Service catalog<br/>[servicePages.ts]"]
  node_locale_rules["Locale rules<br/>[locales.ts]"]
  node_seo_metadata["SEO metadata<br/>[seo.ts]"]
end

subgraph group_content["CMS and content"]
  node_cms_client["CMS composables<br/>[useCms.ts]"]
  node_strapi_api["Strapi content API"]
  node_cms_lifecycle["CMS bootstrap<br/>[index.ts]"]
  node_cms_database[("CMS database<br/>[database.ts]")]
  node_blog_content["Blog content setup<br/>[blog-articles.ts]"]
  node_news_translation["News translations"]
  node_project_copy["Project copy<br/>[project-copy.ts]"]
  node_contact_uploads["Contact uploads<br/>[contact-uploads.ts]"]
end

subgraph group_media["Media storage"]
  node_upload_config["Upload configuration<br/>[upload.ts]"]
  node_storage_check["Storage check"]
  node_storage_guard["Durable storage guard<br/>[storage-guard.ts]"]
  node_r2[("Cloudflare R2")]
end

subgraph group_discovery["Search discovery"]
  node_sitemap["Sitemap builder<br/>[seoSitemap.ts]"]
  node_llms_txt["LLM site summary<br/>[llms.txt.ts]"]
end

subgraph group_visuals["Visual experiences"]
  node_globe_routes["Globe routes<br/>[routes.ts]"]
  node_globe_geography["Globe geography<br/>[geography.ts]"]
  node_globe_locations["Globe locations<br/>[locations.ts]"]
end

node_visitor(("Site visitor"))

node_visitor -->|"opens site"| node_nuxt_app
node_nuxt_app -->|"renders pages"| node_site_pages
node_nuxt_app -->|"renders shell"| node_site_components
node_service_catalog -->|"localizes paths"| node_locale_rules
node_sitemap -->|"lists services"| node_service_catalog
node_sitemap -->|"localizes URLs"| node_locale_rules
node_sitemap -->|"formats descriptions"| node_seo_metadata
node_llms_txt -->|"lists services"| node_service_catalog
node_llms_txt -->|"serves summary"| node_visitor
node_globe_routes -->|"computes positions"| node_globe_geography
node_globe_routes -->|"uses locations"| node_globe_locations
node_cms_lifecycle -->|"checks durability"| node_storage_guard
node_cms_lifecycle -->|"checks bucket"| node_storage_check
node_cms_lifecycle -->|"applies translations"| node_news_translation
node_cms_lifecycle -->|"updates project copy"| node_project_copy
node_cms_lifecycle -->|"publishes articles"| node_blog_content
node_cms_lifecycle -->|"removes orphans"| node_contact_uploads
node_storage_check -->|"checks bucket"| node_r2
node_upload_config -->|"configures provider"| node_r2

click node_nuxt_app "https://github.com/sysens/1branding/blob/main/frontend/app/app.vue"
click node_site_pages "https://github.com/sysens/1branding/tree/main/frontend/app/pages"
click node_site_components "https://github.com/sysens/1branding/tree/main/frontend/app/components"
click node_service_catalog "https://github.com/sysens/1branding/blob/main/frontend/app/utils/servicePages.ts"
click node_locale_rules "https://github.com/sysens/1branding/blob/main/frontend/app/utils/locales.ts"
click node_seo_metadata "https://github.com/sysens/1branding/blob/main/frontend/app/utils/seo.ts"
click node_cms_client "https://github.com/sysens/1branding/blob/main/frontend/app/composables/useCms.ts"
click node_strapi_api "https://github.com/sysens/1branding/tree/main/backend/src/api"
click node_cms_lifecycle "https://github.com/sysens/1branding/blob/main/backend/src/index.ts"
click node_cms_database "https://github.com/sysens/1branding/blob/main/backend/config/database.ts"
click node_blog_content "https://github.com/sysens/1branding/blob/main/backend/src/utils/blog-articles.ts"
click node_news_translation "https://github.com/sysens/1branding/blob/main/backend/src/utils/news-translations.ts"
click node_project_copy "https://github.com/sysens/1branding/blob/main/backend/src/utils/project-copy.ts"
click node_contact_uploads "https://github.com/sysens/1branding/blob/main/backend/src/utils/contact-uploads.ts"
click node_upload_config "https://github.com/sysens/1branding/blob/main/backend/config/upload.ts"
click node_storage_check "https://github.com/sysens/1branding/blob/main/backend/src/utils/check-upload-storage.ts"
click node_storage_guard "https://github.com/sysens/1branding/blob/main/backend/src/utils/storage-guard.ts"
click node_sitemap "https://github.com/sysens/1branding/blob/main/frontend/server/utils/seoSitemap.ts"
click node_llms_txt "https://github.com/sysens/1branding/blob/main/frontend/server/routes/llms.txt.ts"
click node_globe_routes "https://github.com/sysens/1branding/blob/main/frontend/app/utils/globe/routes.ts"
click node_globe_geography "https://github.com/sysens/1branding/blob/main/frontend/app/utils/globe/geography.ts"
click node_globe_locations "https://github.com/sysens/1branding/blob/main/frontend/app/utils/globe/locations.ts"

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_nuxt_app,node_site_pages,node_site_components,node_service_catalog,node_locale_rules,node_seo_metadata toneBlue
class node_cms_client,node_strapi_api,node_cms_lifecycle,node_cms_database,node_blog_content,node_news_translation,node_project_copy,node_contact_uploads toneAmber
class node_upload_config,node_storage_check,node_storage_guard,node_r2 toneMint
class node_sitemap,node_llms_txt toneRose
class node_globe_routes,node_globe_geography,node_globe_locations,node_visitor toneIndigo
```

## Components

### Public website

- [Nuxt app shell](https://github.com/sysens/1branding/blob/main/frontend/app/app.vue): `frontend/app/app.vue`
- [Site pages](https://github.com/sysens/1branding/tree/main/frontend/app/pages): `frontend/app/pages`
- [Page components](https://github.com/sysens/1branding/tree/main/frontend/app/components): `frontend/app/components`
- [Service catalog](https://github.com/sysens/1branding/blob/main/frontend/app/utils/servicePages.ts): `frontend/app/utils/servicePages.ts`
- [Locale rules](https://github.com/sysens/1branding/blob/main/frontend/app/utils/locales.ts): `frontend/app/utils/locales.ts`
- [SEO metadata](https://github.com/sysens/1branding/blob/main/frontend/app/utils/seo.ts): `frontend/app/utils/seo.ts`

### CMS and content

- [CMS composables](https://github.com/sysens/1branding/blob/main/frontend/app/composables/useCms.ts): `frontend/app/composables/useCms.ts`
- [Strapi content API](https://github.com/sysens/1branding/tree/main/backend/src/api): `backend/src/api`
- [CMS bootstrap](https://github.com/sysens/1branding/blob/main/backend/src/index.ts): `backend/src/index.ts`
- [CMS database](https://github.com/sysens/1branding/blob/main/backend/config/database.ts): `backend/config/database.ts`
- [Blog content setup](https://github.com/sysens/1branding/blob/main/backend/src/utils/blog-articles.ts): `backend/src/utils/blog-articles.ts`
- [News translations](https://github.com/sysens/1branding/blob/main/backend/src/utils/news-translations.ts): `backend/src/utils/news-translations.ts`
- [Project copy](https://github.com/sysens/1branding/blob/main/backend/src/utils/project-copy.ts): `backend/src/utils/project-copy.ts`
- [Contact uploads](https://github.com/sysens/1branding/blob/main/backend/src/utils/contact-uploads.ts): `backend/src/utils/contact-uploads.ts`

### Media storage

- [Upload configuration](https://github.com/sysens/1branding/blob/main/backend/config/upload.ts): `backend/config/upload.ts`
- [Storage check](https://github.com/sysens/1branding/blob/main/backend/src/utils/check-upload-storage.ts): `backend/src/utils/check-upload-storage.ts`
- [Durable storage guard](https://github.com/sysens/1branding/blob/main/backend/src/utils/storage-guard.ts): `backend/src/utils/storage-guard.ts`
- **Cloudflare R2**

### Search discovery

- [Sitemap builder](https://github.com/sysens/1branding/blob/main/frontend/server/utils/seoSitemap.ts): `frontend/server/utils/seoSitemap.ts`
- [LLM site summary](https://github.com/sysens/1branding/blob/main/frontend/server/routes/llms.txt.ts): `frontend/server/routes/llms.txt.ts`

### Visual experiences

- [Globe routes](https://github.com/sysens/1branding/blob/main/frontend/app/utils/globe/routes.ts): `frontend/app/utils/globe/routes.ts`
- [Globe geography](https://github.com/sysens/1branding/blob/main/frontend/app/utils/globe/geography.ts): `frontend/app/utils/globe/geography.ts`
- [Globe locations](https://github.com/sysens/1branding/blob/main/frontend/app/utils/globe/locations.ts): `frontend/app/utils/globe/locations.ts`

### Other components

- **Site visitor**

## Connections

- Site visitor → Nuxt app shell: opens site
- Nuxt app shell → Site pages: renders pages (evidence: `frontend/app/app.vue`)
- Nuxt app shell → Page components: renders shell (evidence: `frontend/app/app.vue`)
- Service catalog → Locale rules: localizes paths (evidence: `frontend/app/utils/servicePages.ts`)
- Sitemap builder → Service catalog: lists services (evidence: `frontend/server/utils/seoSitemap.ts`)
- Sitemap builder → Locale rules: localizes URLs (evidence: `frontend/server/utils/seoSitemap.ts`)
- Sitemap builder → SEO metadata: formats descriptions (evidence: `frontend/server/utils/seoSitemap.ts`)
- LLM site summary → Service catalog: lists services (evidence: `frontend/server/routes/llms.txt.ts`)
- LLM site summary → Site visitor: serves summary (evidence: `frontend/server/routes/llms.txt.ts`)
- Globe routes → Globe geography: computes positions (evidence: `frontend/app/utils/globe/routes.ts`)
- Globe routes → Globe locations: uses locations (evidence: `frontend/app/utils/globe/routes.ts`)
- CMS bootstrap → Durable storage guard: checks durability (evidence: `backend/src/index.ts`)
- CMS bootstrap → Storage check: checks bucket (evidence: `backend/src/index.ts`)
- CMS bootstrap → News translations: applies translations (evidence: `backend/src/index.ts`)
- CMS bootstrap → Project copy: updates project copy (evidence: `backend/src/index.ts`)
- CMS bootstrap → Blog content setup: publishes articles (evidence: `backend/src/index.ts`)
- CMS bootstrap → Contact uploads: removes orphans (evidence: `backend/src/index.ts`)
- Storage check → Cloudflare R2: checks bucket (evidence: `backend/src/utils/check-upload-storage.ts`)
- Upload configuration → Cloudflare R2: configures provider (evidence: `backend/config/upload.ts`)
