Skip to content
This repository was archived by the owner on Jul 6, 2026. It is now read-only.

Latest commit

 

History

History
706 lines (518 loc) · 28.8 KB

File metadata and controls

706 lines (518 loc) · 28.8 KB

User Story Map

Full story map for Loopless (FreelanceHub). All stories are derived from the project plan and requirements document. Stories are organized by epic and assigned to sprints.

Status legend: Done · In Progress · Planned · Backlog


Prioritization — RICE + MoSCoW

PM-2 / M1.2 deliverable. Every MVP story is scored with RICE for objective ranking and classified with MoSCoW for release scope. The two frameworks complement each other: RICE answers "in what order?", MoSCoW answers "is it in this release at all?".

Scoring methodology

RICE = (Reach × Impact × Confidence) / Effort — Intercom's standard formula.

Input Scale Notes
Reach 1–10 Estimated users touched in a quarter, normalized to our target user base. 10 = every active user every day; 4 = developers/devops only; 2 = admins only.
Impact 0.25 / 0.5 / 1 / 2 / 3 3 = massive (north-star moving); 2 = high; 1 = medium; 0.5 = low; 0.25 = minimal.
Confidence 50% / 80% / 100% 100% = scoped + spiked; 80% = scoped, no spike; 50% = speculative.
Effort 0.25 / 0.5 / 1 / 2 / 3 (person-months) Single dev-month working full time. Halved for backend-only work, doubled when SignalR + UI + tests all required.

Score is relative, used only for ordering inside the same MoSCoW bucket. Outside the bucket (e.g. comparing a Must to a Could) the MoSCoW label wins regardless of score.

MoSCoW scope rules for the MVP (this release):

Bucket Definition Action if cut
Must MVP cannot ship without it. Tied to either auth, the core product loop (discovery → project → standup → message), or a graded fellowship requirement. Block the release
Should Significant value, but a workaround exists. Ships if scope allows; first to slip if a Must overruns. Defer to v1.1
Could Nice-to-have. Ships only if all Must + Should are done and time remains. Park in backlog
Won't (this release) Recognized but explicitly out of scope. Documented to prevent scope-creep arguments mid-sprint. Re-evaluate next quarter

Backlog scored & ranked

Stories sorted within each MoSCoW bucket by descending RICE score.

Must (15 stories) — release-blocking

# Story Reach Impact Confidence Effort (pm) RICE Sprint Status
1 US-1.3 Sign in with email 10 2 100% 0.25 80.0 2 Planned
2 US-1.1 Sign up as freelancer 10 3 100% 0.5 60.0 2 In Progress
3 US-1.5 Select proficiency (freelancer onboarding) 10 3 100% 0.5 60.0 2 Done
4 US-1.2 Sign up as enterprise 8 3 100% 0.5 48.0 2 In Progress
5 US-1.6 Complete enterprise onboarding 8 3 100% 0.5 48.0 2 In Progress
6 US-3.1 Create a project 8 3 100% 0.5 48.0 4 Planned
7 US-4.1 Submit daily standup 8 3 100% 0.5 48.0 4 Planned
8 US-5.4 Message history 10 2 100% 0.5 40.0 5 Planned
9 US-4.2 View team standups 8 2 100% 0.5 32.0 4 Planned
10 US-2.4 Profile pages 10 2 100% 1 20.0 3 Planned
11 US-7.2 AI project summary (RAG) 7 3 80% 1 16.8 4 Planned
12 US-3.5 View project dashboard 10 3 100% 2 15.0 4 Planned
13 US-2.3 Search 9 2 80% 1 14.4 3 Planned
14 US-3.4 Link GitHub repository 8 2 80% 1 12.8 4 Planned
15 US-2.1 Freelancer discovery feed 10 3 80% 2 12.0 3 Planned
16 US-2.2 Project discovery feed 10 3 80% 2 12.0 3 Planned
17 US-5.1 Send a direct message (SignalR) 10 3 80% 2 12.0 5 Planned
18 US-7.1 Semantic freelancer matching (pgvector) 10 3 80% 2 12.0 4 Planned
19 US-8.1 Docker Compose dev environment 4 3 100% 1 12.0 1 Done
20 US-8.2 CI pipeline (GitHub Actions) 4 3 100% 1 12.0 5 Done
21 US-8.3 Kubernetes deployment 4 3 100% 2 6.0 5 Done
22 US-8.5 Observability stack (Prom/Graf/Loki/ELK) 4 3 80% 2 4.8 5 Done

Should (11 stories) — high value, deferrable

# Story Reach Impact Confidence Effort (pm) RICE Sprint Status
1 US-3.2 Express interest in a project 7 2 100% 0.5 28.0 4 Planned
2 US-3.3 Accept / reject applicants 7 2 100% 0.5 28.0 4 Planned
3 US-3.8 Leave / archive a project 6 1 100% 0.25 24.0 5 Planned
4 US-1.4 Sign in with GitHub SSO 7 2 80% 1 11.2 2 Planned
5 US-4.3 Standup reminders (Hangfire) 6 1 80% 0.5 9.6 4 Planned
6 US-5.3 File sharing in messages 6 2 80% 1 9.6 5 Planned
7 US-4.4 Standup analytics + blocker trends 5 2 80% 1 8.0 6 Planned
8 US-7.3 Blocker detection (NLP sentiment) 5 2 80% 1 8.0 6 Planned
9 US-8.4 Terraform IaC 4 2 80% 1 6.4 5 In Progress
10 US-8.6 Staging environment 4 2 80% 1 6.4 5 Planned
11 US-6.3 Content moderation queue 2 3 80% 1 4.8 6 Planned
12 US-6.1 Admin user management 2 2 100% 1 4.0 6 Planned
13 US-6.2 Platform analytics dashboard 2 2 100% 1 4.0 6 Planned
14 US-3.6 Manage tasks (kanban) 8 2 80% 1 12.8 4 Planned
15 US-3.7 AI project summary trigger UI 7 3 80% 1 16.8 5 Planned

Could (2 stories) — polish

# Story Reach Impact Confidence Effort (pm) RICE Sprint Status
1 US-5.2 Typing indicators (SignalR) 7 1 80% 0.5 11.2 6 Backlog
2 Feature flag dashboard polish UI 2 1 80% 0.5 3.2 6 Backlog

Won't (this release) — explicit out-of-scope

The following are recognized product directions but deliberately excluded from the MVP to protect the 12-week timeline. Re-evaluate Q3 2026.

Item Why excluded for MVP
Native mobile apps (iOS/Android) Web-responsive covers 90% of demo audience; native = +12 person-weeks
Marketplace + escrow payments Regulatory + KYC overhead exceeds capstone scope
Multi-brand / white-label support Adds tenant isolation complexity; covered partially by bonus multi-tenancy track
Public freelancer rating + reviews Requires moderation pipeline at scale; defer to post-launch
Localization beyond English Single locale ships first; i18n scaffold deferred
Stripe / payment integration Out of scope per project plan §1
Real-time co-editing of project pages Operational transform / CRDT effort not justified for v1
Video calls / screen sharing Async-first product positioning; sync calls are anti-thesis

Cumulative roll-up

MoSCoW Stories Total effort (pm) Effort weighted by Confidence
Must 22 17.25 14.6
Should 15 11.25 9.05
Could 2 1.0 0.8
MVP commit 37 28.5 23.65

With three full-time fellows over 12 weeks ≈ 9 person-months capacity at sustainable pace — so the Must bucket alone (14.6 confidence-weighted person-months) is already 62% over a single quarter's capacity. This is why the rubric-graded MVP scope is fellowship-graded across two quarters of equivalent effort and why every Should is explicitly defer-safe.

Re-prioritization triggers

The score is not static. Re-run RICE on any story when:

  • A fellowship rubric explicitly requires it (Confidence → 100%, MoSCoW → at minimum Should).
  • An A/B test or PostHog event disconfirms our Reach or Impact estimate by >50%.
  • A dependency story ships ahead of schedule (Effort drops, Confidence rises).
  • A production incident (see postmortem.md) creates a new Must action item.

Epic 1 — Authentication & Onboarding

US-1.1 — Sign Up as Freelancer

As a freelancer,
I want to create an account with my email and password,
So that I can access the Loopless platform and set up my profile.

Acceptance Criteria:

  • Sign-up form accepts email, password, and confirm password
  • Password must be ≥ 8 characters with at least one number
  • Duplicate email shows a clear error message
  • On success, user is redirected to the onboarding wizard
  • Email confirmation is sent (or mocked in dev)

Sprint: 2 · Status: In Progress · Tasks: CP-75


US-1.2 — Sign Up as Enterprise

As an enterprise representative,
I want to register my company on Loopless,
So that I can post projects and discover freelancers.

Acceptance Criteria:

  • Sign-up flow has a role selector (Freelancer / Enterprise) before account creation
  • Enterprise users provide company name during onboarding
  • Enterprise onboarding shows category chips (8 categories) instead of skill chips
  • On completion, enterprise dashboard is shown

Sprint: 2 · Status: In Progress · Tasks: CP-72, CP-73


US-1.3 — Sign In with Email

As a registered user,
I want to log in with my email and password,
So that I can access my dashboard and continue my work.

Acceptance Criteria:

  • Login form accepts email and password
  • Invalid credentials show a clear error without revealing which field is wrong
  • Successful login redirects to the user's role-appropriate dashboard
  • Session persists across page refreshes (JWT stored in secure httpOnly cookie)

Sprint: 2 · Status: Planned · Tasks: CP-74


US-1.4 — Sign In with GitHub SSO

As a user,
I want to log in using my GitHub account,
So that I can authenticate quickly without managing a separate password.

Acceptance Criteria:

  • "Continue with GitHub" button is present on login and sign-up pages
  • OAuth flow redirects to GitHub and back to Loopless
  • On first GitHub login, user is directed to onboarding to complete their profile
  • GitHub avatar is used as the user's profile picture

Sprint: 2 · Status: Planned · Tasks: CP-76


US-1.5 — Select Proficiency During Onboarding (Freelancer)

As a freelancer,
I want to select my skills and proficiency levels during onboarding,
So that the platform can match me with relevant projects.

Acceptance Criteria:

  • 50+ skill chips are displayed, grouped by category
  • Each chip can be toggled on/off
  • At least 1 skill must be selected to proceed
  • Selected skills are saved to the user profile and used for semantic matching
  • Selections persist if the user navigates back in the wizard

Sprint: 2 · Status: Done · Tasks: CP-70, CP-71, CP-72, CP-73


US-1.6 — Complete Enterprise Onboarding

As an enterprise user,
I want to specify my company's industry and project needs during onboarding,
So that the platform can surface relevant freelancers.

Acceptance Criteria:

  • 8 enterprise category chips are shown (e.g., Engineering, Design, Marketing)
  • At least 1 category must be selected to proceed
  • Company size and project budget range can be optionally set
  • Onboarding completion creates an enterprise profile and redirects to dashboard

Sprint: 2 · Status: In Progress · Tasks: CP-72, CP-73


Epic 2 — Home & Discovery

US-2.1 — Freelancer Discovery Feed

As an enterprise user,
I want to see a ranked list of freelancers relevant to my needs,
So that I can quickly identify the best candidates for my project.

Acceptance Criteria:

  • Feed shows freelancers ranked by semantic similarity to the enterprise's category profile
  • Each card shows: name, avatar, top skills, match score, hourly rate
  • Feed is paginated (20 results per page)
  • Filter by skill, availability, and rate range

Sprint: 2 (mocked UI), 5 (API integration) · Status: Planned · Tasks: CP-63, CP-127


US-2.2 — Project Discovery Feed

As a freelancer,
I want to see a ranked list of projects matching my skills,
So that I can find the most relevant work opportunities.

Acceptance Criteria:

  • Feed ranks projects by cosine similarity to the freelancer's skill embeddings
  • Each card shows: project title, enterprise name, required skills, budget, deadline
  • Filter by skills, budget, and duration
  • "Express Interest" button on each card

Sprint: 2 (mocked UI), 4 (backend matching) · Status: Planned · Tasks: CP-63, CP-107


US-2.3 — Search

As a user,
I want to search for freelancers or projects by keyword,
So that I can find what I'm looking for beyond the ranked feed.

Acceptance Criteria:

  • Global search bar in the top navigation
  • Results split into Freelancers and Projects tabs
  • Search indexes: name, skills, bio, project title, description
  • Results return within 300ms for queries hitting the search index

Sprint: 4 · Status: Planned · Tasks: CP-107


US-2.4 — Profile Pages

As a user,
I want to view a detailed profile page for any freelancer or enterprise,
So that I can evaluate a potential match before reaching out.

Acceptance Criteria:

  • Freelancer profile shows: bio, skills, match score, GitHub activity, past projects, reviews
  • Enterprise profile shows: company description, open projects, past collaborations
  • Profiles are publicly accessible by direct URL
  • "Message" and "Propose Project" CTAs are visible on freelancer profiles

Sprint: 2 (mocked UI) · Status: Planned · Tasks: CP-67


Epic 3 — Project Management

US-3.1 — Create a Project

As an enterprise user,
I want to create a project with title, description, required skills, budget, and deadline,
So that I can attract suitable freelancers.

Acceptance Criteria:

  • Project creation form with all required fields + Zod validation
  • Skill tags can be attached to the project (used for semantic matching)
  • Project can be saved as Draft or Published
  • Published projects appear in the discovery feed within 30 seconds

Sprint: 2 (mocked UI), 4 (backend) · Status: Planned · Tasks: CP-64, CP-101


US-3.2 — Express Interest in a Project

As a freelancer,
I want to express interest in a project with a short message,
So that the enterprise can evaluate my application.

Acceptance Criteria:

  • "Express Interest" button appears on project cards and detail pages
  • Modal prompts for a short cover message (max 500 characters)
  • Enterprise receives a notification when a freelancer expresses interest
  • Freelancer can see their pending applications in their profile

Sprint: 4 · Status: Planned · Tasks: CP-101


US-3.3 — Accept / Reject Applicants

As an enterprise user,
I want to review applications and accept or reject freelancers for a project,
So that I can build my project team.

Acceptance Criteria:

  • Applications list shows: freelancer name, match score, cover message, profile link
  • Accept sends a notification to the freelancer and creates a project membership
  • Reject sends a notification and removes the application from active queue
  • Bulk accept/reject supported

Sprint: 4 · Status: Planned · Tasks: CP-102


US-3.4 — Link GitHub Repository

As an enterprise user,
I want to link a GitHub repository to my project,
So that Loopless can auto-sync commits and generate AI project summaries.

Acceptance Criteria:

  • OAuth connection to GitHub in project settings
  • Repository selection from a dropdown of repos in the organization
  • Commit sync runs every 30 minutes via Hangfire background job
  • Last sync timestamp is visible in the project dashboard

Sprint: 4 · Status: Planned · Tasks: CP-103


US-3.5 — View Project Dashboard

As a project member (freelancer or enterprise),
I want to see a project dashboard with active tasks, recent commits, and team members,
So that I can stay aligned without synchronous meetings.

Acceptance Criteria:

  • Dashboard shows: task list, GitHub commit feed, team roster, standup history
  • AI-generated project summary visible at top (from RAG pipeline)
  • Role-appropriate actions: enterprise can manage tasks; freelancers can update status

Sprint: 2 (mocked UI), 4 (backend) · Status: Planned · Tasks: CP-64, CP-104


US-3.6 — Manage Tasks

As a project manager (enterprise user),
I want to create and assign tasks to freelancers within a project,
So that I can track progress without leaving the platform.

Acceptance Criteria:

  • Tasks have: title, description, assignee, due date, status (Todo / In Progress / Done)
  • Assignee must be an accepted project member
  • Status changes are logged in the activity feed
  • Tasks are visible on the project dashboard

Sprint: 4 · Status: Planned · Tasks: CP-104


US-3.7 — AI Project Summary

As a project member,
I want to see an AI-generated summary of the project's recent activity,
So that I can catch up quickly after being away.

Acceptance Criteria:

  • Summary is generated from: recent commits, linked files, project description
  • RAG pipeline uses pgvector embeddings + GPT summary endpoint
  • Summary is regenerated after each commit sync cycle (every 30 min)
  • Summary shows "last updated" timestamp

Sprint: 4 · Status: Planned · Tasks: CP-108


US-3.8 — Leave / Archive a Project

As a user,
I want to leave a project I am no longer working on, or archive a completed project,
So that my workspace stays organized.

Acceptance Criteria:

  • Freelancer can leave a project; enterprise receives a notification
  • Enterprise can archive a project; all members lose active access but history is preserved
  • Archived projects are searchable with an "Archived" filter

Sprint: 5 · Status: Planned · Tasks: CP-132


Epic 4 — Async Standup

US-4.1 — Submit Daily Standup

As a freelancer,
I want to submit a structured daily standup check-in,
So that my team knows my progress without requiring a live meeting.

Acceptance Criteria:

  • Standup form has three fields: Yesterday / Today / Blockers
  • Each field is required; max 500 characters each
  • Only one standup per user per day per project
  • Submission triggers a notification to all project members

Sprint: 2 (mocked UI), 3 (backend) · Status: Planned · Tasks: CP-66, CP-87


US-4.2 — View Team Standups

As an enterprise user or team member,
I want to see all standup entries for my project in a feed,
So that I can monitor team progress asynchronously.

Acceptance Criteria:

  • Standup feed is sorted by date descending
  • Each entry shows: author avatar, name, timestamp, and all three fields
  • Filter by team member and date range
  • Missing standups are highlighted (no entry for a working day)

Sprint: 2 (mocked UI), 3 (backend) · Status: Planned · Tasks: CP-66, CP-87


US-4.3 — Standup Reminders

As a project member,
I want to receive a daily reminder to submit my standup,
So that I don't miss my check-in.

Acceptance Criteria:

  • Reminder is sent at a configurable time (default 9:00 AM user's timezone) via in-app notification
  • Reminder is skipped if the user already submitted that day
  • User can disable reminders per project in settings

Sprint: 4 · Status: Planned · Tasks: CP-94


US-4.4 — Standup Analytics

As an enterprise user,
I want to see completion rate and blocker frequency for my team's standups,
So that I can identify at-risk team members early.

Acceptance Criteria:

  • Dashboard widget shows: 7-day completion rate per member, top recurring blockers
  • Blockers are extracted using AI keyword analysis
  • Export standup history as CSV

Sprint: 6 · Status: Planned · Tasks: CP-141


Epic 5 — Messaging / DMs

US-5.1 — Send a Direct Message

As a user,
I want to send a direct message to another user on the platform,
So that I can communicate without leaving Loopless.

Acceptance Criteria:

  • Users can initiate a DM from any profile page or project member list
  • Message input supports text and emoji
  • Messages are delivered in real time via SignalR
  • Unread message count appears on the messaging icon in the nav

Sprint: 2 (mocked UI), 4 (backend) · Status: Planned · Tasks: CP-65, CP-105, CP-106


US-5.2 — Typing Indicators

As a user in a DM conversation,
I want to see when the other person is typing,
So that the conversation feels natural.

Acceptance Criteria:

  • "…" indicator appears when the other user has been typing for > 1 second
  • Indicator disappears when the other user stops typing for > 3 seconds
  • Works across multiple browser tabs

Sprint: 4 · Status: Planned · Tasks: CP-105


US-5.3 — File Sharing in Messages

As a user,
I want to attach files to my messages,
So that I can share deliverables and references without switching tools.

Acceptance Criteria:

  • File upload via drag-and-drop or browse button
  • Max file size: 20MB; allowed types: PDF, PNG, JPG, DOCX, ZIP
  • Files are stored in S3-compatible object storage
  • Recipient can preview images inline; other files show a download link

Sprint: 5 · Status: Planned · Tasks: CP-130


US-5.4 — Message History

As a user,
I want to scroll back through past messages in a conversation,
So that I can reference earlier discussions.

Acceptance Criteria:

  • Infinite scroll loads messages in batches of 50
  • Messages are stored indefinitely (no auto-delete)
  • Search within a conversation by keyword

Sprint: 2 (mocked UI), 5 (backend) · Status: Planned · Tasks: CP-65, CP-106


Epic 6 — Admin & Platform

US-6.1 — Admin User Management

As a platform admin,
I want to view, suspend, and delete user accounts,
So that I can enforce platform policies.

Acceptance Criteria:

  • Admin dashboard lists all users with role, join date, and activity status
  • Suspend action blocks login without deleting data (reversible)
  • Delete action soft-deletes and anonymizes personal data (GDPR)
  • Admin actions are logged in an audit trail

Sprint: 5 · Status: Planned · Tasks: CP-129


US-6.2 — Platform Analytics Dashboard

As a platform admin,
I want to see key platform metrics (signups, active projects, messages sent),
So that I can track platform health.

Acceptance Criteria:

  • Dashboard shows: daily/weekly signups, active projects count, total messages sent
  • Charts use 30-day rolling window by default
  • Metrics are sourced from Prometheus; displayed in Grafana-style widgets

Sprint: 6 · Status: Planned · Tasks: CP-140


US-6.3 — Content Moderation

As a platform admin,
I want to review flagged content and profiles,
So that I can maintain community standards.

Acceptance Criteria:

  • Users can flag a message or profile
  • Flagged items appear in an admin review queue
  • Admin can dismiss flag, send warning to user, or suspend account
  • Flagged content is blurred for other users until reviewed

Sprint: 6 · Status: Planned · Tasks: CP-143


Epic 7 — AI & Intelligence

US-7.1 — Semantic Freelancer Matching

As an enterprise user,
I want to receive AI-ranked freelancer recommendations based on my project needs,
So that I find the best match faster.

Acceptance Criteria:

  • Enterprise selects required skills; embeddings are generated via OpenAI API
  • IVFFlat ANN search on pgvector returns top-20 nearest freelancers
  • Match score (0–100%) shown on each freelancer card
  • Re-ranking runs nightly for all active enterprise profiles

Sprint: 4 · Status: Planned · Tasks: CP-107


US-7.2 — AI Project Summary (RAG)

As a project member,
I want to see a natural language summary of my project's recent activity,
So that I can understand project health at a glance.

Acceptance Criteria:

  • RAG pipeline ingests: last 50 commits, task descriptions, recent standups
  • Summary is ≤ 200 words, in plain English
  • "Regenerate" button allows manual refresh
  • Summary is cached; regenerated automatically every 30 minutes

Sprint: 4 · Status: Planned · Tasks: CP-108 (shared with US-3.7)


US-7.3 — Blocker Detection

As an enterprise user,
I want to be alerted when a team member's standup mentions a recurring blocker,
So that I can intervene before it delays the project.

Acceptance Criteria:

  • NLP keyword extraction identifies potential blockers from standup "Blockers" field
  • If same blocker keyword appears 3+ times in 7 days, a notification is sent to the enterprise
  • Blocker alert shows: which freelancer, what keyword, how many times

Sprint: 6 · Status: Planned · Tasks: CP-142


Epic 8 — DevOps & Infrastructure

US-8.1 — Docker Compose Dev Environment

As a developer,
I want to spin up the full stack locally with a single command,
So that I can develop without manual service configuration.

Acceptance Criteria:

  • docker compose up starts all 10 services
  • Services are accessible at documented ports within 60 seconds
  • Hot reload works for both frontend and backend
  • Volume mounts preserve data between restarts

Sprint: 1 · Status: Done · Tasks: CP-10


US-8.2 — CI Pipeline

As a developer,
I want to have automated lint, test, and build checks on every PR,
So that broken code is caught before it merges.

Acceptance Criteria:

  • GitHub Actions runs on every push to any branch and every PR to main
  • Jobs: lint (ESLint + .NET analyzer), test (Jest + xUnit), build, Trivy security scan
  • PR cannot merge if any job fails
  • Discord notification sent on build failure

Sprint: 1 · Status: Done · Tasks: CP-11


US-8.3 — Kubernetes Deployment

As a DevOps engineer,
I want to deploy the application to Kubernetes with Deployments, Services, and Ingress,
So that the app can scale and self-heal in production.

Acceptance Criteria:

  • Kubernetes manifests for frontend, backend, and all dependencies
  • Horizontal Pod Autoscaler configured for frontend and backend
  • Ingress routes traffic based on path prefix
  • All secrets stored in Kubernetes Secrets (not ConfigMaps)

Sprint: 4–5 · Status: Planned · Tasks: CP-111, CP-120


US-8.4 — Terraform Infrastructure as Code

As a DevOps engineer,
I want to provision cloud infrastructure using Terraform,
So that environments are reproducible and version-controlled.

Acceptance Criteria:

  • Helm charts provisioning: PostgreSQL, Redis, MinIO (all in-cluster)
  • Charts parameterized via values.yaml for staging and production environments
  • Persistent storage configured with storageClassName
  • All services accessible by backend pods via Kubernetes service DNS

Sprint: 5 · Status: Planned · Tasks: CP-121


US-8.5 — Observability Stack

As a DevOps engineer,
I want to collect metrics, logs, and traces from all services,
So that I can diagnose production issues quickly.

Acceptance Criteria:

  • Prometheus scrapes metrics from frontend, backend, and infrastructure services
  • Serilog ships structured logs to Loki; Grafana dashboards display them
  • Alerts defined in Prometheus for: high error rate, p95 latency > 500ms, pod restarts
  • Grafana accessible at :3011 in dev, secured behind auth in prod

Sprint: 5 · Status: Planned · Tasks: CP-122, CP-123


US-8.6 — Staging Environment

As a developer,
I want to have a staging environment that mirrors production,
So that I can verify features before they reach real users.

Acceptance Criteria:

  • Staging is deployed automatically when main branch passes CI
  • Staging uses a separate database and Keycloak realm
  • Staging URL is shared with team in the deployment notification
  • Production deployment requires manual approval gate in GitHub Actions

Sprint: 6 · Status: Planned · Tasks: CP-144, CP-145, CP-146