← Back to projects

Project 01 · Backend engineering

Eventix

A full event ticketing platform built in Go for publishing events, selling limited ticket inventory, issuing QR tickets, and identifying suspicious purchasing behavior.

Project description

A ticket purchase is more than a payment endpoint.

Eventix combines an embedded server-rendered web experience with a versioned REST API. Attendees can discover events, place orders, pay through a mock payment flow, receive QR-code tickets by email, and check in. Organizers can publish events, manage ticket tiers and inventory, and inspect issued tickets.

The platform also runs rule-based risk assessments for paid orders. An admin dashboard surfaces suspicious purchase velocity, bulk orders, new accounts, high-demand events, and prior violations to help identify possible ticket scalping.

Why I made this project

To practice the hard parts that appear after CRUD.

I wanted a project where correctness depends on boundaries between features, not only on individual handlers. Ticketing creates practical backend problems: limited stock, concurrent purchase attempts, atomic writes, authorization, asynchronous delivery, retryable jobs, and operational visibility.

Eventix became a way to explore those concerns in one cohesive product while keeping the deployment understandable enough to run locally with a single Docker Compose command.

Software architecture

One product surface, clear execution paths.

The web and API process owns synchronous requests. SQLite is the shared durable store, while a separate worker handles email delivery and periodic risk assessment away from the request path.

Clients
User interfaces Browser / API client Attendee, organizer, and admin flows
Web + API process
Go · Chi Router & middleware JWT, roles, validation, logging, errors
01 Handlers HTTP and web boundaries
02 Services Business rules and transactions
03 Repositories Feature-owned persistence

Auth · Events · Ticket types · Orders · Tickets · Risk

Data & jobs
Shared volume SQLite Users, inventory, orders, tickets, risk, jobs
Background process Worker Email queue + periodic risk assessor
SMTP + QR tickets Admin risk dashboard
Purchase path

Payment updates inventory, marks the order paid, issues tickets, and enqueues one email job in a single database transaction.

Delivery path

The worker claims queued jobs, generates inline QR tickets, sends through SMTP, and records retries without delaying checkout.

Risk path

A periodic assessor scores paid orders and refreshes user risk profiles for review in the admin interface.

Project details

What is inside Eventix.

01

Product workflows

Account registration, event publishing, ticket-tier management, ordering, mock payment, ticket ownership, QR generation, and organizer check-in.

02

Access control

Short-lived JWT access tokens, refresh tokens, bcrypt password hashing, authentication middleware, and attendee, organizer, and admin roles.

03

Purchase integrity

Sale-window checks and stock validation lead into an atomic payment transaction that prevents partial ticket issuance and inconsistent order state.

04

Asynchronous delivery

A durable SQLite job queue moves ticket email delivery out of the request cycle, with locking, retry limits, failure state, and SMTP configuration.

05

Anti-scalping controls

Rule-based scoring considers account age, order and ticket velocity, bulk quantity, high-demand events, whitelisting, suspension, and previous violations.

06

Operations

Structured JSON logging, request IDs, health and readiness endpoints, graceful shutdown, SQL migrations, Docker multi-stage builds, and Compose orchestration.

Technology

Built without hiding the backend.

Go 1.25 Chi router SQLite sqlx JWT bcrypt Server-rendered HTML SMTP QR codes Docker Compose

Source code

Read the implementation on GitHub.

github.com/madaghafuri/eventix