Fjord for Craft CMS

Console & config

Commands

php craft fjord/flows                     # the flows and their steps
php craft fjord/flows/routes              # the site routes Fjord contributes
php craft fjord/flows/check               # preflight
php craft fjord/flows/export              # the whole configuration as JSON
php craft fjord/flows/export springLaunch --file=spring.json
php craft fjord/flows/import --file=spring.json
php craft fjord/flows/install-templates   # copy the reference templates into your site
php craft fjord/stats/report [handle] --days=30
php craft fjord/stats/prune

fjord/flows/routes is the fastest way to find out why a step 404s: it prints exactly what Fjord has contributed to the site's URL rules, per site.

Moving funnels between environments

Fjord's configuration lives in the database, not project config — the same call Commerce makes for its own shipping methods, and for the same reason: flows reference purchasable IDs, entry IDs and coupon codes, none of which mean the same thing in two environments.

export and import are how a funnel travels. Purchasables are written out by SKU as well as by ID, and read back by SKU first, so a product does not silently become a different product.

Importing a flow whose handle already exists replaces it wholesale rather than merging — a half-merged funnel is a funnel nobody can reason about. Offers are matched by handle and updated in place.

Settings

SettingDefaultDoes
Template Rootshop/fjordWhere a bare step template name is looked up
Session Cookie Namefjord_sessionThe cookie carrying a visitor's place in a funnel
Session Lifetime72 hoursInactivity before a funnel session is forgotten
Offer Window60 minutesHow long after an order a one-click offer may still be charged
Require a Paid OrderonOnly offer an upsell once the parent order is paid
Replay Declined OffersoffShow an offer again to someone who already refused it
Track EventsonRecord views and conversions
Event Retention365 days0 keeps them forever
Webhook Timeout10sHow long to wait on an outbound webhook

Permissions

  • Manage flows and steps
  • Manage offers
  • View funnel reports
  • Manage webhooks

The control-panel section only appears for a user who has at least one of them.

What Fjord stores

Nine tables: flows, steps, variants, offers, the step–offer join, sessions, events, grants and webhooks. Deleting a flow cascades to its steps, variants, sessions and events.

Grants — the record of what each offer resolved to on each order — are deliberately not deleted with the order they belong to, and events are not foreign-keyed to orders at all. Commerce's own garbage collection can remove an order long after the funnel it came through, and losing the analytics row with it would silently rewrite history.