Skip to content

marcuwynu23/txr

Repository files navigation

txr

Next.js TypeScript MongoDB Tailwind CSS

txr (pronounced ticker) is a production-ready, full-stack event management platform built for speed, security, and a premium user experience. Manage events, issue high-fidelity tickets, and track live attendance with ease.


Key Features

For Organizers

  • Live Admin Dashboard: Real-time analytics on ticket sales, revenue, and attendee check-ins.
  • Dynamic Event Management: Create, edit, publish, and view private/public events with custom capacities.
  • Live Attendance Scanner: Integrated browser-based QR code scanner for seamless venue entry using html5-qrcode.
  • Attendee Tracking: Instant access to attendee lists with precise check-in timestamps.

For Attendees

  • Seamless Booking: Support for both Free and Paid events with mock payment integration.
  • My Tickets Dashboard: Personal portal to manage upcoming events and cancel registrations.
  • QR Entry Passes: Instantly download high-quality QR codes for fast entry at event gates.
  • Responsive Design: Polished, mobile-first UI built with a minimalist GitLab-inspired aesthetic.

Tech Stack


Getting Started

1. Prerequisites

  • Node.js 18+
  • MongoDB instance (Local or Atlas)

2. Environment Setup

Create a .env file in the root directory:

MONGODB_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret_key
SESSION_COOKIE_NAME=txr_session

3. Installation & Development

# Install dependencies
npm install

# Run the development server
npm run dev

Open http://localhost:3000 to see the application in action.


Architecture

The project follows a modular architecture with a strict separation of concerns:

  • src/actions: Server-side logic and database interactions.
  • src/components: Reusable UI components (Atomic design principles).
  • src/models: Mongoose schemas for data integrity.
  • src/lib: Shared utilities for authentication and database connections.

System Flow

User Roles & Permissions

graph TB
    subgraph "User Roles"
        Admin[πŸ‘€ Admin]
        Attendee[πŸ‘₯ Attendee]
    end

    subgraph "Admin Capabilities"
        CreateEvent[πŸ“… Create Events]
        ManageEvent[βš™οΈ Manage Events]
        ScanQR[πŸ“± QR Scanner]
        ViewAnalytics[πŸ“Š Analytics Dashboard]
        CheckInUsers[βœ… Check-in Attendees]
    end

    subgraph "Attendee Capabilities"
        BrowseEvents[πŸ” Browse Events]
        RegisterEvent[🎫 Register for Events]
        ViewTickets[πŸ“‹ View My Tickets]
        DownloadQR[⬇️ Download QR Codes]
        CancelTicket[❌ Cancel Registration]
    end

    Admin --> CreateEvent
    Admin --> ManageEvent
    Admin --> ScanQR
    Admin --> ViewAnalytics
    Admin --> CheckInUsers

    Attendee --> BrowseEvents
    Attendee --> RegisterEvent
    Attendee --> ViewTickets
    Attendee --> DownloadQR
    Attendee --> CancelTicket
Loading

Ticket Lifecycle

sequenceDiagram
    participant A as Admin
    participant S as System
    participant U as Attendee
    participant QR as QR Scanner

    Note over A,QR: Event Creation & Registration Flow

    A->>S: Create Event (Draft)
    S->>S: Generate Event ID
    A->>S: Publish Event

    U->>S: Browse Published Events
    U->>S: Register for Event
    S->>S: Generate Unique Ticket Code
    S->>S: Create QR Code Data
    S->>U: Return Ticket with QR Code

    Note over A,QR: Check-in Flow

    U->>QR: Present QR Code at Venue
    A->>QR: Scan QR Code
    QR->>S: Validate Ticket Code

    alt Valid Ticket
        S->>S: Mark Ticket as "USED"
        S->>S: Set Check-in Timestamp
        S->>QR: βœ… Check-in Success
        QR->>A: Display Success Message
    else Invalid/Used Ticket
        S->>QR: ❌ Check-in Failed
        QR->>A: Display Error Message
    end
Loading

Data Flow Architecture

graph LR
    subgraph "Frontend (Next.js)"
        Pages[πŸ“„ Pages]
        Components[🧩 Components]
        Actions[⚑ Server Actions]
    end

    subgraph "Backend Services"
        Auth[πŸ” Authentication]
        Session[πŸͺ Session Management]
        Database[πŸ—„οΈ Database Layer]
    end

    subgraph "Database (MongoDB)"
        Users[(πŸ‘€ Users)]
        Events[(πŸ“… Events)]
        Tickets[(🎫 Tickets)]
    end

    subgraph "External Services"
        QRGen[πŸ“± QR Code Generation]
        Scanner[πŸ“· HTML5 QR Scanner]
    end

    Pages --> Components
    Components --> Actions
    Actions --> Auth
    Actions --> Database
    Auth --> Session
    Database --> Users
    Database --> Events
    Database --> Tickets
    Actions --> QRGen
    Components --> Scanner
Loading

About

a simple, modern event ticketing system for creating events, issuing QR tickets, and tracking attendance in real time.

Topics

Resources

Stars

Watchers

Forks

Contributors