Seat Map Configuration Guide¶
This guide documents how administrators create sector seat maps for the HNS Ticketing System using the visual canvas editor.
Overview¶
The HNS Ticketing System uses a visual canvas-based approach for seat map creation. Administrators draw seat layouts using mouse tools rather than importing external files. This approach provides:
- Flexibility - Handles any seat arrangement (curved, irregular, gaps)
- Visual feedback - See exactly what's being created
- No dependencies - No CAD software or file imports needed
- Consistency - Standard workflow for all stadiums
Reference Materials¶
Stadium plans are available in raw-notes/Stadium plans/ as visual reference only. These files help administrators understand physical layouts when recreating seat maps digitally:
| Stadium | Reference Files | Notes |
|---|---|---|
| Poljud (Split) | Numeracija Poljud 2.11.2024.pdf |
Complete sector numbering |
| Opus Arena (Osijek) | OPUS seating plan/ directory |
Multiple sector images |
| Rujevica (Rijeka) | Rujevica Rijeka/ directory |
Sector layout images |
| Varaždin | Varazdin sjedala/ directory |
Seat configuration data |
| Maksimir (Zagreb) | TBD | To be provided |
Reference Only
These files are not imported into the system. They serve as visual guides while administrators manually create seat maps using the canvas editor.
Workflow: Creating a Seat Map¶
Step 1: Create Sector in Stadium Template¶
Before creating a seat map, ensure the sector exists:
- Navigate to Admin Portal → Stadiums
- Select the stadium template
- Click Add Sector
- Enter sector details:
- Name: e.g., "Zapad Dolje" (West Lower)
- Code: e.g., "ZD" (short identifier)
- Type: Standard, VIP, Accessibility, or Standing
- Save the sector
Step 2: Open Seat Map Editor¶
- In the sector list, click Design Seat Map for the target sector
- The canvas editor opens with:
- Empty grid (for new sectors)
- Existing layout (if seat map exists)
Step 3: Configure Grid Dimensions¶
Set the canvas size based on the physical sector:
- Click Grid Settings (gear icon)
- Enter dimensions:
- Rows: Number of rows in the sector (e.g., 30)
- Max Seats per Row: Maximum seats in any row (e.g., 50)
- Click Apply
Estimating Dimensions
If unsure, start larger than needed. You can always leave areas empty. The system only creates seats where you draw them.
Step 4: Draw Seats¶
Use the Draw Tool (pencil icon, labeled "Draw") to add seats:
| Action | Result |
|---|---|
| Click on cell | Add single seat |
| Click + drag | Add multiple seats in a line |
| Shift + drag | Add rectangular block of seats |
Seats appear as colored squares on the grid.
Capacity Enforcement
The editor tracks the current seat count against the sector's configured capacity. When the seat count reaches the capacity limit, the Draw and Fill tools are disabled and a warning notification is shown. To add more seats, either remove existing seats or increase the sector capacity first.
Step 4b: Fill Rectangular Areas¶
Use the Fill Tool (grid icon, labeled "Fill") to quickly fill rectangular areas with seats:
| Action | Result |
|---|---|
| Click + drag | Select rectangular area to fill with seats |
The Fill tool is useful for rapidly creating large blocks of seats. Click at one corner and drag to the opposite corner to fill the entire rectangle. Empty cells within the rectangle are filled with standard seats; existing seats are not overwritten.
Step 5: Create Gaps (Staircases, Aisles, Walls)¶
Use the Erase Tool (eraser icon, labeled "Erase") to remove seats:
| Action | Result |
|---|---|
| Click on seat | Remove single seat |
| Click + drag | Remove multiple seats along path |
| Shift + drag | Remove rectangular block of seats |
Common gap patterns:
- Vertical staircase: Erase a column of seats
- Horizontal aisle: Erase a row of seats
- Curved wall: Erase seats following the curve
- Irregular boundary: Erase seats at sector edges
Creating a Staircase
- Select Erase tool
- Click on seat in row 1, column 15
- Drag down to row 30, column 15
- Release - vertical gap created
Step 6: Mark Special Seats¶
Use the Select Tool (labeled "Select") and Properties Panel to classify seats:
- Select seats using one of:
- Click individual seat
- Shift+click to add to selection
- Drag to create selection box
- In Properties Panel, choose seat type:
- Standard - Normal sellable seat (default)
- Technical - Camera, media, security (not sellable)
- Accessibility - Wheelchair accessible
- Companion - Next to accessibility seat
Technical Seats
Technical seats are never sold. Mark camera positions, security posts, and media areas as Technical.
Step 7: Configure Row Labels¶
In Grid Settings, configure how rows are labeled:
| Option | Example | Use Case |
|---|---|---|
| Alphabetic | A, B, C, ... Z, AA, AB | Common in Croatia |
| Numeric | 1, 2, 3, ... 30 | Simple numbered rows |
| Custom | Enter each label | Complex/legacy patterns |
Step 8: Configure Seat Numbering¶
Choose numbering direction per sector:
- LTR (Left-to-Right): Seats numbered 1, 2, 3... from left
- RTL (Right-to-Left): Seats numbered 1, 2, 3... from right
The system auto-generates seat numbers based on:
- Grid position (left-to-right within drawn seats)
- Numbering direction setting
- Gaps automatically skip numbers
Numbering with Gap
Row with seats at columns 0-10 and 15-25 (gap at 11-14): - LTR: Seats 1-11 (left block), 12-22 (right block) - Gap doesn't consume numbers
Step 9: Configure Snake Algorithm¶
For automatic seat assignment, configure the snake algorithm:
- Click Snake Settings tab
- Configure:
- Best Row: Which row is "best" (1 = closest to field)
- Traversal: TOP_TO_BOTTOM or BOTTOM_TO_TOP
- Within Row: CENTER_OUTWARD, LEFT_TO_RIGHT, or RIGHT_TO_LEFT
| Setting | Typical Value | Explanation |
|---|---|---|
| Best Row | 1 | Row 1 is closest to field |
| Traversal | BOTTOM_TO_TOP | Fill from field toward top |
| Within Row | CENTER_OUTWARD | Best seats in center of row |
Step 10: Save and Generate Seats¶
- Click Save to store the seat map JSON
- Review the preview showing:
- Total seats
- By type breakdown
- Row/seat number preview
- Click Generate Seats to create database records
Regeneration Warning
If seats exist with sold tickets, regeneration will fail. You must handle existing tickets before modifying the seat map.
Handling Complex Layouts¶
Curved Sections¶
Many stadium sectors have curved rows following the bowl shape:
- Draw the longest row first (usually the back row)
- For each row forward, draw fewer seats on each end
- Use the reference image to match the curve
Variable Row Lengths¶
Not all rows have the same number of seats:
- Draw each row individually
- Start and end at the correct positions
- The system handles different row lengths automatically
Subsectors¶
Some sectors are divided into subsections (e.g., A1, A2, A3):
- Create one seat map for the entire sector
- Use the subsector grouping in snake config to define boundaries
- Subsectors are visual groupings, not separate database entities
Verification¶
After creating a seat map:
- Visual Check: Zoom out and verify overall shape matches reference
- Count Check: Compare total seats with official capacity
- Gap Check: Verify staircases/aisles are in correct positions
- Type Check: Confirm technical seats are marked (camera positions, etc.)
- Generation Test: Generate seats and verify count
Troubleshooting¶
"Seat map already exists" Error¶
The sector already has a seat map. Options:
- Edit existing map (use PUT endpoint)
- Delete existing map first (if no seats generated)
"Cannot modify - tickets sold" Error¶
Tickets exist for seats in this sector:
- Transfer affected tickets to different sector
- Wait for refund/cancellation window
- Contact support for manual intervention
Seats not appearing at correct positions¶
Check:
- Grid dimensions match what you expect
- Row labels are configured correctly
- Browser zoom is at 100%
Performance issues with large sectors¶
For sectors with 5000+ seats:
- Use Chrome or Firefox (better canvas performance)
- Avoid Safari if possible
- Disable other browser extensions
- Use keyboard shortcuts instead of toolbar clicks
Best Practices¶
- Start with reference - Always have the stadium plan visible while creating
- Save frequently - Use Ctrl+S or click Save regularly
- Work in sections - For large sectors, complete one area at a time
- Label as you go - Mark technical seats immediately when drawn
- Test generation - Use preview before final generation
- Document deviations - If actual layout differs from reference, note why
Related Documentation¶
- E2-F10: Sector Seat Map Configuration
- Visual Stadium Editor Tasks
- Stadium Design Tool Tech
- Admin Stadium Configuration Flow
Last Updated: February 2026