The FlowerShop IoT Platform is a multi-tenant SaaS platform connecting flower vendors with customers through IoT-enabled smart vases that display QR codes linking to bouquet information.
Key Business Concepts
| Concept |
Description |
| Vendor |
Traditional Flower Shop (physical store) or Freelance Florist (home-based) |
| Smart Vase |
IoT device displaying QR codes; reports sensor data via MQTT |
| Bouquet |
Flower arrangement placed in a smart vase, purchasable by customers |
| Customer |
Browses nearby bouquets via map, purchases through mobile app or web |
| Platform Admin |
Manages vendors, vases, and platform analytics |
Technology Stack
| Layer |
Technology |
| Framework |
.NET 8 / ASP.NET Core |
| ORM |
Entity Framework Core 8 + PostgreSQL 15 |
| Auth |
Keycloak 23.0 (OIDC, JWT) |
| CQRS |
MediatR |
| Validation |
FluentValidation (pipeline behaviour) |
| Cache |
Redis 7 (RedisCacheService) |
| Messaging |
InMemoryEventBus (RabbitMQ wired, pending EP-09) |
| Real-time |
SignalR (BouquetHub) |
| IoT |
MQTT (Mosquitto) |
| Payments |
Stripe |
| SMS |
Twilio |
| Portals |
Razor Pages (Admin, Vendor) + MVC (Customer Web App) |
Architecture Layers
┌─────────────────────────────────────────┐
│ API Layer (Controllers, Middleware) │
├─────────────────────────────────────────┤
│ Application Layer (CQRS via MediatR) │
├─────────────────────────────────────────┤
│ Domain Layer (Aggregates, Events) │
├─────────────────────────────────────────┤
│ Infrastructure (EF Core, Keycloak…) │
└─────────────────────────────────────────┘
Documentation Pages
Rozanski & Woods Architecture Viewpoints
| Page |
Contents |
| Functional View |
Functional elements, responsibilities, interfaces, and actor interactions |
| Information View |
Data structure, aggregate ownership, data lifecycles, store responsibilities |
| Concurrency View |
Processes, background services, race conditions, coordination mechanisms |
| Development View |
Source organisation, module boundaries, CQRS conventions, test strategy |
| Deployment View |
Docker topology, port map, startup dependencies, environment variables |
| Operational View |
Health checks, error handling, runbook, monitoring signals, known gaps |
C4 Model
| Page |
Contents |
| C4 Context |
System-level view: users and external systems |
| C4 Containers |
All runtime containers and their communication |
| C4 Components |
API layer internals: controllers → handlers → domain |
| Domain Model |
ER diagram of all 14 aggregates |
Flow Diagrams
| Page |
Contents |
| Auth Flows |
Keycloak OIDC, dev-token, tenant resolution, token blacklist |
| Customer Flows |
Browse, QR scan, cart, order, payment, delivery |
| Vendor Flows |
Onboarding, bouquet lifecycle, order fulfillment |
| Admin Flows |
Vendor approval, suspension, analytics |
| IoT Flows |
Vase registration, MQTT, heartbeat, sensor data |
| Payment Flows |
Stripe checkout, webhook, outbox, confirmation |
| Real-time Flows |
SignalR hub groups, outbox dispatch |
| Cross-cutting |
Middleware pipeline, caching, multi-tenancy, idempotency |
API Reference
Full REST and SignalR contract: API-CONTRACTS.md
Planned Work
Upcoming epics and gap analysis: docs/tasks/