<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Recommendations &#8211; Cristian Nebunu</title>
	<atom:link href="https://cristiannebunu.com/category/recommendations/feed/" rel="self" type="application/rss+xml" />
	<link>https://cristiannebunu.com</link>
	<description>Full Stack Developer - Laravel / Vue.js / WordPress</description>
	<lastBuildDate>Sat, 07 Nov 2026 16:32:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>
	<item>
		<title>4 Laravel &#038; PHP Packages That Actually Solve Real Problems</title>
		<link>https://cristiannebunu.com/new-laravel-php-packages-worth-trying-2026-feature-flags/</link>
		
		<dc:creator><![CDATA[Cristian N]]></dc:creator>
		<pubDate>Mon, 02 Nov 2026 21:30:00 +0000</pubDate>
				<category><![CDATA[Recommendations]]></category>
		<guid isPermaLink="false">https://cristiannebunu.com/?p=949</guid>

					<description><![CDATA[<p>These are four links I expect to use in real projects. Laravel Pennant: A Practical Guide to Feature Flags: This hands-on guide to Laravel&#8217;s first-party feature flag package covers the parts that tend to cause trouble. It shows how Feature::for($user-&#62;team) scopes flags…</p>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/new-laravel-php-packages-worth-trying-2026-feature-flags/">4 Laravel &#038; PHP Packages That Actually Solve Real Problems</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">These are four links I expect to use in real projects.</p>



<ul class="wp-block-list">
<li>
<p><strong><a href="https://shocm.me/posts/2026-07-03-laravel-pennant-feature-flags-guide/" target="_blank" rel="noopener">Laravel Pennant: A Practical Guide to Feature Flags</a>:</strong> This hands-on guide to Laravel&#8217;s first-party feature flag package covers the parts that tend to cause trouble. It shows how <code>Feature::for($user-&gt;team)</code> scopes flags above the individual user, why a <code>null</code> scope skips the closure unless the type is nullable, and how non-boolean values support lightweight A/B tests. It also treats each flag as temporary scaffolding and recommends deleting it in the same PR that completes the rollout.</p>
</li>
<li>
<p><strong><a href="https://laravel-news.com/laravel-whatsapp-two-backends-behind-one-facade" target="_blank" rel="noopener">Laravel WhatsApp: Two Backends Behind One Facade</a>:</strong> This package wraps Meta&#8217;s official Cloud API and an unofficial <code>whatsapp-web.js</code> Node sidecar behind one <code>WhatsApp::</code> facade, so application code does not need to know which backend handles a message. Its trade-off table is useful: the Cloud API offers business templates and official support but lacks groups and limits free-form replies to 24 hours; the web sidecar supports groups, QR pairing, and unrestricted timing through a personal account without official backing. An optional Livewire admin UI is available with Flux.</p>
</li>
<li>
<p><strong><a href="https://ollieread.com/articles/you-probably-dont-need-a-database-per-tenant" target="_blank" rel="noopener">You Probably Don&#8217;t Need a Database Per Tenant</a>:</strong> Ollie Read examines multitenancy strategies from fully separate instances to one discriminator column, with the isolation and operational cost of each spelled out by database engine. His central distinction is useful: isolation concerns security and correctness, while separation concerns storage. PostgreSQL row-level security can provide meaningful isolation without the cost of a separate database. He frames the decision around the amount you are willing to pay per tenant for that isolation over the system&#8217;s lifetime.</p>
</li>
<li>
<p><strong><a href="https://nth-root.nl/en/guides/composer-in-docker-best-practices-for-production-images" target="_blank" rel="noopener">Composer in Docker: Best Practices for Production Images</a>:</strong> This detailed checklist keeps Composer out of the final production image. It covers bind-mounting the binary, ordering <code>COPY</code> instructions so dependency layers cache separately from code changes, using build secrets instead of <code>ENV</code> for private-package credentials, and pinning the Composer image to a digest rather than a mutable tag. The final Dockerfile combines the techniques into a reusable template.</p>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/new-laravel-php-packages-worth-trying-2026-feature-flags/">4 Laravel &#038; PHP Packages That Actually Solve Real Problems</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AI Agents &#038; Systems Engineering: 7 Bookmarks Worth Your Attention</title>
		<link>https://cristiannebunu.com/ai-agent-infrastructure-systems-engineering-7-deep-dives/</link>
		
		<dc:creator><![CDATA[Cristian N]]></dc:creator>
		<pubDate>Mon, 26 Oct 2026 21:30:00 +0000</pubDate>
				<category><![CDATA[Recommendations]]></category>
		<guid isPermaLink="false">https://cristiannebunu.com/?p=947</guid>

					<description><![CDATA[<p>I keep coming back to this group because every author shows their work in unusual detail. I Ported Kubernetes to the Browser: Sam Rose generated almost 100,000 lines of TypeScript with LLMs to build webernetes, a partial Kubernetes port that runs entirely…</p>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/ai-agent-infrastructure-systems-engineering-7-deep-dives/">AI Agents &#038; Systems Engineering: 7 Bookmarks Worth Your Attention</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I keep coming back to this group because every author shows their work in unusual detail.</p>



<ul class="wp-block-list">
<li>
<p><strong><a href="https://ngrok.com/blog/i-ported-kubernetes-to-the-browser" target="_blank" rel="noopener">I Ported Kubernetes to the Browser</a>:</strong> Sam Rose generated almost 100,000 lines of TypeScript with LLMs to build webernetes, a partial Kubernetes port that runs entirely client-side: pod scheduling, cluster DNS, and a browser-based container runtime. His verification process is more interesting than the port itself. He reviewed the generated code line by line against the Kubernetes Go source and ran hundreds of integration tests against both webernetes and a real k3s cluster to prove behavioral parity. The weekly token-cost and lines-of-code charts show what a two-month AI-assisted build actually costs.</p>
</li>
<li>
<p><strong><a href="https://paul.kinlan.me/ua-tracer/" target="_blank" rel="noopener">ua-tracer: What Does a User Agent Actually Do?</a>:</strong> Paul Kinlan built a tiny site that mints a unique, secret-scoped URL on every page load so it can report whether a visiting bot parsed your CSS, followed your manifest, or executed your JavaScript. The early results differ by crawler: GPTBot follows CSS but skips JS, OAI-SearchBot runs full JS, ChatGPT-User does neither, and ClaudeBot fetches everything but stops short of parsing the stylesheet. This tool makes the mechanics of an AI &#8220;reading&#8221; a page visible.</p>
</li>
<li>
<p><strong><a href="https://withlore.ai/docs/architecture/" target="_blank" rel="noopener">Lore Architecture Docs</a>:</strong> Lore is a transparent HTTP proxy between a coding agent (Claude Code, Codex, OpenCode, or Pi) and its upstream LLM provider. It captures conversations in three memory tiers: raw temporal storage, distilled observation logs, and curated long-term project knowledge. Its five-layer &#8220;gradient context manager&#8221; decides how much context to compress from the actual cost of cache reads and writes on each turn. That makes context management an explicit economic decision.</p>
</li>
<li>
<p><strong><a href="https://devblogs.microsoft.com/commandline/wsl-container-is-now-available-for-public-preview/" target="_blank" rel="noopener">WSL Container Is Now Available for Public Preview</a>:</strong> Microsoft has built a native Linux container CLI (<code>wslc</code>) and matching API into WSL. Windows apps can now run Linux containers without putting Docker Desktop in the middle. The new default filesystem (<code>virtiofs</code>) doubles Windows file-access speed, and the preview already works with VS Code Dev Containers. I&#8217;ll try it on the Windows machines where I currently keep a separate Docker installation just for Linux containers.</p>
</li>
<li>
<p><strong><a href="https://www.typefox.io/blog/fastbelt-release-v0.1/" target="_blank" rel="noopener">Fastbelt Version 0.1</a>:</strong> TypeFox&#8217;s new language engineering framework, a Go successor to Xtext and Langium, has reached its first real release. It includes grammar tooling, automatic cross-reference resolution, parallel workspace builds, and core LSP features such as completion, go-to-definition, and hover. TypeFox claims up to 50 times the speed and one-twentieth the memory use of comparable frameworks on common workloads. Anyone who has built a custom language server will recognize how much boilerplate that could remove.</p>
</li>
<li>
<p><strong><a href="https://www.arshad.fyi/writings/data-oriented-design-in-yukus-parser" target="_blank" rel="noopener">Data-Oriented Design in Yuku&#8217;s Parser</a>:</strong> Arshad Yaseen&#8217;s JavaScript/TypeScript parser, written in Zig, handles an 8MB file in about 19ms by storing its AST as flat arrays of <code>u32</code> indices instead of a pointer tree. It needs no per-node <code>malloc</code>, traversal stays cache-friendly, and the whole tree frees in one call. Because each child is appended before its parent, a linear pass over the node array is already a post-order traversal. Yaseen also explains why Yuku applies the technique less rigidly than Zig&#8217;s compiler: Yuku&#8217;s AST is a public API that other tools must use.</p>
</li>
<li>
<p><strong><a href="https://blog.master.dev/cloudflare-workers-and-hyperdrive-with-tanstack-start/" target="_blank" rel="noopener">Cloudflare Workers and Hyperdrive with TanStack Start</a>:</strong> Part 2 of Adam Rackis&#8217;s Cloudflare series covers two recurring database problems on Workers. Hyperdrive&#8217;s connection pooling reduces the cost of connecting on every invocation, while TanStack Start&#8217;s global request middleware creates a fresh &#8220;connection&#8221; per request to satisfy Workers&#8217; rule against persistent I/O resources. He also pins the Worker&#8217;s placement region to the database region, a small configuration detail with a direct latency cost when missed.</p>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/ai-agent-infrastructure-systems-engineering-7-deep-dives/">AI Agents &#038; Systems Engineering: 7 Bookmarks Worth Your Attention</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>A visual builder for your shell prompt, a coding font tester, and the counterintuitive economics of load balancing</title>
		<link>https://cristiannebunu.com/shell-prompt-builder-coding-fonts-load-balancing/</link>
		
		<dc:creator><![CDATA[Cristian N]]></dc:creator>
		<pubDate>Mon, 19 Oct 2026 20:30:00 +0000</pubDate>
				<category><![CDATA[Recommendations]]></category>
		<guid isPermaLink="false">https://cristiannebunu.com/?p=887</guid>

					<description><![CDATA[<p>A short one to close out the technical picks: two tools for your daily setup and one piece of theory worth internalizing about load balancing. Oh My Posh Visual Configurator: A drag-and-drop builder for your terminal prompt: arrange segments, preview in real…</p>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/shell-prompt-builder-coding-fonts-load-balancing/">A visual builder for your shell prompt, a coding font tester, and the counterintuitive economics of load balancing</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">A short one to close out the technical picks: two tools for your daily setup and one piece of theory worth internalizing about load balancing.</p>



<ul class="wp-block-list">
<li>
<p><strong><a href="https://configurator.ohmyposh.dev/" target="_blank" rel="noopener">Oh My Posh Visual Configurator</a>:</strong> A drag-and-drop builder for your terminal prompt: arrange segments, preview in real time, and export the config for PowerShell, Bash, Zsh, or Fish. If you&#8217;ve ever wanted to prettify your prompt but bounced off hand-editing a JSON theme, this removes that friction. Small, but the kind of thing that makes the terminal feel like yours.</p>
</li>
<li>
<p><strong><a href="https://www.monolisa.dev/tester/code" target="_blank" rel="noopener">MonoLisa</a>:</strong> A coding font with a live tester page where you can preview it in real code, toggle every OpenType feature (ligatures, stylistic sets, the grade axis, alternate glyphs), and try it across JavaScript, CSS, Java, PHP, and Python. The font itself is premium, but the tester is free and useful for deciding whether a wider, more characterful mono is worth the switch. Readability is the whole game when you stare at code all day.</p>
</li>
<li>
<p><strong><a href="https://brooker.co.za/blog/2020/08/06/erlang.html" target="_blank" rel="noopener">Surprising Economics of Load-Balanced Systems</a>:</strong> Marc Brooker&#8217;s piece is older (2020) but exactly the kind of evergreen theory worth carrying around. The setup: <code>c</code> single-slot servers behind a load balancer, offered load scaling linearly with <code>c</code> to keep per-server utilization constant. What happens to latency as <code>c</code> grows? The intuitive answers (constant, or worse) are wrong: via the M/M/c queue and Erlang&#8217;s C formula, mean latency <em>decreases</em>, asymptotically approaching pure service time, and the percentiles follow. Bigger fleets get better latency at the same utilization, and most of the benefit arrives at modest <code>c</code>. One of the rare distributed-systems results where scale makes a problem <em>easier</em>. File it next to your capacity-planning instincts and recalibrate them.</p>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/shell-prompt-builder-coding-fonts-load-balancing/">A visual builder for your shell prompt, a coding font tester, and the counterintuitive economics of load balancing</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Minimal WordPress themes, whether block themes were made for AI, ChatGPT as a page builder, JSON-LD for personal sites, and a dashboard-scaffolding CLI</title>
		<link>https://cristiannebunu.com/minimal-wordpress-themes-block-themes-json-ld/</link>
		
		<dc:creator><![CDATA[Cristian N]]></dc:creator>
		<pubDate>Mon, 12 Oct 2026 20:30:00 +0000</pubDate>
				<category><![CDATA[Recommendations]]></category>
		<guid isPermaLink="false">https://cristiannebunu.com/?p=886</guid>

					<description><![CDATA[<p>A cluster about the content web: building it, generating it, and making it legible to crawlers and models, starting with a roundup of minimal WordPress themes. 20+ Best Free Minimal WordPress Themes: Speckyboy&#8217;s roundup is exactly what it says: a curated list…</p>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/minimal-wordpress-themes-block-themes-json-ld/">Minimal WordPress themes, whether block themes were made for AI, ChatGPT as a page builder, JSON-LD for personal sites, and a dashboard-scaffolding CLI</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">A cluster about the content web: building it, generating it, and making it legible to crawlers and models, starting with a roundup of minimal WordPress themes.</p>



<ul class="wp-block-list">
<li>
<p><strong><a href="https://speckyboy.com/free-wordpress-themes-minimal/" target="_blank" rel="noopener">20+ Best Free Minimal WordPress Themes</a>:</strong> Speckyboy&#8217;s roundup is exactly what it says: a curated list of clean, typography-first themes (McLuhan, Integer, Koji, Rams, and more), with a handy comparison table at the end. Nothing fancy, but a good bookmark if you or a client ever needs a distraction-free blog or portfolio theme without paying for it.</p>
</li>
<li>
<p><strong><a href="https://www.pootlepress.com/2026/06/wordpress-block-themes-were-made-for-ai/" target="_blank" rel="noopener">WordPress Block Themes Were Made for AI</a> and <a href="https://www.pootlepress.com/2026/06/using-chatgpt-as-a-wordpress-page-builder/" target="_blank" rel="noopener">Using ChatGPT as a WordPress Page Builder</a>:</strong> Jamie Marsland&#8217;s two Pootlepress pieces are a pair, so I&#8217;m keeping them together. In the first he rebuilds his wife&#8217;s yoga studio site with ChatGPT and comes away convinced that block themes&#8217; semantic template-plus-content architecture is exactly what makes them AI-generable in a way classic themes never were. The second is the step-by-step version of that claim, his argument being that ChatGPT might be the best WordPress page builder he&#8217;s used, purely because of the speed of creative iteration. Read together they&#8217;re a good snapshot of where the WordPress-plus-AI conversation actually is right now.</p>
</li>
<li>
<p><strong><a href="https://hawksley.dev/blog/json-ld-explained-for-personal-websites/" target="_blank" rel="noopener">JSON-LD Explained for Personal Websites</a>:</strong> Ethan Hawksley&#8217;s guide is the most immediately actionable thing here for your own site. It&#8217;s a copy-paste walkthrough of the structured-data nodes that actually move the needle (<code>WebSite</code>, <code>Person</code>, <code>WebPage</code>/<code>ProfilePage</code>, <code>SoftwareApplication</code>, <code>BreadcrumbList</code>, <code>Blog</code>, <code>BlogPosting</code>) with the real JSON-LD from his site for each, and clear notes on <code>@id</code> linking, <code>sameAs</code> for disambiguation, and the fact that crawlers merge nodes across pages by ID while single-page scrapers (LLMs) don&#8217;t. Google isn&#8217;t the only reader anymore: answer engines read this too when deciding who to cite. If your site&#8217;s JSON-LD is thin, this is a weekend win.</p>
</li>
<li>
<p><strong><a href="https://dashboardstack.sh/" target="_blank" rel="noopener">DashboardStack</a>:</strong> This one rounds it out on the app side: a CLI that scaffolds a database, auth, CRUD, forms, and Stripe billing for Next.js, Nuxt, or TanStack Start, then deploys to Cloudflare Workers/D1/R2. It does this deterministically, so you&#8217;re not burning AI tokens regenerating the same admin plumbing on every project. It&#8217;s from the maker of Nuxt Charts, and you own the code outright. A nice &#8220;start with the dashboard you&#8217;d have built eventually&#8221; tool.</p>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/minimal-wordpress-themes-block-themes-json-ld/">Minimal WordPress themes, whether block themes were made for AI, ChatGPT as a page builder, JSON-LD for personal sites, and a dashboard-scaffolding CLI</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Multi-agent coding without worktrees, a tmux for agents, two LLMs on one Spark, and two Agent Skills worth stealing</title>
		<link>https://cristiannebunu.com/multi-agent-coding-tmux-agents-agent-skills/</link>
		
		<dc:creator><![CDATA[Cristian N]]></dc:creator>
		<pubDate>Mon, 05 Oct 2026 20:30:00 +0000</pubDate>
				<category><![CDATA[Recommendations]]></category>
		<guid isPermaLink="false">https://cristiannebunu.com/?p=885</guid>

					<description><![CDATA[<p>The agent-tooling layer is maturing fast, and this cluster is the practical end of it: multi-agent coding without worktree chaos, hosting, and skills you can drop into Claude Code today. Multi-Agent Coding Without Worktree Chaos: David Wells&#8217; post is the most useful…</p>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/multi-agent-coding-tmux-agents-agent-skills/">Multi-agent coding without worktrees, a tmux for agents, two LLMs on one Spark, and two Agent Skills worth stealing</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The agent-tooling layer is maturing fast, and this cluster is the practical end of it: multi-agent coding without worktree chaos, hosting, and skills you can drop into Claude Code today.</p>



<ul class="wp-block-list">
<li>
<p><strong><a href="https://davidwells.io/blog/multi-agent-coding-without-worktree-chaos" target="_blank" rel="noopener">Multi-Agent Coding Without Worktree Chaos</a>:</strong> David Wells&#8217; post is the most useful workflow piece I&#8217;ve read in a while. He went all-in on git worktrees for multi-agent coding, then drifted back to a single branch, because worktrees defer collisions to merge time rather than removing them. His answer is coordination: plan the work, interrogate the model for non-obvious questions, turn the plan into a <em>directed task graph</em>, then let a swarm pick up unblocked nodes while a coordinator (&#8220;ring leader&#8221;) loops every few minutes. Explicit <em>file reservations</em> and an <em>agent mailbox</em> for blockers prevent collisions, so there&#8217;s no <code>git status</code> archaeology. The line that stuck: &#8220;opening more terminals is not a system.&#8221; This is structured parallelism, and it&#8217;s clearly where the gains are.</p>
</li>
<li>
<p><strong><a href="https://herdr.dev/" target="_blank" rel="noopener">Herdr</a>:</strong> Billed as &#8220;tmux for coding agents,&#8221; it&#8217;s the natural companion to Wells&#8217; approach. It&#8217;s a Rust binary (no Electron, no account, no telemetry) that runs your agents in real PTYs on any box, keeps them alive when you close the laptop, shows blocked/working/done/idle state at a glance, and lets you reattach over SSH from your phone. It has real panes, a plugin marketplace, and a CLI + socket API so agents can orchestrate the multiplexer themselves. If you&#8217;re running the kind of swarm Wells describes, this is where it lives.</p>
</li>
<li>
<p><strong><a href="https://www.devashish.me/p/two-qwen3-models-on-one-dgx-spark" target="_blank" rel="noopener">Two Qwen3 Models on One DGX Spark</a>:</strong> Devashish&#8217;s post is the deep-systems entry for anyone chasing local inference. The goal: run Qwen3-Next-80B-FP8 for heavy work and Qwen3-4B for fast turns <em>coresident</em> on one Spark (119.67 GiB unified memory), behind a LiteLLM proxy on a single endpoint. It took a weekend, and the write-up is the &#8220;residency math&#8221; pain: <code>gpu_memory_utilization</code> is a snapshot against <em>total</em> card memory, not free memory; Qwen3-Next is mostly Mamba, so KV-cache demand is dominated by Mamba state alignment, not attention KV; and coresident processes race instead of negotiating. Niche, but if you&#8217;re eyeing a Spark to own your inference, this is the hard-won map.</p>
</li>
<li>
<p><strong><a href="https://initialcommit.co/library/skills/seo-content" target="_blank" rel="noopener">SEO Content Generation skill</a>:</strong> Josh Pigford&#8217;s Agent Skill is a self-contained content engine: drop it in <code>~/.claude/skills/</code>, and each run researches what to publish next, picks the content type, writes one deeply-researched on-brand piece, and registers it in a dedup ledger. It&#8217;s built for 2026 search, optimized to rank in Google <em>and</em> get cited by ChatGPT/Perplexity. The &#8220;decide → research → write → verify → register&#8221; loop is worth studying even if you never run it.</p>
</li>
<li>
<p><strong><a href="https://github.com/JCarterJohnson/vibecoded-design-tells/blob/main/unslop-ai-text/skill/SKILL.md" target="_blank" rel="noopener">unslop-text</a>:</strong> A skill that strips the cues that make prose read as AI-generated (the em dash, &#8220;it&#8217;s not just X, it&#8217;s Y,&#8221; sycophantic openers, delve/tapestry diction, the &#8220;in conclusion&#8221; wrap-up), <em>and</em> warns against the newer over-corrected &#8220;trying not to sound like AI&#8221; register (forced fragments, fake typos, bolted-on swearing), which it treats as its own tell. It&#8217;s grounded in a Reddit analysis of what readers actually name as giveaways, ships a deterministic scanner for CI, and is honest that the real tells (uniform rhythm, empty fluency) are structural and need a human ear.</p>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/multi-agent-coding-tmux-agents-agent-skills/">Multi-agent coding without worktrees, a tmux for agents, two LLMs on one Spark, and two Agent Skills worth stealing</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>View Transitions pushed past the spec, modern CSS theming, sizing selects to their content, UI experiments, and a shadcn SaaS template</title>
		<link>https://cristiannebunu.com/view-transitions-css-theming-shadcn-template/</link>
		
		<dc:creator><![CDATA[Cristian N]]></dc:creator>
		<pubDate>Mon, 28 Sep 2026 20:30:00 +0000</pubDate>
				<category><![CDATA[Recommendations]]></category>
		<guid isPermaLink="false">https://cristiannebunu.com/?p=884</guid>

					<description><![CDATA[<p>The CSS platform keeps handing us toys, and this batch is mostly about using the newest ones well, starting with View Transitions pushed past the spec. Cranking View Transitions Up to 11: Bramus Van Damme&#8217;s write-up of his Beyond Tellerrand talk (slides…</p>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/view-transitions-css-theming-shadcn-template/">View Transitions pushed past the spec, modern CSS theming, sizing selects to their content, UI experiments, and a shadcn SaaS template</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The CSS platform keeps handing us toys, and this batch is mostly about using the newest ones well, starting with View Transitions pushed past the spec.</p>



<ul class="wp-block-list">
<li>
<p><strong><a href="https://www.bram.us/2026/06/25/cranking-view-transtions-up-to-11-2026-04-28-beyond-tellerrand/" target="_blank" rel="noopener">Cranking View Transitions Up to 11</a>:</strong> Bramus Van Damme&#8217;s write-up of his Beyond Tellerrand talk (slides and a recording of the sister talk are linked). The premise is delightfully reckless: push the View Transition API past its documented limits by combining it with scroll-driven animations, triggering it automatically with a MutationObserver, even resurrecting classic IE&#8217;s page transitions through this modern API. It&#8217;s the tinkerer&#8217;s tour of the feature, and coming from a Chrome DevRel engineer it&#8217;s the good kind of &#8220;here&#8217;s what happens when you ignore the spec&#8217;s guardrails.&#8221;</p>
</li>
<li>
<p><strong><a href="https://una.im/modern-css-theming" target="_blank" rel="noopener">Modern CSS Theming</a>:</strong> Una Kravets&#8217; piece is the one to actually implement. She combines three newly-Baseline features into a nice theming system: <code>light-dark()</code> as the macro foundation (it reads computed <code>color-scheme</code>, so it&#8217;s inherited and composable, not a media query), a per-shadow-layer trick to swap drop shadows in light mode for glowing borders in dark, <code>contrast-color()</code> for one-line accessible text on any background, and <code>@container style()</code> queries that branch into hue-tinted palettes instead of harsh black/white. An optional <code>@function --elevation()</code> cleans it up at the cost of narrower support. This separates page-level theming from per-card micro-theming in a way I hadn&#8217;t seen laid out so cleanly.</p>
</li>
<li>
<p><strong><a href="https://www.matuzo.at/blog/2026/select-fieldsize" target="_blank" rel="noopener">field-sizing for selects</a>:</strong> Manuel Matuzovic covers a small, satisfying fix for an old annoyance: by default a <code>&lt;select&gt;</code> is as wide as its <em>longest</em> option, so a control showing &#8220;Utrecht&#8221; stays as wide as &#8220;Scheveningen.&#8221; <code>field-sizing: content</code> lets the width follow the <em>selected</em> option instead. One line, exactly the kind of platform detail worth filing away.</p>
</li>
<li>
<p><strong><a href="https://lab01.dev/" target="_blank" rel="noopener">Lab01</a>:</strong> Sebastiano Guerriero (the CodyHouse founder) runs this gallery of &#8220;best-in-class&#8221; UI experiments: a dozen small, polished interface studies you can open and inspect. Pure frontend inspiration; good to keep in the tab you open when a layout needs a spark.</p>
</li>
<li>
<p><strong><a href="https://shadcnspace.com/templates/saazio" target="_blank" rel="noopener">Saazio</a>:</strong> A conversion-focused SaaS website template built on Next.js 16, React 19, Tailwind 4, TypeScript, and shadcn/ui, with the usual marketing pages ready to customize. It&#8217;s a sensible starting point if you&#8217;re standing up a product site and don&#8217;t want to design the hero for the hundredth time.</p>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/view-transitions-css-theming-shadcn-template/">View Transitions pushed past the spec, modern CSS theming, sizing selects to their content, UI experiments, and a shadcn SaaS template</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Audit logs that survive queue hops, a queue/schedule dashboard, typed Eloquent objects, and Filament that an AI agent can drive</title>
		<link>https://cristiannebunu.com/audit-logs-queue-dashboard-typed-eloquent-filament/</link>
		
		<dc:creator><![CDATA[Cristian N]]></dc:creator>
		<pubDate>Mon, 21 Sep 2026 20:30:00 +0000</pubDate>
				<category><![CDATA[Recommendations]]></category>
		<guid isPermaLink="false">https://cristiannebunu.com/?p=883</guid>

					<description><![CDATA[<p>The Laravel package ecosystem keeps shipping, and this cluster spans an audit trail, a monitoring dashboard, an architecture pattern, and two takes on Filament. Yammi Audit Log: This one handles the audit problem most packages fumble: attribution once a change happens two…</p>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/audit-logs-queue-dashboard-typed-eloquent-filament/">Audit logs that survive queue hops, a queue/schedule dashboard, typed Eloquent objects, and Filament that an AI agent can drive</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The Laravel package ecosystem keeps shipping, and this cluster spans an audit trail, a monitoring dashboard, an architecture pattern, and two takes on Filament.</p>



<ul class="wp-block-list">
<li>
<p><strong><a href="https://laravel-news.com/yammi-audit-log-track-who-really-made-a-change-across-jobs-and-queues" target="_blank" rel="noopener">Yammi Audit Log</a>:</strong> This one handles the audit problem most packages fumble: attribution once a change happens two queue hops from the request. A normal audit trail credits the queue worker; Yammi carries the <em>original</em> identity through the chain and stamps a correlation ID, so you can reconstruct a cascade that spans a controller, a queued job, and a scheduled command as one workflow. No traits or observers: it hooks Eloquent events globally, with opt-in mode, async writes, a tamper-evident hash chain, and GDPR tooling all sitting dormant until you switch them on. The one caveat: raw Query Builder writes aren&#8217;t captured. A thoughtful default for &#8220;who really did this.&#8221;</p>
</li>
<li>
<p><strong><a href="https://laravel-news.com/monitor-and-control-schedules-queues-and-errors-in-laravel-with-watchtower" target="_blank" rel="noopener">Watchtower</a>:</strong> One production dashboard for scheduled tasks, queues, jobs, and exceptions. The part I like is that you can act from it, too: run a task on demand, bulk-retry failed jobs by exception type or time window, mark errors resolved. It works with any driver (database, Redis, SQS), uses deferred writes and sampling to stay off the request path, and has Horizon/Telescope-style gate auth. Heads up: this is close in spirit to the Vigilance package I recommended last batch (both monitor queues/schedules/errors on any driver), so if you&#8217;ve already bookmarked Vigilance, treat this as the alternative to compare against rather than a second must-install.</p>
</li>
<li>
<p><strong><a href="https://wendelladriel.com/blog/improving-laravel-architecture-with-expressive" target="_blank" rel="noopener">Improving Laravel Architecture With Expressive</a>:</strong> Wendell Adriel&#8217;s post is the architecture read of the batch. The problem it names is real: the Eloquent model becomes the object passed <em>everywhere</em> (controllers, actions, jobs, policies), dragging query building, persistence, and casting into business logic that only wanted the data. Expressive keeps Eloquent as the persistence layer but converts models into fully typed objects at the boundary, so your payment action depends on <code>customerId</code> and <code>totalCents</code> (typed, can&#8217;t accidentally call <code>-&gt;delete()</code> or trigger lazy loads) instead of the whole database model. There&#8217;s a generator and a sync command to keep the typed classes in step with the models. His rule of thumb is the right one: don&#8217;t use it for simple CRUD; reach for it where a workflow deserves a firmer boundary. Pairs well with the Sandi Metz piece over in the essays.</p>
</li>
<li>
<p><strong><a href="https://filamentphp.com/plugins/leek-ui-plus" target="_blank" rel="noopener">Filament UI Plus</a>:</strong> A paid community component pack that adds the polish Filament doesn&#8217;t ship (skeleton loaders for tables and stat widgets, an animated collapsible sidebar, sticky table actions, a Livewire loading bar, inline label prefixes). It&#8217;s built to be upgrade-safe, with 10 of 13 features needing zero view overrides.</p>
</li>
<li>
<p><strong><a href="https://ma.ttias.be/filament-mcp/" target="_blank" rel="noopener">filament-mcp</a>:</strong> Mattias Geniar&#8217;s package (his second appearance this batch) is a clever one: an MCP server that reads your existing resource <em>forms</em> and generates typed <code>create_post</code>/<code>update_product</code> tools, so an AI agent operates your panel through a typed contract instead of squinting at screenshots via browser automation. Everything is opt-in, deletes require explicit opt-in, and every call runs through the same tokens, gates, policies, and tenant scoping a human hits, plus an audit log that doubles as the clearest window I&#8217;ve seen into what an agent actually does over the wire.</p>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/audit-logs-queue-dashboard-typed-eloquent-filament/">Audit logs that survive queue hops, a queue/schedule dashboard, typed Eloquent objects, and Filament that an AI agent can drive</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Caching Laravel News with Cloudflare, when Octane isn&#8217;t worth it, 12 fixes that saved a server, and a leaner ECS config</title>
		<link>https://cristiannebunu.com/laravel-octane-cloudflare-caching-server-fixes/</link>
		
		<dc:creator><![CDATA[Cristian N]]></dc:creator>
		<pubDate>Mon, 14 Sep 2026 20:30:00 +0000</pubDate>
				<category><![CDATA[Recommendations]]></category>
		<guid isPermaLink="false">https://cristiannebunu.com/?p=882</guid>

					<description><![CDATA[<p>A performance-heavy Laravel batch, and the honest kind: as much about what didn&#8217;t work as what did, including a Laravel Octane experiment that got measured and reverted. Fast Laravel Case Study: Jason McCreary&#8217;s case study is a proper walkthrough of making Laravel…</p>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/laravel-octane-cloudflare-caching-server-fixes/">Caching Laravel News with Cloudflare, when Octane isn&#8217;t worth it, 12 fixes that saved a server, and a leaner ECS config</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">A performance-heavy Laravel batch, and the honest kind: as much about what <em>didn&#8217;t</em> work as what did, including a Laravel Octane experiment that got measured and reverted.</p>



<ul class="wp-block-list">
<li>
<p><strong><a href="https://jasonmccreary.me/articles/fast-laravel-case-study-laravel-news/" target="_blank" rel="noopener">Fast Laravel Case Study</a>:</strong> Jason McCreary&#8217;s case study is a proper walkthrough of making Laravel News itself faster with plain Cloudflare page caching. The interesting part is that Laravel News looks <em>un</em>cacheable (hourly content, rotating sponsor cards, a newsletter form), and he cached it anyway. Three refactors did it: converting every page from Livewire to Blade components (only the newsletter form actually needed reactivity, so the rest were shedding <code>wire:</code> state that broke when cached and 419&#8217;d), swapping dynamic segments like the sponsor banner to Alpine AJAX fragments that hydrate a cached shell, and purging via model events plus a piggybacked scheduled command for scheduled posts. Result: 15% → 60% cached, edge responses around 20ms. All of it is HTTP caching done systematically, with no paid services.</p>
</li>
<li>
<p><strong><a href="https://ma.ttias.be/laravel-octane-vs-php-fpm-lessons-learned/" target="_blank" rel="noopener">Octane vs PHP-FPM</a>:</strong> Mattias Geniar&#8217;s write-up is the counterpoint I wanted after last batch&#8217;s Octane-in-production piece. He moved a fleet of Oh Dear uptime-checker boxes from PHP-FPM to Octane on FrankenPHP, measured real traffic before and after, and moved every one of them back. The reason is clean: Octane&#8217;s whole trick is skipping the framework bootstrap per request, and for an I/O-bound workload (each request is a ~400ms outbound check), that bootstrap is a rounding error. Warm workers even pushed idle-box CPU <em>up</em>. The one real win was lower CPU <em>peaks</em> on busy boxes. His rule: Octane earns its keep on CPU-bound, framework-heavy requests served at high rates, not on anything dominated by waiting on the network. Measure your own workload instead of trusting the hello-world benchmark.</p>
</li>
<li>
<p><strong><a href="https://danielpetrica.com/laraplugins-performance-audit/" target="_blank" rel="noopener">LaraPlugins Performance Audit</a>:</strong> A fellow Romanian, Daniel Petrica, turns his 3AM war story into 12 concrete fixes, all with real numbers. An 8GB VPS pinned at 90% memory, 12 Horizon supervisors with <code>maxJobs: 0</code>, and a weekly job that fired 50,000 Cloudflare purge jobs in one cycle. The fixes are the good kind of boring: cap <code>maxJobs</code> everywhere so workers recycle memory, a global scope to stop loading a fat <code>packagist_metadata</code> JSON column on every query, three indexes he&#8217;d simply forgotten, and, my favourite, collapsing 50,000 purge jobs into one self-rescheduling job that batches URLs through a Redis <code>SADD</code> set (which dedupes for free). His closing line lands: when monitoring goes noisy you either fix the cause or tune the alerts, and every day you tune the alerts you train yourself to ignore your own dashboard.</p>
</li>
<li>
<p><strong><a href="https://medium.com/@developerawam/concurrency-parallelism-async-in-laravel-13-livewire-4-how-to-handle-multiple-tasks-96d66d80b9ba" target="_blank" rel="noopener">concurrency, parallelism &amp; async in Laravel 13 + Livewire 4</a>:</strong> The Developer Awam piece reframes a class of slowness as an execution-strategy problem instead of a database one: the dashboard that calls three APIs in series, the export that blocks for ten seconds. It&#8217;s a member-only Medium story so I only read the framing in full, but the distinction it draws (concurrency vs parallelism vs async, and where each fits in a Laravel/Livewire request) is the right mental model, and Laravel&#8217;s own concurrency helpers plus queued/deferred work are the tools it points at. Worth it if you keep reaching for a queue when what you actually want is a parallel fan-out.</p>
</li>
<li>
<p><strong><a href="https://tomasvotruba.com/blog/7-tips-to-improve-your-ecs-config" target="_blank" rel="noopener">7 Tips to Improve Your ECS Config</a>:</strong> Tomáš Votruba&#8217;s tips are a back-to-basics cleanup for anyone whose <code>ecs.php</code> has sprawled. His line (&#8220;if it&#8217;s longer than 15 lines, you&#8217;re probably doing it wrong&#8221;) is the whole ethos: prefer sets over listing individual rules, use <code>withRootFiles()</code> instead of naming stray files, and lean on the new <em>levels</em> to introduce a coding standard step by step (perfect for agent-driven per-rule PR trains on a legacy codebase). The final config he strives for is three lines of prepared sets plus paths. Feed it to your agent or learn it yourself; either way it&#8217;s a good spring clean.</p>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/laravel-octane-cloudflare-caching-server-fixes/">Caching Laravel News with Cloudflare, when Octane isn&#8217;t worth it, 12 fixes that saved a server, and a leaner ECS config</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DBSC, Merge Queues &#038; Agent Coding: Where Dev Is Heading</title>
		<link>https://cristiannebunu.com/dbsc-merge-queues-agent-coding/</link>
		
		<dc:creator><![CDATA[Cristian N]]></dc:creator>
		<pubDate>Mon, 07 Sep 2026 20:30:00 +0000</pubDate>
				<category><![CDATA[Recommendations]]></category>
		<guid isPermaLink="false">https://cristiannebunu.com/?p=849</guid>

					<description><![CDATA[<p>A grab-bag that&#8217;s really about one theme: the shape of the work is changing. Session security is getting cryptographic with DBSC, CI is buckling under agents, and the tools we drive are learning to drive each other. Device Bound Session Credentials: Making…</p>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/dbsc-merge-queues-agent-coding/">DBSC, Merge Queues &#038; Agent Coding: Where Dev Is Heading</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">A grab-bag that&#8217;s really about one theme: the shape of the work is changing. Session security is getting cryptographic with DBSC, CI is buckling under agents, and the tools we drive are learning to drive each other.</p>



<ul class="wp-block-list">
<li>
<p><strong><a href="https://scotthelme.co.uk/device-bound-session-credentials-making-stolen-cookies-useless/" target="_blank" rel="noopener">Device Bound Session Credentials: Making Stolen Cookies Useless</a>:</strong> Scott Helme explains DBSC, and the point lands hard: after all our progress on passwords, 2FA, and passkeys, the thing an attacker actually steals is still just a cookie. DBSC binds the session to a device-held private key, so a short-lived cookie has to be cryptographically refreshed by proving possession of that key, which a stolen cookie replayed from another machine can&#8217;t do. He walks the registration and one-step vs. two-step refresh flows, plus the privacy design (fresh key pair per session, cleared with site data). Given the security angle in my own work, this is a keeper.</p>
</li>
<li>
<p><strong><a href="https://scotthelme.co.uk/open-sourcing-dbsc-php-a-server-library-for-device-bound-session-credentials-in-php/" target="_blank" rel="noopener">Open-Sourcing dbsc-php: a Server Library for Device Bound Session Credentials in PHP</a>:</strong> The companion release: a ~700-line, zero-dependency, MIT-licensed PHP library (ES256 only) that encodes the hard-won corrections between &#8220;what the spec says&#8221; and &#8220;what Chrome actually does.&#8221; The wire-protocol notes in the README are the best part: registration is single-phase, refresh is two-phase, both the cookie value <em>and</em> challenge must rotate every refresh, and (the one that bit them in production) DBSC state must live in its own key space (Redis/table) keyed by session id, never inside a read-modify-written session blob, or a race silently clobbers the binding. Framework-agnostic by design.</p>
</li>
<li>
<p><strong><a href="https://blog.exe.dev/replace-your-ci" target="_blank" rel="noopener">Replace Your CI With a Merge Queue</a>:</strong> David Crawshaw&#8217;s argument is short and provocative: after-the-fact CI worked because humans break <code>HEAD</code> rarely and at human speed, but agents are always new to a codebase, regress things constantly, and by the time the &#8220;you broke CI&#8221; email lands, the agent&#8217;s context window is long gone. His fix is to run <em>all</em> tests in a merge queue (no slow daily-only suites), then hand agents a second command that runs the queue minus the merge, so they fix problems before inflicting them on anyone. It clarified something I&#8217;d felt but not named.</p>
</li>
<li>
<p><strong><a href="https://www.reddit.com/r/golang/comments/1uasllf/how_do_you_do_continuous_profiling_execution/" target="_blank" rel="noopener">How do you do continuous profiling / execution tracing? (r/golang)</a>:</strong> A Go community thread on continuous profiling and execution tracing in production: how people actually wire up low-overhead, always-on profiling and trace collection instead of one-off <code>pprof</code> runs. Useful as a survey of the current tooling and the trade-offs people are living with.</p>
</li>
<li>
<p><strong><a href="https://madewithlove.com/blog/claude-up-front-codex-in-the-back/" target="_blank" rel="noopener">Claude up front, Codex in the back</a>:</strong> A fun proof-of-concept: use Claude Code purely as the orchestrator (the pleasant UI you argue with) and have it invoke Codex non-interactively for the heavy lifting, so you get Claude&#8217;s UX with Codex&#8217;s depth at minimal Claude token spend. The honest part is the caveats: the orchestration overhead is roughly flat (~5-7K tokens per round trip), so on a one-line change the wrapper costs more than the work, and stacking two prompt layers plus three sets of agent rules (CLAUDE.md / CODEX.md / AGENTS.md) makes failures hard to debug. Worth it only when the task is big.</p>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/dbsc-merge-queues-agent-coding/">DBSC, Merge Queues &#038; Agent Coding: Where Dev Is Heading</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modern CSS in 2026: @function, Scroll Animations &#038; Tiny Tools</title>
		<link>https://cristiannebunu.com/modern-css-function-scroll-animations/</link>
		
		<dc:creator><![CDATA[Cristian N]]></dc:creator>
		<pubDate>Mon, 31 Aug 2026 20:30:00 +0000</pubDate>
				<category><![CDATA[Recommendations]]></category>
		<guid isPermaLink="false">https://cristiannebunu.com/?p=848</guid>

					<description><![CDATA[<p>The platform keeps handing us things I used to reach for JavaScript to do. This little cluster is me catching up on what modern CSS can express on its own, plus a couple of lightweight tools. Scrubbable Staggered Animation with CSS @function:…</p>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/modern-css-function-scroll-animations/">Modern CSS in 2026: @function, Scroll Animations &#038; Tiny Tools</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The platform keeps handing us things I used to reach for JavaScript to do. This little cluster is me catching up on what modern CSS can express on its own, plus a couple of lightweight tools.</p>



<ul class="wp-block-list">
<li>
<p><strong><a href="https://frontendmasters.com/blog/scrubbable-staggered-animation-with-css-function/" target="_blank" rel="noopener">Scrubbable Staggered Animation with CSS @function</a>:</strong> Instead of thinking of a stagger as a pile of independently <code>animation-delay</code>-ed objects, this reframes the whole effect as one progress value you can drive from anything: keyframes, scroll, whatever. The author builds a &#8220;stagger formula&#8221; from first principles (clamp + lerp over a per-item offset) and ports it to the new CSS <code>@function</code> rule, with <code>sibling-index()</code>, <code>if()</code>, and custom easing on top. It&#8217;s math-heavy, but the payoff is a reusable stagger you can scrub, with no JavaScript. Chrome/Edge only for now, so treat it as forward-looking.</p>
</li>
<li>
<p><strong><a href="https://css-tricks.com/scroll-driven-scroll-triggered-scroll-states-and-view-transitions/" target="_blank" rel="noopener">Scroll-Driven, Scroll-Triggered, Scroll States, and View Transitions</a>:</strong> Geoff Graham distinguishes four concepts I constantly mix up: scroll-<em>driven</em> animation tied to scroll position, scroll-<em>triggered</em> animation that runs after crossing a threshold, container-query <em>scroll-state</em> styling such as <code>stuck: top</code>, and same- or cross-document view transitions unrelated to scrolling. I will keep the compact summary table at the end.</p>
</li>
<li>
<p><strong><a href="https://date-light.flyingsquirrel.me/" target="_blank" rel="noopener">date-light</a>:</strong> A zero-dependency, fully typed TypeScript date utility with 39 functions in roughly 2.18KB minzipped. It fits the common case where I need a few date helpers without adding a heavyweight dependency.</p>
</li>
<li>
<p><strong><a href="https://lexingtonthemes.com/templates/brightlight" target="_blank" rel="noopener">Brightlight: a SaaS theme for Astro &amp; Tailwind CSS</a>:</strong> A polished Astro and Tailwind SaaS template with a warm palette, clean grid, and pages for landing, about, contact, authentication, blog, changelog, help, integrations, and team content. SEO, sitemap, RSS, and Fuse.js search are included. It also ships AGENTS.md, SKILLS.md, and Cursor rules for extending it with coding agents. It would make a credible marketing-site base without starting from a blank design.</p>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://cristiannebunu.com/modern-css-function-scroll-animations/">Modern CSS in 2026: @function, Scroll Animations &#038; Tiny Tools</a> appeared first on <a rel="nofollow" href="https://cristiannebunu.com">Cristian Nebunu</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
