> ## Documentation Index
> Fetch the complete documentation index at: https://developer.upsun.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Insights

export const ShowMore = ({children, className = '', id = 'posts', btnClassName = ''}) => {
  const hash = 'show-all-' + id;
  const [expanded, setExpanded] = useState(false);
  useEffect(() => {
    const check = () => {
      if (window.location.hash === '#' + hash) {
        setExpanded(true);
      }
    };
    check();
    window.addEventListener('hashchange', check);
    return () => window.removeEventListener('hashchange', check);
  }, [hash]);
  const wrapClass = expanded ? className : className + ' blog-paginated';
  return <div>
      <div className={wrapClass}>
        {children}
      </div>
      {!expanded && <div className={btnClassName} style={{
    marginTop: '2rem',
    textAlign: 'center'
  }}>
          <a href={'#' + hash} style={{
    display: 'inline-flex',
    alignItems: 'center',
    gap: '0.5rem',
    padding: '0.75rem 1.5rem',
    borderRadius: '9999px',
    border: '1px solid #e5e7eb',
    fontSize: '0.875rem',
    fontWeight: 500,
    color: '#374151',
    textDecoration: 'none'
  }}>
            Show all posts ▾
          </a>
        </div>}
    </div>;
};

<ShowMore id="insights-articles" className="blog-card-grid">
  <a href="/posts/insights/the-not-so-hidden-cost-of-ai-scrapers" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/devcenter.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/devcenter.webp" alt="The (not so) hidden cost of AI scrapers" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Tuesday, May 5th 2026</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">The (not so) hidden cost of AI scrapers</h3>
      <p className="blog-card-desc">AI scrapers drive up your hosting cost while real users wait. Use robots.txt, cache normalization, and sane application limits to take the pressure off.</p>
    </div>
  </a>

  <a href="/posts/insights/the-only-correct-way-to-git-pull-and-merge" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/the-only-correct-way-to-git-pull-and-merge/the-only-correct-way-to-git-pull-and-merge.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/the-only-correct-way-to-git-pull-and-merge/the-only-correct-way-to-git-pull-and-merge.webp" alt="The only correct way to git pull and merge" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Tuesday, February 3rd 2026</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">The only correct way to git pull and merge</h3>
      <p className="blog-card-desc">A strongly opinionated guide to git pull and merge strategies that will make your commit history actually useful. Learn when to rebase, when to merge, and why the defaults are lying to you.</p>
    </div>
  </a>

  <a href="/posts/insights/the-third-way-to-scale-that-nobody-talks-about" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/the-third-way-to-scale-that-nobody-talks-about/the-third-way-to-scale-that-nobody-talks-about.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/the-third-way-to-scale-that-nobody-talks-about/the-third-way-to-scale-that-nobody-talks-about.webp" alt="The third way to scale that nobody talks about" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Tuesday, January 20th 2026</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">The third way to scale that nobody talks about</h3>
      <p className="blog-card-desc">Beyond vertical and horizontal scaling lies a third approach that most scaling discussions ignore. Learn about natural scaling, where you sidestep the problem entirely.</p>
    </div>
  </a>

  <a href="/posts/insights/why-you-cant-just-add-infinite-php-fpm-workers" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/why-you-cant-just-add-infinite-php-fpm-workers/why-you-cant-just-add-infinite-php-fpm-workers.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/why-you-cant-just-add-infinite-php-fpm-workers/why-you-cant-just-add-infinite-php-fpm-workers.webp" alt="Why you can't just add infinite PHP-FPM workers" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Monday, December 8th 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">Why you can't just add infinite PHP-FPM workers</h3>
      <p className="blog-card-desc">Workers need memory. Learn how PHP-FPM sizing hints work, why you can't just add infinite workers, and how to tune your worker count based on actual memory usage.</p>
    </div>
  </a>

  <a href="/posts/insights/why-setting-your-php-memory-limit-to-60gb-wont-help" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/why-setting-your-php-memory-limit-to-60gb-wont-help/why-setting-your-php-memory-limit-to-60gb-wont-help.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/why-setting-your-php-memory-limit-to-60gb-wont-help/why-setting-your-php-memory-limit-to-60gb-wont-help.webp" alt="Why setting your PHP memory limit to 60GB won't help" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Monday, December 1st 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">Why setting your PHP memory limit to 60GB won't help</h3>
      <p className="blog-card-desc">When you see a PHP memory limit error, your instinct shouldn't be to just increase the limit. Learn what PHP memory\_limit actually does and why blindly increasing it can hurt your site's uptime.</p>
    </div>
  </a>

  <a href="/posts/insights/my-terminal-setup-mac-linux" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/my-terminal-setup-mac-linux/thumbnail.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/my-terminal-setup-mac-linux/thumbnail.webp" alt="My terminal setup (Mac & Linux)" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Wednesday, November 26th 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">My terminal setup (Mac & Linux)</h3>
      <p className="blog-card-desc">A no-nonsense guide to transforming your terminal from painful to powerful with GhostTTY, NeoVim, and Claude Code</p>
    </div>
  </a>

  <a href="/posts/insights/the-mystery-of-the-shrinking-database-dump" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/the-mystery-of-the-shrinking-database-dump/the-mystery-of-the-shrinking-database-dump.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/the-mystery-of-the-shrinking-database-dump/the-mystery-of-the-shrinking-database-dump.webp" alt="The mystery of the shrinking database dump" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Monday, November 10th 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">The mystery of the shrinking database dump</h3>
      <p className="blog-card-desc">Your database uses 10GB but dumps to 100MB. Discover why database dumps shrink, how InnoDB fragmentation works, and how to reclaim that missing storage space.</p>
    </div>
  </a>

  <a href="/posts/insights/build-time-environment-variables-considered-harmful" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/build-time-environment-variables-considered-harmful/build-time-environment-variables-considered-harmful.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/build-time-environment-variables-considered-harmful/build-time-environment-variables-considered-harmful.webp" alt="Build-time environment variables considered harmful" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Monday, October 6th 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">Build-time environment variables considered harmful</h3>
      <p className="blog-card-desc">Build-time environment variables break deployment caching, compromise security, and force unnecessary rebuilds. Learn why runtime configuration is the better alternative.</p>
    </div>
  </a>

  <a href="/posts/insights/why-you-should-replace-postgresql-with-git-for-your-next-project" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/why-you-should-replace-postgresql-with-git-for-your-next-project/why-you-should-replace-postgresql-with-git-for-your-next-project.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/why-you-should-replace-postgresql-with-git-for-your-next-project/why-you-should-replace-postgresql-with-git-for-your-next-project.webp" alt="Why you should replace PostgreSQL with Git for your next project" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Friday, September 19th 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">Why you should replace PostgreSQL with Git for your next project</h3>
      <p className="blog-card-desc">Explore how Git's internal architecture makes it a surprisingly capable database alternative. Learn Git's data structures through a practical todo app implementation that might make you reconsider your database choices.</p>
    </div>
  </a>

  <a href="/posts/insights/why-your-readme-matters-more-than-ai-configuration-files" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/why-your-readme-matters-more-than-ai-configuration-files/why-your-readme-matters-more-than-ai-configuration-files.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/why-your-readme-matters-more-than-ai-configuration-files/why-your-readme-matters-more-than-ai-configuration-files.webp" alt="AGENTS.md: Why your README matters more than AI configuration files" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Tuesday, August 12th 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">AGENTS.md: Why your README matters more than AI configuration files</h3>
      <p className="blog-card-desc">AGENTS.md promises to standardize AI coding assistant configuration, but the real solution is writing better READMEs that serve both humans and AI agents</p>
    </div>
  </a>

  <a href="/posts/insights/why-python-developers-should-switch-to-uv" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/why-python-developers-should-switch-to-uv/why-python-developers-should-switch-to-uv.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/why-python-developers-should-switch-to-uv/why-python-developers-should-switch-to-uv.webp" alt="Why Python developers should switch to uv" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Thursday, August 7th 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">Why Python developers should switch to uv</h3>
      <p className="blog-card-desc">Learn how uv, the revolutionary Python package manager, delivers 100x faster installations and streamlines project management with automatic virtual environments and dependency tracking.</p>
    </div>
  </a>

  <a href="/posts/insights/why-configuration-as-code-beats-click-and-deploy" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/why-configuration-as-code-beats-click-and-deploy/configuration-as-code.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/why-configuration-as-code-beats-click-and-deploy/configuration-as-code.webp" alt="Git-Driven Infrastructure: Why Configuration as Code Beats Click-and-Deploy" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Thursday, June 12th 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">Git-Driven Infrastructure: Why Configuration as Code Beats Click-and-Deploy</h3>
      <p className="blog-card-desc">Discover why YAML-driven infrastructure outperforms point-and-click deployment for scalable, maintainable applications. Learn best practices for configuration as code.</p>
    </div>
  </a>

  <a href="/posts/insights/advanced-prompting-techniques-for-coding" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/advanced-prompting-techniques-for-coding/advanced-prompting-techniques-for-coding.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/advanced-prompting-techniques-for-coding/advanced-prompting-techniques-for-coding.webp" alt="Advanced prompting techniques for complex coding tasks" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Thursday, May 8th 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">Advanced prompting techniques for complex coding tasks</h3>
      <p className="blog-card-desc">This articles will give you an overview of prompting strategies that help coding assistants reason through difficult problems and produce higher-quality solutions.</p>
    </div>
  </a>

  <a href="/posts/insights/what-will-you-do-after-you-deploy" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/insights/what-will-you-do-after-you-deploy/what-will-you-do-after-you-deploy.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/insights/what-will-you-do-after-you-deploy/what-will-you-do-after-you-deploy.webp" alt="What will you do after you deploy?" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`insights` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        insights
                      </span>
                    )}

        <span className="text-xs text-subtle">Tuesday, April 17th 2018</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">What will you do after you deploy?</h3>
      <p className="blog-card-desc">Learn how Platform.sh's post\_deploy hook can keep your site responsive during deploy tasks, making your deploys faster and more efficient.</p>
    </div>
  </a>
</ShowMore>
