From 16e8c2729bccf4c694fc0eb8b8f7739786918059 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Tue, 11 Mar 2025 09:44:07 +0100 Subject: [PATCH] document user stories for web portal --- docs/modules/ROOT/assets/images/servala.png | Bin 0 -> 22130 bytes docs/modules/ROOT/nav.adoc | 5 +- docs/modules/ROOT/pages/index.adoc | 8 +- docs/modules/ROOT/pages/user-stories.adoc | 171 ++++++++++++++++++++ 4 files changed, 181 insertions(+), 3 deletions(-) create mode 100644 docs/modules/ROOT/assets/images/servala.png create mode 100644 docs/modules/ROOT/pages/user-stories.adoc diff --git a/docs/modules/ROOT/assets/images/servala.png b/docs/modules/ROOT/assets/images/servala.png new file mode 100644 index 0000000000000000000000000000000000000000..af5de89471557f50c32e024eb7c1d260bdc98a98 GIT binary patch literal 22130 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 VWzXkpT;d&%iIJrt?y^hF{{Wa$#IpbZ literal 0 HcmV?d00001 diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc index fc6dcf2..2b92062 100644 --- a/docs/modules/ROOT/nav.adoc +++ b/docs/modules/ROOT/nav.adoc @@ -1,2 +1,5 @@ * xref:index.adoc[Home] -* xref:terminology.adoc[] \ No newline at end of file +* xref:terminology.adoc[] + +* Web Portal +** xref:user-stories.adoc[] \ No newline at end of file diff --git a/docs/modules/ROOT/pages/index.adoc b/docs/modules/ROOT/pages/index.adoc index 50e418f..7a41ca9 100644 --- a/docs/modules/ROOT/pages/index.adoc +++ b/docs/modules/ROOT/pages/index.adoc @@ -1,3 +1,7 @@ -= Servala += Servala - Open Cloud Native Service Hub -Hello World +image::servala.png[] + +Welcome to https://servala.com/[Servala - Open Cloud Native Service Hub^]. + +This site documents the technical aspect of Servala. diff --git a/docs/modules/ROOT/pages/user-stories.adoc b/docs/modules/ROOT/pages/user-stories.adoc new file mode 100644 index 0000000..c5dcc13 --- /dev/null +++ b/docs/modules/ROOT/pages/user-stories.adoc @@ -0,0 +1,171 @@ += User Stories + +== End User Stories + +The end user is a person using the portal to discover and order managed services on behalf of an organization, +manage service instances on multiple managed service providers and do administrative stuff like updating user details. + +=== Authentication & Access + +As a user, I want to: + +MVP:: +* P1: log in using my VSHN Account via OpenID Connect so that I can access the portal securely +* P1: be automatically registered in the portal when I first log in with my VSHN Account so that I can start using the portal immediately +* P1: see which organizations I'm a member of so that I can switch between different organization contexts +* P1: be guided to the VSHN Account portal to update my account details like the password or two-factor authentication + +Next:: +* accept organization invitations so that I can join new organizations +* see my role and permissions within each organization so that I understand my access levels + +=== Service Discovery & Management + +As a user, I want to: + +MVP:: +* P1: see service plans filtered based on my organization's context so that I only see relevant offerings +* P1: order new service instances by selecting plans, and configuring parameters so that I can provision instances +* P1: view my existing service instances across all control planes so that I can manage my service instances +* P1: access connection credentials for my service instances so that I can use the services +* P1: update parameters of existing service instances so that I can adjust instances as needed +* P1: delete service instances when they're no longer needed so that I don't incur unnecessary costs +* P1: receive clear error messages and warnings when operations fail so that I can take appropriate action +* P2: see the status and health of my service instances so that I can monitor their operation +* P2: browse the service catalog without authentication so that I can explore available services before committing +* P2: view detailed service descriptions, pricing, and features so that I can make informed decisions + +Next:: +* access service metrics in a pre-configured dashboard-like view with timerange selection +* access service logs, search for terms in the logs and select a timerange +* list available backups and select one to restore from +* restart a service instance +* clone a service instance +* manage access control to a service instance +* see service usage for cost-control +* upgrade a service instance (plan, software version) +* configure backup details (time, retention) +* configure maintenance policies +* configure pre-defined alert rules and add custom alert destinations + +== Organization Admin Stories + +An organization admin does administrative tasks like managing access control in the organization, downloads invoices or updates billing details. + +=== Organization Management + +As an organization admin, I want to: + +MVP:: +* P1: manage user access to my organization so that I can control who has access to resources +* P2: view and manage the organization's billing entity so that I can handle financial aspects + +Next:: +* assign different roles to users within my organization so that I can delegate responsibilities appropriately +* send invitations to new users so that they can join the organization +* administer billing details +* list invoices, see their status and download them as PDF +* directly pay invoices with online billing + +== Managed Service Provider Stories + +A managed service provider manages their content and service instances. + +=== Content Management + +As a managed service provider, I want to: + +Next:: +* manage my service offering +* manage plans and pricing +* update my company details + +=== Instance Management + +As a managed service provider, I want to: + +Next:: +* see all instances running on my infrastructure +* get access to customer information for customers running instances on my infrastructure +* see service instance usage details for billing purposes + +== Portal Admin Stories + +The portal admin is the "root" of the system and does backend administrative tasks. +It also includes managing the content. + +=== System Configuration + +As a portal admin, I want to: + +MVP:: +* P1: register and manage control planes so that they're available for service deployment +* P1: configure system-level service account credentials so that the portal can interact with control planes +* P1: configure organization origins and their associated rules so that I can control service provider access +* P2: customize field names and form behaviors so that the user interface is intuitive + +Next:: +* access audit logs to see what's going on in the portal + +=== Content Management + +As a portal admin, I want to: + +MVP:: +* P1: manage service providers and their metadata so that users can discover available services +* P1: manage the service catalog including categories and hierarchies so that services are well-organized +* P2; configure service plans and pricing so that offerings are current +* P2: manage service metadata including logos and external links so that service information is complete + +Next:: +* manage the public website content so that I can keep service information up to date + +== System Stories + +This is the system itself doing administrative tasks. + +=== Service Discovery & Sync + +As the system, I want to: + +MVP:: +* P1: automatically discover service definitions (Crossplane XRDs) from control planes so that available services are current +* P1: sync organization data with the APPUiO Control API so that organization information stays consistent +* P2: validate service instance operations against control plane APIs so that only valid configurations are accepted + +Next:: +* regularly update OpenAPI specs from control planes so that service parameters are current + +=== Authentication & Authorization + +As the system, I want to: + +MVP:: +* P1: enforce organization context for all operations so that multi-tenancy is maintained +* P1: create organization namespaces in control planes on first use so that service instances can be deployed +* P2: handle OIDC token exchange for user operations on control planes so that actions are properly authenticated + +Next:: +* validate user permissions against roles so that access control is maintained + +=== Error Handling & Monitoring + +As the system, I want to: + +MVP:: +* P1: gracefully handle upstream API failures so that the application remains stable +* P1: provide appropriate error messages for failed operations so that users understand issues +* P1: track failed operations and sync attempts so that issues can be investigated +* P2: monitor control plane connectivity so that service availability can be maintained + +== API Consumer Stories + +=== API Integration + +As an API consumer, I want to: + +Next:: +* authenticate with the portal API so that I can access resources programmatically +* manage service instances via REST API so that I can automate infrastructure provisioning +* retrieve service catalog information via API so that I can display available services +* manage organization instances via API so that I can integrate with other systems