docs
TYPO3 v14
Getting started  /  Yavi Theme — Documentation

Yavi Theme — Documentation

Complete documentation for the Yavi theme family for TYPO3 v14: yavi_core (the framework) and the theme built on it, yavi_lucerne.

Written for three kinds of reader, in this order:


Table of contents

Getting started

#ChapterFor
01Introduction and architectureeveryone
02Requirementsintegrators
03Installation with DDEV — new project, with demo contentintegrators
04Installing into an existing TYPO3 — without demo contentintegrators
05Setting up the first siteintegrators

Configuration

#ChapterFor
06The Yavi Theme backend moduleintegrators, editors
07Design / Colorsintegrators
08Layoutintegrators
08bThe Navigation pageintegrators
09Config: site, contact, trackingintegrators
10Custom CSS classesintegrators
11Licenceintegrators
—Settings reference (all 100 fields)integrators

Working with content

#ChapterFor
12Content elementseditors
13Hero and carouseleditors
14Navigationintegrators, editors
—Content element reference (all types)editors

Extending


Watch it first

Two and a half minutes on what yavi_core and yavi_lucerne do — the fastest way to see whether this documentation is about the right thing for you.

The video loads from YouTube only once you press play — nothing is requested before that (why).

Two more walkthroughs sit in the chapters they belong to: the installation with the installer and DDEV, and the hero carousel from gradient overlay to text animation. All of them are on the Yavi Themes channel.


The 30-second version

Yavi Lucerne: the fullscreen hero with a rotating headline, transparent header over the image and the scroll indicator
Yavi Lucerne: the fullscreen hero with a rotating headline, transparent header over the image and the scroll indicator
bash
# packages/yavi-core and packages/yavi-lucerne unpacked from the ZIP,
# ./packages/* registered as a path repository in composer.json
composer require webagentur-yahya/yavi-core:dev-main \
                 webagentur-yahya/yavi-lucerne:dev-main
vendor/bin/typo3 extension:setup
vendor/bin/typo3 cache:flush

The version is dev-main because the packages come from a ZIP and not from a tagged repository — the installation chapter has the full composer.json.

Then, in the backend:

  1. Site Management → Sites → your site → Sets: activate yavi-lucerne/full.
  2. Yavi Theme → Licence: enter the licence key. Without a valid licence the extension does not work.
  3. Yavi Theme → Design / Colors: set your brand colours.

Everything else is detail — and that detail is what the rest of this documentation is about.


Conventions used here


Impressions

The theme on a case study page
A case study page
A content page with cards and text elements
A content page: cards, text elements, section spacing
The contact page
The contact page

All screenshots in images/ come from a running installation (TYPO3 14.3, Yavi Lucerne), taken at 1600 CSS px — 390 px for the mobile ones — with a 2× device pixel ratio, so they stay sharp on retina displays. The PNGs are the originals; the pages reference the .webp copies next to them.

They are generated, not taken by hand:

bash
cd packages/yavi-core/Build
node --experimental-websocket screenshots.mjs

The script drives Chrome over the DevTools Protocol, creates a throwaway admin in light mode, walks every backend module and frontend page in the list at the top of the file, and deletes that admin again. Pass file names to redo only some of them. Re-run optimize-images.py afterwards.


Reading this documentation

Two formats, one source:

The documentation is also available in German, at /de/ — the EN / DE switch at the top right of every page leads to the same chapter in the other language.

Rebuild the HTML after editing a chapter:

bash
python3 build.py

It writes one .html per .md, plus assets/docs.css, assets/docs.js and the search index. No Node, no toolchain — the same rule the theme itself follows.

Blockquotes become callouts. The build guesses the severity from the wording, which is good enough for most notes; start the quote with !! when you need the loud red one and do not want to rely on the guess:

markdown
> A plain note becomes a lime "info" callout.
> Wording like "never" or "must" makes it a rose "warning" callout.
> !! **This becomes the large danger callout** — for the few places where
> getting it wrong destroys data.

Two more scripts, both run only when their input changes:

bash
python3 optimize-images.py   # new screenshots in images/ → .webp
python3 fetch-fonts.py       # re-download the webfonts into assets/fonts/

optimize-images.py needs cwebp (brew install webp) and skips anything already converted. fetch-fonts.py exists so the pages never call fonts.googleapis.com — a documentation site for a theme that self-hosts its fonts should do the same. Run it only to pick up a new font version.


Publishing

The pages are published at docs.yavithemes.com with Deployer — the same tool the theme and the licence server use. One command does the whole chain:

bash
dep deploy live

In order: build.py runs, the result is committed and pushed to GitLab, the server checks that state out into a new release, and the release is symlinked to current. Finally the live URL is fetched once to confirm it answers.

Because the server deploys what is in GitLab, the HTML has to be committed — so dep deploy asks for a commit message whenever the working tree is dirty and refuses to continue if you decline. Nothing is deployed that is not on main.

Individual steps, when you want only one of them:

bash
dep docs:build live    # rebuild the HTML, nothing else
dep docs:push live     # commit and push, without deploying
dep docs:images live   # new screenshots in images/ → .webp
dep docs:status live   # which commit is live, how many pages
dep docs:verify live   # does the live URL answer with 200?
dep rollback live      # back to the previous release

deploy.php and hosts.yml hold the configuration. Two things are worth knowing about it:

There is no CI pipeline and nothing to install on the server: no Composer, no Node, no Python. The same rule as everywhere else here.