No description
  • Rust 49.5%
  • JavaScript 23.4%
  • HTML 15.6%
  • CSS 6.2%
  • Python 3.2%
  • Other 2.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Michal Vanko ce70865cb1
All checks were successful
preview / preview hostname (push) Successful in 0s
preview / teardown preview (push) Has been skipped
preview / build + deploy preview (push) Successful in 1m15s
preview / preview hostname (pull_request) Successful in 0s
preview / build + deploy preview (pull_request) Has been skipped
test / cargo test (push) Has been skipped
preview / teardown preview (pull_request) Successful in 0s
deploy / cargo test (push) Successful in 1m11s
deploy / build, export, deploy (push) Successful in 2m9s
fix(markdown): raw source <figure> blocks must not trip the paragraph gate
The gate matched ANY Event::Html starting with <figure — including
hand-written figure blocks in post sources, which pulldown emits at
block level (outside Paragraph events). Those close with a plain
</figure> that never matches our </figcaption></figure> end matcher,
so the in_figure flag stuck and swallowed the <p> of every following
paragraph — text rendered as one unwrapped wall (seen on
/blog/2026-04-01-week-with-my-pi-agent, PR preview).

Inside a Paragraph span an Event::Html figure-start can only be one of
ours (source block HTML is never wrapped in Paragraph events; inline
raw HTML uses InlineHtml) — so the flag is now only set there, plus a
defensive reset on paragraph start.

Regression tests: the exact corpus shape (raw figure block followed by
paragraphs) and a corpus-wide guard in the feed audit (no long bare
text runs directly after </figure>).
2026-09-14 21:06:33 +02:00
.forgejo/workflows ci(preview): comment survives re-deploys + reports deploy metadata 2026-09-09 21:11:52 +02:00
.pi feat: add Pi agent blog post, AI tooling, and SVG support 2026-04-01 23:06:03 +02:00
.zellij bum bam 2025-06-16 21:19:11 +02:00
_pages portfoliooooo 2024-10-23 16:01:48 +02:00
_posts/blog fix(w3c): clear per-page HTML validator findings (S1–S7, F11, F12) 2026-09-14 16:50:10 +02:00
_projects redesign: showcase two-tier rework — featured plates + archive rows 2026-09-08 10:52:32 +02:00
docs ci: add Forgejo Actions deploy pipeline spec and draft workflow 2026-08-19 13:01:00 +02:00
scripts fix(w3c): clear remaining feed+article findings (S8-S10, F13, F14) 2026-09-14 21:06:33 +02:00
specs fix(markdown): external images render the figure+caption the old workaround aimed for 2026-09-14 21:06:33 +02:00
src fix(markdown): raw source <figure> blocks must not trip the paragraph gate 2026-09-14 21:06:33 +02:00
static fix(w3c): clear per-page HTML validator findings (S1–S7, F11, F12) 2026-09-14 16:50:10 +02:00
styles fix(w3c): clear per-page HTML validator findings (S1–S7, F11, F12) 2026-09-14 16:50:10 +02:00
templates fix(index): drop 'what I do' h2 — demote talent-card titles instead 2026-09-14 20:46:13 +02:00
.gitattributes Add egg-fetcher demo 2022-06-28 09:32:15 +02:00
.gitignore just: W3C validation recipes — raw-content POST, no deploy needed 2026-09-14 16:10:25 +02:00
.lfsconfig-netlify remove old svelte web source 2024-09-30 21:13:20 +02:00
.npmrc fix legacy peer deps 2023-02-02 20:00:03 +01:00
.nvmrc Change node version to always be latest LTS 2023-02-02 20:05:07 +01:00
.prettierignore Svelte kit transition 2021-04-24 18:24:17 +02:00
.prettierrc Svelte kit transition 2021-04-24 18:24:17 +02:00
AGENTS.md just: W3C validation recipes — raw-content POST, no deploy needed 2026-09-14 16:10:25 +02:00
askama.toml remove old svelte web source 2024-09-30 21:13:20 +02:00
Caddyfile-preview cache: content-hashed css in prod exports (TARGET=PROD), immutable caching; dev keeps fixed name 2026-09-09 14:41:18 +02:00
Cargo.lock feed: absolutize syndicated HTML — readers render it on their own origin 2026-09-14 16:10:25 +02:00
Cargo.toml feed: clear the remaining W3C validator findings 2026-09-14 16:10:25 +02:00
DESIGN.md redesign: extract page gutter into a semantic .page-gutter class 2026-09-13 21:03:22 +02:00
email-signature.html Change email signature 2022-03-17 18:01:09 +01:00
justfile fix(w3c): clear remaining feed+article findings (S8-S10, F13, F14) 2026-09-14 21:06:33 +02:00
LICENSE Add Licenses 2022-05-07 21:12:26 +02:00
missing_lfs_files.txt remove old svelte web source 2024-09-30 21:13:20 +02:00
package.json custom migration 2025-06-16 21:19:11 +02:00
README.md update readme 2024-11-08 17:06:04 +01:00
renovate.json Add renovate.json 2024-10-31 09:06:39 +00:00
robots.txt redesign: syndication & perf — JSON feed, sitemap, OG/Twitter, lazy images 2026-09-08 15:15:49 +02:00
test-animate.svg portfoliooooo 2024-10-23 16:01:48 +02:00

michalvanko.dev site

This is the repository for my own site hosted at https://michalvanko.dev

Feel free to use and ammend to code to your needs. Respect the Creative Commons BY-NC-ND 4.0 License for the content of the site.

Architecture

The site is hosted as a static generated HTML files on the server via Caddy reverse proxy. There is an example Caddyfile that can be used for deployment on server. During development the axum web framework serves content as a HTTP server in a classic SSR HTML.

Development

Look at the justfile for the available commands that are being used for development and deployment.

Use just server_dev or just dev for running the server for development purpose.

Tools and libraries used for generating the content

Deployment

Deployment requires these steps:

  1. Ensure all images are generated 1.1 Run server in either dev or production mode just prod 1.2 Crawl the site with just ssg command to ensure all routes are being hit to indicate that all images have to be generated. 1.3 Wait till the server stops generating images. Monitor the CPU load until it drops. Takes few minutes.
  2. just export will start the server in production mode and use wget to recursively crawl the site. Remember, content has to be linked somewhere on the site to be discovered by wget.
  3. just deploy will synchronise the /dist folder with the server with rsync

Image generation

I want all images to be served to users optimally. All images that are used are generated in several sizes so they are optimized for different displays sizes. Browsers will pick and download the appropriate size.

I'd love to link some references for this problem, but I haven't found the exact use case that I was trying to solve.