Tickowt - Event Management & Ticketing Platform (Snapshot as of October 2025)
Tickowt, a full-featured web application designed to streamline event management and ticket sales. It provides a robust platform for university societies and other organisations to create, manage, and analyse their events, while offering a seamless and secure ticket purchasing experience for attendees.
tickowt.mp4
- Full Event Lifecycle Management: Organisers can create, update, and manage events through a dedicated dashboard.
- Secure Online Ticket Sales: Integration with Stripe for secure and reliable payment processing for paid events, plus support for free events.
- Organiser Dashboard: A central hub for organisers to view event analytics, track ticket sales, and monitor attendee check-ins.
- Robust Authentication: Supports both traditional email/password registration and social authentication (Google) using
django-allauth. - Asynchronous Task Handling: Uses Celery and Redis to manage background tasks like sending ticket confirmation emails, handling expired events, ticket checkout sessions and more, ensuring a non-blocking user experience.
- Modern Frontend Interactivity: HTMX for efficient partial page updates from the server and Alpine.js for lightweight client-side interactivity. I chose this stack to ensure a smooth user experience without the overhead of a full SPA framework like i.e. React.
- Responsive Design: Tailwind CSS for the CSS framework and DaisyUI for the component library, the UI is fully responsive and works seamlessly across desktops and mobile devices.
- QR Code Ticketing & Scanning: Each ticket generates a unique QR code. Organisers can use a built-in scanner on the platform to validate tickets and check in attendees in real-time.
Tickowt is built with a modern, scalable architecture that leverages the power of Django for the backend while incorporating modern frontend techniques for a dynamic user experience.
- Framework: Django 5
- Asynchronous Tasks: Celery with Redis as the message broker. Used for sending confirmation emails and other background processes.
- Authentication: django-allauth for handling local and social (Google) authentication flows.
- Deployment: The application is configured for production deployment using Gunicorn and hosted on a VPS using docker.
- Error Monitoring: Integrated with Sentry for real-time error tracking and performance monitoring.
- Templating: Standard Django templates, supercharged with modern libraries.
- Interactivity:
- HTMX: For handling AJAX requests and smooth partial-page updates directly from the backend, minimising the need for complex client-side JavaScript.
- Alpine.js: For lightweight, declarative client-side logic and UI interactions.
- Styling: Tailwind CSS and DaisyUI for a utility-first, responsive design.
- Asset Bundling: Webpack for compiling and bundling frontend assets.
- Database: PostgreSQL (via
psycopg2), a robust and scalable open-source relational database. - S3 Storage: Using DigitalOcean Spaces (S3-compatible) for storing event images.
- Payment Gateway: Stripe is used for all payment processing, including handling credit card payments and processing webhooks for events like successful payments.
Currently WIP!
WIP!
WIP!
How it currently works
- The sequence of interactions when a user clicks "Buy Ticket".
- Browser: Makes a request to the Django backend.
- Django View: Creates a Stripe Checkout Session.
- Stripe API: Django redirects the user to Stripe.
- Browser: User completes payment on Stripe's page.
- Stripe Webhook: Stripe sends a
checkout.session.completedevent to your webhook endpoint. - Django Webhook View: Handles the webhook, validates the event, and creates the
OrderandAttendeerecords. - Celery: The view dispatches a task to Celery to send a confirmation email.
- Celery Worker: Picks up the task and sends the email with the QR code ticket.