System Architecture

High-level components

  • Frontend: Vue 3 + Vuetify (Vite build)
    • Wallet connect UX (CIP-30 / SignData)
  • Reads wallet contents & NFT metadata via provider APIs
  • Calls backend controllers for auth and ticket issuance
  • Backend: Laravel 10 (PHP 8.1)
    • REST controllers, RBAC, validation, ticket lifecycle
  • Integrations: Koios/Blockfrost for chain data
  • Caching via Redis; database MySQL
  • Infrastructure:
  • Local dev: Docker (Laravel Sail)
  • CI/CD & Staging: Dockerized pipeline
  • Production: Laravel Vapor (serverless, autoscaling)

Blockchain specifics

  • Wallets: CIP-30 compatible wallets with SignData
  • Standards: CIP-25 & CIP-68 NFTs
  • Networks: preprod & mainnet tested
  • Libraries: CSL (serialization/deserialization), CMS (Cardano Message Signing)

Authentication model

  • Staff users: Laravel username/password + team RBAC
  • Attendees: wallet connection (no account); on ticket creation they sign a message with the staking key; backend verifies signature + token location.

Data model (conceptual)

  • Team → has many Users (with roles)
  • Event (belongs to Team) → has many Tickets
  • Ticket references: event_id, stake_address, policy_id + asset_name, signature, status (issued/redeemed), timestamps

Only staff emails are stored. Attendee identity is the stake address that controls the NFT (public on-chain).


© Adam Dean & Latheesan Kanesamoorthy. Built with Jekyll & Just the Docs.