- HTML 79%
- Astro 13.4%
- MDX 2.5%
- TypeScript 2.4%
- CSS 1.6%
- Other 1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| .vscode | ||
| design | ||
| docker | ||
| public | ||
| src | ||
| .dockerignore | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .prettierignore | ||
| .prettierrc.json | ||
| AGENTS.md | ||
| astro.config.mjs | ||
| Dockerfile | ||
| justfile | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
personal-website
Eddy's lab notes: projects, a journal, and how everything is set up. Built with Astro as plain static files, so it can be hosted anywhere.
just setup && just dev
Editing content
Everything is markdown in src/content/:
| Folder | What | Shows up at |
|---|---|---|
projects/ |
One file per project (homelab's rack in frontmatter) | /projects/<file>/ |
journal/ |
One file per entry (just new-entry x) |
/journal/<file>/ |
etc/ |
dev, pack, shop, services… (gear in frontmatter) | /etc/<file>/ |
pages/ |
about.md |
/about/ |
Frontmatter is validated by the schemas in src/content.config.ts, so a typo
fails the build with the file and field named. draft: true hides an entry (project, journal entry or etc page) from
builds but keeps it visible in just dev, marked DRAFT.
Where things go
Sort by how something changes over time, not by its topic:
| If I would… | It goes in | For example |
|---|---|---|
| overwrite it when it changes | etc/ |
dev setup, desk, pack list, services |
| add to it over time | projects/ |
homelab, pi shelf |
| finish it once, with a date | journal/ |
a canoe trip, a one-off write-up |
-
etc is a "uses" page: a high-level list of what I have right now. No history, stories or how-tos. When a page wants a "what changed" section, it's a project.
-
Projects are living pages. Long-running ones keep this section order, with a TOC at the top:
- Now: the current state.
- Notes: reference I keep coming back to.
- Changelog: newest first, one dated heading per burst of work
(
### 2024-10: added a compute node), so every entry has a link.
A TOC shows up once a project has two or more
##sections. In an.mdxproject,<RackDiagram />,<ServerList />and<PoolList />draw the homelab's rack data wherever they're placed.Quick one-offs and shelved projects just have less. Experiments are their own projects with their own status; when one goes into service it's marked
doneand gets a Changelog line in the project it joined. -
Journal entries are dated and done once they're published: trips, and project updates too big for a Changelog entry (the Changelog line links to it).
Deploying
just build writes the site to dist/. Upload that folder to any static host.
Set site in astro.config.mjs to the real domain first; the sitemap uses it.