<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Varun Vachhar</title><description>DX engineer &amp; Generative artist. I make minimalist visuals with code: limited palettes, simple geometry, looping motion, using canvas, SVG and shaders. By day I&apos;m on the DX team for Storybook and Chromatic, working on tools to build, test, and document UIs.</description><link>https://varun.ca/</link><item><title>Iridescent crystal with raymarching and signed distance fields</title><link>https://varun.ca/writing/ray-march-sdf/</link><guid isPermaLink="false">https://varun.ca/ray-march-sdf/</guid><description>Building an iridescent crystal in a single fragment shader — raymarching and signed distance fields explained step by step, from a hand-rolled marching loop through surface normals, Blinn-Phong and iridescent lighting, to a crystal folded out of a plane, using off-the-shelf stackgl GLSL modules.</description><pubDate>Sat, 03 Jun 2023 00:00:00 GMT</pubDate></item><item><title>How we built the Storybook Day 3D animation</title><link>https://varun.ca/writing/storybook-day/</link><guid isPermaLink="false">https://varun.ca/storybook-day/</guid><description>Storybook just hit a major milestone: version 7.0! With a re-engineered codebase and bunch of new features, it&apos;s faster and more stable than ever before.</description><pubDate>Thu, 20 Apr 2023 00:00:00 GMT</pubDate></item><item><title>Three ways to create 3D particle effects</title><link>https://varun.ca/writing/three-js-particles/</link><guid isPermaLink="false">https://varun.ca/three-js-particles/</guid><description>Three techniques for building 3D particle systems in React Three Fiber — instanced meshes with animated transforms, dashed lines with an animated offset, and attractor-driven lines advanced step by step — broken down from a live solar-storm demo.</description><pubDate>Sat, 08 Jan 2022 00:00:00 GMT</pubDate></item><item><title>How to build stunning 3D scenes with React Three Fiber</title><link>https://varun.ca/writing/modular-webgl/</link><guid isPermaLink="false">https://varun.ca/modular-webgl/</guid><description>An introduction to WebGL with React Three Fiber — setting up a stage, creating geometry, adding lighting and post-processing effects, and composing it all into an animated 3D visualization built from components.</description><pubDate>Mon, 15 Nov 2021 00:00:00 GMT</pubDate></item><item><title>Noise in Creative Coding</title><link>https://varun.ca/writing/noise/</link><guid isPermaLink="false">https://varun.ca/noise/</guid><description>Noise is an indispensable tool for creative coding. We use it to generate all kinds of organic effects like clouds, landscapes and contours. Or to move and distort objects with a more lifelike behaviour.</description><pubDate>Thu, 22 Apr 2021 00:00:00 GMT</pubDate></item><item><title>Let&apos;s Build a Confetti Cannon</title><link>https://varun.ca/writing/confetti/</link><guid isPermaLink="false">https://varun.ca/confetti/</guid><description>Building a confetti cannon with a canvas particle system — velocity components for the launch, decay and gravity for the fall, noise-driven tilt and wobble for the tumble, an even-spread launch trick, and how to drop the finished animation into a larger app.</description><pubDate>Sat, 19 Dec 2020 00:00:00 GMT</pubDate></item><item><title>Scrollytelling with React</title><link>https://varun.ca/writing/scrollytelling/</link><guid isPermaLink="false">https://varun.ca/scrollytelling/</guid><description>How I built a minimal scrollytelling setup with React and Intersection Observer — h3 headings as steps, a sticky figure pane beside the text, and a custom hook that swaps the visual as each heading crosses the viewport.</description><pubDate>Sat, 12 Dec 2020 00:00:00 GMT</pubDate></item><item><title>Making things move</title><link>https://varun.ca/writing/torsions/</link><guid isPermaLink="false">https://varun.ca/torsions/</guid><description>Breaking down a canvas-sketch animation of a twisting block — cosine-curved bezier edges, an offset second curve for perspective thickness, and bezier-intersection face coloring, built up step by step from Walter Leblanc&apos;s Torsions print.</description><pubDate>Mon, 30 Nov 2020 00:00:00 GMT</pubDate></item><item><title>React Icon System</title><link>https://varun.ca/writing/react-icon-system/</link><guid isPermaLink="false">https://varun.ca/react-icon-system/</guid><description>Setting up a component-based SVG icon system with SVGR — consistent artboards, icons generated as build artifacts with custom templates, and a compound Icons component to tie it all together.</description><pubDate>Wed, 10 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Figma Plugins</title><link>https://varun.ca/writing/figma-plugins/</link><guid isPermaLink="false">https://varun.ca/figma-plugins/</guid><description>A designer-friendly breakdown of Figma plugin architecture — the sandboxed main code, the iframe UI and the postMessage bridge between them — plus figplug to tame the tooling, multi-command plugins and relaunch buttons.</description><pubDate>Wed, 20 May 2020 00:00:00 GMT</pubDate></item><item><title>Styled System Revisited</title><link>https://varun.ca/writing/styled-system-revisited/</link><guid isPermaLink="false">https://varun.ca/styled-system-revisited/</guid><description>An updated take on building design systems with Styled System — the Design Graph of scales, theme, variants and components, a component hierarchy for architectural choices, and ref forwarding done right.</description><pubDate>Sun, 19 Apr 2020 00:00:00 GMT</pubDate></item><item><title>Side-Loading a Design System</title><link>https://varun.ca/writing/side-loading-design-system/</link><guid isPermaLink="false">https://varun.ca/side-loading-design-system/</guid><description>How a growing team can establish a design system without pausing delivery — Storybook driven development, design tokens to centralize visual decisions, and light-weight documentation to seed a DesignOps practice organically.</description><pubDate>Thu, 12 Dec 2019 00:00:00 GMT</pubDate></item><item><title>Dark Mode</title><link>https://varun.ca/writing/dark-mode/</link><guid isPermaLink="false">https://varun.ca/dark-mode/</guid><description>Adding dark mode to a Gatsby site the Theme UI way — an intentional dark palette instead of inverted hues, a useColorMode hook that tracks the user&apos;s choice, and CSS custom properties plus a tiny inline script to kill the flash of the wrong theme.</description><pubDate>Tue, 12 Nov 2019 00:00:00 GMT</pubDate></item><item><title>Why Not Both?</title><link>https://varun.ca/writing/why-not-both/</link><guid isPermaLink="false">https://varun.ca/why-not-both/</guid><description>On designing in the medium of the web — why static design tools fall short of fluid, two-dimensional layouts, the convergence of design and development tools, and generative design as a possible bridge between design and code.</description><pubDate>Sat, 11 May 2019 00:00:00 GMT</pubDate></item><item><title>What is a Design System?</title><link>https://varun.ca/writing/what-is-a-design-system/</link><guid isPermaLink="false">https://varun.ca/what-is-a-design-system/</guid><description>Design systems are more than style guides or component libraries. On the hand-off problem, component-based design, and the six pillars — design language, kit, component library, sandbox, docs, and governance — that make a systematic design practice.</description><pubDate>Thu, 18 Apr 2019 00:00:00 GMT</pubDate></item><item><title>Reuleaux Polygons</title><link>https://varun.ca/writing/reuleaux-polygons/</link><guid isPermaLink="false">https://varun.ca/reuleaux-polygons/</guid><description>Constructing Reuleaux polygons — curvilinear shapes of constant width — with SVG arc commands and a polar-coordinate polygon generator, why they always have an odd number of sides, and how one rotates inside a square.</description><pubDate>Thu, 09 Aug 2018 00:00:00 GMT</pubDate></item><item><title>Component Based Design System With Styled-System</title><link>https://varun.ca/writing/styled-system/</link><guid isPermaLink="false">https://varun.ca/styled-system/</guid><description>Building a design system with styled-system and system-components — encoding design constraints in a theme, responsive style props, extending components, and custom style functions, worked through an input-with-adornment and a composable product card.</description><pubDate>Fri, 11 May 2018 00:00:00 GMT</pubDate></item><item><title>Component Based Design System With Tachyons</title><link>https://varun.ca/writing/tachyons-components/</link><guid isPermaLink="false">https://varun.ca/tachyons-components/</guid><description>Building a component-based design system on top of Tachyons — mapping props onto its scales to output class names, a withDesignSystem higher-order component, and the shortcut of jxnblk&apos;s tachyons-components.</description><pubDate>Thu, 10 May 2018 00:00:00 GMT</pubDate></item><item><title>Components</title><link>https://varun.ca/writing/components/</link><guid isPermaLink="false">https://varun.ca/components/</guid><description>Everything is a component. How I unlearned template-driven, route-sliced UIs and came around to seeing the interface as a composable system — small, stateless pieces that build up into a product-specific language.</description><pubDate>Wed, 09 May 2018 00:00:00 GMT</pubDate></item><item><title>JavaScript Frameworks: The Year of Convergence</title><link>https://varun.ca/writing/convergence/</link><guid isPermaLink="false">https://varun.ca/convergence/</guid><description>How React, Angular and Vue converged on the same core ideas — components, templates vs JSX, scoped styles, props and events — and why learning any one framework now transfers to the rest.</description><pubDate>Sun, 24 Dec 2017 00:00:00 GMT</pubDate></item><item><title>Polar Coordinates 🌀</title><link>https://varun.ca/writing/polar-coords/</link><guid isPermaLink="false">https://varun.ca/polar-coords/</guid><description>An intro to polar coordinates for creative coding — converting between polar and Cartesian, spacing points evenly around a circle to generate polygons, relative coordinates, rotating things around a point, and drawing polar curves, with interactive CodePen demos throughout.</description><pubDate>Thu, 23 Nov 2017 00:00:00 GMT</pubDate></item><item><title>Animating Clipped Shapes</title><link>https://varun.ca/writing/clip-path/</link><guid isPermaLink="false">https://varun.ca/clip-path/</guid><description>Recreating Herry Koo&apos;s SA 15 dribbble shot with SVG and animejs — arc slices drawn with the path element, sliding fills made from clipped rectangles, a little circle that bursts out, and a dash of squigglevision on top.</description><pubDate>Tue, 31 Oct 2017 00:00:00 GMT</pubDate></item><item><title>Metaballs</title><link>https://varun.ca/writing/metaballs/</link><guid isPermaLink="false">https://varun.ca/metaballs/</guid><description>Generating gooey metaballs as a single SVG path — locating the tangent points between two circles, spreading and curving the connector with polar coordinates, and handling overlap, after Hiroyuki Sato&apos;s Illustrator script.</description><pubDate>Mon, 16 Oct 2017 00:00:00 GMT</pubDate></item><item><title>Learning CSS Grid – Part 2</title><link>https://varun.ca/writing/css-grid-2/</link><guid isPermaLink="false">https://varun.ca/css-grid-2/</guid><description>Grid template areas — naming regions of the grid and placing items with a layout you can literally see in the CSS, worked through a magazine-style article layout and a BBC Sport live page recreated at three breakpoints.</description><pubDate>Mon, 04 Sep 2017 00:00:00 GMT</pubDate></item><item><title>Draggable Elements with RxJS</title><link>https://varun.ca/writing/drag-with-rxjs/</link><guid isPermaLink="false">https://varun.ca/drag-with-rxjs/</guid><description>Making DOM elements draggable with RxJS and Hammer — pan events as an observable stream, switchMap/takeUntil composing the drag gesture, a viewBox coordinate transform, and LERP-ed smooth motion on top.</description><pubDate>Sun, 27 Aug 2017 00:00:00 GMT</pubDate></item><item><title>Learning CSS Grid</title><link>https://varun.ca/writing/css-grid/</link><guid isPermaLink="false">https://varun.ca/css-grid/</guid><description>Notes from working through the CSS Grid Layout Module — tracks, lines, cells and areas, defining fixed and flexible grids with the fr unit, and auto placement with dense packing, built up to a responsive product-grid clone.</description><pubDate>Tue, 16 May 2017 00:00:00 GMT</pubDate></item><item><title>Git Rebase</title><link>https://varun.ca/writing/rebase/</link><guid isPermaLink="false">https://varun.ca/rebase/</guid><description>A practical guide to git rebase — squash a feature branch into a single commit, resolve conflicts without panic, work across forked remotes, and undo the whole thing with reflog when it goes sideways.</description><pubDate>Wed, 01 Mar 2017 00:00:00 GMT</pubDate></item><item><title>Component based SVG Icon System</title><link>https://varun.ca/writing/icon-component/</link><guid isPermaLink="false">https://varun.ca/icon-component/</guid><description>My workflow for a component-based SVG icon system — clean up icons with SVGO and currentColor, generate a symbol sprite sheet with webpack&apos;s svg-sprite-loader, and render everything through a tiny Icon component in React, Angular or Vue.</description><pubDate>Sat, 11 Feb 2017 00:00:00 GMT</pubDate></item><item><title>Touch and Mouse Together</title><link>https://varun.ca/writing/touch-and-mouse-together/</link><guid isPermaLink="false">https://varun.ca/touch-and-mouse-together/</guid><description>Implementing a pan gesture that works for both mouse and touch — building a draggable chat-head component in React, handling drag and touch events side by side, and hiding the desktop ghost drag image along the way.</description><pubDate>Tue, 15 Nov 2016 00:00:00 GMT</pubDate></item><item><title>Flattening Deep Hierarchies of Components</title><link>https://varun.ca/writing/flattening-deep-hierarchies-of-components/</link><guid isPermaLink="false">https://varun.ca/flattening-deep-hierarchies-of-components/</guid><description>Why config-prop components bloat as requirements grow, and how function-composition thinking — passing children instead of configuration — flattens deep hierarchies into small, single-responsibility, highly reusable components.</description><pubDate>Tue, 18 Oct 2016 00:00:00 GMT</pubDate></item><item><title>OAM and React &amp; SVG Starter</title><link>https://varun.ca/writing/oam/</link><guid isPermaLink="false">https://varun.ca/oam/</guid><description>Building OAM with Ainsley Wagoner and learning redux on something more fun than a To Do app — responsive SVG via viewBox coordinates, giving up on CSS animations for GSAP, and playing sounds from reducers with Howler.</description><pubDate>Sun, 14 Aug 2016 00:00:00 GMT</pubDate></item><item><title>Chillwave</title><link>https://varun.ca/writing/chillwave/</link><guid isPermaLink="false">https://varun.ca/chillwave/</guid><description>Recreating This Also&apos;s wave loading animation with pure SVG — building a sine-like wave out of Bézier curve commands, sliding it across with a CSS transform, and faking the rounded line caps with a carefully tuned stroke-dasharray.</description><pubDate>Mon, 23 Nov 2015 00:00:00 GMT</pubDate></item><item><title>Parallax With Angular</title><link>https://varun.ca/writing/parallax/</link><guid isPermaLink="false">https://varun.ca/parallax/</guid><description>A Tintin/Monument Valley mash-up built with AngularJS and SVG — layered peaks as directives, mouse position remapped to a centred origin, and CSS transforms that move each layer by a different ratio to fake 3D depth.</description><pubDate>Mon, 19 Oct 2015 00:00:00 GMT</pubDate></item><item><title>Truncation</title><link>https://varun.ca/writing/truncation/</link><guid isPermaLink="false">https://varun.ca/truncation/</guid><description>Truncation — ripping apart a polygon&apos;s vertices to create new facets and more complex geometry. Breaking the algorithm down step by step, then generalizing it for 2D polygons with a React and SVG demo.</description><pubDate>Fri, 03 Jul 2015 00:00:00 GMT</pubDate></item><item><title>Triangle.life</title><link>https://varun.ca/writing/triangles/</link><guid isPermaLink="false">https://varun.ca/triangles/</guid><description>I love triangles. After 30 days of making a new triangle every day, I&apos;m back to constructing more of them — an ongoing series of triangle experiments you can follow at triangle.life.</description><pubDate>Fri, 26 Jun 2015 00:00:00 GMT</pubDate></item><item><title>SVG with React</title><link>https://varun.ca/writing/react-svg/</link><guid isPermaLink="false">https://varun.ca/react-svg/</guid><description>Composing SVG images out of small reusable React components — a tetrahedron generator and a Fermat point calculator, with draggable handles whose click and drag logic lives isolated inside the component itself.</description><pubDate>Sun, 21 Jun 2015 00:00:00 GMT</pubDate></item><item><title>Location Services With AngularJS</title><link>https://varun.ca/writing/locator/</link><guid isPermaLink="false">https://varun.ca/locator/</guid><description>Turning raw geo-location into location identifiers that actually mean something to the user — reverse geocoding nearby options, manual lookup via Google&apos;s autocomplete service, and AngularJS directives that wrap both up like a select element.</description><pubDate>Mon, 05 Jan 2015 00:00:00 GMT</pubDate></item><item><title>The Core</title><link>https://varun.ca/writing/the-core/</link><guid isPermaLink="false">https://varun.ca/the-core/</guid><description>A p5.js experiment drawing gradient fills inside a polygon with contours and lerpColor, plus a detour into Penner&apos;s easing equations — how polynomial functions produce bounce effects in plain JavaScript.</description><pubDate>Mon, 18 Aug 2014 00:00:00 GMT</pubDate></item><item><title>Vector Field</title><link>https://varun.ca/writing/vector-field/</link><guid isPermaLink="false">https://varun.ca/vector-field/</guid><description>Recreating the spiralling vector field illustration from Google&apos;s Material Design handbook with p5.js — from a naive rotate-towards-the-mouse grid to the vector field equation that produces the exact spiral effect.</description><pubDate>Thu, 14 Aug 2014 00:00:00 GMT</pubDate></item><item><title>Squiggle</title><link>https://varun.ca/writing/squiggle/</link><guid isPermaLink="false">https://varun.ca/squiggle/</guid><description>A first step towards an animated, generative version of a Jupiter illustration I&apos;ve been obsessed with — paths flowing across the screen with organic movement, built with a 2D Perlin noise field and Two.js.</description><pubDate>Wed, 30 Jul 2014 00:00:00 GMT</pubDate></item><item><title>Custom Easing with Sass</title><link>https://varun.ca/writing/custom-easing-with-sass/</link><guid isPermaLink="false">https://varun.ca/custom-easing-with-sass/</guid><description>Baking patakk&apos;s custom easing function into CSS keyframes — a Sass easingGenerator mixin that computes the eased position at every step and writes out the whole animation for you.</description><pubDate>Mon, 28 Jul 2014 00:00:00 GMT</pubDate></item><item><title>Jamie XX</title><link>https://varun.ca/writing/jamie-xx/</link><guid isPermaLink="false">https://varun.ca/jamie-xx/</guid><description>A first experiment with React — a very minimal animation for Far Nearer by Jamie XX, with the Rdio API supplying the music.</description><pubDate>Thu, 17 Jul 2014 00:00:00 GMT</pubDate></item><item><title>Open &amp; Close</title><link>https://varun.ca/writing/open-and-close/</link><guid isPermaLink="false">https://varun.ca/open-and-close/</guid><description>Replicating CreativeDash&apos;s open &amp; close animation — a burger icon morphing into a cross — with pure CSS/SASS. As close as it gets without SVG path animations, circular mask and all.</description><pubDate>Mon, 07 Jul 2014 00:00:00 GMT</pubDate></item><item><title>Two Level Shrinking Header and Footer with Ionic Framework</title><link>https://varun.ca/writing/shrinking-header-footer/</link><guid isPermaLink="false">https://varun.ca/shrinking-header-footer/</guid><description>Extending Ionic&apos;s shrinking header demo to work at any scroll position and with a two-level header — tracking scroll direction with a delta, clamping the shrink amount to survive scroll bounce, and animating inside requestAnimationFrame.</description><pubDate>Wed, 25 Jun 2014 00:00:00 GMT</pubDate></item><item><title>Swipe-Li</title><link>https://varun.ca/writing/swipe-li/</link><guid isPermaLink="false">https://varun.ca/swipe-li/</guid><description>A three pane swipeable list element for AngularJS — swipe right to accept, left to reject, with intent detection that auto-completes the swipe, built on hammer.js and a delegate service for managing multiple instances.</description><pubDate>Fri, 28 Mar 2014 00:00:00 GMT</pubDate></item><item><title>Ellsworth Kelly Animated</title><link>https://varun.ca/writing/ellsworth-kelly-animated/</link><guid isPermaLink="false">https://varun.ca/ellsworth-kelly-animated/</guid><description>Animating Ellsworth Kelly&apos;s paintings with web technologies for Google&apos;s DevArt competition — Box2dWeb skeletons of particles and spring-links give the shapes springy, organic movement on every click.</description><pubDate>Mon, 24 Mar 2014 00:00:00 GMT</pubDate></item><item><title>AngularJS WebGL Directive</title><link>https://varun.ca/writing/angularjs-webgl-directive/</link><guid isPermaLink="false">https://varun.ca/angularjs-webgl-directive/</guid><description>A WebGL directive for AngularJS built with three.js — pass in canvas size, model, material and lighting as bindings, and hook up events like window resize to make the scene responsive.</description><pubDate>Tue, 11 Feb 2014 00:00:00 GMT</pubDate></item></channel></rss>