Get faster build times for content updates on your large content Astro site

When building headless, there are generally two approaches, Static Site Generation (SSG) and Server Side Rendering (SSR). The essential difference between these two approaches is when the static content is generated. For SSG, all of the site content is turned into static files at the time the site is built. For SSR, the files are turned into static files as they’re requested – once a file has been requested, it becomes a static file for all future requests (visitors) to that page.

Each approach has its own drawbacks and benefits, but I love SSG for our headless websites. They make for the most performant sites and with a framework like Astro, we can capitalize on some of the benefits of SSR not usually available with SSG (ex. Islands).

The biggest drawback with SSG is that the entire site has to be built at build time. If you have a site with a couple dozen pages and a few hundred blog posts, SSG builds wonderfully. However, a site with hundreds of pages, thousands of posts, and thousands of terms, can take forever to build. Almost an hour in some of our test cases. These builds are not only slow, they can cause performance issues on the server providing the content (WordPress in most of our cases) or memory issues on the server building the site (Netlify in most of our cases).

We can do better than that!

When we need to do a complete site build, there are some limited options we do have to help us improve performance. We can batch our request and cache our source endpoints (WPGraphQL Smart Cache) as well as utilize Astro data stores in the content loader.

But, this can still be a drag for content editors wanting a quick publish experience from their CMS. Getting a build that fully utilizes our cached data store in Astro while updating it with just the latest published / modified content is critical.

Getting incremental with Astro

So, for our objectives we need to:

  • have a way to trigger a build from content updates within WordPress
  • have builds triggered there tell our code that this is a content update
  • only update modified content within our data store
  • keep the ability for full data rebuilds when code updates trigger a deploy

Triggering builds within WordPress

We can trigger builds within Netlify via a webhook. When updating content, you can hook that POST request to your webhook via the save_post action within WordPress. You could also use a plugin such as JAMstack Deployments to quickly configure you build hooks and build image URLs.

For the build hooks, Netlify does allow us to append query parameters to them to modify some of their default behavior. For our builds triggered via WordPress, I append the parameter for trigger_title which will update how that deploy displays within our Netlify dashboard as well as be accessible within our Astro file for our content loader. So, the build hook we trigger specifically from WordPress would look like:

https://api.netlify.com/build_hooks/${hook_id}?trigger_title="wp-content-sync"

When that hook is triggered, we can access the value using the INCOMING_HOOK_TITLE via the Astro import meta:

const INCOMING_HOOK_TITLE = import.meta.env.INCOMING_HOOK_TITLE
  ? import.meta.env.INCOMING_HOOK_TITLE
  : "";

With this, we can conditionally modify our GraphQL requests to call just the last modified posts and not iterate our request to get all of the posts (like we would for a full site build).

const postLoader = async (after = null, results = []) => {
  let hasNextPage = true;

  const query = `
    query GetPosts($first: Int!, $after: String, $orderby: PostObjectsConnectionOrderbyEnum! ) {
      posts( where: {orderby: {field: $orderby, order: DESC}}, first: $first, after: $after ) {
        pageInfo {
          hasNextPage
          endCursor
        }
        nodes {
          id
          title
          slug
          ... query
        }
      }
    }`;

  const variables = {
    first: 2,
    after: after,
    orderby: INCOMING_HOOK_TITLE != "wp-content-sync" ? "MODIFIED" : "DATE",
  };

  const url = "https://example.com/graphql";

  try {
    const response = await fetch(url, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ query, variables }),
    });

    const result = await response.json();

    const posts = result.data.posts.nodes;
    const pageInfo = result.data.posts.pageInfo;

    hasNextPage = pageInfo.hasNextPage;
    after = pageInfo.endCursor;

    results.push(...posts);

    if (INCOMING_HOOK_TITLE != "wp-content-sync") {
      if (hasNextPage) {
        return postLoader(after, results);
      }
    }

    return results;
  } catch (error) {
    console.error("Error fetching posts:", error);
    throw error;
  }
};

Pulling only this latest content, we can bring the build time for a site that normally take 30+ minutes to build with thousands of pieces of content plus archives down to just a couple of minutes while still maintaining full site builds when pushing code updates.

Behind the scenes of the new LimeCuda.com

We’re excited to have our new website launched! It was way overdue but also something that will be a continual work in progress. We’ll be updating here as we continue to embrace this new site and new strategies for our own content and brand.

Under the hood

I’m currently writing this blog post in WordPress. But, if you were to inspect this page, you wouldn’t see anything you’d expect to see from a WordPress site.

In a traditional site managed by a content management system (CMS) like WordPress, the frontend of the site (the part that you’re viewing right now) is directly tied to the backend (where the content is created and edited). They live on the same server within the same application.

Our new site is headless.

This means that the frontend is completely separated from the backend. Yes, I am writing this blog post in WordPress, but you’re not accessing this content via WordPress. You see, this website is a fully static site. You’re seeing a simple HTML file being served up by our Netlify server. When we update or add new content in WordPress, these static pages are built, pulling JSON data about our content from WordPress and creating static HTML files that are served up to you!

Our framework of choice for this frontend? Astro.

But what does it all mean?!

This might not mean anything to you, and that’s OK! For us, it means flexibility for content and data sourcing, super fast site loading, and an overall more secure website.

Flexible content sourcing

The flexibility in data sourcing is one of my favorite parts! For this site we are:

  • Sourcing data for blog posts from our old WordPress site for LimeCuda
  • Sourcing pages from a new WordPress site where we have Gutenberg and Kadence working together to make building pages with our new layouts quick & seamless. The data for the blocks is pulled into components for each within our Astro project.
  • Case Studies driven by raw JSON files. No real reason… I just wanted to test it out with Astro’s content loader. And it works great! JSON isn’t a language you really write in. But, in this case, I don’t hate it and it lays a foundation which allows us to pull a case study from almost any builder application we may choose to adopt.

Speed

Since the files we’re serving up don’t have to pull data from a server, that instantly reduces the load time. This, along with the optimized components for serving images and delivering assets provided with a framework like Astro, makes building fast websites much easier than fighting cache settings in a conventional website.

Better security

Since the site accessed by the public is detached from the application managing the content, there isn’t a direct link between them. In a traditional site structure, the code presenting the frontend is all included in the potential attack vector for accessing your primary site application.

Ready to go headless?

Wondering if this headless stuff might work for your website too? Drop us a line and we’ll chat about whether it’s a good fit for your project – no pressure, we’re just web nerds excited to talk shop.

Thoughts on AI for the hesitant adopter

It’s everywhere. If you listen to the futurists, it will completely upend all industries and at all levels. How will it upend? We’re not sure yet. Some speculate that the rise of AI will lead to full employment of everyone while others claim the aim is 100% unemployment with all of us replaced by the machine.

With AI invading conversations in all industries and the options to implement growing rapidly, almost everyone has their thoughts on AI. And that is to be expected. But, the interesting thing with AI, it seems everyone also has feelings about it. And these feelings can be strong even if our actions don’t align with our feelings. A new study shows many Gen Z adopters are heavily utilizing AI for work while also fearing AI will replace them.

How are you feeling about AI?

When you hear “AI”, what do you feel? Are you excited about the opportunities it brings? Do you imagine all the annoying tasks leaving your plate? Do you see efficiency, easier access to information, and automation of all the things? Or, are you fearful of what it means for your business, for your job, for your entire industry? Do you become anxious about what providing for your family is going to look like in 5 years? In 2 years? Next year?!

AI doesn’t care how you feel about it

If you’re on the excited side of the spectrum, you’re already using AI tools and working on how to integrate them into your workflows. That’s great, keep it up!

If you lean toward the fearful side of the spectrum, you might need to hear some hard encouragement. Your feelings about it don’t matter. No matter what the actual impact of AI ends up being in 5 years, you need to start engaging with it today. If you are in a job that can utilize AI, you will need to either figure it out or get left behind. 

Continuing to avoid AI will be like trying to assemble a car with a screwdriver when an electric drill is available to you. Yes, it is possible, but you are going to be at a disadvantage compared to someone getting a more efficient, higher quality result with AI. 

Where to start with AI?

If you’re a reluctant adopter, let me encourage you to start small.

  • Use ChatGPT to write an email. Put the idea for the email, some thoughts about the tone you want to convey, and what you hope the response to be. Then, let the bot write your first draft. Clean it up to add back some of your own style and send it on!
  • Next time you have something that is a repetitive or annoying task, Google an AI solution for it (or have AI give you suggestions!). Within the last week, I’ve found new AI tools, or created new tools using AI, to do everything from enhance a blurry video, generate 3d print files, convert PDFs into text to feed an AI-driven legal search, and automate screen record videos for the case studies on our new website. All of these would have been much more difficult, or even just forgotten about, prior to using AI.

If you’re interested in using AI for your business but not sure where to start, reach out for a casual conversation. We’d love to geek out over ideas for your business and AI.

Don’t Let Website Visitors Lose the Scent

One of my dear mentors hammered down this concept in a class on “E-Commerce”. When people come to your site there is a “scent” they are following, much like a bloodhound. Within seconds of coming to your website they must see things that tell them they are on the right track

Make sure it is easy for them to follow the scent!

 

Words Matter.

 

Imagery Matters.

Don’t let them lose the scent!

 

 

How to Title Your Project Portfolio Page

1. Clarity Over Creativity

Your title should instantly communicate what the page is about. Avoid vague or overly clever names that might confuse visitors.

2. Use Industry-Specific Keywords

Think about how potential clients or employers search for work like yours. Including relevant terms helps with SEO and makes it easier for users to find your page.

Examples:

  • “Award-Winning Branding Projects”
  • “SaaS Website Design Portfolio”
  • “Modern Residential Architecture Showcase”

3. Highlight Your Niche or Strengths

If your work is specialized, your title should reflect that to attract the right audience.

Examples:

  • “E-Commerce UX Design Portfolio”
  • “Nonprofit Marketing Campaigns”
  • “Luxury Home Interior Design Showcase”

4. Consider Adding Social Proof

If you have impressive credentials, consider including them to build credibility.

Examples:

  • “Fortune 500 Marketing Campaigns Portfolio”
  • “Award-Winning Animation Projects”
  • “500+ Successful Web Designs”

5. Keep It Concise and Scannable

A long, cluttered title may lose impact. Stick to essential words that clearly convey your message.

6. Portfolio Naming Ideas

  • Our Work – this is a pretty nice collective term (we are going to be using it on our site) but it may not be the vibe you want.
  • Work – this is one of the more common in the industry and is rather modern
  • Portfolio – feels maybe too artistic to me and more fitting for residential side
  • Projects – this to me gives a more robust feeling. It isn’t just a portfolio piece with pictures but hints at duration, heavy involvement, planning, management etc.
  • Design Portfolio – artsy and clear

Keep in mind  the URL, which should match the page title e.g. .net/projects  and .net/project/name-here

Think about if the singular form that you’ve chosen still feels as right as the archive / showcase page.

7. Use of “our” and “us”

e.g. Our Work, About Us, Contact Us,
This can be more human, relational, and purposeful but it is also not as formal, clean, and professional. It is entirely a legitimate direction, it is just on the Friendly side of the continuum with stiff being the opposite end.

Your portfolio title is more than just a label—it’s the first impression potential clients or employers have of your work. A clear, keyword-rich title improves discoverability, sets expectations, and helps position your expertise. Take the time to craft a name that reflects your strengths and makes it easy for the right audience to find you.

They’ve read your blog post, now what?

What are the “next steps” we should be encouraging the users to take after they read a post?
If so, does that vary by post?

This question can impact some design and functionality but more importantly it could impact your business’s bottom line.

They’ve read the content, found it of value, now what? Do we want them to…

  • Leave a comment
  • Share on Social Media
  • Email the author
  • Go check out a product or product category
  • Sign up for an email blast
  • Join a Social community (e.g. LinkedIn, Twitter, Facebook)
  • Trade their email for a free download
  • Visit another related site
  • Become a contributor

The answer(s) to what you want a user to do after reading your content are going to be different for everyone.  BUT whatever the case, this is a very very important question to wrestle with.

A great blog post doesn’t just inform—it guides the reader toward what to do next. Without a clear next step, even the most engaging content can become a dead end. Whether it’s prompting readers to explore related articles, download a resource, sign up for a newsletter, or take action on your product or service, a well-placed call to action keeps the momentum going.

Every blog post should have a purpose beyond just being read—think of it as the start of a conversation, not the end. By giving readers a logical next step, you turn passive readers into engaged users and, ultimately, into loyal customers.

Blogging without having a “next step” lined up for a user is a wasted opportunity.

 

Image SEO – How to Help your Images Rank Well

1. Use Descriptive, Keyword-Rich Filenames

Instead of uploading a file named DSC3856223.jpg , name it using keywords. If this was a post on blue widgets I would name it blue-widgets.jpg

Some rules for naming image files… (these also apply to URLs in general)

  • Always use all lowercase. Some servers treat capitals differently so Blue-Widgets.jpg may be a different file than blue-widgets.jpg.  K.I.S.S.
  • Use a dash “-” to denote a space. If you have spaces in your URL/file then those are converted into junky looking HTML like, %20

 Before uploading an image, rename it with a clear, relevant filename that includes keywords.

2. Optimize Alt Text for Accessibility & SEO

Alt text helps search engines understand the image and improves accessibility for visually impaired users.

<img src="healthy-breakfast.jpg" alt="A bowl of oatmeal with fresh berries and almonds">

3. Choose the Right File Format

WebP – A modern format that provides high-quality images at smaller file sizes.

JPEG – Best for photos and images with lots of color.

PNG – Ideal for images requiring transparency but larger in size.

4. Compress the images

We’ve written an entire post on How to Properly Pre-Process and Optimize Images for WordPress.

Our favorite tool for compressing and resizing is Kraken.io

5. Surround Images with Relevant Content

Google considers the text around an image to determine its relevance. Ensure your images are placed within meaningful content that supports them.

Optimizing images for SEO isn’t just about making them look good—it’s about ensuring they enhance your site’s visibility, load quickly, and improve user experience. By using descriptive filenames, keyword-rich alt text, and the right file formats, you help search engines understand and rank your images better. Compressing images, leveraging responsive design, and using a CDN ensure fast load times, while structured data and image sitemaps further boost discoverability. When done right, image SEO can drive more traffic, improve rankings, and enhance user engagement.

 

 

Compiling the PERFECT Support Request for Your Web Dev Agency

Being in this game for over a decade with hundreds of clients, we’ve seen a support request or two in our time. In a given week we get dozens of requests.

How well-pulled-together the request is, directly equates to how quickly we can resolve.

Here’s how to compile the PERFECT support request for us or any Web Development / Design or Marketing agency.

1. Details, Details, Details

Sometimes we have to waste a few round-robins of emails just figuring out basic details. Let’s play baseball, not ping pong 🙂

State the need / issue as clearly as possible in the email subject line.

In the email body please give us:

  • Thorough description of the issue / need
  • URLs involved
  • Steps to reproduce

2. Your Browser / Operating System

For many bugs we need to know what browser you are using and what operating system. Does that sound like mumbo jumbo? Here are some examples.

  • Chrome / Windows 10
  • Safari / Mac OS Catalina
  • FireFox / Ubuntu
  • Chrome / Chromebook
  • Safari / iPhone 8+

If we aren’t able to replicate the issue it can be really challenging to solve.

3. Cleared cache?

Cache is the bane of our existence as web developers. At multiple levels your computer / browser, our server all “cache” (store) parts of sites in an effort to speed up the experience. Sometimes these can get stuck or need to be proactively cleared.

The ultimate is completely clearing your browser cache but sometimes you can just reload / refresh a page or go a step further with a “hard refresh”…

  • ctrl + f5 on most Window’s browsers
  • command + r or command + shift + r on Mac

Clear cache before reaching out and then, if the issue persists, let us know you cleared your cache already.

4. Give us a sense of urgency and timeline

Some weeks we live like a M*A*S*H unit playing triage. You’ll be glad we prioritize critical business-affecting fixes over trivial ones if you ever find yourself in an urgent situation.

Doctor Mallard: “Get this website on the operating table now! Nurse, get me 3 lines of CSS and a shot of espresso. “

If we know when you are expecting help we can more easily fit you in. Our retainer clients who have us reserved for a certain number of hours a month get our most immediate attention but we do our best to attend to all issues with expedience.

5. Be nice

If you are one of our clients I don’t even need to say this as you guys rock.

Remember on the other end of the email is a human being, much like yourself, with all kinds of life pressures, workload to balance, and daily stressors.

It makes our jobs easier knowing you appreciate our efforts and value our time.

Be kind and remember that the brevity of email, while efficient, doesn’t do much to convey tone or attitude. Be generous with the emojis and animated gifs, they brighten our day 🙂

Josh’s Reflections on the First 10 Years

LimeCuda just celebrated our 10 year anniversary, read more and see some interesting stats.

I watched the founding of LimeCuda 10 years ago from afar. I was working at a CPA firm in Macon, GA when Blake and a friend from College, founded LimeCuda as part of a business plan class / competition. Blake has a great history of the LimeCuda biz plan competition win here.

Blake and I met during our early high school (translate: awkward) years and became close friends. We worked building Mountain Laurel Railings and doing construction / renovation in Murphy, NC.

My Early Years

In 2010 I started doing “web design” by helping my then girlfriend (now wife) with a website for her photography business. The coolest thing I had done was click “Publish” on my new Macbook’s iWeb. The whole world could now see something I had created.

I had seen the work Blake was doing but didn’t realize there was overlap with what I was doing. He started with a focus on “SEO” and those letters meant nothing to me. When he realized my interest in the web, he pushed me to check out this WordPress thing. I did and it became a slowly building love.

I Was A Little Naive

After doing a few projects, I naively thought “I can do this” and went full-time, self-employed at the end of 2011. I was mistaken.

As a newlywed trying to support a family in an industry and skill with which I had little experience, I floundered. I made a couple hundred dollars a month while cutting my teeth at a theme shop, web customization shop, a marketing agency, and finally a large plugin / enterprise agency.

It was a long, hard battle that we like to refer to as my “college” years for this industry. It was a real school of hard knocks as I learned what it meant to not only do the work we do but also manage clients, proposals, contracts, cash-flow – everything, on my own.

Joining LimeCuda

Throughout this time, Blake and I always stayed in touch and worked together on many projects. I was a contractor and LimeCuda was one of my freelance clients.

Blake and I have known each other since we were 14. We started working for his dad early on and had a very independent work ethic at that time. We’ve always had an ability to lean into each other and naturally push each other up and along whenever needed.

We already talked like an old, married couple with the best sort of open communication, and frank crotchety banter. So, we had the discussion in 2016 and decided to get hitched as partners in business.

Pushing the LimeCuda brand forward had already been my priority for a while. All my relationships and work became LimeCuda’s. Our mutual interests and skills complemented so well, I knew it was the best decision for me even before I became an owner / partner.

What We’ve Learned

Personally, and with LimeCuda, the last 10 years have brought some hard times as well as profitable times. We’ve been able to watch companies rise and fall around us and learn from those experiences.

There have been several decisions that I think have been critical to our survival:

  1. Keeping it simple. We’ve been intentionally slow to grow our own team. We want to be specialized in what we do while maintaining strong, professional relationships with others that are masters of the skills we lack. We’re not interested in building a large “agency” to meet momentary needs in our network.
  2. Doing right by people. We’ve worked hard to build great relationships with our clients. Part of that has been taking full, personal ownership over the success of projects we take on. We’re also open and honest with people when their project isn’t a good fit. Yes, we’ve had hiccups along the way, however we’ve made huge leaps in redeeming those relationships. We aim to always do right by people.
  3. Focusing on lifestyle & health. Money is secondary. Yes, we need to make money (and a certain amount) to support our families. However, having a healthy lifestyle has been made a priority. There is a need to have checks and balances to define what is enough when you have your own business. We could always make more and there is no one stopping us from that being the motivation. But the lifestyle is the biggest thing we can control when searching for happiness on this path compared to a traditional job.
  4. Trust. Blake and I have known each other more than half our lives. We built our work ethics together. Our worldviews and values were defined together. We can lean into each other as we have family troubles or illness. We can trust that the other is taking care of “their house” without worrying “are they doing enough”.

It would be naive to believe there aren’t many more lessons to be learned. But, I’m excited about the next 10 years and what the new decade has in store – good or bad.

What to Think About Before Building a New Website? Part 3: Rankings & Strategy

In this final post of the series we dive into the rankings and strategy of building a new website. Part 1 was on Branding & Design, Part 2 was on Sitemap & Content.

seo-ranking-tracking

Rankings & Strategy

SEARCH ENGINE OPTIMIZATION
We recommend starting to think about the phrases for which you should be ranking in Google. When identifying keywords think about…

  • Competition – are there other big sites already ranking for the term?
  • Volume – how often the term might be searched
  • Relevance – the more specific the keyphrase the lower the competition but the lower the volume as well (generally)

Especially early on, we recommend striving to rank for the most relevant and specific keywords. There will be less traffic, true, but it is better traffic! The competition should be lower as well so gaining traction with rankings is doable.

SOCIAL MEDIA
Are there Social Media pages to which you need to link? Should you be encouraging your content to be shared anywhere? e.g. LinkedIn, Facebook, Twitter, Instagram, Pinterest, etc.

EMAIL MARKETING
Email is still the most effective tool in most online marketing toolkits. You may need to consider how you will collect email signups and what service you will use to send and track bulk email.

One of our favorite tools for email marketing is MailChimp.

STRATEGY
Hopefully you started this whole journey considering the website’s purpose and strategy; that determines all the above and a lot of what we went over in our two previous posts. (Part 1: Branding & Design, Part 2: Sitemap & Content.

The final step is figuring out what you are going to consider a “conversion” or success on the site. A good technique is to ask yourself “what would success on the site look like 5 years from now?” and then work backwards so you have somewhere to start working and an idea for what to track.

Assemble a list of what you will consider a success / conversion. Here are some ideas:

  • Submitting a Contact Form
  • Signing up for email list
  • Calling and speaking to someone
  • Liking a Social Media page
  • Downloading a whitepaper or an E-Book
  • Filling out some sort of form

There is much to think about when building a new web presence from the ground up. It is exhilarating but can be daunting. Take it in small bites and consider it a continually evolving tool.

Looking for experts to come alongside you? Contact us, we love assembling potent web strategy plans.