Developer Portfolio for Duneamsk
The chart sits at the repo root, so helm packages the whole tree into the release Secret, which Kubernetes caps at 3MB. .helmignore still named src/, public/ and lib/ — root-level paths before the workspace split — so nothing matched and 6.4MB of site and resume assets went in with it: UPGRADE FAILED: create: failed to create: Request entity too large The chart needs Chart.yaml, values.yaml and templates/. Everything else is the website, and the image already carries it. Packaged chart goes from 2,389,381 bytes to 4,159, still renders four objects, and helm lint passes. Also excludes .git without a trailing slash: in a worktree that is a file pointing at the real gitdir, so ".git/" never matched it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .gitea/workflows | ||
| docs | ||
| nginx | ||
| packages | ||
| templates | ||
| .dockerignore | ||
| .gardenignore | ||
| .gitignore | ||
| .helmignore | ||
| biome.jsonc | ||
| bun.lock | ||
| Chart.yaml | ||
| Dockerfile | ||
| package.json | ||
| README.md | ||
| tsconfig.base.json | ||
| values.yaml | ||
Nile
Nile is a modern digital portfolio for Dunemask — the site at dunemask.net plus the templated résumé it publishes.
Layout
Bun workspaces (packages/*):
| Path | What |
|---|---|
packages/site |
@nile/site — the React/Vite site. vite build also prerenders every route |
packages/resume |
@nile/resume — the résumé template, its build and its publish step |
nginx/ |
nginx config for the runtime image |
templates/ |
Helm chart templates (Chart.yaml, values.yaml at root) |
docs/ |
seven agent docs — see below |
Docs
Written for agents, not for browsing. rendering.md is the mandatory one: conventions.md
and architecture.md both defer to it for anything in the render path.
| File | Read it before |
|---|---|
docs/rendering.md |
anything in the render path — prerender, hydration, the brand intro, serving, output-identity checks |
docs/architecture.md |
changing the workspace shape, routes, the build, or a reproducibility pin |
docs/conventions.md |
writing any component — Tailwind/Ark rules, the palette, biome, data-not-components |
docs/file-map.md |
looking for where something lives |
docs/glossary.md |
a term in the other docs that reads like a feature flag (delta, preflight, the sheet) |
docs/resume.md |
touching the résumé package from the site side; deep reference is packages/resume/docs/ |
docs/audit.md |
proposing a change that alters rendered output — the open decision queue lives there |
Commands
Run from the repo root; bun, not node.
bun install
bun run dev # vite dev server, port 5173
bun run build # one vite build; the prerender runs as a plugin inside it
bun run preview # vite preview, port 4173
bun run resume # build the résumé and publish it into the site's public/
bun run resume:build # résumé build only
bun run resume:check # slack / wrapped-bullet / misalignment measurements
Deploy
docker build . → multi-stage: oven/bun:1-alpine builds packages/site/dist,
nginx:alpine serves it. .gitea/workflows/pr-build.yml builds every PR;
deploy-edge.yml runs garden deploy nile --env usw-edge on master.