README.md (2908B)
1 # sqzer.com
2
3 Personal site — projects, technical posts, and an about page. English and Korean.
4
5 Built with [sqzass](https://github.com/sqzer-x/sqzass), deployed to GitHub Pages.
6 No bundler, no package manager, no `node_modules`.
7
8 작업 기록과 뒤집힌 결정은 [`WORKLOG.md`](WORKLOG.md)에 있습니다.
9
10 ## Working on it
11
12 ```bash
13 sqzass serve -i . # http://127.0.0.1:3000, live reload
14 sqzass build -i . # writes ./public
15 python3 tools/check.py
16 ```
17
18 `sqzass` currently needs the `feat/pageref-date` branch — the Posts ledger reads
19 `child.date`, which `PageRefCtx` did not carry before
20 ([sqzer-x/sqzass#1](https://github.com/sqzer-x/sqzass/pull/1)). Once that merges,
21 drop `--branch` from `.github/workflows/pages.yml`.
22
23 ```bash
24 cargo install --git https://github.com/sqzer-x/sqzass --branch feat/pageref-date --locked
25 ```
26
27 ## Layout
28
29 | | |
30 |---|---|
31 | `content/` | pages. `page.md` is English, `page.ko.md` is Korean |
32 | `templates/` | minijinja. `base.html` owns the chrome; each index names its own template |
33 | `static/` | one stylesheet, two scripts, one font, the images |
34 | `i18n/` | UI strings the templates supply. A key missing from one language is a build error |
35 | `tools/check.py` | the two things the build does not check for you |
36
37 ## Adding things
38
39 **A post.** Drop a file in `content/posts/`. `title` and `date` in the front
40 matter is enough; the ledger picks up the rest, groups by year, and orders newest
41 first. Write `content/posts/<name>.ko.md` beside it for the Korean version — an
42 untranslated page is absent from the Korean navigation rather than duplicated.
43
44 **A project.** Two edits, and `tools/check.py` fails if you only make one:
45
46 1. `content/projects/<name>.md` — the page. Copy the schema from an existing one
47 and keep **every** key: an omitted key is a build error, not a default. `tier`
48 is `"landing"` (hero, facts, features, a terminal session, a call to action) or
49 `"brief"` (hero and prose). There is no middle rung on purpose.
50 2. `content/projects/_index.md` — the catalogue entry, under a `[[extra.group]]`.
51 Listings only carry title, description, url, weight and date, so the language
52 badge and the links have to live here.
53
54 Inline tables must fit on one line — TOML 1.0 does not let them wrap. Use
55 `[[extra.features]]` blocks when the text is too long for that.
56
57 **An image.** Put it in `static/images/projects/` and set `logo` on the project.
58 Until then the hero and the card render the project's name as the artwork, at the
59 same size the image will take, so nothing moves when you add one.
60
61 ## Deploying
62
63 Push to `main`. The workflow checks integrity, builds, builds a second time and
64 diffs the two, then deploys. A build that is not reproducible does not ship.
65
66 The domain is in `static/CNAME` and is copied to the output with its name intact,
67 so it survives every deploy without being set in the repository settings again.