71 lines
3 KiB
Markdown
71 lines
3 KiB
Markdown
|
|
# tobias.raayoni-last.com, the professional record
|
||
|
|
|
||
|
|
Client work, portfolio, CV. 97 articles and 4 pages, running back to 1999.
|
||
|
|
|
||
|
|
The audience is clients, employers and galleries, which is the whole reason this is its own domain:
|
||
|
|
it was sharing a page with a media-arts archive and a devlog, and a page that serves three audiences
|
||
|
|
serves none of them.
|
||
|
|
|
||
|
|
## Building
|
||
|
|
|
||
|
|
```sh
|
||
|
|
uv run --quiet --with pelican --with markdown -- pelican content -o output -s pelicanconf.py
|
||
|
|
```
|
||
|
|
|
||
|
|
No blog, no feed. This is a record, not a stream.
|
||
|
|
|
||
|
|
## Disciplines
|
||
|
|
|
||
|
|
| Discipline | n | |
|
||
|
|
|---|---|---|
|
||
|
|
| `web` | 38 | sites, shops, interfaces |
|
||
|
|
| `live` | 15 | events run, produced or managed |
|
||
|
|
| `motion` | 14 | film, trailers, titles |
|
||
|
|
| `design` | 12 | identity, print, covers |
|
||
|
|
| `consulting` | 9 | advisory and strategy |
|
||
|
|
| `interactive` | 6 | installations and interfaces with a public |
|
||
|
|
| `cv` | 3 | employment history |
|
||
|
|
|
||
|
|
The URLs do not carry the discipline. `ARTICLE_URL` is `{slug}.html` because this taxonomy has
|
||
|
|
already been reworked once, and every reassignment would have moved a URL. Slugs are stable;
|
||
|
|
categories are not.
|
||
|
|
|
||
|
|
## Theme
|
||
|
|
|
||
|
|
`raayoni`, written for this site. Every Pelican theme is a blog theme and this is not a blog.
|
||
|
|
|
||
|
|
A single Muuri grid over everything, filterable and sortable client side, which is why
|
||
|
|
`DEFAULT_PAGINATION` is off: paginating would break both. Light and dark, with `THEME_DEFAULT` set
|
||
|
|
to dark rather than following the system, and an explicit toggle persisted in `localStorage`.
|
||
|
|
|
||
|
|
`SUMMARY_MAX_LENGTH` is 18 because most entries have no `Summary` and Pelican derives one from the
|
||
|
|
body. The median entry is 34 words, so a tile caption is a first clause rather than an excerpt.
|
||
|
|
|
||
|
|
## Plugins
|
||
|
|
|
||
|
|
| | |
|
||
|
|
|---|---|
|
||
|
|
| `assetcheck.py` | flags `Thumb:`/`Background:` whose file did not survive, so the template renders a typographic card rather than a broken image |
|
||
|
|
| `lostimages.py` | the same for images inside article bodies: 22 of 410 point at files no archive holds |
|
||
|
|
|
||
|
|
`lostimages.py` is shared: `flux.vision` loads it from here via its own `PLUGIN_PATHS`.
|
||
|
|
|
||
|
|
Both resolve at build time on purpose. Doing it in the browser with an error handler means a visible
|
||
|
|
flash of broken image on a third of the grid.
|
||
|
|
|
||
|
|
## Traps
|
||
|
|
|
||
|
|
**Do not add `nl2br`.** The recovered bodies are hard wrapped at about 70 characters, so it turns
|
||
|
|
every source line into a forced break: 29 across the site, each one mid-sentence. They fall near the
|
||
|
|
natural wrap, so at desktop width they are invisible and on a phone the paragraph shatters. This was
|
||
|
|
found by counting `<br>` in the built output, not by looking at the site.
|
||
|
|
|
||
|
|
**The references to lost images stay in the Markdown.** The reference records what was there. The
|
||
|
|
plugins remove them from the output; nothing should remove them from the source.
|
||
|
|
|
||
|
|
## Assets
|
||
|
|
|
||
|
|
`content/library/` 239 files, `content/images/` 97. Images are stored at 1600px; the full-size
|
||
|
|
originals are in the backup named in the repo README, along with the inventory that records why each
|
||
|
|
article is here rather than on one of the other two sites.
|