Case study · AWS Re/Start 2026 · Final project

ES | EN

DŌJŌ

Gamified serverless loyalty platform

View platform
[ LIVE ] Phases 0 → 8 complete 23 ADRs documented
The client

Imaquinaria — a physical store selling manga, anime, and Japanese culture in Temuco.

The need

No loyalty system: no incentive to return, no purchase history, no customer data.

Dual purpose

A real system for Imaquinaria + a cloud technical portfolio for employability.

Customer portal

  • Sign up and sign in
  • Check points, level, and XP
  • Purchase history
  • Redeem rewards
  • Active missions (stamp cards)

Admin panel

  • Register purchases at POS
  • Manage rewards
  • Manage missions
  • Customer statistics
  • Level and multiplier configuration
Zone 1 — Edge / Public
CloudFront (CDN, SPA routing)S3 Bucket (React static build)HTTPS via Route 53
Zone 2 — Authentication
API Gateway (HTTP API)Cognito User PoolJWT validation on every request
Zone 3 — Compute / Private
AWS Lambda (FastAPI + Mangum)DynamoDB single-table (by tenant_id)SSM · SES · CloudWatch
CI/CD

GitHub Actions — deploys frontend (S3 / CloudFront) and backend (sam deploy). Manual gate required before production.

01

DynamoDB single-table

ADR-0006 ↗

10+ entities in one table. PK/SK keys modeled by access pattern, not by entity. Every query includes tenant_id: physical isolation between merchants with no additional infrastructure.

02

Multi-tenant from day one

Single-tenant deployed, multi-tenant ready pattern. Adding a second merchant means registering it in the table — no business logic changes. The architecture doesn't limit growth.

03

Pipeline with manual gate

ADR-0023 ↗

GitHub Actions deploys to staging automatically. Production requires manual approval via issue. Five bugs caught in staging before reaching the live system.

04

Data migrations as code

ADR-0019 ↗

Idempotent Python runner integrated in the CI/CD pipeline. Every DynamoDB data change goes through a PR, is versioned in git, and is applied automatically on deploy — zero manual post-deploy steps.

Requests in production 3.397 last 30 days
Error rate (5xx) 0% Lambda + API Gateway
p50 end-to-end latency 151 ms API Gateway + Cognito JWT
DynamoDB latency 14–17 ms average across all operations
Cold start rate 0.7% 24 of 3,397 invocations
Lambda / DynamoDB throttles 0 last 30 days

CloudWatch data · Lambda + API Gateway + DynamoDB · last 30 days

The Imaquinaria Bushidō

Level system with points multipliers — the multipliers are not arbitrary: they are calibrated so that reward redemption is attractive at exactly the average purchase volume of an Imaquinaria customer.

×1.0 Rōnin
×1.3 Samurai
×1.7 Hatamoto
×2.0 Daimyō
Premium Kamon tierDigital stamp cardsDōjō mental state sub-levels
FastAPIPython 3.13React 19TypeScriptMangumAWS LambdaAPI GatewayDynamoDBCognitoCloudFrontS3SESCloudWatchSSMAWS SAMGitHub Actions