Skip to content

Admin Portal

The Admin Portal is the comprehensive management interface for HNS staff to manage all aspects of ticketing operations.

Tech Stack

  • Backend: Symfony (PHP)
  • Templates: Twig
  • Styling: Tailwind CSS
  • Interactivity: Alpine.js for dynamic components
  • Stadium Maps: SVG-based visualization

User Roles

Role Permissions
Super Admin Full system access, can approve cancellations
Match Manager Create/edit matches, configure sales phases
Stadium Operator Seat operations, stadium configuration
Quota Manager Create/manage quotas, CSV import
BLACKADMIN Blacklist management, violation monitoring
Support Agent Ticket lookup, transfers, refunds
Finance Reports, reconciliation
Read-Only View dashboards and reports only
Admin Portal
├── Dashboard
├── Events & Matches
│   ├── Match List
│   ├── Create Match (Wizard)
│   └── Match Detail
│       ├── Info Tab
│       ├── Stadium Tab
│       ├── Sales Phases Tab
│       └── Quotas Tab
├── Stadium Management
│   ├── Stadium Templates
│   ├── Seat Operations
│   └── Sector Transfer
├── Quota Management
│   ├── Quota List
│   ├── Create Quota
│   ├── CSV Import
│   └── Quota Detail
├── Blacklist (BLACKADMIN)
│   ├── Blacklist Entries
│   ├── CSV Import
│   └── Violation Attempts
├── Reports
│   ├── Sales Reports
│   ├── Real-Time Dashboard
│   ├── Financial Reports
│   └── Operational Reports
├── Support Tools
│   ├── Ticket Lookup
│   ├── Transfer Tickets
│   ├── Process Refunds
│   └── Emergency Print
└── Settings
    ├── Users & Permissions
    └── System Configuration

Screens

Dashboard

Purpose: Overview of upcoming matches, key metrics, and quick actions.

Key Components:

  • Stats Cards: Total upcoming matches, tickets sold today, active quotas, pending support tickets
  • Upcoming Matches Table: Next 5 matches with status, sales progress, quick actions
  • Sales Progress Chart: Today's sales volume over time
  • Quick Actions: Create match, import quotas, view reports

Workflow Reference: Real-Time Statistics

Layout:

┌─────────────────────────────────────────────────────────────────┐
│  HNS Admin Portal                           [User] [Logout]     │
├─────────────────────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐            │
│ │ Upcoming │ │  Sold    │ │  Active  │ │  Support │            │
│ │ Matches  │ │  Today   │ │  Quotas  │ │  Tickets │            │
│ │    5     │ │  1,234   │ │    42    │ │    8     │            │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘            │
│                                                                  │
│ ┌─────────────────────────────────┐ ┌─────────────────────────┐ │
│ │     Upcoming Matches            │ │     Quick Actions       │ │
│ │  ┌─────────────────────────┐    │ │                         │ │
│ │  │ CRO vs POL | Mar 15     │    │ │  [Create Match]         │ │
│ │  │ Sales: 85% | Published  │    │ │  [Import Quotas]        │ │
│ │  └─────────────────────────┘    │ │  [View Reports]         │ │
│ │  ...                            │ │                         │ │
│ └─────────────────────────────────┘ └─────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘


Match List

Purpose: View and manage all matches with filtering and bulk actions.

Key Components:

  • Filter Bar: Status dropdown, date range picker, search input
  • Data Table: Sortable columns, status badges, action buttons
  • Bulk Actions: Export selection, bulk status change

Table Columns:

Column Description
Match Home vs Away teams
Date Kick-off date/time
Venue Stadium name
Status Draft, Published, Cancelled, Closed
Sales Progress bar (sold/total)
Actions View, Edit, Cancel

Workflow Reference: Match Management


Create Match Wizard

Purpose: Multi-step wizard for creating new match events.

Steps:

  1. Basic Information
  2. Home Team (defaults to Croatia)
  3. Away Team (dropdown)
  4. Competition Type (UEFA Nations League, Friendly, Qualifier, etc.)
  5. Date and Time (kick-off)
  6. Max. tickets per person ("Maks. ulaznica po osobi", 1–10, default 4): how many tickets one buyer may hold for the match across their orders, in every channel (HNSTIK-310)
  7. Venue/Stadium selection
  8. Away match toggle (for non-numbered seats)

  9. Stadium Configuration (skipped for away matches)

  10. Select stadium template
  11. Configure active sectors
  12. Set pricing per sector/category
  13. Define capacity

  14. Sales Phases

  15. Phase 1: Loyalty Early Access
    • Start/End Date
    • Eligibility Rules (min points)
    • Ticket Limit
  16. Phase 2: General Public

    • Start/End Date
  17. Quotas (Initial)

  18. Pre-defined quota types (UEFA, Sponsors, Family)
  19. Sector allocations
  20. Percentage of capacity

  21. Content & Media

  22. Match banner upload
  23. Important info text
  24. Visibility status (Draft/Scheduled/Visible)

  25. Review & Publish

  26. Summary of all settings
  27. Validation warnings
  28. Publish or Save as Draft

Key Components:

  • Step indicator (progress bar)
  • Form sections with validation
  • Date/time pickers
  • Stadium mini-map preview
  • Sector selection interface

Workflow Reference: Match Management


Match Detail

Purpose: View and manage all aspects of a specific match.

Tab Structure:

Info Tab

  • Match details (teams, date, venue)
  • Edit basic information
  • Status management (Publish, Cancel, Close)
  • Notification options (with/without ticket holder notification)

Stadium Tab

  • Interactive stadium map
  • Sector status overview
  • Link to seat operations
  • Capacity breakdown by status

Sales Phases Tab

  • Phase configuration
  • Edit phase dates
  • View phase performance

Quotas Tab

  • List of quotas for this match
  • Create new quota
  • Quick status overview (allocated, claimed, sold)

Action Buttons:

  • Export Access Control Data (pre-match)
  • Close Match (post-match, with attendance import)
  • Cancel Match (requires Super Admin)

Workflow References: - Match Management - Stadium Configuration


Stadium Management - Seat Operations

Purpose: Individual and bulk seat status management.

Key Components:

  • Stadium Visualization: Full stadium view with zoom capability
  • Selection Tools:
  • Click individual seats
  • Multi-select mode (Ctrl+click)
  • Select by section
  • Select by row range
  • Select by seat range
  • Filter-based selection
  • Status Change Panel:
  • Current status display
  • New status dropdown (valid transitions only)
  • Reason field (required)
  • Apply button with confirmation

Selection Summary Panel:

Selected: 856 seats
├── Available: 856
├── Sold: 0
├── Reserved: 0
└── Other: 0

[Change Status ▼]

Seat Status Colors:

Status Color Description
Available Green Ready for sale
Issued ("Izdano") Blue Ticket issued: sold, claimed from a quota or honorary. Admin says "Izdano", never "Prodano", for a seat or ticket status (HNSTIK-309)
Free ("Besplatno") Teal An issued seat whose ticket cost 0 € (FREE quota, honorary); computed from the ticket price, not a seat status of its own. The legend counts it inside "Izdano" and on its own (HNSTIK-309)
Reserved Yellow In cart/pending
Technical Purple Press/media
Official Gold VIP allocation
Blocked Red Unavailable
Maintenance Gray Under repair
Quarantined Orange Investigation
Allocated Cyan Quota assigned
Inactive Light Gray Not in use

Workflow Reference: Seat Operations


Seat Search & Lookup

Purpose: Find seats by various criteria and view/modify details.

Search Methods:

  1. By Seat Number: Stadium, Section, Row, Seat
  2. By Reservation/Quota: Document type and number
  3. By Email: Customer email address
  4. Via Stadium Map: Click on seat in visualization
  5. Advanced Search: Multi-criteria filters

Seat Detail Modal:

┌─────────────────────────────────────────────┐
│ Seat: Maksimir - Section A - Row 5 - Seat 12│
├─────────────────────────────────────────────┤
│ Status:        Izdano (blue badge)          │
│ Match:         Croatia vs Poland - 15.03.26 │
│ Linked Doc:    Quota #300032x [View →]      │
│ Customer:      J*** K*** (OIB: *******34)   │
│ Email:         j***@email.com               │
│ Order:         #4100234                      │
│ Price:         50.00 EUR                     │
│ Payment:       Paid                          │
│ Last Change:   15.11.2025 14:32 by admin    │
├─────────────────────────────────────────────┤
│ [Change Status] [Modify Assignment] [History]│
└─────────────────────────────────────────────┘

Workflow Reference: Seat Operations - Part 5


Quota Management - Quota List

Purpose: View and manage all quotas across matches. Standard quotas only: Petrol quotas are on the Petrol pages.

Key Components:

  • Filter Bar: Match dropdown, status filter, search by email
  • Data Table: Sortable, paginated
  • Bulk cancel: a checkbox per row and select-all for the page; "Otkaži kvotu" cancels the ticked quotas with either option (all unused / unfulfilled only) after a confirmation with the count, each as a single cancel would (holder e-mail, audit entry), and lists the ones that could not be cancelled with the reason. Cancelled quotas cannot be ticked; changing page or filters clears the selection (HNSTIK-323).

Table Columns:

The import template's columns under its names (HNSTIK-322), plus the match. The table scrolls sideways with Napomena pinned on the left; the create form and the quota detail use the same names.

Column Description
Napomena The quota's name; links to its detail
Utakmica Match
Email Holder's e-mail
Šifra sektora The quota's sector code
Količina Seats allocated
Preuzeto Seats claimed / allocated
Popust Percentage, or GR for free
Bespl. kvota Da when free
Algoritam NM or REDOM
Autom. slanje maila Invitation sent on creation
Odg. plać Deferred payment
Transfer kvote Subquotas allowed (delegation)
Prijenos dopušten Ticket transfer allowed
Vrijedi do Deadline (visual reminder)
Status Quota status
Email poslan E-mails the holder was sent that the mailer took (HNSTIK-321)

Status Badges:

  • Active: Green - quota is active
  • Past Deadline: Yellow - visual reminder, still claimable
  • Cancelled: Red - admin cancelled

Workflow Reference: Quota Creation


Quota Management - Create Quota

Purpose: Create individual quota with seat allocation.

Form Fields:

Field Type Description
Recipient Email Email input Unique identifier
Internal Note Text Admin-only label
Match Dropdown Target match
Sector Single choice One sector (e.g. D1): a quota takes its seats from one sector (HNSTIK-320)
Quantity Number Total tickets
Discount Code Dropdown 0 (full), GR (free), or %
Allocation Algorithm Dropdown NM (Najbolja mjesta): the seats a fan purchase would get; REDOM (Mjesta po redu): seats in order from the first free seat
Expiration Date DateTime Visual reminder
Can Create Subquotas Checkbox Allow delegation
Delayed Payment Checkbox Deferred payment option
Transfer Permission Radio YES (unlimited) / NO (standard rules)
Auto-Send Email Checkbox Send notification on create

Validation:

  • Email format
  • Sector codes exist for match
  • Sufficient inventory available
  • Expiration is future date

Workflow Reference: Quota Creation


Quota Management - CSV Import

Purpose: Bulk import quotas from CSV file.

Steps:

  1. Select Match(es): Single or multiple matches
  2. Upload CSV: File with predefined format
  3. Validation Preview: Show valid/invalid rows with errors
  4. Confirm Import: Review and execute

CSV Format:

email,internal_note,sectors,quantity,discount_code,algorithm,expiration,can_subquota,delayed_payment,transfer
sponsor@company.hr,T-Com Sponsor,D1,10,GR,NM,2026-03-10 23:59,TRUE,FALSE,NO

Validation Display:

Total rows: 287
├── Valid: 283 ✓
└── Invalid: 4 ✗
    - Row 45: Invalid email format
    - Row 78: Sector X99 does not exist
    - Row 156: Insufficient inventory (requested 50, available 23)
    - Row 231: Duplicate email in file

Workflow Reference: Quota Creation - A1


Quota Detail

Purpose: View full quota details with real-time status.

Sections:

  • Summary: Recipient, match, sectors, deadline
  • Status Breakdown: Visual chart of allocated/reserved/sold/delegated
  • Seat List: Table of all seats with individual status
  • Subquotas: List of delegated subquotas (if any)
  • Activity Log: Timeline of quota events

Actions:

  • Edit Quota
  • Cancel Quota (options: All Unused / Unfulfilled Only)
  • Resend Email
  • Masquerade as Owner (admin login as quota holder)

Workflow Reference: Quota Creation


Blacklist Management - Entry List

Purpose: View and manage blacklist entries.

Key Components:

  • Search Bar: By OIB or name
  • Data Table: Paginated list of entries
  • Quick Actions: Add entry, Import CSV, Clear all

Table Columns:

Column Description
OIB Partially masked (*34)
Name Full name
DOB Date of birth
Effective Date Date added
Actions View, Remove

Workflow Reference: Blacklist Management


Blacklist Management - CSV Import

Purpose: Bulk import blacklist from security team.

Process:

  1. Pre-Match Refresh: Clear existing entries (optional)
  2. Upload CSV: Standard format from police/security
  3. Validation: OIB format, duplicates
  4. Preview: Valid/invalid counts
  5. Confirm Import: Execute with audit note

CSV Format:

OIB,FirstName,LastName,DateOfBirth
12345678901,Ivan,Horvat,15.03.1985

Post-Import Warning: If imported OIB has existing tickets, system prompts for ticket cancellation.

Workflow Reference: Blacklist Management


Blacklist Management - Violation Attempts

Purpose: Monitor blocked purchase attempts.

Report Display:

Column Croatian Label Description
Date DATUM POKUSAJA Timestamp of attempt
First Name IME Attempted name
Last Name PREZIME Attempted surname
DOB DATUM_ROD Date of birth
OIB OIB Partially masked
Event - Match attempted
IP - IP address
User ID - HNS app account
Attempts - Repeat count

Filters: Date range, individual, event

Workflow Reference: Blacklist Management - Part 3


Reports - Sales Dashboard

Purpose: Real-time sales monitoring.

Key Components:

  • Live Counter: Tickets sold today (auto-refresh)
  • Sales by Channel: Online, Box Office, Quota
  • Sales by Sector: Heat map of stadium
  • Hourly Chart: Sales volume over time
  • Top Matches: Best-selling upcoming events

Workflow Reference: Real-Time Statistics


Reports - Financial Reports

Purpose: Financial reconciliation and export.

Report Types:

  • Daily sales summary
  • Payment method breakdown
  • Refund summary
  • Service fee report
  • Deferred payment status

Export: CSV, Excel, PDF

Workflow Reference: Financial Reporting


Support Tools - Ticket Lookup

Purpose: Find tickets for customer support inquiries.

Search Options:

  • Order number
  • Email address
  • OIB
  • Ticket barcode

Result Actions:

  • View ticket details
  • Transfer to another person
  • Process refund
  • Emergency print

Workflow References: - Customer Support Transfer - Customer Support Refund


Support Tools - Emergency Print

Purpose: Print physical tickets for edge cases.

Use Cases:

  • Customer phone malfunction
  • QR code display issues
  • VIP/official requirements

Process:

  1. Look up ticket by barcode/order
  2. Verify customer identity
  3. Select thermal printer
  4. Print ticket with unique barcode
  5. Invalidate mobile ticket (optional)

Workflow Reference: Emergency Ticket Printing


Cross-Portal Integration

Masquerade Function

Admin can "login as quota owner" to assist users:

  • Available from quota detail page
  • Full view of what quota holder sees
  • All actions logged with admin attribution
  • 30-minute session limit
  • Cannot perform payment actions

Audit Trail

All admin actions logged with:

  • Admin user ID
  • Timestamp
  • Action type
  • Before/after values
  • Reason (when required)

Last Updated: January 2026