orascheandClaude Fable 5 6811463343 Product texts: mapping completed; product model: solutions + resources
Two work packages, one deploy.

Workbook field mapping completed (2026-09-18)
- highlights <- g:Technical Highlight (new spec-row component of the
  full agency delivery; composeGroup() is generic, no change needed)
- applications <- g:Why Choose Card (benefit cards as one block)
- seometa <- new composed source x:seometa (Introduction body trimmed
  at a word boundary to ~155 chars - the SEO sheet ships no meta
  description, a trimmed intro beats an empty tag)
- teaser stays the hero one-liner, settling the varchar(255) question
- fix: "Save mapping" now merges over the stored mapping instead of
  overwriting it - an empty dropdown no longer wipes a stored selector

Product model: solutions relation and Resources tab (2026-09-24)
- closes the gaps the full workbook walkthrough exposed (rows the
  import deliberately skips because the model had no place for them)
- solutions: MM multi select to tx_vitec_domain_model_solution
  (tx_vitec_product_solution_mm, relatedprodukt pattern), emitted by
  both product renderers as solution cards in the shared shape
- Resources tab: inline child table tx_vitec_product_resource - per
  entry a type (documentation/support), an editable card title/text,
  an icon (free text with a value-picker seed set) and one link
  (page/url/file/record via the link wizard). Deliberately no Extbase
  model: only the UserFunc path reads the rows.
- datasheets: own MM selection of download records below the resource
  list (tx_vitec_product_datasheet_mm); emitted into the SAME
  resources envelope as ready-made type=datasheet cards (title/teaser/
  icon from the record, url = the public /download/<slug> route, uid
  fallback - private/hidden downloads 404 as everywhere)
- JSON `resources` (detail payload only, like heroimage): list envelope
  {layout, items[]}; a hand-written card whose link is empty or
  unresolvable is not emitted; layout switches to carousel above three
  cards in total
- solutions hybrid (same day, after analysing all 100 workbooks: their
  Solution Cards reference the 8 GROUPS in 98% of cases): new is_group
  flag on the solution model, new idempotent CLI
  vitec:create-solution-groups (8 group records; title source is
  AlignSolutionsCommand::TARGET - now public -, category = the group's
  own category, detail_page = the /solutions group page with -N
  disambiguation). Group records are invisible to the solution list
  and to vitec:align-solutions and only selectable in the product
  relation; product solution cards carry isGroup
- spec raised to v1.18 (7.15 member table, 7.13.3 note, revision row;
  the footer had been stuck at v1.15 since 1.16/1.17)

Requires on the server:
    vendor/bin/typo3 database:updateschema "*.add,*.change"
    vendor/bin/typo3 cache:flush

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-24 14:47:04 +02:00
2026-05-18 14:46:25 +02:00
2026-04-17 13:53:39 +02:00
2026-05-18 14:46:25 +02:00
2026-05-18 14:46:25 +02:00

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.


TYPO3 PHP Mode Frontend Composer License


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 server‑side HTML). The compiled React application in public/_frontend/ consumes that JSON. All custom domain logic — content elements, plugins, layout containers and the JSON renderers — lives in the evomedien/vitec extension.

Table of contents

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, per‑plugin renderers, layout containers and schema.org structured data — is documented in the extension’s architecture spec: 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/)
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

# 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:
    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

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 too‑restrictive mode (no “other” read), which makes the web server return 403 for backend icons/CSS/JS. Run fix-asset-perms.sh on the server after deploying assets (it sets files to 644 / directories to 755 under public/_assets and the extension’s Resources/Public, then flushes caches).
  • Never commit config/system/settings.php or auth.json (already git-ignored).

Documentation

Document Purpose
packages/vitec/README.md The custom extension — features & content elements
packages/vitec/Documentation/Headless-JSON-Architecture.md Authoritative headless architecture & JSON interface spec
Documentation/CustomFrameClasses.md Custom frame classes
VITEC-ContentBlocks-Setup.md Content Blocks setup notes

License

GPL‑2.0‑or‑later — © evomedien.

VITEC · TYPO3 headless backend + React front end

vitecdev 17ZJfy75sJoU68J6

S
Description
No description provided
Readme GPL-2.0
18 MiB
0 Stars 2 Watchers 0 Forks
Languages
PHP 89.1%
HTML 7%
JavaScript 1.9%
CSS 1.5%
Shell 0.4%