Dong-A Expo
On-site Registration & Management System

Production / Solo In Operation May 2026 - Present
Cloud / DevOps 1

A multilingual (KO/EN) on-site registration system for the Dong-A Expo at Busan BEXCO, designed, developed, and operated single-handedly on Azure PaaS. Across two exhibitions it processed 84,943 HTTP requests and 814 registrants at 99.89% availability — all on free / serverless tiers for roughly $5 / month.

84,943
Total Requests
814
Registrants
99.89%
Availability
~$5/mo
Operating Cost

System Architecture

Azure App Service Functions Azure SQL (Serverless) App Insights GitHub Actions
GitHub
halfmoon01/dong-a-check-in
git push → main
GitHub Actions CI/CD
build → zip deploy · avg ~2 min
App Service
dong-a-registration
Linux · Node.js 20 · always-on form
Function App
dong-a-control
Serverless · admin panel
Azure SQL Database
GP_S Serverless (auto-pause) · registrations / settings
Azure Monitor + App Insights
metrics · live metrics · log stream
Architecture Decisions
  • App Service / Function App split — the registration form needs steady uptime under traffic spikes, while the admin panel is used intermittently → pay-per-call serverless for admin, stable hosting for the form.
  • Azure SQL Serverless (GP_S) — zero traffic outside event days, so auto-pause cuts the DB bill to almost nothing (~$5/mo).
  • Vanilla JS, no framework — a single-page form needs no build step → fast page loads and simpler debugging.
  • GitHub Actions zip deploy — no Docker, minimal config, ~2 min to production.

What I Did

Multilingual (i18n) Registration Form

Korean + English form for foreign visitors — 100+ country dropdown with auto phone country-code, dynamic province → city dropdowns (17 provinces, 250+ districts), QR code issuance, and Korean IME-safe input handling (compositionstart/end).

Serverless Admin Panel

Basic-Auth admin on Azure Functions v4 — real-time registrant list (search / filter / pagination), inline edit, Excel export (ExcelJS, 13 columns, KO/EN split), and start/stop control of the App Service via Azure REST API.

Statistics Dashboard (Chart.js)

8 visualizations — daily registration trend, age / occupation / gender / referral-channel distributions, regional breakdown, plus cross-analysis (occupation × gender, age × occupation, region × age).

GitHub Actions CI/CD

Push-to-deploy pipeline for both apps — Node 20 build → zip deploy to Azure. Average ~2 min to production, zero-downtime instance swap, auto-rollback on build failure.

Monitoring & Observability

Azure Monitor + Application Insights for request count, response time, 5xx ratio, and live metrics. Automated metric collection via Azure CLI (az monitor metrics list) for event-day reporting.

Security & Reliability

Parameterized queries (SQL-injection safe), client + server dual validation, HTTPS-only, Cache-Control: no-store, and Managed Identity for resource-to-resource auth when controlling the App Service.

Incident Response

503 During Live Event Full service down right after a deploy — JS template literal escape miss. Recovered in 5 minutes.
Korean IME Input Blocked Live input filtering broke Hangul composition — fixed with compositionstart/end events.

Traffic & Performance

Main event (Jun 3–7) — daily request and registration breakdown captured from Azure Monitor metrics:

Date Requests Resp. Time 5xx Registrants
06-039,346190ms0.30%
06-047,700182ms0.21%104
06-0524,443152ms0.11%89
06-0626,520132ms0.01%296
06-07324
Total68,009avg 164ms0.11%813
Free-Tier Sizing Decision

Real event traffic peaked at 5,191 req/hr (~1.4 req/s) with an average response time of 164ms and a 5xx ratio of just 0.11% on the F1 free tier. Since the observed load stayed comfortably within the free tier's headroom, no B1 ($13) / S1 ($70) upgrade was needed — keeping operating cost at ~$5/month while serving 68K requests successfully.

Screenshots

Multilingual registration form

Multilingual registration form (KO / EN)

Admin panel — server control

Admin — App Service start/stop control

Statistics dashboard

Chart.js statistics dashboard (8 charts)

Cross-analysis charts

Cross-analysis (occupation × gender, age × occupation)

Completion message customization

Completion-message customization (KO / EN)

Tech Stack

Cloud / DevOps (My Part)

Azure App Service Azure Functions Azure SQL App Insights Azure Monitor Managed Identity GitHub Actions Azure CLI

Application

Node.js 20 Express Azure Functions v4 Vanilla JS Chart.js ExcelJS mssql QRCode