website

#astro#js#html#css

git clone https://git.pyrossh.dev/website

木 Personal website of pyrossh. Built with astrojs, shiki, vite.


README.md
# Website

Personal website, built as a static site with [Eleventy](https://www.11ty.dev) and
[Elena](https://elenajs.com) web components.

## Project Structure

```text
├── assets/            static css/images/icons/pdfs, copied through as-is
├── src/
│   ├── _data/          global data (site config, local repo discovery)
│   ├── _helpers/        plain JS helpers used by _data files (git plumbing)
│   ├── _includes/       layouts and partials
│   ├── components/      Elena web components
│   ├── posts/           blog post markdown
│   ├── repos/           paginated templates for repo readme/files/commits/blame
│   └── *.njk            top-level pages
├── eleventy.config.js
└── package.json
```

## Repo browsing

Pages under `/repos/:id` are generated entirely from local git checkouts that live as
**sibling directories of this project** — e.g. `../config`, `../rust-embed` next to
`website/` — not inside this repo. No API calls, no bucket access: README, file
tree/content, commit list, per-commit diffs, per-file history, and per-file blame are all
read straight from git (`git ls-tree`, `git log`, `git show`, `git blame`) at build time.

A repo listed in `src/_data/site.js` only gets pages if a matching directory exists next to
this project *and* is a git repo in its own right (has its own `.git`, not nested inside
another repo's working tree); otherwise it just shows as a plain, unlinked card on the home
page. File discovery excludes `node_modules`, `dist`, `.git`, and similar build-output
directories regardless of whether they're git-tracked, and reads the tree at `HEAD` rather
than the working directory so uncommitted local changes don't leak into the generated pages.

## Commands

| Command             | Action                                                          |
| :------------------- | :---------------------------------------------------------------- |
| `npm install`        | Install dependencies                                            |
| `npm run dev`        | Start the Eleventy dev server with reload                       |
| `npm run build`      | Build the static site to `./dist/`                               |
| `npm test`           | Build, then run the Playwright page tests                       |
| `npm run test:hurl`  | Run [hurl](https://hurl.dev) checks against the live git dumb-http endpoint (`git.pyrossh.dev`); requires the `hurl` CLI |