Mycenas — Competition Manager App

Competition management platform with two-phase submission workflow and PostgreSQL state machine enforcement.

Tags: MobileSportsC2BB2BSocial
Tech Stack: C# PostgreSQL Redis
Mycenas — Competition Manager App

Introduction

Mycenas was a platform for running art competitions and promotional campaigns — organizers launched contests, collected submissions, moderated entries, and managed advertising content through an admin interface. I built the backend services for competition lifecycle management, submission handling, campaign tooling, and interaction tracking.

The Challenge & Solution

Competition platforms have an unforgiving submission integrity requirement: a lost or silently corrupted entry permanently damages credibility with participants who put real creative effort into their work. Standard HTTP form submissions under traffic spikes risk timeouts that silently drop files before they reach storage. A two-phase submission flow was implemented — phase one accepted the file upload and returned an acknowledgment token immediately; phase two processed and committed the entry asynchronously via a C# IHostedService worker. This decoupled the upload acknowledgment from processing latency, so submission confirmation was instant regardless of file size or server load. The competition lifecycle itself (draft → open → moderation → closed → winner-announced) was enforced as a state machine with PostgreSQL check constraints, making it impossible for an admin action to trigger an invalid transition — trying to open a competition from the winner-announced state would fail at the database level, not silently corrupt data. Redis rate limiting on the submission endpoint prevented burst traffic from competition-deadline rushes from overwhelming the processing queue.

Technologies & Architecture

  • C# (IHostedService): Background hosted service for async submission processing — decoupled the upload acknowledgment from file processing and database commit, making submission confirmation fast and reliable under load.
  • PostgreSQL: State machine enforcement via check constraints on the competition lifecycle columns — invalid campaign state transitions were rejected at the database level, not dependent on application logic that could have edge cases.
  • Redis: Rate limiting on the submission endpoint to absorb competition-deadline traffic spikes without overwhelming the async processing queue or the database.

Key Highlights

  • Sports Tournaments
  • Campaigns
  • Event Management

Impact

The two-phase submission flow eliminated silent upload failures under load, protecting the submission integrity that competition credibility depends on. PostgreSQL-enforced state machine constraints made invalid campaign lifecycle transitions structurally impossible rather than dependent on application-layer validation. Redis rate limiting smoothed deadline-driven submission spikes without dropping entries.

Visit Project