117 lines
3.6 KiB
TypeScript
117 lines
3.6 KiB
TypeScript
// Grouped capability matrix - NO percentage bars / ratings / logo walls.
|
||
// Driven entirely by this file; the Skills section renders whatever is here.
|
||
|
||
export type SkillGroup = {
|
||
title: string;
|
||
// Short framing line for the group.
|
||
blurb: string;
|
||
/** Proof-point lines rendered between the blurb and the chips - fills the
|
||
* tall tiles (hero / full) so the tile reads as substance, not whitespace. */
|
||
points?: string[];
|
||
items: string[];
|
||
/** Bento tile size - "hero" = 2×2 flagship · "wide" = 2×1 · "full" = whole row · default 1×1. */
|
||
span?: "hero" | "wide" | "full";
|
||
/** Accent flavour - "magenta" marks security-flavoured tiles. */
|
||
flavor?: "magenta";
|
||
/** Eyebrow label rendered on the hero tile. */
|
||
flag?: string;
|
||
};
|
||
|
||
export const skills: SkillGroup[] = [
|
||
{
|
||
title: "Edge AI & GPU",
|
||
span: "hero",
|
||
flag: "FLAGSHIP",
|
||
blurb: "Serving vision and language models on real hardware at the edge.",
|
||
points: [
|
||
"Fail-closed computer vision on single-node OpenShift - probes that catch a silently dead model, not just a dead pod.",
|
||
"One GPU, two workloads - a single card time-sliced between LLM serving and video transcode instead of reserving separate hardware.",
|
||
"Vendor video-analytics stacks re-platformed as first-class Kubernetes workloads, not appliances.",
|
||
"Local models behind an OpenAI-compatible gateway - swap the backend, keep every client.",
|
||
],
|
||
items: [
|
||
"NVIDIA GPU Operator",
|
||
"GPU passthrough (ESXi, as code)",
|
||
"GPU readiness probing & watchdogs",
|
||
"Pod lifecycle management",
|
||
"YOLO / computer-vision inference",
|
||
"Local LLM serving (llama.cpp)",
|
||
"Edge Kubernetes",
|
||
],
|
||
},
|
||
{
|
||
title: "Platform & Virtualization",
|
||
span: "wide",
|
||
blurb: "Kubernetes platforms designed to be reasoned about and recovered.",
|
||
items: [
|
||
"Kubernetes",
|
||
"OpenShift",
|
||
"Talos Linux",
|
||
"vSphere / VMware ESXi",
|
||
"Proxmox",
|
||
"containerd",
|
||
"Argo CD / GitOps",
|
||
"Helm & Kustomize",
|
||
],
|
||
},
|
||
{
|
||
title: "Automation & IaC",
|
||
blurb: "Single-touch deployments - removing the manual step, not documenting it.",
|
||
items: [
|
||
"Ansible / AWX",
|
||
"PowerShell (PowerCLI)",
|
||
"Python",
|
||
"Bash / Shell",
|
||
"Terraform",
|
||
"Image pre-pull & air-gapped registries (ACR / NVCR)",
|
||
"Secrets management",
|
||
],
|
||
},
|
||
{
|
||
title: "Networking & Security",
|
||
flavor: "magenta",
|
||
blurb: "Default-deny, segmentation, and a small attack surface.",
|
||
items: [
|
||
"SD-WAN",
|
||
"802.1Q VLAN segmentation",
|
||
"ACLs / IPSec / RADIUS",
|
||
"Aruba ClearPass",
|
||
"Palo Alto / FortiGate",
|
||
"Firewall policy governance",
|
||
"RBAC · 2FA / SSO",
|
||
],
|
||
},
|
||
{
|
||
title: "Cloud & Identity",
|
||
blurb: "Hybrid estates across the major clouds, with identity done properly.",
|
||
items: [
|
||
"Azure",
|
||
"Entra ID",
|
||
"Intune",
|
||
"AWS",
|
||
"GCP",
|
||
"Microsoft 365",
|
||
"Azure Blob / S3",
|
||
],
|
||
},
|
||
{
|
||
title: "Observability & Ops",
|
||
span: "full",
|
||
blurb: "Knowing the system is healthy - and the GPUs with it.",
|
||
points: [
|
||
"Fleet metrics by remote-write - every cluster ships to one Prometheus, GPUs included (DCGM / Intel Xe).",
|
||
"Alerts that reach a phone and mean it - tuned until silence means healthy, not unmonitored.",
|
||
"A backup is a rumour until a restore drill proves it - drills are scheduled, not aspirational.",
|
||
],
|
||
items: [
|
||
"Prometheus",
|
||
"Grafana",
|
||
"DCGM Exporter",
|
||
"PRTG / LibreNMS",
|
||
"AWX job reporting",
|
||
"Veeam backup",
|
||
"ITIL processes",
|
||
],
|
||
},
|
||
];
|