# shtirlizc/tetacom-2022 architecture

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

- Interactive diagram: https://gitdiagram.com/shtirlizc/tetacom-2022
- Repository: https://github.com/shtirlizc/tetacom-2022

## Overview

#### Purpose and runtime
Tetacom is a static Astro marketing/content site for `tetacom.pro`. Astro renders pages from local components and Markdown content into `dist/`; browser-side JavaScript is limited to interactive features such as forms and video playback. Primary project entry/configuration points are `astro.config.mjs`, `src/pages/index.astro`, and `src/layouts/layout.astro`.

#### Page routing and composition
File-based Astro routes define the public site. Static landing pages include home, contacts, model, and education; collection detail pages use dynamic slugs. Shared layouts establish document structure and article presentation, while page files assemble reusable blocks.
Paths: `src/pages/products/[slug].astro`, `src/pages/blog/[slug].astro`, `src/layouts/article-layout.astro`.

#### Content collections as the CMS boundary
Products, blog posts/cases, news, and vacancies are repository-managed Markdown collections. `src/content.config.ts` is the schema/collection boundary used by route pages to discover, validate, filter, and render content. Content-associated image folders remain colocated with each article/product.
Paths: `src/content.config.ts`, `src/content/blog`, `src/content/products`.

#### Content discovery, listing, and taxonomy
Index and tag routes provide collection feeds and category filtering for blog, news, and vacancies. Taxonomy/navigation values are maintained separately from Markdown, creating a distinction between content records and site-level classification/navigation data.
Paths: `src/pages/blog/tag/[slug].astro`, `src/pages/news/tag/[slug].astro`, `src/data/blog-tags.ts`.

#### Reusable presentation system
`src/components` supplies the shared shell and UI primitives—header/footer, page metadata, forms, buttons, media, notifications—while `src/blocks` packages domain/page-section compositions for home, products, news, course, and vacancies. Pages should depend on blocks/components rather than duplicate structural UI.
Paths: `src/components/header.astro`, `src/components/head.astro`, `src/blocks/home/start-screen.astro`.

#### Client interactions and external services
The feedback flow is client-side: form components/configuration feed `src/scripts/form.ts`, which uses the public contact endpoint supplied by `PUBLIC_TETACOM_CONTACT_ENDPOINT`. Cloudflare Turnstile uses `PUBLIC_TURNSTILE_SITE_KEY`; both values are intentionally bundled at build time. Analytics integration is represented by the Yandex Metrika component. Video behavior is handled separately in the browser.
Paths: `src/components/form.astro`, `src/scripts/form.ts`, `src/components/yandex-metrika.astro`.

#### Static assets and deployment
Images are bundled from `src/assets`; directly served PDFs, videos, favicons, verification files, and legal documents live under `public`. GitHub Actions builds and deploys the generated static output to GitHub Pages, with repository variables supplying public form/Turnstile configuration.
Paths: `public/documents`, `public/video`, `.github/workflows/deploy.yml`.

Main entry points: [`astro.config.mjs`](https://github.com/shtirlizc/tetacom-2022/blob/main/astro.config.mjs) (Astro build), [`src/components/header.astro`](https://github.com/shtirlizc/tetacom-2022/blob/main/src/components/header.astro) (Shared components), [`src/content/blog`](https://github.com/shtirlizc/tetacom-2022/tree/main/src/content/blog) (Markdown collections), [`src/content.config.ts`](https://github.com/shtirlizc/tetacom-2022/blob/main/src/content.config.ts) (Collection schemas)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_content["Content and taxonomy"]
  node_markdown["Markdown collections<br/>content records"]
  node_products["Product content<br/>content records"]
  node_content_config["Collection schemas<br/>Astro content config<br/>[content.config.ts]"]
  node_taxonomy["Blog tags<br/>taxonomy data<br/>[blog-tags.ts]"]
end

subgraph group_site["Astro site"]
  node_routes["Page routes<br/>Astro pages<br/>[index.astro]"]
  node_product_route["Product detail route<br/>dynamic Astro route<br/>[&#91;slug&#93;.astro]"]
  node_blog_route["Blog detail route<br/>dynamic Astro route<br/>[&#91;slug&#93;.astro]"]
  node_tag_routes["Tag listing routes<br/>dynamic Astro routes<br/>[&#91;slug&#93;.astro]"]
  node_layouts["Article layout<br/>shared layout"]
  node_components["Shared components<br/>UI primitives<br/>[header.astro]"]
  node_blocks["Page blocks<br/>section compositions<br/>[start-screen.astro]"]
  node_astro{{"Astro build<br/>static site generator<br/>[astro.config.mjs]"}}
end

subgraph group_client["Browser integrations"]
  node_form_ui["Feedback form<br/>form component<br/>[form.astro]"]
  node_form_script["Form submission<br/>browser script<br/>[form.ts]"]
  node_analytics["Yandex Metrika<br/>analytics component"]
end

subgraph group_delivery["Assets and deployment"]
  node_public_assets["Public media and documents<br/>direct static assets"]
  node_video_assets["Public video<br/>direct static assets"]
  node_deploy{{"GitHub Pages deployment<br/>GitHub Actions workflow<br/>[deploy.yml]"}}
  node_dist["Static output<br/>generated site"]
end

node_content_config -->|"discovers and validates"| node_markdown
node_content_config -->|"discovers and validates"| node_products
node_taxonomy -->|"drives filters"| node_tag_routes
node_markdown -->|"renders record"| node_blog_route
node_products -->|"renders record"| node_product_route
node_markdown -->|"supplies feeds"| node_tag_routes
node_routes -->|"composes"| node_blocks
node_routes -->|"uses"| node_components
node_product_route -->|"uses"| node_layouts
node_blog_route -->|"uses"| node_layouts
node_layouts -->|"uses"| node_components
node_form_ui -->|"submits through"| node_form_script
node_components -->|"includes"| node_form_ui
node_components -->|"includes"| node_analytics
node_astro -->|"builds"| node_routes
node_astro -->|"loads collections"| node_content_config
node_astro -->|"copies"| node_public_assets
node_astro -->|"copies"| node_video_assets
node_astro -->|"generates"| node_dist
node_deploy -->|"runs build"| node_astro
node_deploy -->|"publishes"| node_dist

click node_markdown "https://github.com/shtirlizc/tetacom-2022/tree/main/src/content/blog"
click node_products "https://github.com/shtirlizc/tetacom-2022/tree/main/src/content/products"
click node_content_config "https://github.com/shtirlizc/tetacom-2022/blob/main/src/content.config.ts"
click node_taxonomy "https://github.com/shtirlizc/tetacom-2022/blob/main/src/data/blog-tags.ts"
click node_routes "https://github.com/shtirlizc/tetacom-2022/blob/main/src/pages/index.astro"
click node_product_route "https://github.com/shtirlizc/tetacom-2022/blob/main/src/pages/products/%5Bslug%5D.astro"
click node_blog_route "https://github.com/shtirlizc/tetacom-2022/blob/main/src/pages/blog/%5Bslug%5D.astro"
click node_tag_routes "https://github.com/shtirlizc/tetacom-2022/blob/main/src/pages/blog/tag/%5Bslug%5D.astro"
click node_layouts "https://github.com/shtirlizc/tetacom-2022/blob/main/src/layouts/article-layout.astro"
click node_components "https://github.com/shtirlizc/tetacom-2022/blob/main/src/components/header.astro"
click node_blocks "https://github.com/shtirlizc/tetacom-2022/blob/main/src/blocks/home/start-screen.astro"
click node_astro "https://github.com/shtirlizc/tetacom-2022/blob/main/astro.config.mjs"
click node_form_ui "https://github.com/shtirlizc/tetacom-2022/blob/main/src/components/form.astro"
click node_form_script "https://github.com/shtirlizc/tetacom-2022/blob/main/src/scripts/form.ts"
click node_analytics "https://github.com/shtirlizc/tetacom-2022/blob/main/src/components/yandex-metrika.astro"
click node_public_assets "https://github.com/shtirlizc/tetacom-2022/tree/main/public/documents"
click node_video_assets "https://github.com/shtirlizc/tetacom-2022/tree/main/public/video"
click node_deploy "https://github.com/shtirlizc/tetacom-2022/blob/main/.github/workflows/deploy.yml"

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_markdown,node_products,node_content_config,node_taxonomy toneBlue
class node_routes,node_product_route,node_blog_route,node_tag_routes,node_layouts,node_components,node_blocks,node_astro toneAmber
class node_form_ui,node_form_script,node_analytics toneMint
class node_public_assets,node_video_assets,node_deploy,node_dist toneRose
```

## Components

### Content and taxonomy

- [Markdown collections](https://github.com/shtirlizc/tetacom-2022/tree/main/src/content/blog): content records · Products and blog content include colocated images. · `src/content/blog`
- [Product content](https://github.com/shtirlizc/tetacom-2022/tree/main/src/content/products): content records · `src/content/products`
- [Collection schemas](https://github.com/shtirlizc/tetacom-2022/blob/main/src/content.config.ts): Astro content config · Defines and validates repository-managed collections. · `src/content.config.ts`
- [Blog tags](https://github.com/shtirlizc/tetacom-2022/blob/main/src/data/blog-tags.ts): taxonomy data · Navigation and classification values are separate from Markdown. · `src/data/blog-tags.ts`

### Astro site

- [Page routes](https://github.com/shtirlizc/tetacom-2022/blob/main/src/pages/index.astro): Astro pages · File-based routes compose landing, listing, and detail pages. · `src/pages/index.astro`
- [Product detail route](https://github.com/shtirlizc/tetacom-2022/blob/main/src/pages/products/%5Bslug%5D.astro): dynamic Astro route · `src/pages/products/[slug].astro`
- [Blog detail route](https://github.com/shtirlizc/tetacom-2022/blob/main/src/pages/blog/%5Bslug%5D.astro): dynamic Astro route · `src/pages/blog/[slug].astro`
- [Tag listing routes](https://github.com/shtirlizc/tetacom-2022/blob/main/src/pages/blog/tag/%5Bslug%5D.astro): dynamic Astro routes · Filters blog, news, and vacancy feeds by taxonomy. · `src/pages/blog/tag/[slug].astro`
- [Article layout](https://github.com/shtirlizc/tetacom-2022/blob/main/src/layouts/article-layout.astro): shared layout · Provides article document structure and presentation. · `src/layouts/article-layout.astro`
- [Shared components](https://github.com/shtirlizc/tetacom-2022/blob/main/src/components/header.astro): UI primitives · Shell, metadata, forms, media, notifications, and buttons. · `src/components/header.astro`
- [Page blocks](https://github.com/shtirlizc/tetacom-2022/blob/main/src/blocks/home/start-screen.astro): section compositions · Reusable domain sections used by pages. · `src/blocks/home/start-screen.astro`
- [Astro build](https://github.com/shtirlizc/tetacom-2022/blob/main/astro.config.mjs): static site generator · Renders routes, layouts, and content to static output. · `astro.config.mjs`

### Browser integrations

- [Feedback form](https://github.com/shtirlizc/tetacom-2022/blob/main/src/components/form.astro): form component · `src/components/form.astro`
- [Form submission](https://github.com/shtirlizc/tetacom-2022/blob/main/src/scripts/form.ts): browser script · Posts to the public contact endpoint using bundled public settings. · `src/scripts/form.ts`
- [Yandex Metrika](https://github.com/shtirlizc/tetacom-2022/blob/main/src/components/yandex-metrika.astro): analytics component · `src/components/yandex-metrika.astro`

### Assets and deployment

- [Public media and documents](https://github.com/shtirlizc/tetacom-2022/tree/main/public/documents): direct static assets · Serves PDFs, videos, favicons, verification, and legal files. · `public/documents`
- [Public video](https://github.com/shtirlizc/tetacom-2022/tree/main/public/video): direct static assets · `public/video`
- [GitHub Pages deployment](https://github.com/shtirlizc/tetacom-2022/blob/main/.github/workflows/deploy.yml): GitHub Actions workflow · Builds and publishes generated static output. · `.github/workflows/deploy.yml`
- **Static output**: generated site · Deployable Astro build output.

## Connections

- Collection schemas → Markdown collections: discovers and validates
- Collection schemas → Product content: discovers and validates
- Blog tags → Tag listing routes: drives filters
- Markdown collections → Blog detail route: renders record
- Product content → Product detail route: renders record
- Markdown collections → Tag listing routes: supplies feeds
- Page routes → Page blocks: composes
- Page routes → Shared components: uses
- Product detail route → Article layout: uses
- Blog detail route → Article layout: uses
- Article layout → Shared components: uses
- Feedback form → Form submission: submits through
- Shared components → Feedback form: includes
- Shared components → Yandex Metrika: includes
- Astro build → Page routes: builds
- Astro build → Collection schemas: loads collections
- Astro build → Public media and documents: copies
- Astro build → Public video: copies
- Astro build → Static output: generates
- GitHub Pages deployment → Astro build: runs build
- GitHub Pages deployment → Static output: publishes
