Files
VITEC-website/README.md
khaccount eae40f4286 Success-story migration + new plugins + JSON/UX polish
- Success Stories: full migration from old site (48/48, audited),
  markets n:n, quotation content block, columns content block,
  pretty SEO detail URLs via SuccessStoryPathRewrite middleware,
  list/detail split (list page 4 / story page), detailUrl/backUrl
- New plugins: VITEC Locations (grid/list/map + RTE map text),
  VITEC Customer Logos (color/bw logic, only-show-selected),
  VITEC Card (one plugin for product/story/market/solution
  with reloading FlexForm + custom backend preview renderer)
- Eventlist: layout dropdown (list/grid/teaserbar) in settings
- Hero section CB: Images/Video tabs, background video + overlay
- Product JSON: full category rootline (parents), fixed missing
  ConnectionPool import (all-products crash), category tree map
- Backend preview CSS: container-query responsive (narrow columns)
- Docs: ISO architecture spec, root + extension READMEs

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 09:53:33 +02:00

175 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div align="center">
# VITEC Platform
### Headless TYPO3 v14 + React — the VITEC website
TYPO3 runs the editorial backend and serves content as **JSON**; a decoupled
**React** front end renders it. This repository is the TYPO3 Composer distribution.
<br>
![TYPO3](https://img.shields.io/badge/TYPO3-14.3-FF8700?logo=typo3&logoColor=white)
![PHP](https://img.shields.io/badge/PHP-8.4-777BB4?logo=php&logoColor=white)
![Mode](https://img.shields.io/badge/mode-headless_JSON-0A3D62)
![Frontend](https://img.shields.io/badge/frontend-React_(Vite)-61DAFB?logo=react&logoColor=black)
![Composer](https://img.shields.io/badge/Composer-distribution-885630?logo=composer&logoColor=white)
![License](https://img.shields.io/badge/license-GPL--2.0--or--later-blue)
</div>
---
> **Overview**
> This is a TYPO3 CMS base distribution configured for **headless** operation. Editors
> work in the TYPO3 backend; every page is exposed as a JSON document (no serverside
> HTML). The compiled React application in [`public/_frontend/`](public/_frontend/)
> consumes that JSON. All custom domain logic — content elements, plugins, layout
> containers and the JSON renderers — lives in the **[`evomedien/vitec`](packages/vitec/)**
> extension.
## Table of contents
- [How it fits together](#how-it-fits-together)
- [Tech stack](#tech-stack)
- [Repository layout](#repository-layout)
- [Requirements](#requirements)
- [Getting started](#getting-started)
- [Configuration](#configuration)
- [Everyday commands](#everyday-commands)
- [Deployment notes](#deployment-notes)
- [Documentation](#documentation)
- [License](#license)
## How it fits together
```
┌────────────┐ edits ┌─────────────────────┐ JSON per page ┌────────────────┐
│ Editors │ ─────────────▶ │ TYPO3 v14 backend │ ────────────────▶ │ React (Vite) │
│ (backend) │ │ headless: 1 │ /page → { … } │ public/_front │
└────────────┘ └─────────────────────┘ └────────────────┘
evomedien/vitec extension
(content elements · plugins · JSON-LD)
```
The heavy lifting — the JSON envelope, perplugin renderers, layout containers and
schema.org structured data — is documented in the extensions architecture spec:
**[`packages/vitec/Documentation/Headless-JSON-Architecture.md`](packages/vitec/Documentation/Headless-JSON-Architecture.md)**.
## Tech stack
| Layer | Technology |
|---|---|
| CMS / backend | TYPO3 CMS `^14.3` (headless) |
| Language / runtime | PHP `8.4` |
| Dependency management | Composer (base distribution) |
| Headless rendering | `friendsoftypo3/headless`, `nb-headless-content-blocks` |
| Content modelling | `friendsoftypo3/content-blocks`, `b13/container` |
| News | `georgringer/news` |
| Custom logic | `evomedien/vitec` (see [`packages/vitec/`](packages/vitec/)) |
| Front end | React, built with Vite → `public/_frontend/` |
## Repository layout
```
live/
├── config/
│ ├── sites/vitec/config.yaml # site config (headless: 1, Sets, routing)
│ └── system/settings.php # TYPO3 system config (git-ignored — secrets)
├── packages/
│ └── vitec/ # the custom extension (see its own README)
├── public/
│ ├── index.php # TYPO3 front controller
│ ├── _frontend/ # compiled React app (Vite build)
│ ├── _assets/ # published extension assets
│ ├── fileadmin/ typo3/ …
├── var/ # caches, logs (git-ignored)
├── vendor/ # Composer dependencies (git-ignored)
├── Documentation/ # project-level docs
├── composer.json / composer.lock
├── auth.json # Composer auth for private repos (git-ignored)
└── fix-asset-perms.sh # deploy helper — fixes asset file permissions
```
## Requirements
- **PHP 8.4**
- **Composer 2**
- **MySQL / MariaDB** (database)
- **Node.js** (only to build the front end)
- Access to the private `t3planet` Composer repository (via `auth.json`)
## Getting started
```bash
# 1. Install PHP dependencies (requires a valid auth.json for the private repo)
composer install
# 2. Configure the system (database, encryption key, …)
# config/system/settings.php is git-ignored; create it via the Install Tool
# or copy it from a secure source.
# 3. Apply the database schema
vendor/bin/typo3 database:updateschema "*.add,*.change"
# 4. Warm up
vendor/bin/typo3 cache:flush
```
The document root is **`public/`**. Point the web server there; `public/index.php` is
the TYPO3 entry point.
## Configuration
- **Headless mode & routing** — `config/sites/vitec/config.yaml`:
```yaml
base: /
headless: 1
dependencies:
- friendsoftypo3/headless
- friendsoftypo3/headless-mixed
- nb-headless-content-blocks/headless-content-blocks
- georgringer/news
```
- **System settings & secrets** — `config/system/settings.php` and `auth.json` are
**git-ignored**. Never commit database credentials or Composer tokens.
## Everyday commands
```bash
vendor/bin/typo3 cache:flush # clear all caches
vendor/bin/typo3 database:updateschema "*.add,*.change" # apply schema changes
bash fix-asset-perms.sh # fix asset permissions (see below)
```
## Deployment notes
- **Document root:** `public/`.
- **Asset permissions:** when files are deployed over an SSHFS/Windows mount they can
land with a toorestrictive mode (no “other” read), which makes the web server return
**403** for backend icons/CSS/JS. Run [`fix-asset-perms.sh`](fix-asset-perms.sh) on the
server after deploying assets (it sets files to `644` / directories to `755` under
`public/_assets` and the extensions `Resources/Public`, then flushes caches).
- **Never commit** `config/system/settings.php` or `auth.json` (already git-ignored).
## Documentation
| Document | Purpose |
|---|---|
| [`packages/vitec/README.md`](packages/vitec/README.md) | The custom extension — features & content elements |
| [`packages/vitec/Documentation/Headless-JSON-Architecture.md`](packages/vitec/Documentation/Headless-JSON-Architecture.md) | Authoritative headless architecture & JSON interface spec |
| [`Documentation/CustomFrameClasses.md`](Documentation/CustomFrameClasses.md) | Custom frame classes |
| [`VITEC-ContentBlocks-Setup.md`](VITEC-ContentBlocks-Setup.md) | Content Blocks setup notes |
## License
[GPL2.0orlater](LICENSE) — © evomedien.
<div align="center"><sub>VITEC · TYPO3 headless backend + React front end</sub></div>
vitecdev
17ZJfy75sJoU68J6