No description
  • Astro 62.8%
  • TypeScript 13%
  • CSS 8.9%
  • MDX 6.6%
  • Dockerfile 5.5%
  • Other 3.2%
Find a file
2026-05-20 12:02:38 +00:00
public feat: launch Astro static site 2026-05-06 23:29:28 +02:00
src test 2026-05-07 00:45:47 +02:00
.dockerignore feat: launch Astro static site 2026-05-06 23:29:28 +02:00
.gitignore feat: launch Astro static site 2026-05-06 23:29:28 +02:00
.woodpecker.yml chore(deps): update dhi.io/node:26.1-debian13-dev docker digest to 5cd0bdb 2026-05-20 03:20:27 +00:00
AGENTS.md fix(ci): use dhi images and pnpm 11 approvals 2026-05-14 17:41:18 +02:00
astro.config.mjs fix(ci): use dhi images and pnpm 11 approvals 2026-05-14 17:41:18 +02:00
biome.json feat: launch Astro static site 2026-05-06 23:29:28 +02:00
Caddyfile feat: launch Astro static site 2026-05-06 23:29:28 +02:00
Dockerfile chore(deps): update dhi.io/node:26.1-debian13-dev docker digest to 5cd0bdb 2026-05-20 03:20:27 +00:00
LICENSE Initial commit 2026-05-06 20:50:43 +00:00
package.json chore(deps): update dependency astro to v6.3.6 2026-05-20 12:02:07 +00:00
pnpm-lock.yaml chore(deps): update dependency astro to v6.3.6 2026-05-20 12:02:07 +00:00
pnpm-workspace.yaml fix(ci): use dhi images and pnpm 11 approvals 2026-05-14 17:41:18 +02:00
README.md fix(ci): use dhi images and pnpm 11 approvals 2026-05-14 17:41:18 +02:00
renovate.json Add renovate.json 2026-05-06 21:45:51 +00:00
tsconfig.json feat: launch Astro static site 2026-05-06 23:29:28 +02:00

ella.m0sh1.cc Site

Static-first Astro site for ella.m0sh1.cc.

The repository owns the website source, content, Dockerfile, Caddy runtime configuration, and Woodpecker CI pipeline. Kubernetes deployment state lives in the infra GitOps repository, not here.

Local Commands

npm install --global corepack@0.34.7
corepack enable
pnpm install --frozen-lockfile
pnpm run format:check
pnpm run check
pnpm run build

Use pnpm run dev for local development and pnpm run format only when writing formatting changes.

Writing-heavy pages such as /about and /now are Markdown files under /Users/ellameya/git/m0sh1.cc/ella/site/src/pages/. Use .astro for layouts, listing pages, and pages that need component logic.

For normal writing edits:

  • Edit /Users/ellameya/git/m0sh1.cc/ella/site/src/pages/about.md for the About page.
  • Edit /Users/ellameya/git/m0sh1.cc/ella/site/src/pages/now.md for the Now page.
  • Add blog posts under /Users/ellameya/git/m0sh1.cc/ella/site/src/content/blog/.
  • Use blank lines between paragraphs; no <p> tags are needed in Markdown.
  • Keep frontmatter at the top of each Markdown file between --- lines.

Runtime

The production image builds static Astro output and serves it with Caddy on port 8080. Kubernetes probes use /healthz.

The Dockerfile uses DHI base images:

  • dhi.io/node:26.1-debian13-dev
  • dhi.io/caddy:2.11.3-debian13

CI and Registry

Woodpecker CI validates formatting, Astro type checks, and production builds. Pushes to main publish the site image to Harbor:

harbor.m0sh1.cc/apps/ella-site:<short-sha>
harbor.m0sh1.cc/apps/ella-site:latest

CI uses two caches:

  • pnpm store cache: /woodpecker/cache/ella-site/pnpm-store
  • Corepack cache: /woodpecker/cache/ella-site/corepack
  • BuildKit registry cache: harbor.m0sh1.cc/cache/ella-site:buildcache
  • Dockerfile pnpm cache mount: /pnpm/store

Node.js 25 and newer do not bundle Corepack, so CI and the Docker build install corepack@0.34.7 explicitly before enabling the pinned pnpm version from /Users/ellameya/git/m0sh1.cc/ella/site/package.json.

pnpm 11 build-script approvals live in /Users/ellameya/git/m0sh1.cc/ella/site/pnpm-workspace.yaml; only esbuild and sharp are approved to run dependency build scripts.

Content-only pushes skip the separate Woodpecker check step and go straight to the image build. The Docker build still runs the Astro production build before pushing the image, so broken Markdown fails before deployment.

The publish step intentionally does not declare depends_on: check. Woodpecker removes skipped steps before dependency resolution, so a content-only push would fail if publish depended on a skipped check step.

Documentation-only pushes, such as changes only to /Users/ellameya/git/m0sh1.cc/ella/site/README.md or /Users/ellameya/git/m0sh1.cc/ella/site/AGENTS.md, do not publish a new site image.

The publish step does not force-pull base images on every build. Base image freshness is handled by Renovate and explicit dependency changes, which keeps Markdown-only publishes from paying avoidable image metadata and pull overhead.

The Woodpecker repo needs repo-scoped secrets named harbor_username and harbor_password.

Deployment

Live deployment is handled by Argo CD in the infra repository:

  • /Users/ellameya/git/m0sh1.cc/infra/root/argocd/apps/ella-site.yaml
  • /Users/ellameya/git/m0sh1.cc/infra/root/apps/ella-site/

The root k3s cluster serves:

  • https://ella.m0sh1.cc/
  • https://yael.m0sh1.cc/ redirecting to https://ella.m0sh1.cc/
  • https://trans.m0sh1.cc/ redirecting to https://ella.m0sh1.cc/trans

Internal DNS for those hostnames is managed through OPNsense from:

/Users/ellameya/git/m0sh1.cc/infra/ansible/roles/opnsense/defaults/main.yaml

Those records point at the root server address 159.195.76.186; public Cloudflare DNS points at the root Cloudflare tunnel.

Documentation

Canonical repository docs:

Local scratch documents matching ella_m0sh1_cc_* are ignored by Git and should be treated as historical planning notes, not current operational guidance.