Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Statamic Marketing Toolkit Laravel Package

jotham-lec/statamic-marketing-toolkit

A Statamic marketing toolkit that brings essential campaign, SEO, analytics, and promotional tools into your control panel, streamlining common marketing workflows and helping you manage site growth from one place.

View on GitHub
Deep Wiki
Context7

Getting Started

This is a Statamic addon (jotham-lec/statamic-marketing-toolkit) that produces marketing-facing artifacts for your site — most notably an llms.txt file that describes your site to LLM crawlers in a stable, human-readable outline.

Install and publish config:

composer require jotham-lec/statamic-marketing-toolkit
php artisan vendor:publish --tag=statamic-marketing-toolkit-config

Clear Statamic's caches after install so the new route/collection is picked up:

php artisan cache:clear && php artisan statamic:stache:clear

Where to look first (in order):

  1. config/statamic-marketing-toolkit.php — the generated-file settings and ordering options live here. Read this before touching templates.
  2. resources/views/vendor/statamic-marketing-toolkit/ — the Antlers/Blade templates that shape the llms.txt output. This is where you customise section ordering and content.
  3. The published route — hit /llms.txt on a local environment to see what is actually being served.

First use case: point the addon at a collection (e.g. pages or blog) and confirm /llms.txt renders the entries in the order you expect. As of v0.29.1 the output order is now stable across builds, so the file you see locally is the file your crawler sees after a deploy.

Implementation Patterns

Treat llms.txt as a build artifact, not a page. Generate it on deploy and diff it in CI. With v0.29.1's ordering fix, a no-op deploy should produce a byte-identical file — which makes a git diff --exit-code check on the generated output a genuinely useful regression test.

Content curation via a dedicated collection. Rather than dumping every entry, use a marketing_sections (or similar) collection whose blueprint holds title, description, and an include_in_llms toggle. Order by an explicit order integer field — do not rely on publish dates, because date ties produce nondeterministic ordering that the new release only partially protects you from.

Multi-site / multi-locale. Register the addon's route per site and generate one file per locale. Keep a small Artisan command wrapper so your deploy pipeline can loop sites:

foreach (Statamic::sites() as $site) {
    // generate for $site->handle(), write to public/{handle}/llms.txt
}

Cache-bust on content save. Add a listener on EntrySaved / EntryDeleted that forgets the llms.txt cache key. Marketing files are read rarely but edited often, and a stale cache here is invisible until someone audits the file.

Pair with robots.txt. Reference the file explicitly (LLMs-Txt: /llms.txt) so crawlers that support the convention find it without guessing at the root path.

Gotchas and Tips

Ordering is the whole story in this release. v0.29.1 fixed llms.txt order drifting between builds. If you pinned 0.29.0 or earlier, upgrade — it's a no-op change (Nothing to do), no config migration required. But note the fix makes ordering stable, not correct: if your ordering source is ambiguous (ties on dates, unindexed sorts), the file can still settle on a surprising-but-consistent order. Audit the first build after upgrading and pin explicit sort keys.

Caching layers stack. Statamic's stache, Laravel's cache, and any full-page/CDN cache can each serve a stale file. When debugging "my edits didn't appear", check in that order — the stache is the usual culprit in local dev.

Route collisions. If you already serve a static public/llms.txt, the addon route and the static file will fight. Pick one; the static-file path is often preferable in production for CDN friendliness.

Don't render request-dependent data. Anything touching the current user, session, or request URL will make the file non-deterministic again — the exact class of bug this release fixed. Keep the template a pure function of content.

Extension points to prefer: the published config for toggles, the published views for formatting, and an event listener for cache invalidation. Avoid subclassing addon internals — the package is pre-1.0 (0.29.x) and internal namespaces can move between minor versions.

Watch the changelog cadence. Frequent patch releases on a 0.x package mean the surface is still settling. Pin with ~0.29.0 rather than ^0.29 if you need reproducibility, and read each changelog's "Upgrading" block — so far they've been empty, but that won't hold forever.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle