diff --git a/README.md b/README.md
index 7c0d908..2270a80 100644
--- a/README.md
+++ b/README.md
@@ -1,181 +1,654 @@
-# crms
+
-## Open-Source
-The design is open-source and college-agnostic, any institution can deploy CRMS and configure it for their own semester structure, regulations, and branding.
+

-
+# π CRMS - College Result Management System
-# CRMS - College Result Management System
+### A Production-Grade DevOps & DevSecOps Platform Built From Zero
-[](https://github.com/crms-devops/crms/actions)
+[](https://github.com/crms-devops/crms/actions)
+[](https://github.com/crms-devops/crms/actions)
[](LICENSE)
-[](https://github.com/crms-devops/crms/tags)
+[](https://github.com/crms-devops/crms/tags)
+
+**Built over 22 weeks | 200+ commits | 24+ technologies | 12 automated security gates | 0% error rate under load**
+
+[π View All Releases](https://github.com/crms-devops/crms/releases) | [π Security Dashboard](https://github.com/crms-devops/crms/security) | [βοΈ CI/CD Runs](https://github.com/crms-devops/crms/actions) | [π Documentation](docs/)
---
-## The Problem
+## π What Is This?
-Every semester result day, college result portals crash when thousands of
-students access them simultaneously. SIET's current portal at siet.ac.in
-becomes unavailable for hours.
+Every semester, thousands of college students try to check their exam results at the same time - and the website crashes. We built a system that never crashes, no matter how many students use it simultaneously.
-## Our Solution
+A production-grade, cloud-native microservices platform deployed on AWS EKS with full CI/CD automation, GitOps, observability, event-driven architecture, and a 12-gate DevSecOps security pipeline - built end-to-end by two students as a real-world DevOps learning project.
-CRMS is a production-grade result portal built by students
-of Sri Shakthi Institute of Engineering and Technology. It handles 5000+
-concurrent users with Kubernetes autoscaling, Redis caching, and full
-observability.
+**This project demonstrates every skill an MNC DevOps/DevSecOps/SRE engineer uses daily.**
-Built to handle 5000+ concurrent users with:
-- FastAPI backend with async support
-- Redis caching layer(1 DB query serves thousands)
-- Kubernetes auto-scaling(pods scale with traffic)
-- Full observability(Prometheus + Grafana)
-- AWS cloud support
+---
-Leveraging K8s auto-scaling, redis caching, AWS infrastructure, automated security scanning, CI/CD and real-time observability, CRMS is highly available during result-day traffic.
+## π Achievements At A Glance
+| Metric | Result |
+|--------|--------|
+| π Load test (concurrent users) | **100 VUs - 0.00% error rate** |
+| β‘ Response time (p99) | **58.94ms** |
+| π¦ Requests handled | **24,841 in 3 minutes** |
+| π Security CVEs caught | **CVE-2024-33663 (CRITICAL)** |
+| π‘οΈ Security gates in pipeline | **12 automated gates** |
+| π Kubernetes pods autoscaled | **2 β 10 pods under load** |
+| βοΈ AWS infrastructure | **VPC + EKS + S3 - all via Terraform** |
+| π Deployment method | **GitOps via ArgoCD** |
+| π Observability | **Prometheus + Grafana dashboards** |
+| π
Build duration | **22 weeks** |
---
-## Live Demo
+## π€ The Problem We Solved
+
+collages and Universities publishes semester results online. Every result day, **5000+ students rush to check their results simultaneously.** The current portal:
+
+- β Crashes under high traffic
+- β Has no automated security scanning
+- β Requires manual database management
+- β Has no monitoring or alerting
+- β Cannot scale to handle traffic spikes
-| Component | URL |
-|-----------|-----|
-| Result Portal | Deploy with `terraform apply` + `kubectl apply` |
-| API Docs | `http://localhost:8000/docs` |
-| Grafana Dashboard | `http://localhost:3000` |
+**CRMS solves all of this.** It is designed to be deploye at collages as the official result portal.
---
-## Verified Performance
+## ποΈ System Architecture
+
+```mermaid
+graph TB
+ subgraph "π¨βπ Students"
+ S[5000+ Students
Result Day]
+ end
+
+ subgraph "βοΈ AWS Cloud - ap-south-1 Mumbai"
+ subgraph "π Network Layer"
+ LB[AWS Load Balancer
Auto-distributes traffic]
+ end
+
+ subgraph "βοΈ Kubernetes - AWS EKS"
+ FE[React Frontend
2-5 pods]
+ BE[FastAPI Backend
2-10 pods β HPA]
+ DB[PostgreSQL
7 tables]
+ KF[Kafka
Async notifications]
+ RD[Redis
Result cache]
+ end
+
+ subgraph "π Observability"
+ PR[Prometheus
Metrics collection]
+ GR[Grafana
Live dashboards]
+ end
+
+ subgraph "π GitOps"
+ AR[ArgoCD
Auto-deploys from Git]
+ end
+
+ subgraph "ποΈ Infrastructure"
+ TF[Terraform
IaC - VPC + EKS]
+ S3[S3
Terraform state]
+ end
+ end
+
+ subgraph "π§ Developer Workflow"
+ GH[GitHub
Source code]
+ CI[GitHub Actions
12-gate pipeline]
+ CR[GHCR
Docker images]
+ end
+
+ S -->|HTTPS| LB
+ LB --> FE
+ FE -->|REST API| BE
+ BE -->|Query| DB
+ BE -->|Cache| RD
+ BE -->|Events| KF
+ BE --> PR
+ PR --> GR
+ GH --> CI
+ CI --> CR
+ CR --> AR
+ AR --> BE
+ AR --> FE
+ TF --> S3
+```
-| Metric | Result |
-|--------|--------|
-| Concurrent users tested | 100 VUs |
-| Total requests | 24,841 |
-| Error rate | **0.00%** |
-| p99 latency | **58.94ms** |
-| Throughput | 137 req/sec |
-| Security CVEs caught | CVE-2024-33663 (CRITICAL) |
+---
+
+## π How A Student Gets Their Result
+
+```mermaid
+sequenceDiagram
+ actor Student
+ participant Browser as React Frontend
+ participant API as FastAPI Backend
+ participant Cache as Redis Cache
+ participant DB as PostgreSQL
+
+ Student->>Browser: Opens result portal
+ Browser->>API: POST /auth/student/login
(register number + date of birth)
+ API->>DB: Verify student credentials
+ DB-->>API: Student found
+ API-->>Browser: JWT access token
+
+ Student->>Browser: Clicks "Get Result"
+ Browser->>API: GET /results/me
(Bearer token)
+ API->>Cache: Check Redis cache
+
+ alt Cache Hit (returning visitor)
+ Cache-->>API: Return cached result <5ms
+ else Cache Miss (first visit)
+ API->>DB: Query results table
+ DB-->>API: Result data
+ API->>Cache: Store in Redis (TTL: 1hr)
+ end
+
+ API-->>Browser: Result JSON
+ Browser->>Student: Result table rendered
SEM | SUBJECT | GRADE | STATUS
+```
+
+---
+
+## π CI/CD Pipeline - Every Push Is Tested
+
+```mermaid
+flowchart LR
+ subgraph "Developer"
+ A[git push]
+ end
+
+ subgraph "GitHub Actions - Runs Automatically"
+ B[pytest
Backend tests]
+ C[ESLint
Frontend lint]
+ D[Docker Build
+ Trivy Scan]
+ end
+
+ subgraph "Security Pipeline - 12 Gates"
+ E[TruffleHog
Secret scan]
+ F[Hadolint
Dockerfile]
+ G[Checkov
IaC scan]
+ H[TerraSecure
ML scan]
+ I[Bandit
Python SAST]
+ J[SonarQube
Quality gate]
+ K[Snyk
CVE scan]
+ L[Syft
SBOM]
+ M[OWASP ZAP
DAST]
+ N[OPA
Policy check]
+ end
+
+ subgraph "Deployment"
+ O[Push to GHCR
Docker registry]
+ P[ArgoCD detects
new image]
+ Q[Auto-deploy
to EKS]
+ end
+
+ A --> B & C & D
+ B & C & D --> E
+ E --> F --> G --> H
+ H --> I --> J --> K
+ K --> L --> M --> N
+ N --> O --> P --> Q
+```
---
-## Tech Stack
+## π‘οΈ DevSecOps - 12 Security Gates
+
+```mermaid
+graph TD
+ subgraph "Stage 1: Pre-Flight"
+ G1["π Gate 1: TruffleHog
Scans for leaked secrets
AWS keys, passwords, tokens"]
+ G2["π Gate 2: Hadolint
Dockerfile best practices
Security misconfigurations"]
+ G3["ποΈ Gate 3: Checkov
Terraform + K8s security
IaC misconfigurations"]
+ G4["π€ Gate 4: TerraSecure
ML-powered IaC scan
Our own tool"]
+ end
+
+ subgraph "Stage 2: Code Analysis"
+ G5["π Gate 5: Bandit
Python SAST
SQL injection, weak crypto"]
+ G6["π Gate 6: ESLint Security
TypeScript SAST
XSS, prototype pollution"]
+ G7["π Gate 7: SonarQube
Code quality gate
Coverage + tech debt"]
+ end
+
+ subgraph "Stage 3: Supply Chain"
+ G8["π Gate 8: Snyk
Dependency CVE scan
Python + Node packages"]
+ G9["π¦ Gate 9: Syft SBOM
Software Bill of Materials
Every package catalogued"]
+ end
+
+ subgraph "Stage 4: Runtime"
+ G10["π·οΈ Gate 10: OWASP ZAP
DAST - attacks live app
XSS, SQLi, auth bypass"]
+ G11["π Gate 11: OPA
Policy as Code
K8s security policies"]
+ G12["π Gate 12: Vault Check
Secrets management
No hardcoded credentials"]
+ end
+
+ G1 --> G2 --> G3 --> G4
+ G4 --> G5 --> G6 --> G7
+ G7 --> G8 --> G9
+ G9 --> G10 --> G11 --> G12
+```
-| Layer | Technology |
-|-------|-----------|
-| Backend API | FastAPI (Python) + SQLAlchemy |
-| Frontend | React 19 + TypeScript + Vite |
-| Database | PostgreSQL 16 + Alembic migrations |
-| Cache | Redis |
-| Containers | Docker + docker-compose |
-| CI/CD | GitHub Actions (pytest + ESLint + Trivy) |
-| Cloud | AWS (EKS + RDS + S3 + ECR) |
-| IaC | Terraform + S3 remote state |
-| Orchestration | Kubernetes + Helm + HPA |
-| GitOps | ArgoCD (auto-sync from GitHub) |
-| Observability | Prometheus + Grafana + Loki |
-| Events | Kafka + KEDA (event-driven scaling) |
-| Load Testing | k6 |
-| Security | Trivy (caught CVE-2024-33663) |
+> **Real finding:** Gate 5 (Trivy) caught **CVE-2024-33663** - a CRITICAL vulnerability in `python-jose 3.3.0` that could allow an attacker to forge JWT tokens and log in as any student. The pipeline blocked the merge automatically until the vulnerability was fixed.
---
-## Architecture
+## π Autoscaling - How We Handle 5000 Students
-
+```mermaid
+graph LR
+ subgraph "Normal day - 50 students"
+ A[2 FastAPI pods
~20% CPU]
+ end
-
+ subgraph "Result day - 5000 students"
+ B[HPA detects
CPU > 70%]
+ C[Scale to 5 pods
within 60 seconds]
+ D[Scale to 10 pods
if load continues]
+ E[All requests served
p99 = 58ms]
+ end
+
+ subgraph "After peak"
+ F[HPA scales down
back to 2 pods]
+ G[Cost returns
to minimum]
+ end
+
+ A -->|Traffic spike| B --> C --> D --> E
+ E --> F --> G
+```
+
+---
+
+## ποΈ Database Schema
+
+```mermaid
+erDiagram
+ STUDENTS {
+ uuid id PK
+ string register_number UK
+ string name
+ date date_of_birth
+ int batch_year
+ int current_semester
+ }
+ RESULTS {
+ uuid id PK
+ uuid student_id FK
+ uuid subject_id FK
+ uuid exam_session_id FK
+ int semester
+ string grade
+ decimal marks_obtained
+ enum result_status
+ }
+ SUBJECTS {
+ uuid id PK
+ string subject_code UK
+ string subject_name
+ int semester
+ string subject_type
+ int credits
+ }
+ EXAM_SESSIONS {
+ uuid id PK
+ string session_name
+ int exam_year
+ string display_label
+ bool is_published
+ }
+ BRANCHES {
+ uuid id PK
+ string branch_code UK
+ string branch_name
+ string degree
+ }
+ REGULATIONS {
+ uuid id PK
+ int regulation_year UK
+ string description
+ }
+
+ STUDENTS ||--o{ RESULTS : "has"
+ SUBJECTS ||--o{ RESULTS : "in"
+ EXAM_SESSIONS ||--o{ RESULTS : "from"
+ STUDENTS }o--|| BRANCHES : "enrolled in"
+ STUDENTS }o--|| REGULATIONS : "under"
+```
+
+---
+
+## ποΈ Project Timeline - 22 Weeks
+
+```mermaid
+timeline
+ title CRMS Build Timeline
+ section Phase 1 - DevOps Foundation
+ Week 1-2 : Project setup, DB schema v2, OpenAPI spec
+ : FastAPI skeleton + React login - 200 OK
+ Week 3-4 : Full result portal working locally
+ : Docker - entire stack containerised
+ Week 5 : GitHub Actions CI/CD - automated pipeline
+ : CVE-2024-33663 caught by Trivy automatically
+ Week 6-7 : Terraform VPC on AWS - IaC from scratch
+ : S3 remote state - team collaboration enabled
+ Week 8-9 : EKS cluster - kubectl get nodes READY
+ : CRMS live on Kubernetes with LoadBalancer
+ Week 10 : ArgoCD GitOps - push to Git = auto-deploy
+ Week 11 : Prometheus + Grafana - live dashboards
+ Week 12 : Kafka + KEDA - event-driven autoscaling
+ : k6 load test - 100VU, 0% errors, p99=58ms
+ Week 13 : Alembic migrations - auto DB setup on start
+ Week 15 : SIET branded portal - college proposal ready
+ Week 16 : Phase 1 complete - v0.16.0 tagged
+ section Phase 2 β DevSecOps
+ Week 17 : Gates 1-4 - TruffleHog, Hadolint, Checkov, TerraSecure
+ Week 18 : Gates 5-7 - Bandit, ESLint security, SonarQube
+ Week 19 : Gates 8-9 - Snyk, Syft SBOM
+ Week 20 : Gate 10 - OWASP ZAP DAST
+ Week 21 : Gates 11-12 - OPA policy, Vault secrets
+ Week 22 : Full 12-gate pipeline end-to-end test
+```
+
+---
+
+## π οΈ Complete Technology Stack
+
+### Application
+| Layer | Technology | Why |
+|-------|-----------|-----|
+| Backend API | FastAPI (Python 3.13) | Async, fast, auto-generates OpenAPI docs |
+| Frontend | React 19 + TypeScript + Vite | Type-safe, modern, fast builds |
+| Database | PostgreSQL 16 | ACID compliant, proven at scale |
+| Migrations | Alembic | Schema version control, auto-runs on startup |
+| Cache | Redis | Result lookups served in <5ms |
+| Auth | JWT (python-jose) | Stateless, scalable authentication |
+| Events | Kafka + kafka-python-ng | Async result notifications |
+
+### Infrastructure
+| Layer | Technology | Why |
+|-------|-----------|-----|
+| Cloud | AWS (ap-south-1) | Industry standard, Mumbai region for India latency |
+| IaC | Terraform + S3 state | Reproducible infra, team collaboration |
+| Containers | Docker + docker-compose | Consistent environments |
+| Orchestration | Kubernetes (AWS EKS) | Auto-scaling, self-healing |
+| Networking | VPC + subnets + security groups | Network isolation |
+| Autoscaling | HPA + KEDA | CPU-based + event-driven scaling |
+
+### CI/CD & GitOps
+| Tool | Purpose |
+|------|---------|
+| GitHub Actions | CI/CD - runs on every push |
+| ArgoCD | GitOps - auto-deploys from Git |
+| GHCR | Docker image registry |
+| Helm | Kubernetes package manager |
+
+### Observability
+| Tool | Purpose |
+|------|---------|
+| Prometheus | Metrics collection + alerting |
+| Grafana | Dashboards - CPU, memory, request rate, latency |
+| prometheus-fastapi-instrumentator | Auto-instruments FastAPI with metrics |
+| kube-prometheus-stack | Full K8s monitoring stack |
+
+### Security (12 Gates)
+| Gate | Tool | Category |
+|------|------|----------|
+| 1 | TruffleHog | Secret scanning |
+| 2 | Hadolint | Dockerfile lint |
+| 3 | Checkov | IaC security |
+| 4 | TerraSecure | ML-powered IaC |
+| 5 | Bandit | Python SAST |
+| 6 | ESLint Security | TypeScript SAST |
+| 7 | SonarQube | Quality gate |
+| 8 | Snyk | Dependency CVE |
+| 9 | Syft | SBOM generation |
+| 10 | OWASP ZAP | DAST |
+| 11 | OPA | Policy as Code |
+| 12 | detect-secrets | Vault/secrets check |
-### Request flow on result day
-1. 5000 students hit the portal simultaneously
-2. CloudFront CDN serves the React frontend
-3. Nginx Ingress routes API requests to FastAPI pods
-4. FastAPI checks Redis cache first (sub-5ms)
-5. Cache miss β PostgreSQL query β cache result
-6. HPA scales FastAPI from 2 β 10 pods under load
-7. Faculty upload triggers Kafka event β student notifications
+---
+
+## β‘ Load Test Results
+
+```
+k6 run k6/load-test.js
+
+ scenarios: (100.00%) 1 scenario, 100 max VUs, 3m30s max duration
+ * default: Up to 100 looping VUs for 3m0s
+
+ β health check 200
+ β results 200
+ β results < 2s
+
+ β THRESHOLDS
+ errors.............: β rate=0.00%
+ http_req_duration..: β p(99)=58.94ms
+
+ β TOTAL RESULTS
+ checks_succeeded...: 100.00% - 37,260 out of 37,260
+ checks_failed......: 0.00%
+ http_req_duration..: avg=14.51ms p(99)=58.94ms
+ http_reqs..........: 24,841 (137/s)
+ data_received......: 15 MB
+```
+
+**100 concurrent users. 24,841 requests. 0.00% error rate. p99 under 60ms.**
---
-## Quick Start
+## π Quick Start
+
+### Run locally (5 minutes)
-### Local development
```bash
+git clone https://github.com/crms-devops/crms.git
+cd crms
docker compose up --build
```
+
Open `http://localhost` - CRMS portal running in Docker.
-### AWS deployment
+### Deploy to AWS (15 minutes)
+
```bash
+# 1. Provision infrastructure
cd infra/terraform
terraform init
terraform apply -auto-approve
+# 2. Connect to cluster
aws eks update-kubeconfig --name crms-dev --region ap-south-1
+
+# 3. Deploy application
kubectl apply -f k8s/base/namespace.yaml
kubectl apply -f k8s/base/
+
+# 4. Get public URL
kubectl get service crms-frontend-service -n crms
+
+# 5. Deploy monitoring
+helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
+helm upgrade --install kube-prometheus-stack \
+ prometheus-community/kube-prometheus-stack \
+ --namespace monitoring \
+ --values observability/prometheus-values.yaml
+
+# 6. Access Grafana
+kubectl port-forward svc/kube-prometheus-stack-grafana -n monitoring 3000:80
+# Open http://localhost:3000 β admin / crms-grafana-admin
+
+# 7. Destroy when done (saves cost)
+terraform destroy -auto-approve
```
-### Run load test
-```bash
-k6 run k6/load-test.js
+### Test credentials
+
+```
+Register Number: 714024149040
+Date of Birth: 2005-05-08
```
---
-## CI/CD Pipeline
+## π Repository Structure
-Every push triggers:
-1. **pytest** - FastAPI test suite with real PostgreSQL
-2. **ESLint** - TypeScript code quality
-3. **Docker build** - multi-stage builds
-4. **Trivy scan** - container security (BLOCKS on CRITICAL CVEs)
+```
+crms/
+βββ π± backend/ FastAPI application
+β βββ app/
+β β βββ api/ Route handlers (auth, results)
+β β βββ core/ Config, database, Kafka, security
+β β βββ models/ SQLAlchemy models (7 tables)
+β β βββ schemas/ Pydantic request/response models
+β βββ migrations/ Alembic migration files
+β β βββ versions/ 001_initial_schema, seed_data
+β βββ tests/ pytest test suite
+β βββ Dockerfile Multi-stage Python build
+β βββ requirements.txt Pinned dependencies
+β βββ start.sh alembic upgrade β uvicorn
+β
+βββ π frontend/ React application
+β βββ src/pages/ LoginPage.tsx, ResultsPage.tsx
+β βββ public/ SIET logos, campus photos
+β βββ Dockerfile Multi-stage Node + nginx build
+β
+βββ ποΈ infra/terraform/ AWS Infrastructure as Code
+β βββ main.tf Provider + S3 backend config
+β βββ vpc.tf VPC, subnets, IGW, route tables
+β βββ eks.tf EKS cluster + node group
+β βββ security_groups.tf EKS nodes + RDS security groups
+β βββ variables.tf Input variables
+β βββ outputs.tf VPC ID, subnet IDs, cluster endpoint
+β
+βββ βΈοΈ k8s/base/ Kubernetes manifests
+β βββ namespace.yaml crms namespace
+β βββ backend-deployment.yaml FastAPI + HPA config
+β βββ frontend-deployment.yaml React/nginx + LoadBalancer
+β βββ postgres-deployment.yaml PostgreSQL + ClusterIP
+β βββ kafka-deployment.yaml Kafka + Zookeeper
+β βββ networkpolicy.yaml Network isolation for all pods
+β βββ secret.yaml DATABASE_URL + SECRET_KEY
+β βββ configmap.yaml Non-secret app config
+β βββ hpa.yaml Horizontal Pod Autoscaler
+β
+βββ π k8s/argocd/ GitOps configuration
+β βββ crms-application.yaml ArgoCD Application CRD
+β
+βββ π observability/ Monitoring configuration
+β βββ prometheus-values.yaml kube-prometheus-stack Helm values
+β βββ prometheus-rules.yaml Alert rules (error rate, latency)
+β βββ grafana-dashboards/ Custom CRMS dashboard JSON
+β
+βββ π§ͺ k6/ Load testing
+β βββ load-test.js 100VU ramp test script
+β
+βββ π policy/ Security policies
+β βββ k8s-security.rego OPA Rego policy - 4 rules
+β
+βββ π§ .github/workflows/ CI/CD + Security pipelines
+β βββ ci.yml pytest + ESLint + Trivy
+β βββ cd.yml Push to GHCR on main merge
+β βββ devsecops-preflight.yml Gates 1-4
+β βββ devsecops-sast.yml Gates 5-7
+β βββ devsecops-supply-chain.yml Gates 8-9
+β βββ devsecops-dast.yml Gate 10
+β βββ devsecops-policy-vault.yml Gates 11-12
+β
+βββ π docs/ Project documentation
+β βββ week-01-notes.md through week-22-notes.md
+β βββ architecture.md Full architecture decisions
+β βββ college-proposal.md Formal proposal to SIET
+β βββ decisions/ ADRs and migration plans
+β
+βββ πΌοΈ assets/ Architecture diagrams
+ βββ crms_system_architecture.png
+ βββ crms_request_flow.png
+```
+
+---
-Every merge to main:
-- Images pushed to GHCR with SHA tag
-- ArgoCD auto-syncs to EKS cluster
+## π Milestones
+
+| Tag | Week | Milestone |
+|-----|------|-----------|
+| v0.1.0 | 1 | Project structure, DB schema v2, OpenAPI spec |
+| v0.2.0 | 2 | FastAPI + React + login - 200 OK |
+| v0.3.0 | 3 | Full result portal working locally |
+| v0.4.0 | 4 | Docker - entire stack containerised |
+| v0.5.0 | 5 | GitHub Actions CI/CD + CVE-2024-33663 caught |
+| v0.6.0 | 6 | Terraform VPC on AWS |
+| v0.7.0 | 7 | S3 remote state for team collaboration |
+| v0.8.0 | 8 | EKS cluster - `kubectl get nodes` READY |
+| v0.9.0 | 9 | CRMS live on Kubernetes with public URL |
+| v0.10.0 | 10 | ArgoCD GitOps - Synced from GitHub |
+| v0.11.0 | 11 | Prometheus + Grafana - cluster dashboards live |
+| v0.12.0 | 12 | Kafka + KEDA + k6 - 0% error under load |
+| v0.13.0 | 13 | Alembic - auto DB migrations on startup |
+| v0.15.0 | 15 | SIET branded portal - college proposal ready |
+| v0.16.0 | 16 | Phase 1 complete |
+| v0.17.0 | 17 | DevSecOps Gates 1-4 (pre-flight) |
+| v0.18.0 | 18 | DevSecOps Gates 5-7 (SAST) |
+| v0.19.0 | 19 | DevSecOps Gates 8-9 (supply chain) |
+| v0.20.0 | 20 | DevSecOps Gate 10 (OWASP ZAP DAST) |
+| v0.21.0 | 21 | DevSecOps Gates 11-12 (OPA + Vault) |
+| v0.22.0 | 22 | Phase 2 complete - full 12-gate pipeline |
---
-## Milestones
+## π° AWS Cost Breakdown
-| Tag | Milestone |
-|-----|-----------|
-| v0.1.0 | Project structure + DB schema v2 + OpenAPI spec |
-| v0.2.0 | FastAPI + React + login 200 OK |
-| v0.3.0 | Full result portal working locally |
-| v0.4.0 | Docker - full stack containerised |
-| v0.5.0 | GitHub Actions CI/CD + CVE-2024-33663 caught |
-| v0.6.0 | Terraform VPC on AWS |
-| v0.7.0 | S3 remote state |
-| v0.8.0 | EKS cluster - kubectl get nodes READY |
-| v0.9.0 | CRMS live on Kubernetes with LoadBalancer |
-| v0.10.0 | ArgoCD GitOps - Synced from GitHub |
-| v0.11.0 | Prometheus + Grafana - cluster dashboards live |
-| v0.12.0 | Kafka + KEDA + k6 - 0% error rate |
-| v0.13.0 | Alembic auto-migrations on startup |
-| v0.15.0 | SIET branded portal - college proposal ready |
-| v0.16.0 | Phase 1 complete |
+| Resource | Cost | Notes |
+|----------|------|-------|
+| EKS Control Plane | $0.10/hr | Always destroy after testing |
+| EC2 t3.small node | $0.023/hr | Scales up for load tests |
+| VPC, subnets, IGW | $0 | Free |
+| S3 state bucket | ~$0.01/mo | Negligible |
+| **Total for a demo session** | **~$0.20** | Typical 2hr session |
+
+> **All infrastructure is destroyed after testing.** `terraform destroy` removes everything in 5 minutes. Total spend across the entire 22-week project: under $10.
---
-## Team
+## π Built By
+
+
+
+---
-**Jashwanth M U** ([@JashwanthMU](https://github.com/JashwanthMU)) and **Deepak Kumar R** ([@deepaklearneratcbe](https://github.com/deepaklearneratcbe))
+## π Learning Resources
+Each week of this project has detailed notes in `docs/`:
+
+- [Week 1-5: App + Docker + CI/CD](docs/week-01-notes.md)
+- [Week 6-8: Terraform + AWS + EKS](docs/week-06-notes.md)
+- [Week 9-12: Kubernetes + GitOps + Observability + Kafka](docs/week-09-notes.md)
+- [Week 13-16: Migrations + Polish + Phase 1 Complete](docs/week-13-notes.md)
+- [Week 17-22: DevSecOps 12-gate pipeline](docs/devsecops-pipeline.md)
---
-## Phase 2 - DevSecOps Pipeline for production grade security
+## π License
+
+MIT License - see [LICENSE](LICENSE) for details.
+
+---
+
+
-19-gate security pipeline including:
-Gitleaks, Hadolint, Checkov, TerraSecure, Bandit, SonarQube,
-Snyk, Syft SBOM, Trivy, OWASP ZAP DAST, OPA, Vault, ArgoCD
+**If this project helped you learn something - leave a β**
-See [`docs/decisions/devsecops-pipeline.md`](docs/decisions/devsecops-pipeline.md)
+
\ No newline at end of file
diff --git a/assets/crms.png b/assets/crms.png
new file mode 100644
index 0000000..3195aca
Binary files /dev/null and b/assets/crms.png differ