Machine-readable metadata lives in each top-level project-* directory as project.yaml and follows project.schema.json. The catalog distinguishes learning/reference material from projects that are deployable demos or templates, and flags cloud cost risk before anyone runs infrastructure commands.
Required fields: schema_version, project.number, project.slug, project.name, classification, status, deployability, stack, cloud, iac, ci_cd, cost_risk, security_posture, validation.command, and notes.
Classification values are learning or deployable. Cost risk is low, medium, or high. Security posture is baseline, devsecops, hardened, or needs_review.
Optional learner fields live under learning and help students choose the right project without changing the deployability catalog:
learning:
estimated_time: 2-4 hours
prerequisites:
- Docker basics
- GitHub account
learning_paths:
- containers
- ci-cd
badges:
- local-first
- beginner-friendlySupported learning paths are cloud-foundations, containers, ci-cd, infrastructure-as-code, kubernetes, devsecops, observability, serverless, platform-engineering, and security.
Supported learner badges are beginner-friendly, local-first, free-tier-aware, cloud-cost-risk, portfolio-ready, team-workflow, security-focused, needs-cloud-account, cleanup-required, and capstone.
Use LEARNING_TRACKER.md as a student worksheet for tracking selected projects, prerequisites, validation evidence, cleanup, and portfolio notes.
| # | Project | Classification | Status | Deployability | Cloud | Cost | Security | Validation |
|---|---|---|---|---|---|---|---|---|
| 1 | Java Application on AWS 3-Tier Architecture | deployable | cloud_lab | iac_ready | aws | high | baseline | terraform -chdir=terraform fmt -check |
| 2 | Scalable AWS VPC Architecture | learning | cloud_lab | reference_only | aws | medium | baseline | test -f README.md |
| 3 | Linux Fundamentals for Cloud and DevOps | learning | reference | reference_only | none | low | baseline | test -f README.md |
| 4 | Django Application on AWS ECS and ECR | deployable | cloud_lab | container_ready | aws | medium | baseline | python3 -m compileall . |
| 5 | Java App with Docker, Jenkins, and Kubernetes | deployable | cloud_lab | ci_cd_ready | aws | medium | baseline | kubectl apply --dry-run=client -f hello-world/regapp-deploy.yml -f hello-world/regapp-service.yml |
| 6 | Advanced CI/CD Pipeline with DevOps Tools | deployable | devsecops_lab | ci_cd_ready | aws | medium | devsecops | mvn -q -DskipTests=false test |
| 7 | Azure DevOps Journey with AKS and Terraform | learning | cloud_lab | ci_cd_ready | azure | high | baseline | test -f README.md |
| 8 | 2048 Game on Amazon EKS | deployable | cloud_lab | kubernetes_ready | aws | medium | baseline | kubectl apply --dry-run=client -f 2048-deployment.yaml -f mygame-svc.yaml |
| 9 | Netflix Clone DevSecOps CI/CD with Monitoring | deployable | devsecops_lab | ci_cd_ready | aws | medium | devsecops | test -f jenkinsfile |
| 10 | .NET CI/CD with Azure App Service | learning | reference | reference_only | azure | medium | baseline | test -f README.md |
| 11 | Two-Tier AWS Infrastructure with Terraform | deployable | cloud_lab | iac_ready | aws | medium | baseline | terraform fmt -check |
| 12 | Super Mario on Kubernetes with Terraform | learning | reference | reference_only | aws | medium | baseline | test -f README.md |
| 13 | Zomato Clone Secure DevSecOps Deployment | learning | reference | reference_only | aws | medium | devsecops | test -f README.md |
| 14 | Android CI/CD with GitHub Actions | deployable | ci_lab | ci_cd_ready | none | low | baseline | ./android-demo-app/gradlew -p android-demo-app tasks |
| 15 | E-Commerce Three-Tier App on EKS with Helm | learning | reference | reference_only | aws | high | baseline | test -f README.md |
| 16 | Jenkins and Argo CD Kubernetes Deployment | learning | reference | reference_only | none | medium | baseline | test -f README.md |
| 17 | Deploying an App to AKS with Azure DevOps | learning | reference | reference_only | azure | medium | baseline | test -f README.md |
| 18 | Java Full CI/CD with Jenkins, SonarQube, Argo CD, Helm, and Kubernetes | deployable | devsecops_lab | ci_cd_ready | none | medium | devsecops | mvn -q -f spring-boot-app/pom.xml test |
| 19 | EKS Cluster and App Delivery with Jenkins and Terraform | deployable | cloud_lab | ci_cd_ready | aws | high | baseline | terraform -chdir=tf-aws-eks fmt -check |
| 20 | Azure DevOps Terraform Pipeline | deployable | cloud_lab | ci_cd_ready | azure | medium | baseline | terraform -chdir=terraform fmt -check |
| 21 | AWS CodePipeline Video Streaming App | deployable | cloud_lab | ci_cd_ready | aws | medium | baseline | npm run build |
| 22 | AWS Fully Serverless Architecture with CI/CD | deployable | cloud_lab | iac_ready | aws | medium | baseline | terraform fmt -check |
| 23 | Swiggy Clone Blue-Green ECS Deployment | deployable | cloud_lab | ci_cd_ready | aws | medium | devsecops | npm --prefix Swiggy_clone install --package-lock-only --ignore-scripts |
| 24 | DotNet Monitoring DevSecOps Pipeline | deployable | devsecops_lab | ci_cd_ready | none | medium | devsecops | dotnet test DotNet-monitoring |
| 25 | Petshop Java DevSecOps Deployment | learning | reference | reference_only | none | medium | devsecops | test -f README.md |
| 26 | AWS Infrastructure with Terraform and GitLab CI/CD | deployable | cloud_lab | ci_cd_ready | aws | medium | baseline | terraform fmt -check -recursive |
| 27 | Reddit App on EKS with Argo CD and Monitoring | learning | reference | reference_only | aws | medium | devsecops | test -f README.md |
| 28 | OpenAI Chatbot UI on EKS with Jenkins and Terraform | deployable | devsecops_lab | ci_cd_ready | aws | high | devsecops | npm --prefix Chatbot-UI test |
| 29 | Three-Tier Voting App with Argo CD and Azure DevOps | learning | reference | reference_only | azure | medium | baseline | test -f README.md |
| 30 | Blog App on EKS with Jenkins and Security Tools | deployable | devsecops_lab | ci_cd_ready | aws | high | devsecops | mvn -q -f app/pom.xml test |
| 31 | Cloud Native Monitoring App | deployable | local_validated | container_ready | aws | medium | hardened | make test |
| 32 | Tetris DevSecOps Kubernetes Pipeline | deployable | devsecops_lab | ci_cd_ready | aws | high | devsecops | npm --prefix Tetris-V1 test --if-present |
| 33 | Node CI/CD to EKS with GitHub Actions | deployable | local_validated | ci_cd_ready | aws | high | hardened | make test |
| 34 | Node CI/CD to ECS with Terraform and GitHub Actions | deployable | cloud_lab | ci_cd_ready | aws | medium | baseline | terraform -chdir=terraform fmt -check |
| 35 | Progressive DevSecOps Pipeline Series | deployable | devsecops_lab | ci_cd_ready | aws | medium | devsecops | mvn -q -f step-2-sast-sonarcloud/pom.xml test |
| 36 | AWS Real-Time Dev to Pre-Prod to Production Deployment | deployable | cloud_lab | ci_cd_ready | aws | medium | hardened | test -f buildspec.yml -a -f appspec.yml |
| 37 | Provision EKS Cluster with Terraform | deployable | cloud_lab | iac_ready | aws | high | hardened | terraform fmt -check |
| 38 | Docker and Terraform Three-Tier Architecture | deployable | cloud_lab | iac_ready | aws | high | hardened | docker compose config |
| 39 | GitHub Actions with AWS and Terraform | deployable | cloud_lab | ci_cd_ready | aws | medium | baseline | terraform fmt -check |
| 40 | Kubernetes Dashboard with Trivy | deployable | local_demo | local_only | none | low | devsecops | node --check app.js && python3 -m py_compile systeminfo.py |
| 41 | Online Boutique Microservices Assignment | deployable | local_lab | kubernetes_ready | none | low | baseline | kubectl apply --dry-run=client -f deploy |
| 42 | Serverless REST API with DynamoDB | deployable | cloud_lab | iac_ready | aws | medium | hardened | terraform -chdir=terraform fmt -check |
| 43 | Scalable Web App on ECS Fargate with Terraform | deployable | cloud_lab | iac_ready | aws | medium | baseline | terraform fmt -check |
| 44 | DevSecOps 101 Spring Boot Pipeline | deployable | devsecops_lab | ci_cd_ready | aws | medium | devsecops | ./mvnw test |
| 45 | Jenkins CI/CD with Argo CD and Vault | deployable | devsecops_lab | ci_cd_ready | aws | medium | devsecops | test -f Jenkinsfile |
| 46 | Advanced EKS Cluster with Terraform Modules | deployable | cloud_lab | iac_ready | aws | high | hardened | terraform fmt -check |
| 47 | Django Multitenant SaaS Ecommerce | deployable | local_validated | container_ready | aws | high | hardened | make test |
| 48 | Terraform AWS EKS Provisioning | deployable | cloud_lab | iac_ready | aws | high | hardened | terraform fmt -check |
| 49 | Text Encryption Cybersecurity Demo | learning | local_demo | local_only | none | low | baseline | node --check main.js |
| 50 | ArgoCD GitOps Home Lab | learning | local_lab | kubernetes_ready | none | low | baseline | kubectl apply --dry-run=client -f k8s/ |
| 51 | OpenTelemetry Observability Home Lab | learning | local_lab | container_ready | none | low | baseline | docker compose config |
| 52 | OpenTofu AWS Free-Tier Lab | learning | cloud_lab | iac_ready | aws | medium | baseline | test -f main.tf -a -f versions.tf |
| 53 | Supply Chain Security Lab | learning | ci_lab | ci_cd_ready | none | low | devsecops | node --check app/server.js |
| 54 | Progressive Delivery Home Lab | learning | local_lab | kubernetes_ready | none | low | baseline | kubectl apply --dry-run=client -f rollouts/ |
Run the parser below from the repository root to verify that every top-level project-* directory has valid metadata and that project numbers match directory names:
python3 - <<'PY'
from pathlib import Path
import re, yaml
projects = sorted(Path('.').glob('project-*'))
seen = set()
for d in projects:
m = re.match(r'project-(\d{2})-(.+)$', d.name)
if not m:
raise SystemExit(f'bad directory name: {d}')
metadata = d / 'project.yaml'
if not metadata.exists():
raise SystemExit(f'missing metadata: {metadata}')
data = yaml.safe_load(metadata.read_text())
required = ['schema_version', 'project', 'classification', 'status', 'deployability', 'stack', 'cloud', 'iac', 'ci_cd', 'cost_risk', 'security_posture', 'validation', 'notes']
missing = [key for key in required if key not in data]
if missing:
raise SystemExit(f'{metadata}: missing {missing}')
number = int(m.group(1))
if data['schema_version'] != 1 or data['project']['number'] != number or data['project']['slug'] != m.group(2):
raise SystemExit(f'{metadata}: project identity mismatch')
if data['classification'] not in {'learning', 'deployable'}:
raise SystemExit(f'{metadata}: invalid classification')
if data['cost_risk'] not in {'low', 'medium', 'high'}:
raise SystemExit(f'{metadata}: invalid cost_risk')
if data['security_posture'] not in {'baseline', 'devsecops', 'hardened', 'needs_review'}:
raise SystemExit(f'{metadata}: invalid security_posture')
if not data['stack'] or not data['validation'].get('command'):
raise SystemExit(f'{metadata}: stack and validation.command are required')
seen.add(number)
expected = set(range(1, len(projects) + 1))
if seen != expected:
raise SystemExit(f'project number gap: expected {sorted(expected)}, got {sorted(seen)}')
print(f'validated {len(projects)} project metadata files')
PY