Draw a venue map

Upload a floor plan or start on a blank grid, draw each zone, and give every map in the app its labels.

Owned by Venue Manager · 7 steps · about 15 minutes

Why this exists

The map is an illustration of the zone roster, never its replacement — nothing the door reads comes from the drawing. Zones are drawn as polygons over a floor-plan image or a blank grid; points are stored normalised (0–1), so the same shape survives any plan image size.

Two rules the editor lives by since plan 72: everything it draws is visible while you draw it, and every failure says so — a page that silently ignores a refused save is indistinguishable from a broken one.

Before you start

  • A venue with zones defined
  • venue_manager (or admin) access

Steps 1–7 — Venue Manager

their manual →
  1. 1
    Open the layout editor for a venue with no plan yet.
    /admin/venues/{venue_id}/layout venues
    Expected result The upload form and a “Start on a blank grid” button. No canvas yet.
    Watch out for Nothing to draw on until a layout exists — that is a state, not a failure.
  2. 2
    Start on a blank grid.
    /api/venues/{venue_id}/layout POST venues
    Expected result A visible 50px grid appears.
    Watch out for Before plan 72 the grid painted with an unresolvable stroke and the box looked empty — var() works in CSS declarations, never in SVG presentation attributes.
  3. 3
    Pick a zone and click four corners.
    /admin/venues/{venue_id}/layout venues
    Expected result A dashed outline follows each click, with a corner count under the canvas.
    Watch out for That feedback is the whole difference between drawing and guessing.
  4. 4
    Double-click to close the shape.
    /api/venues/{venue_id}/shapes POST venues
    Expected result The shape saves and reloads as a filled polygon with its zone name.
    Watch out for The double-click only closes — it no longer leaves a stray corner at the closing position.
  5. 5
    Draw a second zone, then delete the first from the list.
    /admin/venues/{venue_id}/layout venues
    Expected result The list and the map agree.
    Watch out for Saving the same zone again replaces its shape — one shape per zone per layout.
  6. 6
    View the public map.
    /venues/{venue_id}/map venues
    Expected result Both zones, labelled.
    Watch out for The label fix lands here too — zone names were invisible on every map surface, and nobody had reported it.
  7. 7
    Try to upload a file that is too large or the wrong type.
    /api/venues/{venue_id}/layout POST venues
    Expected result A clear error beside the form, and nothing changes.
    Watch out for Silent failure was half the original bug: the editor could not distinguish “worked” from “refused”.