# extim-org/digitalmarketing architecture

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

- Interactive diagram: https://gitdiagram.com/extim-org/digitalmarketing
- Repository: https://github.com/extim-org/digitalmarketing

## Overview

EXTIM Digital is a public agency website presenting web design, software development, SEO, automation, and AI-assistant services, with portfolio and editorial content supporting discovery. Visitors browse the service and work pages; administrators authenticate to manage blog and portfolio entries and upload images. Blog forms call the content API, which persists records through Prisma; uploads go to Cloudinary. The contact form excerpt shows a simulated success flow rather than a demonstrated message-delivery integration. README documents SEO metadata, dynamic sitemap, structured data, and social-image generation; those capabilities are included, though their detailed wiring was not sampled.

Main entry points: [`src/app/api/auth/[...nextauth]/route.ts`](https://github.com/extim-org/digitalmarketing/blob/main/src/app/api/auth/%5B...nextauth%5D/route.ts) (Credentials auth), [`src/lib/prisma.ts`](https://github.com/extim-org/digitalmarketing/blob/main/src/lib/prisma.ts) (Prisma database), [`src/app/api/blog`](https://github.com/extim-org/digitalmarketing/tree/main/src/app/api/blog) (Blog API), [`src/app/api/portfolio`](https://github.com/extim-org/digitalmarketing/tree/main/src/app/api/portfolio) (Portfolio API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public website"]
  node_home["Home and services<br/>[page.tsx]"]
  node_service_pages["Service offerings"]
  node_contact["Contact form<br/>[ContactForm.tsx]"]
  node_about["About page<br/>[page.tsx]"]
end

subgraph group_content["Editorial and work"]
  node_blog_public["Blog pages"]
  node_portfolio_public["Portfolio pages"]
end

subgraph group_admin["Administration"]
  node_admin_ui["Admin pages"]
  node_blog_form["Blog editor<br/>[BlogForm.tsx]"]
  node_portfolio_form["Portfolio editor<br/>[PortfolioForm.tsx]"]
  node_auth_api["Credentials auth<br/>[route.ts]"]
  node_proxy["Admin route guard<br/>[proxy.ts]"]
end

subgraph group_platform["Site platform"]
  node_blog_api["Blog API"]
  node_portfolio_api["Portfolio API"]
  node_upload_api["Image upload API<br/>[route.ts]"]
  node_database[("Prisma database<br/>[prisma.ts]")]
  node_cloudinary["Cloudinary"]
  node_seo["SEO and metadata<br/>[layout.tsx]"]
  node_sitemap["Dynamic sitemap<br/>[sitemap.ts]"]
  node_robots["Crawler rules<br/>[robots.ts]"]
  node_og_image["Article social images"]
  node_manifest["PWA manifest<br/>[manifest.ts]"]
end

node_visitor(("Visitor"))
node_admin_user(("Administrator"))

node_visitor -->|"browses"| node_home
node_visitor -->|"browses"| node_service_pages
node_visitor -->|"browses"| node_blog_public
node_visitor -->|"browses"| node_portfolio_public
node_visitor -->|"browses"| node_about
node_visitor -->|"opens"| node_contact
node_admin_user -->|"uses"| node_admin_ui
node_admin_ui -->|"signs in"| node_auth_api
node_proxy -->|"guards"| node_admin_ui
node_blog_form -->|"submits"| node_blog_api
node_blog_form -->|"uploads"| node_upload_api
node_portfolio_form -->|"submits"| node_portfolio_api
node_blog_api -->|"checks session"| node_auth_api
node_portfolio_api -->|"checks session"| node_auth_api
node_upload_api -->|"checks session"| node_auth_api
node_blog_api -->|"reads and writes"| node_database
node_portfolio_api -->|"reads and writes"| node_database
node_auth_api -->|"reads users"| node_database
node_upload_api -->|"uploads files"| node_cloudinary
node_blog_public -->|"generates images"| node_og_image
node_sitemap -.->|"reads content"| node_database

click node_home "https://github.com/extim-org/digitalmarketing/blob/main/src/app/page.tsx"
click node_service_pages "https://github.com/extim-org/digitalmarketing/tree/main/src/app/services"
click node_contact "https://github.com/extim-org/digitalmarketing/blob/main/src/components/ContactForm.tsx"
click node_about "https://github.com/extim-org/digitalmarketing/blob/main/src/app/about/page.tsx"
click node_blog_public "https://github.com/extim-org/digitalmarketing/tree/main/src/app/blog"
click node_portfolio_public "https://github.com/extim-org/digitalmarketing/tree/main/src/app/portfolio"
click node_admin_ui "https://github.com/extim-org/digitalmarketing/tree/main/src/app/admin"
click node_blog_form "https://github.com/extim-org/digitalmarketing/blob/main/src/components/admin/BlogForm.tsx"
click node_portfolio_form "https://github.com/extim-org/digitalmarketing/blob/main/src/components/admin/PortfolioForm.tsx"
click node_auth_api "https://github.com/extim-org/digitalmarketing/blob/main/src/app/api/auth/%5B...nextauth%5D/route.ts"
click node_proxy "https://github.com/extim-org/digitalmarketing/blob/main/src/proxy.ts"
click node_blog_api "https://github.com/extim-org/digitalmarketing/tree/main/src/app/api/blog"
click node_portfolio_api "https://github.com/extim-org/digitalmarketing/tree/main/src/app/api/portfolio"
click node_upload_api "https://github.com/extim-org/digitalmarketing/blob/main/src/app/api/upload/route.ts"
click node_database "https://github.com/extim-org/digitalmarketing/blob/main/src/lib/prisma.ts"
click node_seo "https://github.com/extim-org/digitalmarketing/blob/main/src/app/layout.tsx"
click node_sitemap "https://github.com/extim-org/digitalmarketing/blob/main/src/app/sitemap.ts"
click node_robots "https://github.com/extim-org/digitalmarketing/blob/main/src/app/robots.ts"
click node_og_image "https://github.com/extim-org/digitalmarketing/blob/main/src/app/blog/%5Bslug%5D/opengraph-image.tsx"
click node_manifest "https://github.com/extim-org/digitalmarketing/blob/main/src/app/manifest.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_home,node_service_pages,node_contact,node_about toneBlue
class node_blog_public,node_portfolio_public toneAmber
class node_admin_ui,node_blog_form,node_portfolio_form,node_auth_api,node_proxy toneMint
class node_blog_api,node_portfolio_api,node_upload_api,node_database,node_cloudinary,node_seo,node_sitemap,node_robots,node_og_image,node_manifest toneRose
class node_visitor,node_admin_user toneIndigo
```

## Components

### Public website

- [Home and services](https://github.com/extim-org/digitalmarketing/blob/main/src/app/page.tsx): `src/app/page.tsx`
- [Service offerings](https://github.com/extim-org/digitalmarketing/tree/main/src/app/services): `src/app/services`
- [Contact form](https://github.com/extim-org/digitalmarketing/blob/main/src/components/ContactForm.tsx): `src/components/ContactForm.tsx`
- [About page](https://github.com/extim-org/digitalmarketing/blob/main/src/app/about/page.tsx): `src/app/about/page.tsx`

### Editorial and work

- [Blog pages](https://github.com/extim-org/digitalmarketing/tree/main/src/app/blog): `src/app/blog`
- [Portfolio pages](https://github.com/extim-org/digitalmarketing/tree/main/src/app/portfolio): `src/app/portfolio`

### Administration

- [Admin pages](https://github.com/extim-org/digitalmarketing/tree/main/src/app/admin): `src/app/admin`
- [Blog editor](https://github.com/extim-org/digitalmarketing/blob/main/src/components/admin/BlogForm.tsx): `src/components/admin/BlogForm.tsx`
- [Portfolio editor](https://github.com/extim-org/digitalmarketing/blob/main/src/components/admin/PortfolioForm.tsx): `src/components/admin/PortfolioForm.tsx`
- [Credentials auth](https://github.com/extim-org/digitalmarketing/blob/main/src/app/api/auth/%5B...nextauth%5D/route.ts): `src/app/api/auth/[...nextauth]/route.ts`
- [Admin route guard](https://github.com/extim-org/digitalmarketing/blob/main/src/proxy.ts): `src/proxy.ts`

### Site platform

- [Blog API](https://github.com/extim-org/digitalmarketing/tree/main/src/app/api/blog): `src/app/api/blog`
- [Portfolio API](https://github.com/extim-org/digitalmarketing/tree/main/src/app/api/portfolio): `src/app/api/portfolio`
- [Image upload API](https://github.com/extim-org/digitalmarketing/blob/main/src/app/api/upload/route.ts): `src/app/api/upload/route.ts`
- [Prisma database](https://github.com/extim-org/digitalmarketing/blob/main/src/lib/prisma.ts): `src/lib/prisma.ts`
- **Cloudinary**
- [SEO and metadata](https://github.com/extim-org/digitalmarketing/blob/main/src/app/layout.tsx): `src/app/layout.tsx`
- [Dynamic sitemap](https://github.com/extim-org/digitalmarketing/blob/main/src/app/sitemap.ts): `src/app/sitemap.ts`
- [Crawler rules](https://github.com/extim-org/digitalmarketing/blob/main/src/app/robots.ts): `src/app/robots.ts`
- [Article social images](https://github.com/extim-org/digitalmarketing/blob/main/src/app/blog/%5Bslug%5D/opengraph-image.tsx): `src/app/blog/[slug]/opengraph-image.tsx`
- [PWA manifest](https://github.com/extim-org/digitalmarketing/blob/main/src/app/manifest.ts): `src/app/manifest.ts`

### Other components

- **Visitor**
- **Administrator**

## Connections

- Visitor → Home and services: browses
- Visitor → Service offerings: browses
- Visitor → Blog pages: browses
- Visitor → Portfolio pages: browses
- Visitor → About page: browses
- Visitor → Contact form: opens
- Administrator → Admin pages: uses
- Admin pages → Credentials auth: signs in
- Admin route guard → Admin pages: guards
- Blog editor → Blog API: submits
- Blog editor → Image upload API: uploads
- Portfolio editor → Portfolio API: submits
- Blog API → Credentials auth: checks session
- Portfolio API → Credentials auth: checks session
- Image upload API → Credentials auth: checks session
- Blog API → Prisma database: reads and writes
- Portfolio API → Prisma database: reads and writes
- Credentials auth → Prisma database: reads users
- Image upload API → Cloudinary: uploads files
- Blog pages → Article social images: generates images
- Dynamic sitemap → Prisma database: reads content
