Multi-Tenant Survey Platform: Structured Data Collection Across Many Organisational Units
Built a Flask and Azure platform for running the same structured questionnaire across many organisational units at once — role-based access, scheduled review rounds, section-level progress tracking, AI-generated summaries, and secure document management.
Isolated data per unit
Role-based access control
Time-boxed approval cycles
Generated response summaries
The Challenge
Running a periodic structured assessment across a large number of separate organisational units breaks down quickly without a system behind it:
- Questionnaires distributed as spreadsheets came back in inconsistent formats, requiring weeks of manual reconciliation
- Nobody could see completion state — who had finished, who was partway, who had not started
- Different participant types needed genuinely different access: respondents, reviewers, and administrators
- Submissions needed a formal review stage before being treated as final, and that cycle had to repeat
- Written summaries of each unit's responses were produced by hand, inconsistently, by whoever had time
- Supporting documents needed secure, permission-scoped storage rather than email attachments
The Solution
I designed and built a modular survey platform on Azure, structured so a single deployment can serve many tenants and more than one assessment type:
Multi-Tenant Data Model
Cosmos DB partitioned by tenant, so each unit's data is isolated and per-tenant queries stay within a single partition as the platform scales.
Role-Based Access Control
Full RBAC with an admin portal — administrators, reviewers, and respondents each get tailored interfaces and permissions scoped to their tenant.
Configurable Questionnaires
Section-based questionnaire definitions, allowing multiple assessment types to run from one deployment without forking the codebase.
Progress Tracking & Review Rounds
Section-level completion state rolls up into an administrator view, and review rounds are modelled as first-class entities with their own windows so cycles can repeat.
AI-Generated Summaries
OpenAI integration turns structured answers and free-text comments into readable per-unit summary documents, removing the manual synthesis step.
Azure Cloud Infrastructure
Cosmos DB for flexible document storage, Blob Storage with time-limited signed links for uploads, and App Service deployment via GitHub Actions CI/CD.
Results
The platform replaced a spreadsheet-and-email process with a single auditable system:
Unified platform replaces fragmented per-unit spreadsheet workflows
Section-level progress tracking removes the need to chase participants for status
AI-generated per-unit summaries cut the manual report-writing step
GitHub Actions pipeline makes releases repeatable rather than hand-run
Technology Stack
Backend
- • Flask
- • Python
- • REST API
Database & Storage
- • Azure Cosmos DB
- • Azure Blob Storage
AI
- • OpenAI GPT
Infrastructure
- • Azure App Service
- • GitHub Actions
- • CI/CD
Need something similar?
I build custom platforms, automation systems, and data solutions. Let's discuss your project.