- Astro 62.8%
- TypeScript 13%
- CSS 8.9%
- MDX 6.6%
- Dockerfile 5.5%
- Other 3.2%
|
|
||
|---|---|---|
| public | ||
| src | ||
| .dockerignore | ||
| .gitignore | ||
| .woodpecker.yml | ||
| AGENTS.md | ||
| astro.config.mjs | ||
| biome.json | ||
| Caddyfile | ||
| Dockerfile | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| renovate.json | ||
| tsconfig.json | ||
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.mdfor the About page. - Edit
/Users/ellameya/git/m0sh1.cc/ella/site/src/pages/now.mdfor 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-devdhi.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 tohttps://ella.m0sh1.cc/https://trans.m0sh1.cc/redirecting tohttps://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.