Health Dashboard
Personal health metrics aggregator with Go backend, ClickHouse, and real-time charts.
View project →Unified visual language for all personal projects. CSS-first, zero dependencies.
Warm ivory backgrounds with dark graphite accents. Swatches use CSS custom properties and update live when you toggle the theme.
Georgia serif for headings, system fonts for body. Monospace for code.
Default paragraph text with normal color.
Secondary text — .text-secondary
Tertiary text — .text-tertiary
Serif text — .text-serif
Label text — .label
Inline code uses the monospace stack.
// Pre-formatted code block
const theme = document.documentElement.hasAttribute('dark-mode');
console.log('Dark mode:', theme);
Design tokens for spacing, radius, shadows, and layout.
Surface containers with subtle border and shadow. Supports hover lift, footer, and multiple grid layouts.
.card--hover have no lift effect.Status indicators with semantic colors. Pill-shaped, uppercase, small text.
Service status: Running
Build #142: In progress
Deployment: Failed
Feature branch: Unreviewed
Clean inputs with uppercase labels. Supports hints, errors, and disabled states.
Searchable select with keyboard navigation. Requires dzarlax.js. Auto-initialized via data-ds-combobox.
Clean tables with hover rows. Wrap in .table-wrap for horizontal scroll on mobile.
| Service | Status | Uptime | Last deploy |
|---|---|---|---|
| Personal Assistant | Running | 99.9% | 2 hours ago |
| Health Dashboard | Running | 99.8% | Yesterday |
| Evening News | Updating | 98.5% | Just now |
| Finance Tracker | Down | 95.2% | 3 days ago |
| City Dashboard | Draft | — | — |
Switch inputs for boolean settings. Uses native checkbox with custom appearance.
Circular button used in the navbar for dark mode switching.
Loading indicators in two sizes. Integrates with HTMX via .htmx-indicator.
Logo variants for light and dark backgrounds. Icon + wordmark + wordmark.dev.
How to integrate the design system into your projects.
Full-screen intro section with avatar, badge, title, subtitle and action buttons. Classes: .hero, .hero__profile, .hero__avatar, .hero__badge, .hero__title, .hero__subtitle, .hero__description, .hero__actions.
Center-column timeline for experience and history. Alternates items left/right. Collapses to left-aligned list on mobile. Modifier .timeline--list for a simple vertical list variant.
Constructor.tech
Leading product development for e-commerce search and discovery platform.
Yandex Cloud
Managed data warehouse and analytics products serving millions of users.
EdTech Startup
Built AI/ML platform for university education, improving learning outcomes.
Moscow State University
HSE University
New card variants: .card--project for project showcases (tags + link), .card--icon for education/achievement cards (icon + body).
Personal health metrics aggregator with Go backend, ClickHouse, and real-time charts.
View project →CSS-first design system used across all dzarlax.dev projects. Zero dependencies.
View project →RSS aggregator with AI summaries, delivered as a personal daily digest.
View project →Modifiers tuned for marketing pages, portfolios, and blogs. Available on existing components: .card--editorial, .hero--editorial, .navbar--pill, .footer--editorial. New helpers: .card__eyebrow, .card--link, .hero__lede, .hero__meta, .hero__eyebrow, .navbar-controls.
Inset 1px shadow + pronounced lift on hover. Pairs with small caps .card__eyebrow above a serif .card__title. Wrap in <a> or add .card--link to make the whole card clickable.
Product & AI
A Claude Code post-mortem on background daemons, prompt caching, and infinite agent loops.
Systems & Automation
A weekend script that tunnels SSH through Cloudflare for emergency reconfig.
Notes
Three reasons LLMs do this better than I do — and one reason I still write them anyway.
Drops the min-height: 100vh from base .hero. Adds .hero__eyebrow (topic crumbs), .hero__lede (article subtitle), .hero__meta (date / reading time). Title uses a serif clamp scale.
Floating glassy pill at the top of the viewport — for marketing / blog pages where the navbar is decorative. Goes alongside .navbar-controls on the right side for theme toggle / language switcher. Add .active to the current page's link. At ≤ 768px it collapses into a slide-out drawer — pair with a .hamburger button carrying data-ds-nav-toggle="#yourNavId" (auto-wired by js/nav-drawer.js).
When the viewport is ≤ 768px, the pill collapses into a 280px-wide drawer triggered by .active. Below is a fixed-size replica forced into the open state via inline CSS so you can see it at any viewport. Real usage: include js/nav-drawer.js in the bundle (auto-init) and add data-ds-nav-toggle="#mainNav" to your hamburger button.
Dark background, two-column grid: .footer__main (copyright) + .footer__social (Connect heading + .social-icons). .footer__bottom row at the end. Mobile collapses to single column.
Standalone clickable pill — for article footers, blog tag rows, tag clouds. Class: .tag-chip. Cloud wrapper: .tag-cloud + size modifier .tag-chip--cloud (font size scales with inline --tag-weight 0..1).
Typography utility for long-form content. Apply .prose to a wrapper around article markup; descendants get reading-comfortable defaults — serif h2/h3, 68ch max column, inline code, code blocks, blockquote, lists, links. Companion table-of-contents card: .prose-toc + .prose-toc__title.
Picture this: you're working on a project, using Claude Code to refactor a massive monorepo. Evening comes, you close your laptop lid, and in the morning you wake up to a $1,025 API bill — even though you had strict spending limits set up in your billing dashboard.
Every request to Claude pulled in roughly 250,000 tokens of context. As a wrapper, I was using AgentDeck — a handy tool that creates its own PTY terminal managed by a background daemon. That daemon is where this story begins.
input_tokens: 1cache_read_input_tokens: 242,304durationMs: 929,873 (~15.5 minutes)A 90% discount on 250,000 tokens still adds up fast when something is hitting the model on a loop.
Code blocks render with monospace inside a surface-2 background:
function setupSmoothScrolling() {
const navLinks = document.querySelectorAll('nav a');
navLinks.forEach(link => {
link.addEventListener('click', (e) => {
const targetId = link.getAttribute('href');
if (!targetId || !targetId.startsWith('#')) return;
e.preventDefault();
});
});
}
Links inside prose are underlined with a subtle thickness — like this one — staying readable without screaming "I am a link".
Centered confirmation and empty-state layout. Classes: .empty-state, .empty-state__icon + modifiers --success --error --warning --info, .empty-state__title, .empty-state__text. Compact variant: .empty-state--sm.
Scroll progress bar and scroll-to-top button. JS sets style.width on .scroll-progress and toggles .visible on .scroll-top.
In production: position:fixed; top:0; left:0; z-index:9999
Shimmer placeholder for async content. Add .skeleton + a size modifier. Respects prefers-reduced-motion.
.reveal — fade in on scroll (JS adds .visible). .stagger on container — staggers children with --i CSS variable delay. Both respect prefers-reduced-motion.
Simple button group for internationalization. Classes: .lang-switcher, .lang-btn, .lang-btn.active.
position:absolute and JS to position dynamically relative to the trigger element.
Inline status messages. Classes: .alert + modifiers --success --warning --danger --info. Optional elements: .alert__icon, .alert__text, .alert__title.
Compact label + big-number display for inline metrics. Classes: .stat-chip, .stat-chip__label, .stat-chip__value, .stat-chip__note. Group with .stat-chips.
Horizontal row of key metrics with vertical dividers. Classes: .kpi-bar, .kpi-item, .kpi-item__label, .kpi-item__value, .kpi-item__note. Trend dot: .kpi-indicator + --up --down --stable.
Horizontal separator with a plain variant (.divider) and a labeled variant (.divider--labeled + .divider__label) that splits a line with a centered pill. Good for session breaks in chat logs or phase markers in timelines.
Content above the rule.
Content below.
Last message of session 1.
First message of session 2.