[{"content":"This blog is built with Hugo and served by Caddy.\nTest with Tailscale: this line was deployed by GitHub Actions over Tailscale.\nCode def fib(n: int) -\u0026gt; int: \u0026#34;\u0026#34;\u0026#34;Return the n-th Fibonacci number.\u0026#34;\u0026#34;\u0026#34; a, b = 0, 1 for _ in range(n): a, b = b, a + b return a hugo new content posts/my-next-post.md hugo server -D Math Inline: eiπ+1=0 e^{i\\pi} + 1 = 0 eiπ+1=0.\nDisplay:\n∑k=1nk=n(n+1)2 \\sum_{k=1}^{n} k = \\frac{n(n+1)}{2} k=1∑n​k=2n(n+1)​","permalink":"https://markhenmi.com/posts/hello-world/","summary":"First post: checking that code highlighting and math work.","title":"Hello, world"},{"content":" Generator: Hugo with the PaperMod theme. Posts are Markdown; math renders at build time with KaTeX. Resume: written in Typst and compiled to /resume.pdf on every build. Server: a DigitalOcean droplet running Ubuntu 24.04 and Caddy, which serves the static files and handles HTTPS. Access: SSH is reachable only over Tailscale; the public firewall opens just ports 80 and 443. Deploys: rsync uploads the built site as a deploy user that is restricted to the site directory. ","permalink":"https://markhenmi.com/projects/this-site/","summary":"How this site is built, deployed, and served.","title":"This site"},{"content":" Download PDF ","permalink":"https://markhenmi.com/resume/","summary":"\u003cdiv class=\"resume-actions\"\u003e\n  \u003ca class=\"resume-download\" href=\"/resume.pdf\" download=\"Mark-Henmi-Resume.pdf\"\u003eDownload PDF\u003c/a\u003e\n\u003c/div\u003e\n\u003cobject class=\"resume-embed\" data=\"/resume.pdf#view=FitH\u0026amp;navpanes=0\" type=\"application/pdf\" aria-label=\"Resume (PDF)\"\u003e\n  \u003cdiv class=\"resume-pages\"\u003e\n    \u003ca href=\"/resume.pdf\"\u003e\u003cimg class=\"resume-page\" src=\"/resume-1.svg\" alt=\"Resume page\"\u003e\u003c/a\u003e\n  \u003c/div\u003e\n\u003c/object\u003e","title":"Resume"}]