DEV Community

Weekend Build: Real-Time Raffle System with AWS AppSync for Community Events

DEV Weekend Challenge: Community

This is a submission for the DEV Weekend Challenge: Community

The Community

I'm an AWS User Group Leader and an AWS Community Builder in Zaragoza, Spain. I also co-organize the AWS Community Day EspaΓ±a, our annual flagship event with 100-200 attendees. Between the Community Day and our regular user group meetups (6–10 events per year, 30–50 attendees each), every single event means juggling the same mess: one tool for RSVPs (Meetup, Eventbrite), spreadsheets and docs to track speakers/sponsors/venues, WhatsApp threads for last-minute changes, and absolutely nothing to keep people engaged during the event itself.

That's the problem I wanted to solve: tool sprawl. One platform that covers before, during, and after an event, for both organizers and attendees. Maybe not everything, but a few things done in a cool way.

In the short term, this app is for my own user group. In the medium term, I'd love other user groups to use it too.

What I Built

Community Organizer Hub is a multi-tenant community event platform with a backoffice for organizers and public event pages for attendees.

Organizer backoffice (login required)

  • Full CRUD for Events, Speakers, Sponsors, and Venues (these are the 4 most important domains for an event)
  • Event-scoped permissions: organizers only see and manage the events they're assigned to
  • Real-time raffle admin:
    • Live participant list with total count
    • Animated "roulette" wheel when drawing a winner
    • Optional prize name per draw
    • Draw history with timestamps
    • Exclude previous winners from future draws
    • Full raffle reset when needed
    • "Draw winner" pushes results instantly to all attendee devices
  • A first simple version of Q&A and Polls (MVP-grade and intentionally simple for now)

Attendee public pages (no login required)

  • Public event landing page
  • Real-time raffle join:
    • Join and receive a sequential number
    • Your number persists on page refresh (device-based)
    • Winner notification is pushed instantly to all open attendee devices
  • Q&A: view and upvote questions in real time
  • Polls: participate in live single-question polls during the event

The UI supports English and Spanish from day one (i18n), and is ready to expand to more languages.

Demo

πŸš€ Live app: https://d342vpi9y53cq7.cloudfront.net/admin/live

πŸ“Ή Demo video: Live Demo

In the video I follow a simple on-screen script:

  1. Public event landing page
  2. Organizer flow: open backoffice and view assigned events, speakers, sponsors, venues, settings
  3. Access to Live Event, the main area, and prepare the Raffle
  4. Attendee flow: the attendees (6) join the user group page and access the raffle to receive a number (using different windows)
  5. Real-time raffle in action: organizer draws winner, 6 attendees receive instant notifications
  6. Stop raffle and disconnect all the participants

Code

The repository is intentionally private during this phase. This is a real product I'm building for a real community, and keeping it private while I stabilize the architecture and the solution is the responsible approach. I'm not hiding the work. I'm protecting the people who will use it.

To keep this submission transparent, I'm sharing:

  • A short code walkthrough video showing the monorepo structure and key modules: Code Walkthrough
  • The AWS architecture diagram below

architecture diagram

How I Built It

This was a weekend build. Around an hour scoping a realistic MVP, then two intense days implementing it end to end. Yes, very intense...

Built with Kiro AI

I built this entire project using Kiro, an AI-powered IDE that helped me move from idea to deployed infrastructure in a weekend. Kiro assisted with code generation, AWS CDK infrastructure setup, and rapid iteration across the full stack.

Tech stack

  • Frontend: React 18 + Vite + TypeScript + Tailwind CSS
  • Routing: React Router
  • i18n: react-i18next (English default + Spanish, from the beginning... bad experiences in the past)
  • Hosting: S3 + CloudFront (I always do it this way for my side projects)
  • Auth: Amazon Cognito (embedded auth UI, no hosted UI)
  • Backend: AWS Lambda + API Gateway (REST) - traditional serverless approach
  • Real-time: AWS AppSync (GraphQL subscriptions) for raffle, Q&A, and polls
  • Database: DynamoDB
  • IaC: AWS CDK (TypeScript)

Technical highlights

πŸ’° 100% serverless, cost-optimized architecture: DynamoDB on-demand pricing, Lambda pay-per-invocation, AppSync pay-per-request, and S3+CloudFront for static hosting means the platform costs nearly nothing at rest and scales automatically under load. Designed specifically for community budgets.

🎯 Real-time event engagement: AppSync GraphQL subscriptions push updates instantly to all connected attendee devices: raffle results, Q&A updates, poll updates. Bidirectional communication with zero polling overhead.

Multi-tenant isolation by design: every item includes groupId in its partition key, ensuring logical data isolation within shared DynamoDB tables. Authorization checks at the application layer prevent cross-tenant access. Other user groups can use this platform without any code changes. They just get their own isolated space.

Event-scoped authorization: organizers cannot access other events in the same group unless they're explicitly assigned to them.

🎲 The raffle is more thoughtful than it looks: attendees get a sequential number (not random) that persists across page refreshes via a device fingerprint. The organizer can name each prize, exclude previous winners from future draws, and keep a full draw history (persisted in DynamoDB for audit trail). All within the same live session. The winner is pushed to every open attendee device the moment it's drawn.

Multi-device real-time raffle demonstration

Basic anti-abuse controls: one raffle entry per device, plus an optional join code per event.

What I'd improve next

  • Overall UI/UX polish, especially on attendee pages
  • Raffle animation polish and smoother state transitions
  • Q&A and polls: moderation, richer poll types, better admin controls
  • Asset upload per event (logos, images, PDFs) via S3 + presigned URLs
  • Test and improve the multi-tenant isolation
  • Operational hardening: stronger rate limiting, monitoring dashboards, and more tests
  • Higher personalization of the group public page

Top comments (1)

Collapse
 
javier_santana_3dac28093e profile image
Javier Santana

Nice weekend project with Kiro and it can be very useful.