<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Mara Ellison — Blog</title><description>Long-form articles on WebGL, web performance, motion design, accessibility and the web platform by creative frontend developer Mara Ellison.</description><link>https://maraellison.dev/</link><language>en</language><copyright>© 2026 Mara Ellison</copyright><item><title>Building Buttery WebGL Page Transitions with Three.js</title><link>https://maraellison.dev/blog/webgl-page-transitions-with-threejs/</link><guid isPermaLink="true">https://maraellison.dev/blog/webgl-page-transitions-with-threejs/</guid><description>A step-by-step guide to shader-based image transitions in Three.js — texture loading, a displacement shader, GSAP timing and graceful fallbacks.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><category>webgl</category><category>threejs</category><category>animation</category><author>hello@maraellison.dev (Mara Ellison)</author><enclosure url="https://maraellison.dev/images/blog/webgl-page-transitions-with-threejs-1200.webp" length="0" type="image/webp"/></item><item><title>Core Web Vitals for Creative Websites: A Practical Playbook</title><link>https://maraellison.dev/blog/core-web-vitals-for-creative-websites/</link><guid isPermaLink="true">https://maraellison.dev/blog/core-web-vitals-for-creative-websites/</guid><description>How to keep LCP, INP and CLS green on sites full of WebGL, video and animation — with budgets, lazy loading and real-user measurements.</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><category>performance</category><category>seo</category><category>nextjs</category><author>hello@maraellison.dev (Mara Ellison)</author><enclosure url="https://maraellison.dev/images/blog/core-web-vitals-for-creative-websites-1200.webp" length="0" type="image/webp"/></item><item><title>Designing a Motion System: Principles for Meaningful UI Animation</title><link>https://maraellison.dev/blog/designing-a-motion-system/</link><guid isPermaLink="true">https://maraellison.dev/blog/designing-a-motion-system/</guid><description>Tokens for duration and easing, choreography rules and reduced-motion fallbacks — how to turn one-off animations into a coherent motion system.</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><category>motion</category><category>design</category><category>react</category><author>hello@maraellison.dev (Mara Ellison)</author><enclosure url="https://maraellison.dev/images/blog/designing-a-motion-system-1200.webp" length="0" type="image/webp"/></item><item><title>Astro or Next.js? Choosing a Stack for Content-Heavy Sites</title><link>https://maraellison.dev/blog/astro-or-nextjs-for-content-sites/</link><guid isPermaLink="true">https://maraellison.dev/blog/astro-or-nextjs-for-content-sites/</guid><description>Why this portfolio uses Next.js for the interactive homepage and Astro for the blog — and a checklist for deciding on your own project.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate><category>astro</category><category>nextjs</category><category>architecture</category><author>hello@maraellison.dev (Mara Ellison)</author><enclosure url="https://maraellison.dev/images/blog/astro-or-nextjs-for-content-sites-1200.webp" length="0" type="image/webp"/></item><item><title>Generative Music in the Browser with the Web Audio API</title><link>https://maraellison.dev/blog/generative-music-with-the-web-audio-api/</link><guid isPermaLink="true">https://maraellison.dev/blog/generative-music-with-the-web-audio-api/</guid><description>Build a tiny lo-fi generator with oscillators, filters, a lookahead scheduler and a convolution reverb — the same engine behind this site&apos;s music player.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><category>web-audio</category><category>creative-coding</category><category>javascript</category><author>hello@maraellison.dev (Mara Ellison)</author><enclosure url="https://maraellison.dev/images/blog/generative-music-with-the-web-audio-api-1200.webp" length="0" type="image/webp"/></item><item><title>JSON-LD Recipes: Structured Data That Actually Ships</title><link>https://maraellison.dev/blog/json-ld-structured-data-recipes/</link><guid isPermaLink="true">https://maraellison.dev/blog/json-ld-structured-data-recipes/</guid><description>Copy-paste JSON-LD for Person, FAQ, Product, Review, Event and Breadcrumb markup — plus how to test it before search engines do.</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate><category>seo</category><category>json-ld</category><category>javascript</category><author>hello@maraellison.dev (Mara Ellison)</author><enclosure url="https://maraellison.dev/images/blog/json-ld-structured-data-recipes-1200.webp" length="0" type="image/webp"/></item><item><title>Accessible Custom Cursors and Pointer Effects</title><link>https://maraellison.dev/blog/accessible-custom-cursors/</link><guid isPermaLink="true">https://maraellison.dev/blog/accessible-custom-cursors/</guid><description>Custom cursors and mouse trails can delight — or exclude. How to build them so they respect touch devices, reduced motion and assistive technology.</description><pubDate>Thu, 08 Jan 2026 00:00:00 GMT</pubDate><category>accessibility</category><category>css</category><category>react</category><author>hello@maraellison.dev (Mara Ellison)</author><enclosure url="https://maraellison.dev/images/blog/accessible-custom-cursors-1200.webp" length="0" type="image/webp"/></item></channel></rss>