Colophon
How this site works, what it runs on, and why.
Architecture
Static HTML generated by Astro 7 at build time. No React, no Vue, no framework JS: exactly 1 runtime dependency (lenis, for smooth scrolling), against 2 build-time packages that never reach your browser. 14 pages, each pulling only the code-split chunks it actually uses. Every number on this page is re-derived from the build output by a script that fails the build when one drifts.
Motion
Every animation is hand-written CSS transitions triggered by IntersectionObserver. No animation library. Section reveals, staggered list entrances, and the hero word-rise are all vanilla, and every one of them is skipped outright under prefers-reduced-motion.
Terminal
The interactive terminal is a real command interpreter: pipes (projects | grep rust), tab-completion, history, and 30+ commands. Three commands (rrf, hash, xor) lazy-load a 843-byte Rust→WebAssembly binary (raw rustc --target wasm32-unknown-unknown, no toolchain wrapper) and run real compute in the browser. The WASM is a prebuilt artifact committed to the repo; CI does not compile Rust. It works on a phone too: the input is sized so iOS won't zoom the page out from under you, then scaled back down so what you type matches the output around it.
Raft
The Raft project card opens onto a real Raft implementation running in your browser, with leader election, log replication, and quorum commitment over a simulated lossy network. Crash nodes, partition the leader, watch the logs converge. The same engine runs headless in the test suite, which asserts the paper's safety properties (Election Safety, Log Matching, State Machine Safety) on every build.
Theming
Dark and light themes via CSS custom properties. The accent color shifts by time of day in the Baku timezone: five periods from night violet through morning gold to evening amber, stamped on every page before first paint. The theme toggle is one page-wide crossfade, nothing travels; the social preview card is rendered per language at build time.
i18n
English, Russian, and Azerbaijani, each with its own prerendered page (/, /ru/, /az/) carrying its own title, description and hreflang. Picking a language still swaps in place without a reload; the URL follows, so a copied link resolves to the language you were reading. Both paths render through the same pure string builders, which is what makes it safe to have two: build time and runtime cannot drift, because they are the same function.
Typography
Manrope for body, Cormorant Garamond for display, JetBrains Mono for code. All self-hosted with unicode-range subsetting, so a Latin-only reader never downloads the Cyrillic cut. Total font weight: 214KB across 12 woff2 files. The LCP face is preloaded.
Performance budget
No external CDN requests for assets: fonts, scripts and images are all first-party. The homepage document is under 39KB gzipped and every JS chunk on the site combined is under 59KB; both are enforced ceilings, not aspirations, and the build fails when either is exceeded. Images are lazy-loaded and interactive extras load through requestIdleCallback after the page is usable.
Servers
The site itself is static files on GitHub Pages. Four small Cloudflare Workers sit beside it, each doing one thing: a Spotify now-playing proxy (the token stays server-side), a Web Analytics query proxy for the private dashboard, a poll backend, and a toy backend holding the paper-airplane inbox in a Durable Object. Every one of them fails silently: if a Worker is down, its widget disappears rather than showing you an error.
Privacy
Analytics is a single cookieless Cloudflare Web Analytics beacon: no cookies, no fingerprinting, no cross-site tracking, and nothing that identifies you personally. The terminal's perf numbers are measured in your own browser and never leave it; the field column it compares against is three aggregate p75 values over all visitors, with no dimension that could describe any single one.
Accessibility
WCAG AA contrast on all text. Skip link, focus trap on modals with focus restoration, semantic heading hierarchy, aria-live regions on dynamic content, prefers-reduced-motion honored throughout. Keyboard navigable via vim-style chord shortcuts.
Resume
The resume is a page (/resume/, in all three languages) rendered from the same profile data as everything else, so it cannot fall behind the site. On screen it uses the print metrics, so what you see is the sheet that comes out; anything past one page is hidden unless you ask for everything. The PDF is typeset with LaTeX in CI from the same data and stamped with the commit it came from. It is never committed.
Testing
Playwright end-to-end tests run on every deploy and gate the artifact upload. Beyond the usual smoke (terminal pipes, palette, shortcuts) they are design guards: light-theme contrast measured against AA, phone viewports that must not overflow, printing from any scroll position, and the Raft safety properties. A weekly job crawls the live site and reports any link that stopped resolving.
Writing
Posts are Markdown in the repo, rendered to /writing/ with a hand-rolled RSS feed. Code blocks follow the theme.
Wayfinding
⌘K opens a command palette, ? the shortcut sheet, and a first visit offers a short tour that picks its route by who you say you are. All of it loads after the page is already usable.
PWA
Optional offline mode via a root-scoped service worker (network-first for navigations, stale-while-revalidate for assets). Enabled/disabled through the terminal: offline enable.
Recent commits
- 2c43d5dcontent: the three simulation projects state what they guarantee, not how
Built from main, 1 commits in. The whole history is public.
The site plays. What you've found is not all of it.