Separate responsibilities.
Connected decisions.
The operational RTSM uses a modern .NET service architecture with PostgreSQL persistence. This public website is a separate ASP.NET Core Razor Pages application on .NET 10—with no trial-database connection.
Four layers.
One accountable flow.
Experience layer · Blazor
Account/study selection, role-aware navigation, design editors, site workflows, physical verification and reporting views. The interface provides feedback, while the API remains authoritative.
Application boundary · ASP.NET Core API
Authenticated requests carry identity, permissions, Account, study and site context. Server-side checks protect tenant isolation, treatment visibility and action-specific authorization.
Domain services & workflow rules
Randomization, dispensing, packaging, quantity movement, resupply, document lifecycle and audit handling coordinate state transitions. Database transactions protect tightly coupled updates.
Persistence · EF Core + PostgreSQL 17
Relational records link Accounts, studies, sites, products, subjects, kits, balances, shipments and document history. Persistent key volumes are separate from application binaries.
The existing local deployment separates web, API and database services using Docker Compose. This is a logical blueprint, not a claim of a qualified high-availability topology.
A schema built around
operational identity.
Distinct identifiers prevent a subject number, randomization ID, physical kit label and lot number from being mistaken for the same record.
Organization & access
Account → allocated studies → study sites/depots. Users and roles define permitted actions, site restrictions and blinding context.
Design & assignment
Study → products, arms, factors, cohorts and visits. Master rows retain randomization IDs and assignment links; dummy previews remain separate.
Supply & accountability
Product → lot → kit identity. Location/status balances represent quantity movements; shipment items and dispensation history connect the transfer or issuance.
Evidence & retention
Account document → retained versions → events/signature context. Audit events record actor, action, time and integrity-chain metadata.
Controlled agility
is a design decision.
Configuration-led study setup
Arms, factors, ratios, visit windows, cohorts and product quantities are configured in saved design records. Study-specific behavior is not represented as a promise that every protocol can run without engineering or qualification.
Preview and operational data remain separate
DUMMY generation captures review settings without populating assignment rows. Creating a master from reviewed settings is a new operation with design and assignment guards—not promotion of dummy records into live use.
State and transaction boundaries protect execution
Assignment locks master generation parameters. Dispensing resolves the current treatment and eligible stock before issuing all required products. Issued inventory cannot be allocated again while physical verification is pending.
Amendments preserve historical meaning
Live design changes require amendment context. Crossover affects the ordered future visit sequence without replacing the original treatment assignment. Historical treatment and completed-visit constraints are enforced.
Retention is a workflow, not a delete button
Account document revisions create retained version entries. Archive hides an inactive record from ordinary views without erasing its bytes or history. Restore is separately signed and audited.
Extension points require explicit qualification
External data exchange, federated identity, distributed key storage, multiple application nodes and high availability require deployment-specific work. Document and test each change rather than implying that a logical separation makes it qualified.
Learn here.
Operate in RTSM.
The Razor Pages website serves product information and reviewed help articles. The operational application owns authentication, trial records and clinical workflows.
ASP.NET Core Razor Pages / .NET 10
Server-rendered pages, a shared layout and a local XML knowledge catalog. Linux container hosting with preserved ASPX URLs; no participant-data processing.
Modern .NET / Blazor / PostgreSQL
Operational web and API services remain independent. This website does not expose private API or database access.
Before external production hosting
Qualify HTTPS and proxy configuration, data residency, restricted administration, persistent keys, secrets management, encrypted backups, restoration, monitoring, retention and recovery objectives. A local HTTP demonstration is not the production baseline.
Read the deployment guide →