justinholtweb / craft-hitz
Interactive hall plans for Craft CMS. Draw halls, stands and facilities on a real-unit floor plan in the control panel, relate exhibitors to stands, and publish a zoomable, searchable plan on the front end — Donkeytail’s hit areas, grown into a trade-fair floor plan.
Package info
github.com/justinholtweb/craft-hitz
Type:craft-plugin
pkg:composer/justinholtweb/craft-hitz
Requires
- php: ^8.2
- craftcms/cms: ^5.3.0
Requires (Dev)
- craftcms/ecs: dev-main
- craftcms/phpstan: dev-main
- phpstan/phpstan: ^1.12 || ^2.2
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-29 15:34:44 UTC
README
Interactive hall plans for Craft CMS.
Draw your venue's halls, stands and facilities on a real-unit floor plan in the control panel, relate exhibitors to stands, and publish a zoomable, searchable plan with one line of Twig.
Hitz grew out of the Donkeytail idea — content-managed hit areas on an image — and takes it where a trade fair needs it to go. A stand is not a pin on a picture. It is a shape with a size in square metres, it sits inside a hall, it has a number visitors look for, it is available, reserved or booked, and the exhibitor list has to be able to point at it.
{{ craft.hitz.render('spring-fair', { linkField: 'exhibitor' }) }}
Craft 5.3+, PHP 8.2+. Leaflet and Leaflet-Geoman ship inside the plugin — no CDN, no API keys, no third-party requests.
What it does
- A designer in the control panel. Draw rectangles, polygons and circles on a Cartesian plane
in metres or feet (Leaflet
CRS.Simple+ Geoman). Snap to the plan grid and to neighbouring stands, drag, rotate, reshape. Every change saves as you let go. - An underlay you can replace. Put the venue's drawing underneath. Areas are stored in plan units, not image percentages, so a new drawing never moves a stand.
- Areas are elements. Halls, stands and features have titles, codes, their own field layouts per area type, search, the trash, per-site titles, and Craft's slideout editor.
- The boring parts, done. Surface area, dimensions ("6 × 4 m", even rotated), automatic numbering (Hall A → A-01, A-02…), and which hall each stand is in — derived from where it is, re-derived whenever anything moves.
- A front end in one call. Labels that appear as you zoom, tooltips, popups (or your own
popup template), a legend, search by code or exhibitor, highlighting, and shareable deep links
(
#hitz=B-07). Everything is a CSS custom property; everything is available as data for your own renderer. - Relations both ways. Hitz Plans and Hitz Areas relation fields, and ordinary
relatedTofrom either end — "the plan, with this exhibitor's stand picked out" is one option.
Pro
- Availability — available / reserved / booked / unavailable, coloured on the map, in the legend and as index sources.
- GeoJSON import and export (plan units, round-trippable, upsert by code) and a stands CSV for the sales team.
- A JSON endpoint (
/hitz/plans/<slug>.json) for an event app. - Console import/export.
- Unlimited plans and areas (Lite: one plan, 40 areas).
Install
composer require justinholtweb/craft-hitz php craft plugin/install hitz
A fresh install creates three area types — Hall, Stand, Facility. Go to Hitz → Plans → New plan, set its size, and open the designer.
Documentation
justinholt.com/plugins/craft-hitz/docs — also in
docs/.
Editions
| Lite | Pro | |
|---|---|---|
| Price | Free | $79, then $59/year |
| Plans | 1 | Unlimited |
| Areas | 40 | Unlimited |
| Designer, front end, search, relations | ✓ | ✓ |
| Availability | ✓ | |
| GeoJSON / CSV / JSON endpoint / console | ✓ |
Credits
Built on Leaflet (BSD-2-Clause) and Leaflet-Geoman free edition (MIT). Inspired by Good Work's Donkeytail.
Brought to you by Justin Holt.