<?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>Blog | Storm Consultancy - Your Digital Technology Agency</title>
	<atom:link href="https://stormconsultancy.co.uk/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://stormconsultancy.co.uk/blog/</link>
	<description>Your Digital Technology Agency</description>
	<lastBuildDate>Wed, 27 May 2026 14:41:27 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://stormconsultancy.co.uk/wp-content/uploads/2025/10/cropped-favicon-32x32.jpg</url>
	<title>Blog | Storm Consultancy - Your Digital Technology Agency</title>
	<link>https://stormconsultancy.co.uk/blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">126205660</site>	<item>
		<title>What does a five figure website actually get you?</title>
		<link>https://stormconsultancy.co.uk/blog/business-insights/what-does-a-five-figure-website-actually-get-you/</link>
		
		<dc:creator><![CDATA[Claudia Ghadimi]]></dc:creator>
		<pubDate>Wed, 03 Jun 2026 08:09:00 +0000</pubDate>
				<category><![CDATA[Business Insights]]></category>
		<guid isPermaLink="false">https://stormconsultancy.co.uk/?p=7868</guid>

					<description><![CDATA[<p>We’re breaking down exactly where a five-figure investment goes. More importantly, we’re exploring why the businesses that understand it never look back When a business owner first hears a five-figure quote for a website, the instinct is often to compare it to an off-the-shelf solution. That&#8217;s the wrong comparison. A premium website build isn&#8217;t a &#8230; <a href="https://stormconsultancy.co.uk/blog/business-insights/what-does-a-five-figure-website-actually-get-you/">Continued</a></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/business-insights/what-does-a-five-figure-website-actually-get-you/">What does a five figure website actually get you?</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">We’re breaking down exactly where a five-figure investment goes. More importantly, we’re exploring why the businesses that understand it never look back</p>



<p class="wp-block-paragraph">When a business owner first hears a five-figure quote for a website, the instinct is often to compare it to an off-the-shelf solution. That&#8217;s the wrong comparison.</p>



<p class="wp-block-paragraph">A premium website build isn&#8217;t a more expensive version of a DIY site. It&#8217;s a fundamentally different thing. It’s conceived differently, built differently, and designed to do a different job. This blog post breaks down exactly what that investment buys you, line by line, so you can decide whether it makes sense for where your business is headed.</p>



<p class="wp-block-paragraph">What&#8217;s inside a premium build?</p>



<h2 class="wp-block-heading">Discovery &amp; strategic foundation</h2>



<p class="wp-block-paragraph">A premium build begins weeks before anyone opens a design tool. It starts with a thorough discovery process; understanding your business model, your ideal clients, your competitive landscape, and what success actually looks like for this site and your business.</p>



<p class="wp-block-paragraph">This stage produces clarity that most businesses have never had about their own online presence: who the site is really for, what it needs to make them feel and believe, and which actions it needs to prompt. Without this, everything that follows is guesswork dressed up as design.</p>



<p class="wp-block-paragraph">What this includes</p>



<ul class="wp-block-list">
<li>Stakeholder workshop and discovery sessions</li>



<li>Creative workshops and brand adaptations</li>



<li>Site architecture and user journey mapping</li>
</ul>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">User experience &amp; information architecture</h2>



<p class="wp-block-paragraph">Before design begins, the structure of your site needs to be mapped out with care. How do visitors move through it? Where do they land? What do they need to know, and in what order, before they&#8217;re ready to take action?</p>



<p class="wp-block-paragraph">UX design is the invisible work that makes a website feel effortless. When it&#8217;s done well, no one notices it, they just find themselves instinctively knowing where to go and feeling confident when they get there. When it&#8217;s absent, visitors feel lost or uncertain without quite knowing why, and they leave.</p>



<p class="wp-block-paragraph">What this includes</p>



<ul class="wp-block-list">
<li>Wireframes for all key pages and templates</li>



<li>Navigation design and content hierarchy planning</li>



<li>Conversion pathway design (how visitors become enquiries)</li>



<li>Review and iteration before design begins</li>
</ul>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Bespoke visual design</h2>



<p class="wp-block-paragraph">Custom design isn&#8217;t just about making things look pretty. It&#8217;s about making your brand visually communicate the right things to the right people. Every decision &#8211; colour, typography, spacing, imagery and motion is a signal. Those signals tell your visitor whether you are the kind of business they want to work with.</p>



<p class="wp-block-paragraph">Template sites borrow someone else&#8217;s signals. A bespoke design is built entirely around your brand, your audience, and the impression you need to make. It is also unique: no competitor has the same site, no visitor mistakes you for someone else, and no design decision was made because it was the default.</p>



<p class="wp-block-paragraph">What this includes</p>



<ul class="wp-block-list">
<li>Full custom design across all pages — nothing off-the-shelf</li>



<li>Brand-aligned typography, colour, and visual language system</li>



<li>Custom layouts and components built for your content</li>



<li>Responsive design crafted for desktop, tablet, and mobile</li>



<li>Considered micro-interactions and animation where appropriate</li>
</ul>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Clean, performant build</h2>



<p class="wp-block-paragraph">The development of a premium site is where the design comes to life and where shortcuts are most tempting and most costly. A clean build means lean, well-structured code with no unnecessary bloat; a carefully curated set of tools and integrations; and a site that loads quickly, behaves consistently, and is easy to maintain over time.</p>



<p class="wp-block-paragraph">This also means a content management system configured properly for your team; not a dashboard full of options you&#8217;ll never use, but a clean, intuitive editing experience that makes updating your own site simple and straightforward.</p>



<p class="wp-block-paragraph">What this includes</p>



<ul class="wp-block-list">
<li>Custom development of all designed pages and templates</li>



<li>Performance-optimised build &#8211; fast loading as standard</li>



<li>Clean, maintainable codebase with minimal plugin reliance</li>



<li>CMS setup tailored to how your team actually works</li>



<li>Cross-browser and device testing before launch</li>
</ul>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">SEO foundations built in</h2>



<p class="wp-block-paragraph">Search engine optimisation is not a plugin you install after launch. It&#8217;s a set of decisions woven into every layer of a site&#8217;s build &#8211; from the way pages are structured and labelled, to how content is written, to how fast the site loads on a mobile connection. Done properly, it&#8217;s invisible but powerful.</p>



<p class="wp-block-paragraph">A premium build is SEO-considered from day one. That doesn&#8217;t mean you&#8217;ll rank for everything overnight, SEO is a long game but it means your site won&#8217;t be working against you, and when you do invest in content or campaigns, the underlying foundations support that work rather than undermining it.</p>



<p class="wp-block-paragraph">What this includes</p>



<ul class="wp-block-list">
<li>Technical SEO: page structure, metadata, schema markup</li>



<li>Core Web Vitals optimisation from the build stage</li>



<li>Keyword-considered page architecture and URL structure</li>



<li>Image optimisation, alt text, and accessibility compliance</li>



<li>Google Search Console and Analytics setup and verification</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Ultimately, a premium website isn’t simply a bigger investment in design or development. It’s an investment in thinking &#8211; understanding your audience, shaping the right experience and building something designed to genuinely move your business forward.</p>



<p class="wp-block-paragraph">That’s the difference between a website that exists online and one that actively works for your business.</p>



<div class="wp-block-group cta-row has-blue-pale-background-color has-background is-vertical is-content-justification-stretch is-nowrap is-layout-flex wp-container-core-group-is-layout-8360d6be wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-nowrap is-layout-flex wp-container-core-group-is-layout-6fe931d8 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized is-style-rounded"><img fetchpriority="high" decoding="async" width="360" height="360" src="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wp-promo-image.jpg" alt="" class="wp-image-7253" style="aspect-ratio:1;object-fit:cover;width:180px" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wp-promo-image.jpg 360w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wp-promo-image-150x150.jpg 150w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wp-promo-image-64x64.jpg 64w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wp-promo-image-128x128.jpg 128w" sizes="(max-width: 360px) 100vw, 360px" /></figure>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="eyebrow-heading has-blue-default-color has-text-color has-link-color wp-elements-df2e01ce0cb70051caf01d18f5274ce8 wp-block-paragraph">Highly customisable. Globally loved.</p>



<h3 class="wp-block-heading has-navy-color has-text-color has-link-color wp-elements-16df65c1db3bc8a0dde0524404902502">Want to chat about your marketing website?</h3>
</div>
</div>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-navy-color has-text-color has-link-color wp-elements-0f9ed59a6690ab7a674edfbb7effa7b9 wp-block-paragraph">Do you need a website with a theme that is tailor-made for your brand? One of our WordPress sites could be perfect for you.</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://stormconsultancy.co.uk/contact/">Get in touch</a></div>
</div>
</div>
</div>
<p>The post <a href="https://stormconsultancy.co.uk/blog/business-insights/what-does-a-five-figure-website-actually-get-you/">What does a five figure website actually get you?</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7868</post-id>	</item>
		<item>
		<title>5 signs your website is costing you high-value clients</title>
		<link>https://stormconsultancy.co.uk/blog/design/5-signs-your-website-is-costing-you-high-value-clients/</link>
		
		<dc:creator><![CDATA[Claudia Ghadimi]]></dc:creator>
		<pubDate>Thu, 21 May 2026 10:36:53 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Tech Tips]]></category>
		<guid isPermaLink="false">https://stormconsultancy.co.uk/?p=7867</guid>

					<description><![CDATA[<p>A self-diagnostic guide for ambitious businesses wondering why their site isn&#8217;t converting the way it should. Your website is working 24 hours a day but the question is whether it&#8217;s working for you, or quietly turning away the clients you most want to win. Here are five signs it may be the latter. It takes &#8230; <a href="https://stormconsultancy.co.uk/blog/design/5-signs-your-website-is-costing-you-high-value-clients/">Continued</a></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/design/5-signs-your-website-is-costing-you-high-value-clients/">5 signs your website is costing you high-value clients</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">A self-diagnostic guide for ambitious businesses wondering why their site isn&#8217;t converting the way it should.</p>



<p class="wp-block-paragraph">Your website is working 24 hours a day but the question is whether it&#8217;s working for you, or quietly turning away the clients you most want to win. Here are five signs it may be the latter.</p>



<h2 class="wp-block-heading">It takes more than three seconds to load</h2>



<p class="wp-block-paragraph">High-value clients are busy. They do not wait. Research consistently shows that the majority of visitors will abandon a page if it hasn&#8217;t loaded within three seconds and that number drops further for mobile users on the go.</p>



<p class="wp-block-paragraph">But slow load times aren&#8217;t just a user experience problem. Search engines penalise slow sites in rankings too, meaning the right people may never reach you in the first place. A sluggish website signals, consciously or not, that your business lacks the rigour and attention to detail your clients expect.</p>



<p class="wp-block-paragraph">Check for these culprits:</p>



<ul class="wp-block-list">
<li>Uncompressed or oversized images (the most common offender)</li>



<li>Too many plugins or third-party scripts loading on every page</li>



<li>Slow or cheap hosting that can&#8217;t handle traffic spikes</li>



<li>No caching or content delivery network (CDN) in place</li>



<li>Pages bloated with unnecessary code or legacy scripts</li>
</ul>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">The design feels five years behind your ambitions</h2>



<p class="wp-block-paragraph">You&#8217;ve grown. Your team is stronger, your offer is sharper, your clients are more discerning. Does your website still reflect who you were when you first built it? Outdated design is one of the most damaging forms of silent brand erosion.</p>



<p class="wp-block-paragraph">Premium clients assess credibility within seconds of landing on a page. If your website looks like it was built in a different era, fronting clashing fonts, cramped layouts, stock photos that look like every other site in your industry… They will draw conclusions about the quality of your work before they&#8217;ve read a single word.</p>



<p class="wp-block-paragraph">Signs your design is past its prime:</p>



<ul class="wp-block-list">
<li>Your branding has evolved but the website hasn&#8217;t kept pace</li>



<li>The layout looks crowded or difficult to navigate intuitively</li>



<li>You&#8217;re using generic stock photography rather than original imagery</li>



<li>Typography is inconsistent, small, or hard to read on screen</li>



<li>You feel vaguely embarrassed sharing the URL in a sales conversation</li>
</ul>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">It wasn&#8217;t designed for mobile, it was squeezed into it</h2>



<p class="wp-block-paragraph">There is a significant difference between a website that is technically responsive and one that was actually designed with a mobile user in mind. Most sites fall into the former camp: they technically display on a phone, but the experience is clunky, the text is too small, the buttons are too close together, and the layout tells a very different story than on desktop.</p>



<p class="wp-block-paragraph">The majority of web traffic now arrives on mobile devices. More importantly, a significant portion of high-value decision-makers are reviewing supplier websites from their phones during commutes, between meetings, or over lunch. If that experience lets them down, you don&#8217;t get a second chance.</p>



<p class="wp-block-paragraph">Test your mobile experience right now:</p>



<ul class="wp-block-list">
<li>Open your homepage on your phone &#8211; does it feel fast and clean?</li>



<li>Can you tap all buttons and links without accidentally hitting the wrong one?</li>



<li>Is the key information (what you do, who for, how to contact you) visible without excessive scrolling?</li>



<li>Do forms and enquiry processes work smoothly end-to-end on mobile?</li>



<li>Are images cropping in strange places or looking pixelated on high-resolution screens?</li>
</ul>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Your calls to action are vague, weak, or missing</h2>



<p class="wp-block-paragraph">A beautiful website that doesn&#8217;t guide visitors toward action is an expensive brochure. Many businesses invest in design but give almost no thought to conversion. The moments where an interested visitor becomes an enquiry, a booking, or a sale.</p>



<p class="wp-block-paragraph">Weak calls to action are often born from a reluctance to seem pushy. But for high-value clients who are actively evaluating their options, clarity is a virtue. They want to know exactly what the next step is, and they want it to feel effortless. Ambiguity breeds hesitation, and hesitation means they close the tab and consider your competitor instead.</p>



<p class="wp-block-paragraph">Your CTAs need attention if:</p>



<ul class="wp-block-list">
<li>Every page ends the same way, with no specific next step tailored to that content</li>



<li>Your contact form asks for too much information before offering any value</li>



<li>&#8220;Get in touch&#8221; is doing all the heavy lifting when &#8220;Book a discovery call&#8221; would perform far better &#8211; you may use this on landing pages for specific searches</li>



<li>There&#8217;s no clear hierarchy &#8211; visitors don&#8217;t know which action matters most</li>



<li>CTAs are buried at the bottom of the page rather than placed at the moment of peak interest</li>
</ul>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">There&#8217;s nothing to make them trust you beyond your own words</h2>



<p class="wp-block-paragraph">At a certain level, clients aren&#8217;t just buying a service, they&#8217;re buying certainty. They want to know that choosing you is a safe, considered decision they can defend internally and feel confident about personally. Self-promotional copy, no matter how well written, only goes so far. What converts high-value clients is evidence.</p>



<p class="wp-block-paragraph">Social proof; testimonials, case studies, client logos, accreditations, press mentions, results. This is the difference between a website that tells people you&#8217;re good and one that shows them. Its absence at the premium end of the market is conspicuous.</p>



<p class="wp-block-paragraph">Ask yourself honestly:</p>



<ul class="wp-block-list">
<li>Do you have specific testimonials with names, companies, and measurable outcomes or vague, anonymous praise?</li>



<li>Are there case studies that walk a potential client through a real transformation you&#8217;ve delivered?</li>



<li>Is there any third-party validation such as awards, press, partnerships, or certifications, visible on the site?</li>



<li>Do the clients and industries you&#8217;ve worked with feature prominently, rather than being hidden in a footer?</li>



<li>Would a sceptical, intelligent buyer come away from your site feeling genuinely reassured?</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Your website should be your hardest-working asset, not your most expensive liability. If any of these five signs feel uncomfortably familiar, the good news is that none of them are unfixable. A faster, sharper, more persuasive website isn&#8217;t a luxury reserved for the biggest players in your industry. It&#8217;s a decision, and one that pays for itself every time the right client lands on your page and stays.</p>



<div class="wp-block-group cta-row has-blue-pale-background-color has-background is-vertical is-content-justification-stretch is-nowrap is-layout-flex wp-container-core-group-is-layout-8360d6be wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-nowrap is-layout-flex wp-container-core-group-is-layout-6fe931d8 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized is-style-rounded"><img decoding="async" width="360" height="360" src="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wp-promo-image.jpg" alt="" class="wp-image-7253" style="aspect-ratio:1;object-fit:cover;width:180px" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wp-promo-image.jpg 360w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wp-promo-image-150x150.jpg 150w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wp-promo-image-64x64.jpg 64w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wp-promo-image-128x128.jpg 128w" sizes="(max-width: 360px) 100vw, 360px" /></figure>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="eyebrow-heading has-blue-default-color has-text-color has-link-color wp-elements-df2e01ce0cb70051caf01d18f5274ce8 wp-block-paragraph">Highly customisable. Globally loved.</p>



<h3 class="wp-block-heading has-navy-color has-text-color has-link-color wp-elements-16df65c1db3bc8a0dde0524404902502">Want to chat about your marketing website?</h3>
</div>
</div>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-navy-color has-text-color has-link-color wp-elements-0f9ed59a6690ab7a674edfbb7effa7b9 wp-block-paragraph">Do you need a website with a theme that is tailor-made for your brand? One of our WordPress sites could be perfect for you.</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://stormconsultancy.co.uk/contact/">Get in touch</a></div>
</div>
</div>
</div>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/design/5-signs-your-website-is-costing-you-high-value-clients/">5 signs your website is costing you high-value clients</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7867</post-id>	</item>
		<item>
		<title>Hotwire Native, iOS Simulators + Puma-dev</title>
		<link>https://stormconsultancy.co.uk/blog/techtips/hotwire-native-ios-simulators-puma-dev/</link>
		
		<dc:creator><![CDATA[Timi Williamson]]></dc:creator>
		<pubDate>Tue, 07 Apr 2026 09:35:19 +0000</pubDate>
				<category><![CDATA[Tech Tips]]></category>
		<guid isPermaLink="false">https://stormconsultancy.co.uk/?p=7770</guid>

					<description><![CDATA[<p>Hotwire Native is a web-first framework for building native mobile apps for iOS and Android, and there are some useful resources available to help get you up and running quickly. For local development, a lot of the Hotwire Native getting started guides will point to setting up the native app to use a localhost address, &#8230; <a href="https://stormconsultancy.co.uk/blog/techtips/hotwire-native-ios-simulators-puma-dev/">Continued</a></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/techtips/hotwire-native-ios-simulators-puma-dev/">Hotwire Native, iOS Simulators + Puma-dev</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a href="https://native.hotwired.dev/" target="_blank" rel="noreferrer noopener">Hotwire Native</a> is a web-first framework for building native mobile apps for iOS and Android, and there are some useful resources available to help get you up and running quickly.</p>



<p class="wp-block-paragraph">For local development, a lot of the Hotwire Native getting started guides will point to setting up the native app to use a localhost address, like you would when setting up a new Rails app:</p>



<pre class="wp-block-code"><code>let rootURL = URL(string: "http://localhost:3000")!</code></pre>



<p class="wp-block-paragraph">For Puma-dev users who have set up .test domains to resolve to localhost however, you may have been eager to enter your local test site URLs, to see how your site would look and work in the Hotwire Native client. And if tried in Xcode with an iOS simulator, you may have encountered this message:</p>



<p class="wp-block-paragraph"><em>“Error loading page: The certificate for this server is invalid. You might be connecting to a server that is pretending to be &lt;mysite.test&gt;, which could put your confidential information at risk.”</em></p>



<figure class="wp-block-image size-full"><img decoding="async" width="1920" height="1080" src="https://stormconsultancy.co.uk/wp-content/uploads/2026/02/hw-screen1-1.webp" alt="" class="wp-image-7785" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2026/02/hw-screen1-1.webp 1920w, https://stormconsultancy.co.uk/wp-content/uploads/2026/02/hw-screen1-1-768x432.webp 768w, https://stormconsultancy.co.uk/wp-content/uploads/2026/02/hw-screen1-1-1536x864.webp 1536w, https://stormconsultancy.co.uk/wp-content/uploads/2026/02/hw-screen1-1-1114x626.webp 1114w" sizes="(max-width: 1920px) 100vw, 1920px" /></figure>



<h2 class="wp-block-heading">This can though be resolved for the iOS simulators with the following steps:</h2>



<ol class="wp-block-list">
<li>In Xcode, point the app to the URL you would use in your Puma-dev setup, rather than localhost, e.g.:&nbsp;</li>
</ol>



<pre class="wp-block-code"><code>let rootURL = URL(string: "https://mysite.test")!</code></pre>



<ol start="2" class="wp-block-list">
<li>On your Mac, export and save the &#8220;Puma-dev CA.cer&#8221; certificate file. Using Keychain Access;
<ul class="wp-block-list">
<li>Select ‘System’ under System Keychains,&nbsp;</li>



<li>Select the ‘Certificates’ tab</li>



<li>Right click on the “Puma-dev CA” file, and select ‘Export “Puma-dev CA”&#8230;’</li>



<li>Save the file to a chosen location<br><br>Here&#8217;s a helpful <a href="https://support.apple.com/en-gb/guide/keychain-access/kyca35961/mac">support article</a> from Apple if you need more help.</li>
</ul>
</li>
</ol>



<ol start="3" class="wp-block-list">
<li>With the simulator running, drag and drop the &#8220;Puma-dev CA.cer&#8221; file directly onto it.</li>



<li>You should then be able to hit ‘retry’, and the site should load. If you still encounter issues after that, you might need to trust the certificate in the simulator (under Settings &gt; General &gt; About &gt; Certificate Trust Settings, and enable full trust for the Puma-dev CA certificate), and/or redeploy the app.</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1920" height="1080" src="https://stormconsultancy.co.uk/wp-content/uploads/2026/02/hw-screen2-1.webp" alt="" class="wp-image-7786" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2026/02/hw-screen2-1.webp 1920w, https://stormconsultancy.co.uk/wp-content/uploads/2026/02/hw-screen2-1-768x432.webp 768w, https://stormconsultancy.co.uk/wp-content/uploads/2026/02/hw-screen2-1-1536x864.webp 1536w, https://stormconsultancy.co.uk/wp-content/uploads/2026/02/hw-screen2-1-1114x626.webp 1114w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></figure>



<p class="wp-block-paragraph">And that should be it! Note that these certificates will be installed on a per simulator basis, so if you switch from one to another, you will need to install the certificate on that one too. However, it will only need to be done the first time for each.</p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/techtips/hotwire-native-ios-simulators-puma-dev/">Hotwire Native, iOS Simulators + Puma-dev</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7770</post-id>	</item>
		<item>
		<title>Animation without the overhead: working with Lottie files</title>
		<link>https://stormconsultancy.co.uk/blog/design/animation-without-the-overhead-working-with-lottie-files/</link>
		
		<dc:creator><![CDATA[Sam Neville]]></dc:creator>
		<pubDate>Wed, 07 Jan 2026 09:59:16 +0000</pubDate>
				<category><![CDATA[Business Insights]]></category>
		<category><![CDATA[Design]]></category>
		<guid isPermaLink="false">https://stormconsultancy.co.uk/?p=7731</guid>

					<description><![CDATA[<p>Motion has an important role to play in digital products &#8211; when it’s used with intent. At Storm, we have included animations to support clarity, guide users, and add a sense of polish without compromising performance. One of the tools that helps us do this effectively is Lottie. Using Lottie files allow us to bring &#8230; <a href="https://stormconsultancy.co.uk/blog/design/animation-without-the-overhead-working-with-lottie-files/">Continued</a></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/design/animation-without-the-overhead-working-with-lottie-files/">Animation without the overhead: working with Lottie files</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Motion has an important role to play in digital products &#8211; when it’s used with intent. At Storm, we have included animations to support clarity, guide users, and add a sense of polish without compromising performance. One of the tools that helps us do this effectively is <strong>Lottie</strong>.</p>



<p class="wp-block-paragraph">Using Lottie files allow us to bring high-quality animation into websites and applications in a way that’s lightweight, flexible and consistent across platforms. In this post, I’ll explain how we use Lottie at Storm, and why it’s become part of our design workflow.</p>



<figure class="wp-block-image size-full"><a href="https://lottiefiles.com/" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="1882" height="1058" src="https://stormconsultancy.co.uk/wp-content/uploads/2025/12/lottie-files.webp" alt="Illustrated image of Lottie Files" class="wp-image-7732" style="aspect-ratio:16/9;object-fit:cover" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2025/12/lottie-files.webp 1882w, https://stormconsultancy.co.uk/wp-content/uploads/2025/12/lottie-files-768x432.webp 768w, https://stormconsultancy.co.uk/wp-content/uploads/2025/12/lottie-files-1536x863.webp 1536w, https://stormconsultancy.co.uk/wp-content/uploads/2025/12/lottie-files-1114x626.webp 1114w" sizes="auto, (max-width: 1882px) 100vw, 1882px" /></a></figure>



<h2 class="wp-block-heading">What is a Lottie animation?</h2>



<p class="wp-block-paragraph">Lottie is a <strong>JSON-based animation format</strong> that renders vector animations in real time across web and mobile platforms. In plain English: it’s lightweight code that plays back motion exactly how it was designed, no matter where it’s used.</p>



<p class="wp-block-paragraph">Unlike GIFs or video files:</p>



<ul class="wp-block-list">
<li>It <em>scales perfectly</em> on any screen size with no loss of quality</li>



<li>It <em>loads fast</em> because the files are tiny, often just a few kilobytes.</li>



<li>It <em>plays natively</em> on iOS, Android and desktop browsers without awkward fallbacks.</li>
</ul>



<h2 class="wp-block-heading">How we create Lottie files</h2>



<p class="wp-block-paragraph">Our Lottie animations start life in <strong>Adobe After Effects</strong>, where we have full creative control over timing, easing and visual detail. This gives us the freedom to design motion in the same considered way we design interfaces, aligning animation with brand styles, and user needs.</p>



<p class="wp-block-paragraph">Once an animation is ready, we export it using <strong>BodyMovin</strong>, an After Effects plugin that converts animations into Lottie’s JSON format. This process preserves the fidelity of the original animation while producing a file that’s small, scalable and ready for use on the web or in apps.</p>



<p class="wp-block-paragraph">Because the animation is data-driven rather than video-based, it can be rendered natively by the browser or app, without the overhead you’d expect from GIFs or MP4s.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1696" height="954" src="https://stormconsultancy.co.uk/wp-content/uploads/2025/12/ae-mockup.webp" alt="Screenshot of After Effects with Bodymovin plugin active." class="wp-image-7734" style="aspect-ratio:16/9;object-fit:cover" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2025/12/ae-mockup.webp 1696w, https://stormconsultancy.co.uk/wp-content/uploads/2025/12/ae-mockup-768x432.webp 768w, https://stormconsultancy.co.uk/wp-content/uploads/2025/12/ae-mockup-1536x864.webp 1536w, https://stormconsultancy.co.uk/wp-content/uploads/2025/12/ae-mockup-1114x626.webp 1114w" sizes="auto, (max-width: 1696px) 100vw, 1696px" /></figure>



<h2 class="wp-block-heading">Don&#8217;t overdo it!</h2>



<p class="wp-block-paragraph">At Storm, we tend to use animations in places where motion genuinely adds value, such as:</p>



<ul class="wp-block-list">
<li><strong>Interface feedback</strong>, like loading states or confirmation messages</li>



<li><strong>Micro-interactions</strong>, helping users understand what’s happening</li>



<li><strong>Illustrative animations</strong>, supporting content or explaining concepts</li>



<li><strong>Subtle brand moments</strong>, reinforcing tone without distraction</li>
</ul>



<p class="wp-block-paragraph">We’re careful not to overuse animation. If motion doesn’t improve understanding or usability, it doesn’t earn its place.</p>



<h2 class="wp-block-heading">Sam&#8217;s Summary</h2>



<p class="wp-block-paragraph">Lottie has become a valuable part of how we design and build digital experiences at Storm. It allows us to introduce motion that’s lightweight, flexible and consistent, without compromising on performance or maintainability.</p>



<p class="wp-block-paragraph">Used carefully, Lottie animations help digital products feel more responsive, more human, and easier to use. And that’s exactly what we aim for in every project we deliver.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/design/animation-without-the-overhead-working-with-lottie-files/">Animation without the overhead: working with Lottie files</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7731</post-id>	</item>
		<item>
		<title>The 5 Figma plugins driving major improvements in our design workflow</title>
		<link>https://stormconsultancy.co.uk/blog/design/the-5-figma-plugins-driving-major-improvements-in-our-design-workflow/</link>
		
		<dc:creator><![CDATA[Sam Neville]]></dc:creator>
		<pubDate>Wed, 10 Dec 2025 16:02:21 +0000</pubDate>
				<category><![CDATA[Business Insights]]></category>
		<category><![CDATA[Design]]></category>
		<guid isPermaLink="false">https://stormconsultancy.co.uk/?p=7701</guid>

					<description><![CDATA[<p>We recently talked about how Figma has upgraded our design process, covering everything from smooth client collaborations in FigJam to the pure efficiency of Auto Layout. It’s safe to say Figma has become an indispensable tool at Storm, but we’ve discovered that its core features are just the starting line! The real secret weapon for &#8230; <a href="https://stormconsultancy.co.uk/blog/design/the-5-figma-plugins-driving-major-improvements-in-our-design-workflow/">Continued</a></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/design/the-5-figma-plugins-driving-major-improvements-in-our-design-workflow/">The 5 Figma plugins driving major improvements in our design workflow</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">We recently talked about <a href="https://stormconsultancy.co.uk/blog/business-insights/how-figma-has-upgraded-our-design-process/">how Figma has upgraded our design process</a>, covering everything from smooth client collaborations in FigJam to the pure efficiency of Auto Layout. It’s safe to say Figma has become an indispensable tool at Storm, but we’ve discovered that its core features are just the starting line! </p>



<p class="wp-block-paragraph">The <em>real</em> secret weapon for daily speed and quality is the incredible ecosystem of plugins. These tools are what truly turbocharge our workflow, letting us save time, ensure consistency, and stay focused on creativity. We&#8217;ve handpicked our top five below:</p>



<figure class="wp-block-image size-full"><a href="https://www.figma.com/community/plugin/739825414752646970/typescales" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="1882" height="1058" src="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/typescales-preview.webp" alt="A preview of the Typescales plugin" class="wp-image-7703" style="aspect-ratio:16/9;object-fit:cover" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/typescales-preview.webp 1882w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/typescales-preview-768x432.webp 768w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/typescales-preview-1536x863.webp 1536w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/typescales-preview-1114x626.webp 1114w" sizes="auto, (max-width: 1882px) 100vw, 1882px" /></a></figure>



<h2 class="wp-block-heading">Typescales</h2>



<p class="wp-block-paragraph">This <a href="https://www.figma.com/community/plugin/739825414752646970/typescales" target="_blank" rel="noreferrer noopener">handy tool</a> lets us quickly generate a <strong>modular scale</strong> for all of our text within a website or web app design. A modular scale means that every size &#8211; from the largest H1 title to the smallest caption, is mathematically related by a specific <strong>ratio</strong> (like a perfect harmony in music!).</p>



<p class="wp-block-paragraph">It saves us tons of time and ensures our designs have a great visual flow and clear hierarchy right from the start.</p>



<figure class="wp-block-image size-full"><a href="https://www.figma.com/community/plugin/939567362549682242/lucide-icons" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="1652" height="929" src="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/lucide-preview-1.webp" alt="A preview of the Lucide plugin" class="wp-image-7705" style="aspect-ratio:16/9;object-fit:cover" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/lucide-preview-1.webp 1652w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/lucide-preview-1-768x432.webp 768w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/lucide-preview-1-1536x864.webp 1536w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/lucide-preview-1-1114x626.webp 1114w" sizes="auto, (max-width: 1652px) 100vw, 1652px" /></a></figure>



<h2 class="wp-block-heading">Lucide</h2>



<p class="wp-block-paragraph"><a href="https://www.figma.com/community/plugin/939567362549682242/lucide-icons" target="_blank" rel="noreferrer noopener">Lucide Icons</a> is a fantastic open-source icon plugin for Figma. With a huge collection of over 1500+ SVG icons, it&#8217;s perfect for our design team to quickly find great icons for any project! Easy to use, the plugin allows us to quickly copy and customise just the specific icon we need.</p>



<p class="wp-block-paragraph">The entire icon library is designed with a simple, functional approach, enhancing our user experience and ensuring cohesion with our existing design systems. </p>



<figure class="wp-block-image size-full"><a href="https://www.figma.com/community/plugin/732603254453395948/stark-contrast-accessibility-checker" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="1920" height="1080" src="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/stark-preview-1.webp" alt="A preview of the Stark plugin" class="wp-image-7708" style="aspect-ratio:16/9;object-fit:cover" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/stark-preview-1.webp 1920w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/stark-preview-1-768x432.webp 768w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/stark-preview-1-1536x864.webp 1536w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/stark-preview-1-1114x626.webp 1114w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></figure>



<h3 class="wp-block-heading">Stark &#8211; Contrast &amp; Accessibility Checker</h3>



<p class="wp-block-paragraph"><a href="https://www.figma.com/community/plugin/732603254453395948/stark-contrast-accessibility-checker" target="_blank" rel="noreferrer noopener">Stark</a> is an essential part of our accessibility tool set. This plugin provides us with the tools necessary to audit our designs, making it easy for us to focus on the parts of a project that need an accessibility check. The comprehensive suite of accessibility tools includes a contrast checker, vision simulator, and alt-text annotations. Using Stark as part of Storm&#8217;s design workflow ensures that we meet the latest standards and create truly inclusive digital experiences.</p>



<figure class="wp-block-image size-full"><a href="https://www.youtube.com/watch?v=5uvU1-2xq3U" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="1660" height="933" src="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/figma-colour-preview-1.webp" alt="" class="wp-image-7709" style="aspect-ratio:16/9;object-fit:cover" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/figma-colour-preview-1.webp 1660w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/figma-colour-preview-1-768x432.webp 768w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/figma-colour-preview-1-1536x863.webp 1536w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/figma-colour-preview-1-1114x626.webp 1114w" sizes="auto, (max-width: 1660px) 100vw, 1660px" /></a></figure>



<p class="wp-block-paragraph">Since a March 2025 update, Figma now also has a <a href="https://www.youtube.com/watch?v=5uvU1-2xq3U" target="_blank" rel="noreferrer noopener">built-in colour contrast checker</a> right in the colour picker. This native feature instantly verifies if foreground colours meet WCAG contrast standards (AA or AAA) for accessibility.</p>



<p class="wp-block-paragraph">The fact that Figma has baked an accessibility colour checker right into the tool is fantastic because it makes designing accessibly natural default, quickly encouraging more inclusive practices across the board!</p>



<figure class="wp-block-image size-full"><a href="https://www.figma.com/community/plugin/738454987945972471/unsplash" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="1706" height="960" src="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/unsplash-preview.webp" alt="" class="wp-image-7710" style="aspect-ratio:16/9;object-fit:cover" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/unsplash-preview.webp 1706w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/unsplash-preview-768x432.webp 768w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/unsplash-preview-1536x864.webp 1536w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/unsplash-preview-1114x626.webp 1114w" sizes="auto, (max-width: 1706px) 100vw, 1706px" /></a></figure>



<h3 class="wp-block-heading">Unsplash</h3>



<p class="wp-block-paragraph">We love using the beautiful images from <a href="https://www.figma.com/community/plugin/738454987945972471/unsplash">Un</a><a href="https://www.figma.com/community/plugin/738454987945972471/unsplash" target="_blank" rel="noreferrer noopener">s</a><a href="https://www.figma.com/community/plugin/738454987945972471/unsplash">plash</a> in our designs. What&#8217;s even better is their licence allows images to be used freely for both commercial and personal projects.</p>



<p class="wp-block-paragraph">This handy Figma plugin makes the whole process effortless: we can easily search the huge Unsplash library and insert images directly into our Figma files. This super seamless workflow is a lifesaver whenever we need high-quality placeholder imagery or eye-catching visuals for things like blog headers!</p>



<figure class="wp-block-image size-full"><a href="https://www.figma.com/community/plugin/801195587640428208/design-lint" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="1666" height="937" src="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/design-lint-preview-1.webp" alt="Preview of the Design Lint plugin" class="wp-image-7712" style="aspect-ratio:16/9;object-fit:cover" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/design-lint-preview-1.webp 1666w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/design-lint-preview-1-768x432.webp 768w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/design-lint-preview-1-1536x864.webp 1536w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/design-lint-preview-1-1114x626.webp 1114w" sizes="auto, (max-width: 1666px) 100vw, 1666px" /></a></figure>



<h3 class="wp-block-heading">Design Lint</h3>



<p class="wp-block-paragraph"><a href="https://www.figma.com/community/plugin/801195587640428208/design-lint" target="_blank" rel="noreferrer noopener">Design Lint</a> is a free Figma plugin that helps to find and fix design errors. The plugin checks for missing text, fill, stroke, and effects styles. It also catches incorrect border radius values. We use it regularly as part of a final design audit before handing over to our development team, ensuring that all styles are consistent for the best user experience.</p>



<figure class="wp-block-image size-full"><a href="https://help.figma.com/hc/en-us/articles/35794667554839-What-s-new-from-Schema-2025#h_01K84PBY9TFHJ40AEC4Q47DGKH" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="1660" height="933" src="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/figma-check-designs-preview.webp" alt="" class="wp-image-7713" style="aspect-ratio:16/9;object-fit:cover" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2025/11/figma-check-designs-preview.webp 1660w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/figma-check-designs-preview-768x432.webp 768w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/figma-check-designs-preview-1536x863.webp 1536w, https://stormconsultancy.co.uk/wp-content/uploads/2025/11/figma-check-designs-preview-1114x626.webp 1114w" sizes="auto, (max-width: 1660px) 100vw, 1660px" /></a></figure>



<p class="wp-block-paragraph">We&#8217;re also excited that in Figma&#8217;s latest Schema update, they&#8217;ve introduced a new native feature called <a href="https://help.figma.com/hc/en-us/articles/35794667554839-What-s-new-from-Schema-2025#h_01K84PBY9TFHJ40AEC4Q47DGKH" target="_blank" rel="noreferrer noopener">Check Designs</a>, with similar functionality to Design Lint. This new tool is currently in the early-access stage and should be rolled out in full next year.</p>



<h2 class="wp-block-heading">Sam&#8217;s Summary</h2>



<p class="wp-block-paragraph">Ultimately, these five plugins prove that maximising Figma’s potential means looking beyond the basics. They are simple, lightweight additions that yield huge returns in time saved and design quality ensured, allowing our design team to focus on the big creative challenges instead of repetitive tasks. </p>



<p class="wp-block-paragraph">We&#8217;re already excited for what&#8217;s next; we can&#8217;t wait to see how Figma continues to develop the app, especially as new AI-integrated features promise to streamline our workflow even further. We&#8217;ll be keeping a close eye on it &#8211; watch this space!</p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/design/the-5-figma-plugins-driving-major-improvements-in-our-design-workflow/">The 5 Figma plugins driving major improvements in our design workflow</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7701</post-id>	</item>
		<item>
		<title>Logging outbound emails with ActionMailer in Rails</title>
		<link>https://stormconsultancy.co.uk/blog/ruby-on-rails/logging-outbound-emails-with-actionmailer-in-rails/</link>
		
		<dc:creator><![CDATA[Adam Pope]]></dc:creator>
		<pubDate>Tue, 25 Nov 2025 11:15:00 +0000</pubDate>
				<category><![CDATA[Ruby on Rails]]></category>
		<guid isPermaLink="false">https://stormconsultancy.co.uk/?p=7641</guid>

					<description><![CDATA[<p>If your Rails application sends emails to users, it&#8217;s often helpful to keep a record of which messages have been sent and to who. This has a few key benefits: Historically, you had to use mail interceptors or observers to achieve this.&#160;That approach wasn’t&#160;very elegant and didn’t give access to all the information we wanted &#8230; <a href="https://stormconsultancy.co.uk/blog/ruby-on-rails/logging-outbound-emails-with-actionmailer-in-rails/">Continued</a></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/ruby-on-rails/logging-outbound-emails-with-actionmailer-in-rails/">Logging outbound emails with ActionMailer in Rails</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If your Rails application sends emails to users, it&#8217;s often helpful to keep a record of which messages have been sent and to who. This has a few key benefits:</p>



<ul class="wp-block-list">
<li>It helps debug issues with scheduled tasks or background jobs that are expected to send emails to certain users.&nbsp;By seeing which emails were sent, we can work backwards from logic errors that caused the wrong people to be contacted.</li>



<li>In the event of a system outage or background job issue, it lets you see which emails were successfully sent and determine which jobs may need re-running.</li>



<li>If customers contact you to say they’re not receiving notifications, a mail log helps you quickly determine whether the issue is in your app logic or the mail delivery process.</li>
</ul>



<p class="wp-block-paragraph">Historically, you had to use mail interceptors or observers to achieve this.&nbsp;That approach wasn’t&nbsp;very elegant and didn’t give access to all the information we wanted to log.&nbsp;However, Rail 7.1 added lifecycle callbacks to ActionMailer: <code>before_deliver</code>, <code>around_deliver</code> and <code>after_deliver</code>.&nbsp;The <code>after_deliver</code> callback is the perfect place to log successfully sent emails.</p>



<p class="wp-block-paragraph">First, we need to decide where we are going to log this data.&nbsp;You could send it to a monitoring service or structured log store, but in our application we are writing to the database so that logs can be linked to the related account.</p>



<h2 class="wp-block-heading">Creating the model</h2>



<p class="wp-block-paragraph">As we&#8217;re storing our logs in the application&#8217;s database, we create a <code>MailerLog</code> model and migration with associations to the account and user tables.</p>



<p class="wp-block-paragraph">The migration:</p>



<pre class="wp-block-code"><code>class CreateMailerLogs &lt; ActiveRecord::Migration&#91;8.1]
&nbsp; def change
&nbsp;&nbsp; &nbsp;create_table :mailer_logs do |t|
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;t.references :account, null: true, foreign_key: true
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;t.references :user, null: true, foreign_key: true
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.string :mailer
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.string :action
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.string :subject
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.string :to
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.string :cc
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.string :bcc
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.json :params
      t.timestamps
&nbsp; &nbsp;&nbsp;end
&nbsp; end
end</code></pre>



<p class="wp-block-paragraph">The model:</p>



<pre class="wp-block-code"><code>class MailerLog &lt; ApplicationRecord
  belongs_to :account, optional: true
  belongs_to :user, optional: true

  validates :mailer, presence: true
  validates :action, presence: true
  validates :to, presence: true
  validates :subject, presence: true
end</code></pre>



<p class="wp-block-paragraph">Next, we modify <code>ApplicationMailer</code> to collect the logs:</p>



<pre class="wp-block-code"><code>class ApplicationMailer &lt; ActionMailer::Base
  after_deliver :log_mail&nbsp;

  private
&nbsp;
  def log_mail
&nbsp;&nbsp; &nbsp;MailerLog.create!(
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;account: params&#91;:account].presence || @account,
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;user: params&#91;:user].presence || @user,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mailer: self.class.name,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action: action_name,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to: Array.wrap(mail.to).join(", "),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cc: Array.wrap(mail.cc).join(", "),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bcc: Array.wrap(mail.bcc).join(", "),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; subject: mail.subject,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params: params.except(:account, :user)
&nbsp;&nbsp;&nbsp; )
&nbsp; end
end</code></pre>



<h2 class="wp-block-heading">Recording the logs</h2>



<p class="wp-block-paragraph">Let’s step through the key pieces of how we are recording the logs:</p>



<p class="wp-block-paragraph"><code>after_deliver :log_mail&nbsp;</code></p>



<p class="wp-block-paragraph">This adds the callback that records the logs.&nbsp;It only runs <em>after</em> the message is actually sent. So if you use <code>deliver_later</code>, the callback triggers when the background job sends the email, not when it’s queued.</p>



<p class="wp-block-paragraph">Inside the callback, you have access to the <code>mail</code> object, any instance variables defined in your mailer action, and the <code>params</code> hash created when you invoke a mailer with <code>MyMailer.with(user: @user).my_email</code></p>



<p class="wp-block-paragraph">In our application we almost always pass in either the account or user (or define an instance variable for one) so we can address the message appropriately. To record who the message relates to, we use:</p>



<p class="wp-block-paragraph"><code>account: params[:account].presence || @account</code></p>



<p class="wp-block-paragraph">This checks the <code>params</code> hash first, then the instance variable.&nbsp;If neither exists, that’s fine, we log nil. You&#8217;ll want to customise this logic to work with your core models.</p>



<p class="wp-block-paragraph">We log the class name and action method name to identify the mailer that was sent.</p>



<p class="wp-block-paragraph">Recipients (To, CC and BCC) are logged as a CSV (although you could use a JSON column if you prefer) so we know who got the email.</p>



<p class="wp-block-paragraph">The subject is logged to help identify certain messages, and could be used in a future web UI to show a user’s notification history.</p>



<p class="wp-block-paragraph">We deliberately do not log the email body as it might contain sensitive information we don’t want to store.</p>



<p class="wp-block-paragraph">Finally, we record anything left in the <code>params</code> hash to see the target object of a message.&nbsp; For example, <code>NotificationMailer.with(@project).recent_activity</code> would let us see which project the notification was for.&nbsp;If you are passing in sensitive information (like password reset tokens) you’ll want to filter these from the logged data.&nbsp;</p>



<p class="wp-block-paragraph">That’s all there is to it, we now have a production log of outbound emails.&nbsp;A couple of final thoughts:</p>



<ul class="wp-block-list">
<li>If you are using Devise, note that this will not record password reset / invitation emails as <code>Devise::Mailer</code> does not subclass <code>ApplicationMailer</code>.&nbsp;You can work around that by subclassing it locally (<code>DeviseMailer &lt; Devise::Mailer</code>) and extracting the logging into a shared concern.</li>



<li>Over time, this log will grow large.&nbsp;You might want to add associations to related models, for example <code>has_many :mailer_logs, dependent: :delete_all</code>.&nbsp;You may also want to add a scheduled job to prune old logs.</li>
</ul>



<p class="wp-block-paragraph">For us, this custom mail log sits alongside the <a href="https://github.com/collectiveidea/audited" target="_blank" rel="noreferrer noopener">audited</a> gem that tracks changes to key fields on certain models and the <a href="https://github.com/ankane/authtrail" target="_blank" rel="noreferrer noopener">authtrail</a> gem that integrates with Devise to record authentication activity. All three are great tools to get visibility of what&#8217;s going on inside your application.</p>



<div class="wp-block-group cta-row has-red-light-background-color has-background is-vertical is-content-justification-stretch is-nowrap is-layout-flex wp-container-core-group-is-layout-8360d6be wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-nowrap is-layout-flex wp-container-core-group-is-layout-6fe931d8 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized is-style-rounded"><img loading="lazy" decoding="async" width="360" height="360" src="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta.jpg" alt="" class="wp-image-7338" style="aspect-ratio:1;object-fit:cover;width:180px" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta.jpg 360w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta-150x150.jpg 150w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta-64x64.jpg 64w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta-128x128.jpg 128w" sizes="auto, (max-width: 360px) 100vw, 360px" /></figure>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="eyebrow-heading has-red-dark-color has-text-color has-link-color wp-elements-20e6dec9b13bc3f4c069eac01342d3d5 wp-block-paragraph">Efficient. Robust. Scalable. Secure.</p>



<h3 class="wp-block-heading">Want to know more about Ruby on Rails?</h3>
</div>
</div>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-navy-color has-text-color has-link-color wp-elements-75ac6bd2f75f4b43ef4d487baa43cb48 wp-block-paragraph">Whether you’re a start-up or you’re looking for an agency to take on your existing Rails app, we’re here to help you.</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="/ruby-on-rails/">Find out more</a></div>
</div>
</div>
</div>
<p>The post <a href="https://stormconsultancy.co.uk/blog/ruby-on-rails/logging-outbound-emails-with-actionmailer-in-rails/">Logging outbound emails with ActionMailer in Rails</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7641</post-id>	</item>
		<item>
		<title>An unexpected quirk of the `&#060;` specifier in a gemspec</title>
		<link>https://stormconsultancy.co.uk/blog/ruby-on-rails/an-unexpected-quirk-of-the-specifier-in-a-gemspec/</link>
		
		<dc:creator><![CDATA[Adam Pope]]></dc:creator>
		<pubDate>Tue, 11 Nov 2025 14:21:31 +0000</pubDate>
				<category><![CDATA[Ruby on Rails]]></category>
		<guid isPermaLink="false">https://stormconsultancy.co.uk/?p=7640</guid>

					<description><![CDATA[<p>On a recent Ruby on Rails application build we wanted to jump ahead to a pre-release version to get early access to the new Lexxy rich text editor. We updated the Gemfile to require the beta version: gem “rails”, “8.1.0.beta1” and ran bundle update rails.&#160; We had one dependency, bullet , that was incompatible. As this &#8230; <a href="https://stormconsultancy.co.uk/blog/ruby-on-rails/an-unexpected-quirk-of-the-specifier-in-a-gemspec/">Continued</a></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/ruby-on-rails/an-unexpected-quirk-of-the-specifier-in-a-gemspec/">An unexpected quirk of the `&lt;` specifier in a gemspec</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">On a recent <a href="https://stormconsultancy.co.uk/ruby-on-rails/" target="_blank" rel="noreferrer noopener">Ruby on Rails application build</a> we wanted to jump ahead to a pre-release version to get early access to the new <a href="https://dev.37signals.com/announcing-lexxy-a-new-rich-text-editor-for-rails/" target="_blank" rel="noreferrer noopener">Lexxy</a> rich text editor.</p>



<p class="wp-block-paragraph">We updated the Gemfile to require the beta version:</p>



<p class="wp-block-paragraph"><code>gem “rails”, “8.1.0.beta1”</code></p>



<p class="wp-block-paragraph">and ran <code>bundle update rails</code>.&nbsp;</p>



<p class="wp-block-paragraph">We had one dependency, <code>bullet</code> , that was incompatible. As this was a development tool and not used in the app we commented it out, ran the update again and everything went perfectly.</p>



<p class="wp-block-paragraph">We ran <code>rails app:update</code>, followed the steps in the upgrade guide, and our app was running on the pre-release version.<br><br>A few weeks later, 8.1 was officially released. We immediately changed the Gemfile to require the final version:</p>



<p class="wp-block-paragraph"><code>gem “rails”, “~&gt; 8.1.0”&nbsp;</code></p>



<p class="wp-block-paragraph">and ran <code>bundle update rails</code>.&nbsp;</p>



<p class="wp-block-paragraph">Boom &#8211; loads of dependency mismatch errors. So what went wrong?</p>



<p class="wp-block-paragraph">Many major gems specify that they work only with the recently released version of Rails, or older, until the maintainers have tested compatibility with the latest release themselves. Often this is done in the gemspec file using:</p>



<p class="wp-block-paragraph"><code>s.add_dependency "rails", "&lt; 8.1"</code></p>



<p class="wp-block-paragraph">This seems reasonable, but how did it work when we installed the beta!?</p>



<p class="wp-block-paragraph">The answer is that in gemspec land <code>8.1.0.beta1 &lt; 8.1</code></p>



<p class="wp-block-paragraph">Pre-release versions are explicitly considered <em>less than</em> their stable counterparts.&nbsp;This ensures that when dependencies are resolved, stable releases are always treated as more recent than pre-releases ,and you can’t install a pre-release unless you explicitly ask for it.</p>



<p class="wp-block-paragraph">There’s no real way to work around this, unfortunately. You just have to wait for those gems to cut new releases that update the specification to<code> &lt; 8.2</code>.&nbsp;In this case we were ready to roll within a couple of days.</p>



<p class="wp-block-paragraph">It’s also worth remembering that if you do install a pre-release version of Rails, you might be able to successfully install other gems that don’t actually work with that version, because the dependency specification passes inadvertently. <br><br>As ever with beta software, it’s to be used at your own risk. In our case the application hadn’t gone live yet, so it was a risk we were willing to take to play with the new features. Just be aware that if you&#8217;ve successfully upgraded to a pre-release, that doesn&#8217;t mean you&#8217;ve solved all the problems!<br><br>With 8.1 now released it’s a good time to think about your <a href="https://stormconsultancy.co.uk/blog/ruby-on-rails/time-to-check-your-rails-upgrade-plan/">Rails upgrade plan</a>. Storm’s developers perform <a href="https://stormconsultancy.co.uk/ruby-on-rails/specialist-services/ruby-on-rails-upgrades/">Rails upgrades</a> all the time. We can help update your application if you don’t have the resources or time to do so. We can take the stress out of the process and make sure your app stays secure. <a href="https://stormconsultancy.co.uk/contact/">Get in touch</a> and let’s have a chat.<br><br></p>



<div class="wp-block-group cta-row has-red-light-background-color has-background is-vertical is-content-justification-stretch is-nowrap is-layout-flex wp-container-core-group-is-layout-8360d6be wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-nowrap is-layout-flex wp-container-core-group-is-layout-6fe931d8 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized is-style-rounded"><img loading="lazy" decoding="async" width="360" height="360" src="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta.jpg" alt="" class="wp-image-7338" style="aspect-ratio:1;object-fit:cover;width:180px" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta.jpg 360w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta-150x150.jpg 150w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta-64x64.jpg 64w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta-128x128.jpg 128w" sizes="auto, (max-width: 360px) 100vw, 360px" /></figure>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="eyebrow-heading has-red-dark-color has-text-color has-link-color wp-elements-20e6dec9b13bc3f4c069eac01342d3d5 wp-block-paragraph">Efficient. Robust. Scalable. Secure.</p>



<h3 class="wp-block-heading">Want to know more about Ruby on Rails?</h3>
</div>
</div>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-navy-color has-text-color has-link-color wp-elements-75ac6bd2f75f4b43ef4d487baa43cb48 wp-block-paragraph">Whether you’re a start-up or you’re looking for an agency to take on your existing Rails app, we’re here to help you.</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="/ruby-on-rails/">Find out more</a></div>
</div>
</div>
</div>
<p>The post <a href="https://stormconsultancy.co.uk/blog/ruby-on-rails/an-unexpected-quirk-of-the-specifier-in-a-gemspec/">An unexpected quirk of the `&lt;` specifier in a gemspec</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7640</post-id>	</item>
		<item>
		<title>Rails 8.1 released: Time to check your upgrade plan</title>
		<link>https://stormconsultancy.co.uk/blog/ruby-on-rails/time-to-check-your-rails-upgrade-plan/</link>
		
		<dc:creator><![CDATA[Adam Pope]]></dc:creator>
		<pubDate>Tue, 04 Nov 2025 11:51:36 +0000</pubDate>
				<category><![CDATA[Ruby on Rails]]></category>
		<guid isPermaLink="false">https://stormconsultancy.co.uk/?p=7639</guid>

					<description><![CDATA[<p>Rails 8.1 has officially landed! Announced on October 24th, it brings with it a host of excellent updates, including Lexxy– a slick, modern new rich text editor – and a much more reliable way of handling batch processing through Active Job Continuations. In short: Rails just got better, faster, and even more productive to work &#8230; <a href="https://stormconsultancy.co.uk/blog/ruby-on-rails/time-to-check-your-rails-upgrade-plan/">Continued</a></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/ruby-on-rails/time-to-check-your-rails-upgrade-plan/">Rails 8.1 released: Time to check your upgrade plan</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Rails 8.1 has officially landed! </p>



<p class="wp-block-paragraph"><a href="https://rubyonrails.org/2025/10/24/this-week-in-rails" target="_blank" rel="noreferrer noopener">Announced on October 24th</a>, it brings with it a host of excellent updates, including <a href="https://dev.37signals.com/announcing-lexxy-a-new-rich-text-editor-for-rails/" target="_blank" rel="noreferrer noopener">Lexxy</a>– a slick, modern new rich text editor – and a much more reliable way of handling batch processing through <a href="https://rubyonrails.org/2025/5/30/this-week-in-rails" target="_blank" rel="noreferrer noopener">Active Job Continuations</a>. In short: Rails just got better, faster, and even more productive to work with.</p>



<p class="wp-block-paragraph">On the back of this release, and following their <a href="https://rubyonrails.org/maintenance" target="_blank" rel="noreferrer noopener">maintenance policy</a>, the Rails core team has now confirmed that <a href="https://rubyonrails.org/2025/10/29/new-rails-releases-and-end-of-support-announcement" target="_blank" rel="noreferrer noopener">version 7.1 is officially end-of-life</a>. That means they will no longer release security updates or bug fixes and it&#8217;s time to upgrade your old Rails apps.</p>



<p class="wp-block-paragraph">Now, while it’s been some time since Rails has had a major security issue, it’s still essential to stay up to date. Researchers discover new attack methods all the time that require new defences, and problems in your app’s other dependencies can introduce vulnerabilities that you can&#8217;t easily patch if those gems rely on a modern Rails version. </p>



<p class="wp-block-paragraph">Keeping your Rails version current is one of the most effective ways to keep your application secure and stable.</p>



<p class="wp-block-paragraph">If your app is now running an unsupported Rails version you don’t have to tackle upgrades alone. If your team is flat out working on feature delivery, or if you don’t have ongoing support in place, Storm can help. We handle <a href="https://stormconsultancy.co.uk/ruby-on-rails/specialist-services/ruby-on-rails-upgrades/" target="_blank" rel="noreferrer noopener">Rails upgrades</a> all the time – assessing the size, complexity, and age of your app so you know exactly what to expect before we begin. We can take the stress out of the process and make sure your app stays secure. <a href="https://stormconsultancy.co.uk/contact/">Get in touch</a> and let’s have a chat.</p>



<h2 class="wp-block-heading">Planning your ongoing Rails upgrades </h2>



<p class="wp-block-paragraph">As part of this latest announcement, Rails has also extended support for version 8.0 by six months (since 8.1 arrived a little behind schedule). So, 8.0 will now receive bug fixes until <strong>May 7th, 2026</strong>, and security updates until <strong>November 7th, 2026</strong>.</p>



<p class="wp-block-paragraph">With new releases arriving roughly every six months, it’s more important than ever to have a clear maintenance plan. Small, regular upgrades are far easier and less risky. Waiting years and trying to leapfrog multiple major versions in one go can be painful.</p>



<p class="wp-block-paragraph">If you’d like help keeping your Rails app healthy, Storm offers affordable <a href="https://stormconsultancy.co.uk/ruby-on-rails/specialist-services/surge-capacity/">ongoing support packages</a> that can start from just half a developer day a month. It’s a simple, reliable way to make sure your app stays secure and running smoothly.</p>



<p class="wp-block-paragraph"></p>



<div class="wp-block-group cta-row has-red-light-background-color has-background is-vertical is-content-justification-stretch is-nowrap is-layout-flex wp-container-core-group-is-layout-8360d6be wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-nowrap is-layout-flex wp-container-core-group-is-layout-6fe931d8 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized is-style-rounded"><img loading="lazy" decoding="async" width="360" height="360" src="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta.jpg" alt="" class="wp-image-7338" style="aspect-ratio:1;object-fit:cover;width:180px" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta.jpg 360w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta-150x150.jpg 150w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta-64x64.jpg 64w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/rails-blog-cta-128x128.jpg 128w" sizes="auto, (max-width: 360px) 100vw, 360px" /></figure>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="eyebrow-heading has-red-dark-color has-text-color has-link-color wp-elements-20e6dec9b13bc3f4c069eac01342d3d5 wp-block-paragraph">Efficient. Robust. Scalable. Secure.</p>



<h3 class="wp-block-heading">Want to know more about Ruby on Rails?</h3>
</div>
</div>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-navy-color has-text-color has-link-color wp-elements-75ac6bd2f75f4b43ef4d487baa43cb48 wp-block-paragraph">Whether you’re a start-up or you’re looking for an agency to take on your existing Rails app, we’re here to help you.</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="/ruby-on-rails/">Find out more</a></div>
</div>
</div>
</div>
<p>The post <a href="https://stormconsultancy.co.uk/blog/ruby-on-rails/time-to-check-your-rails-upgrade-plan/">Rails 8.1 released: Time to check your upgrade plan</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7639</post-id>	</item>
		<item>
		<title>The importance of having and maintaining a good marketing website</title>
		<link>https://stormconsultancy.co.uk/blog/design/the-importance-of-having-and-maintaining-a-good-marketing-website/</link>
		
		<dc:creator><![CDATA[Claudia Ghadimi]]></dc:creator>
		<pubDate>Wed, 28 May 2025 13:47:51 +0000</pubDate>
				<category><![CDATA[Business Insights]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Tech Tips]]></category>
		<guid isPermaLink="false">https://stormconsultancy.co.uk/?p=7537</guid>

					<description><![CDATA[<p>In today&#8217;s digital-first world, your marketing website is often the first and sometimes the only interaction a potential customer has with your company. It&#8217;s your digital storefront, your salesperson, and your brand ambassador all rolled into one. Yet, many businesses treat their websites as static assets, launching them with fanfare and then letting them sit &#8230; <a href="https://stormconsultancy.co.uk/blog/design/the-importance-of-having-and-maintaining-a-good-marketing-website/">Continued</a></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/design/the-importance-of-having-and-maintaining-a-good-marketing-website/">The importance of having and maintaining a good marketing website</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In today&#8217;s digital-first world, your marketing website is often the first and sometimes the only interaction a potential customer has with your company. It&#8217;s your digital storefront, your salesperson, and your brand ambassador all rolled into one. Yet, many businesses treat their websites as static assets, launching them with fanfare and then letting them sit untouched for months or even years.</p>



<p class="wp-block-paragraph">Here’s why that’s a mistake and why maintaining a good marketing website should be a top priority.</p>



<h2 class="wp-block-heading">First impressions matter</h2>



<p class="wp-block-paragraph">Your website is the face of your brand. A dated design, broken links, or slow loading times can signal to visitors that your business may be just as out-of-touch. On the other hand, a clean, modern, and intuitive site creates trust and encourages deeper engagement. Whether you&#8217;re a startup or a well-established company, a professional website tells your audience that you&#8217;re serious, credible, and ready to serve.</p>



<h2 class="wp-block-heading">Your website supports the entire marketing funnel</h2>



<p class="wp-block-paragraph">From awareness to consideration to decision, your website plays a role at every stage of the customer journey. Clear messaging, compelling calls-to-action, and easy navigation help guide visitors toward conversion. A well-maintained site is optimised for lead capture, sales, and customer retention driving real business results.</p>



<h2 class="wp-block-heading">Adaptability = competitive edge</h2>



<p class="wp-block-paragraph">Markets change. Customer behaviour evolves. New technologies emerge. Your website should evolve too. Whether you&#8217;re updating your brand, launching new products, or shifting your value proposition, your website should reflect these changes quickly and clearly. Businesses that adapt fast stay ahead and those that don’t risk falling behind.</p>



<h2 class="wp-block-heading">User experience impacts conversions</h2>



<p class="wp-block-paragraph">A confusing layout, clunky forms, or non-responsive design can frustrate users and drive them away. In contrast, a fast, seamless, and mobile-friendly experience keeps visitors engaged and encourages them to take action. Ongoing maintenance ensures your site remains usable and conversion-focused across all devices.</p>



<h2 class="wp-block-heading">Security builds trust</h2>



<p class="wp-block-paragraph">Websites that aren’t regularly maintained are vulnerable to security threats. A hacked site can damage your reputation, erode customer trust, and even lead to data breaches. Routine updates, SSL certificates, and monitoring tools help keep your website secure and your brand credible.</p>



<h2 class="wp-block-heading">Final thoughts</h2>



<p class="wp-block-paragraph">Your marketing website isn’t just a digital brochure, it&#8217;s a living, breathing asset that drives your brand, your reputation, and your revenue. By treating it as a dynamic platform that deserves regular care and attention, you set your business up for sustained growth and success.</p>



<p class="wp-block-paragraph">Invest in regular updates, <a href="https://stormconsultancy.co.uk/wordpress/">accessibility audits</a> and <a href="https://stormconsultancy.co.uk/wordpress/">security</a>. Monitor performance and stay current. Your website and your bottom line will thank you.</p>



<div class="wp-block-group cta-row has-blue-pale-background-color has-background is-vertical is-content-justification-stretch is-nowrap is-layout-flex wp-container-core-group-is-layout-8360d6be wp-block-group-is-layout-flex">
<div class="wp-block-group is-vertical is-nowrap is-layout-flex wp-container-core-group-is-layout-6fe931d8 wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full is-resized is-style-rounded"><img loading="lazy" decoding="async" width="360" height="360" src="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wordpress-blog-cta.jpg" alt="" class="wp-image-7322" style="aspect-ratio:1;object-fit:cover;width:180px" srcset="https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wordpress-blog-cta.jpg 360w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wordpress-blog-cta-150x150.jpg 150w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wordpress-blog-cta-64x64.jpg 64w, https://stormconsultancy.co.uk/wp-content/uploads/2024/10/wordpress-blog-cta-128x128.jpg 128w" sizes="auto, (max-width: 360px) 100vw, 360px" /></figure>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="eyebrow-heading has-blue-default-color has-text-color has-link-color wp-elements-df2e01ce0cb70051caf01d18f5274ce8 wp-block-paragraph">Highly customisable. Globally loved.</p>



<h3 class="wp-block-heading">Could a WordPress website be perfect for you?</h3>
</div>
</div>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-navy-color has-text-color has-link-color wp-elements-4d0a3ea51af80edc7ef047707c93dc18 wp-block-paragraph">Whether you&#8217;re a start-up or have an existing website and are in need of a refresh, we&#8217;re here to help you.</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://stormconsultancy.co.uk/wordpress/">Find out more</a></div>
</div>
</div>
</div>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/design/the-importance-of-having-and-maintaining-a-good-marketing-website/">The importance of having and maintaining a good marketing website</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7537</post-id>	</item>
		<item>
		<title>Beyond the prototype: why hiring a software developer is key to scaling your product</title>
		<link>https://stormconsultancy.co.uk/blog/techtips/beyond-the-prototype-why-hiring-a-software-developer-is-key-to-scaling-your-product/</link>
		
		<dc:creator><![CDATA[David Kelly]]></dc:creator>
		<pubDate>Wed, 02 Apr 2025 13:39:37 +0000</pubDate>
				<category><![CDATA[Business Insights]]></category>
		<category><![CDATA[Tech Tips]]></category>
		<guid isPermaLink="false">https://stormconsultancy.co.uk/?p=7484</guid>

					<description><![CDATA[<p>Bringing an idea to life is no small feat. In the early days, you might have pulled together a working prototype (perhaps with the help of an AI, or even through a no-code platform). But as you move past proof of concept and begin to seek real users or investors, the game changes. In this &#8230; <a href="https://stormconsultancy.co.uk/blog/techtips/beyond-the-prototype-why-hiring-a-software-developer-is-key-to-scaling-your-product/">Continued</a></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/techtips/beyond-the-prototype-why-hiring-a-software-developer-is-key-to-scaling-your-product/">Beyond the prototype: why hiring a software developer is key to scaling your product</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Bringing an idea to life is no small feat. In the early days, you might have pulled together a working prototype (perhaps with the help of an AI, or even through a no-code platform). But as you move past proof of concept and begin to seek real users or investors, the game changes. In this post, we’ll explore why transitioning from DIY prototyping to working with an experienced software developer can set you on a path to sustainable growth.</p>



<p class="wp-block-paragraph">We’ll cover:</p>



<ul class="wp-block-list">
<li>The limitations of prototypes and early MVPs</li>



<li>How developers ensure scalable, secure, and maintainable systems</li>



<li>When to make the transition (and how to do it cost-effectively)</li>
</ul>



<p class="wp-block-paragraph">Whether you’re a founder with technical chops or a non-technical entrepreneur, understanding how and when to involve developers can be the difference between a product that fizzles out and one that scales successfully.</p>



<h2 class="wp-block-heading">Prototypes are great &#8211; until they aren’t</h2>



<p class="wp-block-paragraph">Early-stage prototypes serve an important purpose: they prove that your concept can work and offer a tangible product for early feedback. But most prototypes aren’t built for longevity. They’re often assembled quickly, with shortcuts that might be fine in the short term but could lead to long-term technical debt.</p>



<p class="wp-block-paragraph">Some common limitations of early prototypes include:</p>



<ul class="wp-block-list">
<li><strong>Limited scalability:</strong> They work well for a handful of users but struggle when usage grows.</li>



<li><strong>Security risks:</strong> Quick solutions often leave vulnerabilities unaddressed.</li>



<li><strong>Maintenance headaches:</strong> As the codebase grows, it becomes harder to manage and adapt without refactoring or rewriting portions of the code.</li>
</ul>



<p class="wp-block-paragraph">This is where bringing in a software developer can help.</p>



<h2 class="wp-block-heading">What a development partner brings to the table beyond code</h2>



<p class="wp-block-paragraph">It’s easy to think of a development partner as a team who ’just writes code’ &#8211; but a good partner will do much more. Setting aside what they can bring in terms of service design, creative and UX, the technical team will lay down the foundation for a product that can grow, adapt, and evolve as you get feedback and scale.</p>



<p class="wp-block-paragraph">Here’s what to expect:</p>



<ol class="wp-block-list">
<li><strong>Architecting for scalability:</strong> Seasoned developers can design databases, APIs, and infrastructure that support growth without requiring constant rework. This is essential if you plan to scale to hundreds or thousands of users.</li>



<li><strong>Code quality and maintainability:</strong> A properly structured codebase means your product can be maintained and upgraded by future developers without creating headaches or delays.</li>



<li><strong>Security and compliance:</strong> As you onboard users and collect sensitive data, security can no longer be an afterthought. Seasoned developers will ensure your product is built with safeguards and is compliant with regulations like GDPR or CCPA if necessary.</li>



<li><strong>Automated testing and reliability:</strong> Beyond just writing code, developers implement testing frameworks to ensure that updates won’t break key features &#8211; a lifesaver when you’re iterating quickly.</li>



<li><strong>Efficiency gains:</strong> Developers know how to optimise performance, reduce latency, and ensure that your app is fast and responsive &#8211; a critical factor for user retention.</li>
</ol>



<h2 class="wp-block-heading">When should you make the transition?</h2>



<p class="wp-block-paragraph">Timing matters. If you jump too early, you could end up spending resources on features that still need validation. But wait too long, and you risk stalling growth due to performance issues or patchwork solutions that are difficult to maintain.</p>



<p class="wp-block-paragraph">Consider engaging a development partner if:</p>



<ul class="wp-block-list">
<li>You’ve validated your core product with early users.</li>



<li>Your prototype is starting to show performance or scalability issues.</li>



<li>You’re ready to onboard larger groups of users or pursue funding.</li>
</ul>



<h2 class="wp-block-heading">Working with development partners: Tips for non-technical founders</h2>



<p class="wp-block-paragraph">Engaging a partner can feel overwhelming if you don’t have a technical background, but you don’t need to be an expert to make the right decisions. Here are some tips:</p>



<ul class="wp-block-list">
<li><strong>Remember values alignment: </strong>Technical skill is abundant, but a true values alignment…an organisation which gets your mission, your vision, and importantly how you want to go about achieving it &#8211; now that can be priceless.</li>



<li><strong>Communicate your business goals:</strong> A good partner will want context, they’ll build better solutions if they understand where you’re headed.</li>



<li><strong>Discuss agile vs fixed price: </strong>If you have a solid prototype, you may be best placed to aim for a fixed cost deliverable, however if you’re still exploring the best solution then a more flexible agile approach will usually yield better value for money&nbsp;</li>



<li><strong>Don’t overlook user experience:</strong> Often when you have a prototype it can be tempting to focus on building out technical features, however prototypes rarely have exceptional user experience &#8211; so ensure you look for a partner who can not only build your ‘next version’ but can make a product which is a delight to use.</li>



<li><strong>Expect challenge:</strong> Great development partners will want to understand underlying problems and how solutions present within a prototype have been arrived at.&nbsp; They have years of experience across a wide range of industries and will be looking to challenge your thinking to deliver an even better product. Be worried if your developer doesn&#8217;t challenge you!<br></li>
</ul>



<h2 class="wp-block-heading">The ROI of a solid foundation</h2>



<p class="wp-block-paragraph">Bringing in a development partner isn’t just about writing code &#8211; it’s about building a relationship which overtime can help your product grow in a way that is best for your business. The investment you make now in scalability, security, and quality will save you time and money down the road.</p>



<p class="wp-block-paragraph">Many successful startups can trace their growth back to the moment they transitioned from scrappy prototypes to well-built products. If you’re at this stage, take it as a sign that you’re on the right track. With the right developer by your side, you’ll be ready to tackle your next growth milestone.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://stormconsultancy.co.uk/blog/techtips/beyond-the-prototype-why-hiring-a-software-developer-is-key-to-scaling-your-product/">Beyond the prototype: why hiring a software developer is key to scaling your product</a> appeared first on <a href="https://stormconsultancy.co.uk">Storm Consultancy - Your Digital Technology Agency</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7484</post-id>	</item>
	</channel>
</rss>
