orascheandClaude Fable 5 d87e64f73b Success stories: downloads and product sections become real plugins
- comparison report migrations/check_product_downloads.php (kept,
  read-only): download records vs. the delivered product workbooks -
  34 of 74 workbook products have a datasheet, the entire Datapath
  line has none in the pool (import came from vitec.com; queued for
  Joe), ~35 orphan datasheets belong to products without records;
  a vitec:link-product-downloads re-run added seven clean links
  (Artio x2, Diamond-H, the three TOUGH records, X-View)
- RTE resolution fixed at the root: ContentElementResolver and
  ContainerChildrenProcessor passed bodytext RAW into the payload, so
  t3:// links leaked unresolved; both now run RTE columns (bodytext,
  vitec_quote) through RteResolver::html()
- the imported "Download Success Story" RTE buttons carried the wrong
  link identifier (tx_vitec_download -> download, one-time migration
  fix_download_record_links.php) AND old-site uids - missing here or,
  worse, accidentally pointing at foreign PDFs. New
  vitec:convert-story-download-buttons replaces them with real
  vitec_downloadcard plugins: the download is resolved by STORY title
  (manual map for ISR / "Okada Manilla", exact-title fallback for
  suffixless PDFs like "Lord's Cricket Ground"); 29 converted, 4
  stories without a delivered PDF have their button hidden. New
  FlexForm layout "Success Story Download" (story_download) applied
  everywhere; the FE renders it as the previous centered button
- the ADIB "Featured Products" text section (the only one site-wide,
  verified by scan_story_headers.php) is now ONE vitec_productlist
  with hand-picked products via old-name aliases and the new FlexForm
  layout "Success Story Products" (story_products); the four text
  elements are deleted. vitec:convert-story-product-sections stays
  re-runnable for future imports
- the productlist envelope additionally carries "columns" (= number
  of products, capped at 4) so the story grid renders as many columns
  as it has products - additive key, available to every product list;
  and hand-picked lists now ship successStories as an empty array (the
  empty category selection used to aggregate stories over the WHOLE
  tree, leaking story cards into the section)
- the story downloadcards carry header "Downloads" (set on convert
  and backfilled): the front end builds the story anchor nav from
  element headers, so the section now appears there
- diagnosis scripts kept: check_download_record, check_story_elements,
  scan_story_headers; verified live on the ADIB payload (structured
  download object, productlist [5,18,6], texts 10 -> 5)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-10-28 14:10:59 +01: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%