Files
riotpiao.com/PLAN.md
T

208 lines
5.5 KiB
Markdown
Raw Normal View History

# Portfolio Site Deployment (ArgoCD)
2026-08-18 18:33:49 -07:00
## Context
Deploy personal portfolio site to Kubernetes via ArgoCD. Universal JWT OAuth already live at api.riotpiao.com for cluster.
2026-08-18 18:33:49 -07:00
---
## Portfolio Site Deployment
2026-08-18 18:33:49 -07:00
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
2026-08-18 18:33:49 -07:00
│ └── _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
```
2026-08-18 18:33:49 -07:00
**Build + push script** (portfolio repo):
`~/workplace/riotpiao/build.sh`:
```bash
#!/bin/bash
set -euo pipefail
REGISTRY="forgejo.riotpiao.com"
2026-08-18 18:33:49 -07:00
IMAGE="${REGISTRY}/rock/portfolio:latest"
docker buildx build --platform linux/amd64 -t "${IMAGE}" .
docker push "${IMAGE}"
echo "✓ Pushed ${IMAGE}"
```
---
## Repository Structure
**In homelab repo:**
2026-08-18 18:33:49 -07:00
```
~/workplace/homelab/
├── argocd/
│ └── applications/
│ └── portfolio.yaml # ArgoCD Application manifest
└── k8s/
└── portfolio/
├── Chart.yaml
├── values.yaml
└── templates/
├── deployment.yaml
├── service.yaml
├── ingress.yaml
└── _helpers.tpl
2026-08-18 18:33:49 -07:00
```
---
## Implementation Sequencing
1. **Portfolio build + push:**
2026-08-18 18:33:49 -07:00
- `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
2026-08-18 18:33:49 -07:00
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
2026-08-18 18:33:49 -07:00
---
## 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`
2026-08-18 18:33:49 -07:00
**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)
2026-08-18 18:33:49 -07:00
---
## 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