Skip to content
OdysseasKalaitsidisPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

48 Commits

Folders and files

Repository files navigation

TEDx Ionian University — Live Audience Engagement App

Real-time PWA built and deployed for a live ~300-person TEDx event. Attendees scanned a QR code to join live reactions, polls, a shared conversation feed, and a QR-based challenge leaderboard.

Served 60+ concurrent users during the event with zero downtime.

Stack: .NET 9 · SignalR · React 18 / TypeScript · PostgreSQL · GitHub Actions


Architecture Overview

Two-service architecture with a real-time WebSocket layer:

React PWA (Vite)
     │
     ├── REST  ──► .NET 9 Minimal APIs
     └── WS   ──► SignalR Hub  ──► PostgreSQL (EF Core)

All real-time features (reactions, polls, leaderboard updates) flow through a single SignalR hub. The frontend maintains a singleton HubConnection shared across all tabs so listeners stay alive during tab switches.


CI/CD

GitHub Actions pipeline on every push to main:

  • Build and test .NET backend
  • Lint and type-check React frontend
  • dotnet publish bundles Vite frontend into backend wwwroot

Real-Time Features

Feature Mechanism
Emoji reactions with live counts SignalR broadcast
Live poll with real-time vote tallies SignalR + idempotency guard
Shared conversation feed with upvotes SignalR broadcast
QR challenge scanner with live leaderboard SignalR per-caller + broadcast

Project Structure

tedx-app/
├── TedxBackend/          .NET 9 — Minimal APIs, SignalR hub, EF Core
│   ├── Hubs/             SignalR hub (all real-time methods)
│   ├── Models/           EF Core entities
│   └── Data/             DbContext
└── tedx-frontend/        React 18 + TypeScript + Vite + Tailwind
    ├── src/components/   Live, Quest, Board tabs
    ├── src/utils/        SignalR singleton, API wrappers
    └── src/hooks/        Swipe handler, custom hooks

Running Locally

Backend

cd TedxBackend
dotnet run   # http://localhost:5085

Requires PostgreSQL. Connection string in appsettings.json.
Override via env: ConnectionStrings__DefaultConnection=Host=...

Frontend

cd tedx-frontend
npm install && npm run dev   # http://localhost:5173

Vite proxies /api, /eventHub, /speakers to the backend.

Production build

dotnet publish -c Release

Triggers npm run build, copies dist/ into wwwroot/. Backend serves the SPA via static files + fallback to index.html.


Security Notes

Admin endpoints (POST /api/admin/*) require X-Admin-Secret header.
Override the default via environment variable before any deployment:

AdminSecret=your-secret-here

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages