# Portfolio Site Deployment (ArgoCD)

## Context

Deploy personal portfolio site to Kubernetes via ArgoCD. Universal JWT OAuth already live at api.riotpiao.com for cluster.

---

## Portfolio Site Deployment

Portfolio source repo: `~/workplace/riotpiao` (Next.js, standalone output).

**Portfolio Helm chart structure** (local, in homelab repo):

```
k8s/portfolio/
├── Chart.yaml
├── values.yaml
├── templates/
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   └── _helpers.tpl
└── README.md
```

**ArgoCD Application** (in homelab repo, synced by ArgoCD):

`argocd/applications/portfolio.yaml`:
```yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: portfolio
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://forgejo.riotpiao.com/rock/homelab
    targetRevision: HEAD
    path: k8s/portfolio
  destination:
    server: https://kubernetes.default.svc
    namespace: portfolio
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
```

**Build + push script** (portfolio repo):

`~/workplace/riotpiao/build.sh`:
```bash
#!/bin/bash
set -euo pipefail

REGISTRY="forgejo.riotpiao.com"
IMAGE="${REGISTRY}/rock/portfolio:latest"

docker buildx build --platform linux/amd64 -t "${IMAGE}" .
docker push "${IMAGE}"

echo "✓ Pushed ${IMAGE}"
```

---

## Repository Structure

**In homelab repo:**

```
~/workplace/homelab/
├── argocd/
│   └── applications/
│       └── portfolio.yaml         # ArgoCD Application manifest
└── k8s/
    └── portfolio/
        ├── Chart.yaml
        ├── values.yaml
        └── templates/
            ├── deployment.yaml
            ├── service.yaml
            ├── ingress.yaml
            └── _helpers.tpl
```

---

## Implementation Sequencing

1. **Portfolio build + push:**
   - `cd ~/workplace/riotpiao && ./build.sh`
   - Verify image in Forgejo registry

2. **Create ArgoCD Application:**
   - Add `argocd/applications/portfolio.yaml` to homelab repo
   - Push to Forgejo
   - ArgoCD auto-syncs

3. **Verification:**
   - `curl -I https://portfolio.riotpiao.com` → 200

---

## Portfolio Page Features

### Hero Section
- Animated avatar with flowing blob (HeroBlobFlow component)
- Title: "Full-Stack Systems Engineer"
- Subtitle: "Infrastructure × Backend × LLM Systems"
- Description: Observable, fault-tolerant systems from bare metal to cloud
- CTAs: "Explore Systems", GitHub link
- Terminal hint: "Press Cmd+K to explore via terminal"

### Experience Timeline
- Chronological work history visualization (ExperienceTimeline component)
- Job titles, companies, dates, achievements

### Feature Cards Grid (6 cards)
Each card has icon, title, description, stat, status badge, link to detail page:

1. **Infrastructure Platform** (GitBranch icon)
   - Multi-region Terraform + ArgoCD GitOps on Kubernetes
   - Stat: 40% CPU reduction
   - Status: Live

2. **Distributed Systems** (Cpu icon)
   - gRPC, Kafka, AWS Step Functions across 57+ regions
   - Stat: Mission-critical
   - Status: Live

3. **LLM Systems** (MessageSquare icon)
   - CPU-bound inference optimization, INT4/INT8 quantization
   - Stat: 60% latency cut
   - Status: Live

4. **Kafka Cluster** (Database icon)
   - Strimzi KRaft cluster with auto-scaling brokers
   - Stat: 3 brokers
   - Status: Live

5. **Open Source** (Layers icon)
   - go-flink: distributed DataLakeHouse in Go
   - Stat: Public repo
   - Status: Live

6. **Observability** (BarChart3 icon)
   - Prometheus, Grafana, Dynatrace — live metrics
   - Stat: 99.2% uptime
   - Status: Live

### Interactive Terminal
- Accessible via Cmd+K shortcut
- Browse systems/projects via command-line interface
- InteractiveTerminal component

### Dark Mode
- Full light/dark theme support via Tailwind

### Footer
- Copyright, GitHub, email links
- Homelab deployment note (3-node Talos cluster)

### Planned Detail Pages
- `/infrastructure` — K8s + Terraform setup details
- `/systems` — Distributed systems deep-dive
- `/llm` — Inference optimization techniques
- `/kafka` — Kafka cluster architecture
- `/opensource` — go-flink project showcase

---

## Files to Create

**In homelab repo:**
- `argocd/applications/portfolio.yaml` (ArgoCD Application)
- `k8s/portfolio/Chart.yaml`, `values.yaml`
- `k8s/portfolio/templates/{deployment,service,ingress}.yaml`

**In portfolio repo (`~/workplace/riotpiao`):**
- App pages: `app/layout.tsx`, `app/page.tsx`, `app/about/page.tsx`
- Detail pages: `app/infrastructure/page.tsx`, `app/systems/page.tsx`, etc.
- Components: Header, Footer, FeatureCard, HeroBlobFlow, ExperienceTimeline, InteractiveTerminal, AnimatedRoles, AvatarWithBlob, TypewriterText, ProgressiveText, LiveIndicator
- Content: `content/{projects,experience,metadata}.ts`
- Styles: `styles/globals.css`
- Docker: `Dockerfile`, `build.sh`, `next.config.js`
- Config: `package.json` (Next.js 15 + Tailwind + Framer Motion + Lucide)

---

## Success Criteria

- [x] Repository ready for ArgoCD sync
  - Dockerfile + multi-stage build
  - .dockerignore + build.sh
  - K8s manifests (Kustomize) in infra/portfolio/base/
  - ArgoCD Application defined in infra/argocd-apps.yaml
  - Forgejo Actions CI pipeline (.forgejo/workflows/build-push.yml)
- [ ] Portfolio site accessible at portfolio.riotpiao.com
- [ ] Project grid + about page render
- [ ] Image served from Forgejo registry
- [ ] Deployed via ArgoCD (no manual kubectl)
- [ ] ArgoCD Application syncs automatically
