summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-10-23nav: add Research to every page, align the home curl blockHEADmainVoid Agent
The nav is hand-copied into each page, so adding Research only to the pages that were being edited left readers losing the link as soon as they entered an article (6 of 9 pages lacked it). All nine now carry an identical line. Home page: RESEARCH: had one space more than its neighbours and sat a column out of the curl block. Note: /research itself is still uncommitted (research/ is untracked), so deploying this alone would publish nine links to a 404. Ship the research page in the same push.
2026-10-22nginx: keep an explicit .txt location so /robots.txt works for curlVoid Agent
Dropping the .txt location made the curl/wget suffix map apply to every request, so /robots.txt was looked up as /robots.txt.txt and 404'd. Keep the location, but without add_header, so mime.types and charset cover the type and the server-level security headers are still inherited.
2026-10-22deploy: detect a detached nginx.conf bind mount instead of trusting reloadVoid Agent
The single-file mount pins the inode present when the container started. A rename-based write leaves the container serving stale bytes while nginx -t validates them, which is exactly how the previous deploy reported success with an unchanged config. Compare the host and in-container checksums after the reload and restart the container to re-resolve the path on mismatch.
2026-10-22deploy: write nginx.conf in place so the container's bind mount sees itVoid Agent
nginx.conf is mounted as a single file. rsync renames a temp over the destination, which replaces the inode, so the container kept reading the old inode: nginx -t validated the old bytes, reload was a no-op, and the deploy reported success while the live config was unchanged. Stage to nginx.conf.new, copy in place with cat so the mounted inode keeps its identity, then test and reload. Rollback copies in place too, for the same reason.
2026-10-22nginx: serve public_key to curl cleanly, restore lost security headersVoid Agent
`curl https://jayrup.me/public_key` is the documented way to get this key onto a VPS, so both the file and the config serving it need to be exact. Key file: drop the trailing space, one trailing newline. A key with no trailing newline makes `curl ... >> ~/.ssh/authorized_keys` glue itself onto the previous line and silently break every later key in the file. nginx: - `/assets/public_key` ignored $final_suffix, so curl got 404 while browsers got 200. Route both through the suffix-aware try_files. - add_header does not merge across levels: the asset, PDF and .txt locations each declared one, so they inherited none of the security headers. The asset location now repeats them; the PDF and .txt locations no longer declare any (default_type / mime.types + charset do the job), so they inherit again. - `add_header Content-Type application/pdf` appended a second Content-Type instead of setting it. Use default_type. - `expires 30d` plus an explicit Cache-Control emitted two Cache-Control headers. Use one explicit header. - add `charset utf-8` so text/plain (what curl gets) is not served charset-less while the content contains non-ASCII. deploy: ship nginx.conf alongside public/. It is bind-mounted into the container, so it never travelled with the rsync'd tree — the live config was from May and predated the hardening committed in 0ee667a. Test with `nginx -t` before reloading and restore the previous config on failure.
2026-10-22deploy: fix build-dir git calls, capture SHA, drop dead mkdirVoid Agent
deploy.sh cd'd into the mktemp build dir before calling git, so `git archive HEAD` failed with 'not a git repository' and the whole deploy aborted. Resolve REPO from the script location and pass -C to every git call, and write the archive to an absolute path since -C also makes --output relative to the repo. The deploy marker also ran `git rev-parse` from the temp dir; because it sat inside a command substitution, set -e did not catch it and last-deploy.txt silently recorded an empty commit. Capture SHA up front. Also drop `mkdir -p public/cv`, left over from when the CV was copied into a directory that nothing reads.
2026-09-22deploy: ship public_key.txt so curl UA can fetch the keyhermes
2026-09-20links: drop GitHub, point everything at git.jayrup.me (homepage contact, CV ↵Void Agent
header + dissertation entry, PDF link annotations)
2026-09-20links: point dissertation + site repos at git.jayrup.me (self-hosted cgit)Void Agent
2026-09-02fix: title frontmatter, terminal resume, project list sync, nginx hardening, ↵CaptainJack2491
and styles
2026-09-01fix: titles, nav wiring, typos, server_tokens (preview branch — does not ↵Void Agent
deploy)
2026-08-25cv: add Prime-Grokking + J-space research, refresh infra entry, A4, ↵Void Agent
newest-first ordering
2026-08-17prime-grokking: publish part 3 (diagnostics); add public repo links + ↵Void Agent
cross-links
2026-08-17prime-grokking: publish part 2 (wd sweep) + part 1 seed-replication updateVoid Agent
2026-08-14prime-grokking-1: add RESOURCES section + grokking referenceVoid Agent
2026-08-14add blog post: prime-grokking-1Void Agent
2026-08-07blog: newest-first index listing; add homepage-render-dev.sh local preview ↵Void Agent
script
2026-08-07blog: add jacobian-lens-frequency post (figures, captions, terminal.css sizing)Void Agent
2026-08-05update blog post date to release day; homepage: small models are all I can ↵Void Agent
afford
2026-08-05blog: keep post URL on its own line in plain-text renderCaptainJack2491
2026-08-05blog: show URLs in plain-text render so curl readers can find postsCaptainJack2491
2026-08-05blog: how this site works — publishing pipeline post + first index entryCaptainJack2491
2026-08-03testCaptainJack2491
2026-08-03homepage: independent AI-safety researcher bio, remove university, ↵Void Agent
philosophy-focused
2026-08-02remove both blog posts (style mismatch); keep blog index skeletonVoid Agent
2026-08-02add blog post: jacobian-lens-frequencyVoid Agent
2026-08-02test commit from archbookCaptainJack2491
2026-07-31harden deploy: strict mode, mktemp build dirs, pinned quarto digest, no ↵Void Agent
fixed /tmp paths
2026-07-31blog: generic publishing steps (works from any machine)Void Agent
2026-07-31homepage: add BLOG + GIT links; blog post: add cgit URL + update publishing ↵Void Agent
steps
2026-07-31fix deploy-docker.sh: use devxygmbh/alpine-quarto (quarto/quarto does not ↵Void Agent
exist on Docker Hub)
2026-07-31add dockerized deploy script + post-receive hook for push-to-deployVoid Agent
2026-07-31add blog section: listing page + website-publishing-pipeline postVoid Agent
2026-07-07update CV: graduated UEL with First-Class Honours (94%)Arch Agent
2026-07-07update CV with dissertation findings, add dissertation page, add website ↵CaptainJack2491
project entry
2026-07-07add self-documenting README with deps, workflow, and structureCaptainJack2491
2026-07-07move external dependencies into assets/ so repo is self-containedCaptainJack2491
2026-01-09added cv and updated nginx to serve it properlyCaptainJack2491
2026-01-09updated index to make clickable links in htmlCaptainJack2491
2026-01-05updated _quarto.yml and added index pages and custom cssCaptainJack2491
2025-12-27updated nginx config to work with the updated deploymentCaptainJack2491
2025-12-27added gitignoreCaptainJack2491
2025-12-27inital commitCaptainJack2491