- Rust 49.5%
- JavaScript 23.4%
- HTML 15.6%
- CSS 6.2%
- Python 3.2%
- Other 2.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
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
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>). |
||
| .forgejo/workflows | ||
| .pi | ||
| .zellij | ||
| _pages | ||
| _posts/blog | ||
| _projects | ||
| docs | ||
| scripts | ||
| specs | ||
| src | ||
| static | ||
| styles | ||
| templates | ||
| .gitattributes | ||
| .gitignore | ||
| .lfsconfig-netlify | ||
| .npmrc | ||
| .nvmrc | ||
| .prettierignore | ||
| .prettierrc | ||
| AGENTS.md | ||
| askama.toml | ||
| Caddyfile-preview | ||
| Cargo.lock | ||
| Cargo.toml | ||
| DESIGN.md | ||
| email-signature.html | ||
| justfile | ||
| LICENSE | ||
| missing_lfs_files.txt | ||
| package.json | ||
| README.md | ||
| renovate.json | ||
| robots.txt | ||
| test-animate.svg | ||
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
- Decap CMS
- Rust
- axum web framework
- tailwind
- wget for SSG
Deployment
Deployment requires these steps:
- Ensure all images are generated
1.1 Run server in either
devorproductionmodejust prod1.2 Crawl the site withjust ssgcommand 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. just exportwill start the server inproductionmode and usewgetto recursively crawl the site. Remember, content has to be linked somewhere on the site to be discovered bywget.just deploywill synchronise the/distfolder with the server withrsync
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.