
<!DOCTYPE html>
<html lang="en" class="scroll-smooth">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Useful tidbits from REVSYS</title>

    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

    <meta name="google-site-verification" content="9Gxm1mE9DlsjjGW-e_ThwtIpe2Z67bV3S9FQgFzndwY" />
    <link rel="apple-touch-icon" sizes="180x180" href="/static/icons/apple-touch-icon.10b562419492.10b562419492.png">
    <link rel="icon" type="image/png" href=/static/icons/favicon-32x32.52cdfb81a952.52cdfb81a952.png sizes="32x32">
    <link rel="icon" type="image/png" href=/static/icons/favicon-16x16.d75462ec0fe9.d75462ec0fe9.png sizes="16x16">
    <link rel="mask-icon" href="/static/icons/safari-pinned-tab.c6ddd5def733.c6ddd5def733.svg" color="#5bbad5">
    <link rel="shortcut icon" href="/static/icons/favicon.ce76a067cca9.8fdf704ee785.ico">

    


<link rel="preload" href="/static/css/tailwind.min.676ebe7df263.css" as="style">
<link rel="stylesheet" href="/static/css/tailwind.min.676ebe7df263.css">




    <meta property="og:site_name" content="REVSYS">
    <meta property="og:type" content="website">
    <meta property="og:image" content="/static/icons/apple-touch-icon.10b562419492.10b562419492.png" />

    <meta name="twitter:site" content="@revsys">
    <meta name="twitter:creator" content="@revsys">

    
      <meta property="og:title" content="Tidbits from REVSYS">
    

    
  <meta name="description" content="Tidbits of professional advice, HOWTOs, and technical tips from the team at REVSYS">
  <meta property="og:description" content="Tidbits of professional advice, HOWTOs, and technical tips from the team at REVSYS">
  <meta name="og_description" content="Tidbits of professional advice, HOWTOs, and technical tips from the team at REVSYS">
  <meta name="twitter:description" content="Tidbits of professional advice, HOWTOs, and technical tips from the team at REVSYS">


    
    
  <link rel="alternate" type="application/rss+xml"
        title="REVSYS Blog RSS Feed"
        href="/blog/feeds/latest/" />


    
      <link rel="canonical" href="https://www.revsys.com/tidbits/" />
    

    
  <script type="application/ld+json">
    {
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://www.revsys.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Tidbits",
      "item": "https://www.revsys.com/tidbits/"
    }
  ]
}
  </script>

  <script type="application/ld+json">
    {
  "@context": "https://schema.org",
  "@type": "Blog",
  "name": "Tidbits from REVSYS",
  "description": "Tidbits of professional advice, HOWTOs, and technical tips from the team at REVSYS",
  "url": "https://www.revsys.com/tidbits/",
  "publisher": {
    "@type": "Organization",
    "name": "REVSYS",
    "logo": {
      "@type": "ImageObject",
      "url": "https://www.revsys.com/static/images/2017/revsys_logo_white.png"
    }
  },
  "blogPost": [
    {
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Things I would have done differently...",
      "description": "After 19 years running REVSYS, I’d invest in better tools sooner and trust my gut more often. The right software and reusable internal tools save far more time and money than they cost and  trusting my instincts about clients, projects, and partnerships is usually best. ",
      "datePublished": "2026-08-01T22:46:14.822055+00:00",
      "dateModified": null,
      "author": {
        "@type": "Person",
        "name": "Frank Wiles",
        "url": "/team/frankwiles/"
      },
      "publisher": null,
      "mainEntityOfPage": null,
      "url": "https://www.revsys.com/tidbits/things-i-would-have-done-differently/"
    },
    {
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Happy Holidays from REVSYS",
      "description": "’Twas the deploy before Christmas, when all through the officeNot a pipeline was failing, not even a bug.The containers were built by the runner with care,In hopes that green checkmarks soon would be there.",
      "datePublished": "2025-12-24T15:39:00+00:00",
      "dateModified": null,
      "author": {
        "@type": "Person",
        "name": "Frank Wiles",
        "url": "/team/frankwiles/"
      },
      "publisher": null,
      "mainEntityOfPage": null,
      "url": "https://www.revsys.com/tidbits/happy-holidays-from-revsys/"
    },
    {
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Sometimes LFU > LRU",
      "description": "Stop letting bot traffic evict your customers' sessions. A simple Redis configuration switch from LRU to LFU solved our crawler problem, with a Django configuration example.",
      "datePublished": "2025-08-17T21:46:00+00:00",
      "dateModified": null,
      "author": {
        "@type": "Person",
        "name": "Frank Wiles",
        "url": "/team/frankwiles/"
      },
      "publisher": null,
      "mainEntityOfPage": null,
      "url": "https://www.revsys.com/tidbits/sometimes-lfu-lru/"
    },
    {
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Boosting SEO with Django Ninja, Pydantic, and JSON-LD",
      "description": "At REVSYS, our first attempt at adding JSON-LD to our sites relied on embedding the data in the Django template. For the most part, this has worked fine, and we've had good results from an SEO perspective. But in terms of maintainability, it has not been the most efficient approach. We have now started transitioning to generating the structured data using Django Ninja and Pydantic. As a result, we now have cleaner templates and better maintainability.",
      "datePublished": "2025-08-07T17:44:00+00:00",
      "dateModified": null,
      "author": {
        "@type": "Person",
        "name": "Velda Kiara",
        "url": "/team/velda-kiara/"
      },
      "publisher": null,
      "mainEntityOfPage": null,
      "url": "https://www.revsys.com/tidbits/boosting-seo-with-django-ninja-pydantic-and-json-ld/"
    },
    {
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Better Django management commands with django-click and django-typer",
      "description": "Writing Django management commands can involve a ton of boilerplate code. But Revsys uses two libraries that cut our management command code in half while making it more readable and powerful: django-click and django-typer.",
      "datePublished": "2025-06-09T21:49:00+00:00",
      "dateModified": null,
      "author": {
        "@type": "Person",
        "name": "Lacey Henschel",
        "url": "/team/lacey-williams-henschel/"
      },
      "publisher": null,
      "mainEntityOfPage": null,
      "url": "https://www.revsys.com/tidbits/better-django-management-commands-with-django-click-and-django-typer/"
    },
    {
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Give Your Django Admin X‑Ray Vision—Automatic Dead‑Link Detection",
      "description": "Stop link rot before users ever see it: this guide shows how one lightweight app scans your models, flags broken URLs, and slots neatly into any Django workflow.",
      "datePublished": "2025-05-29T15:21:00+00:00",
      "dateModified": null,
      "author": {
        "@type": "Person",
        "name": "Frank Wiles",
        "url": "/team/frankwiles/"
      },
      "publisher": null,
      "mainEntityOfPage": null,
      "url": "https://www.revsys.com/tidbits/django-deadlink-detection-linkchecker/"
    },
    {
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Faster Python Docker Builds",
      "description": "The 4 Docker Sins Killing Your Python Productivity. You changed a single line of code and Docker has to rebuild everything! Dramatically improve both fresh builds and rebuilds when working in Docker.",
      "datePublished": "2025-05-26T20:30:43.116053+00:00",
      "dateModified": null,
      "author": {
        "@type": "Person",
        "name": "Frank Wiles",
        "url": "/team/frankwiles/"
      },
      "publisher": null,
      "mainEntityOfPage": null,
      "url": "https://www.revsys.com/tidbits/faster-python-docker-builds/"
    },
    {
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "18 Years of REVSYS",
      "description": "Frank left his last corporate job in April of 2007 to start working on REVSYS full time. Prior to that he was just doing the occasional consulting and freelance work under the REVSYS brand.",
      "datePublished": "2025-05-05T14:27:00+00:00",
      "dateModified": null,
      "author": {
        "@type": "Person",
        "name": "Frank Wiles",
        "url": "/team/frankwiles/"
      },
      "publisher": null,
      "mainEntityOfPage": null,
      "url": "https://www.revsys.com/tidbits/18-years-of-revsys/"
    },
    {
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "What IS a Django App?",
      "description": "To kick off a semi-regular series of blog posts about useful Django apps, we start with some definitions",
      "datePublished": "2025-05-02T15:57:00+00:00",
      "dateModified": null,
      "author": {
        "@type": "Person",
        "name": "Kojo Idrissa",
        "url": "/team/kojo-idrissa/"
      },
      "publisher": null,
      "mainEntityOfPage": null,
      "url": "https://www.revsys.com/tidbits/what-is-a-django-app/"
    },
    {
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "REVSYS Anniversary and Office Warming Party",
      "description": "Come have some snacks and drinks at our new office.",
      "datePublished": "2025-05-01T21:40:14.071991+00:00",
      "dateModified": null,
      "author": {
        "@type": "Person",
        "name": "Frank Wiles",
        "url": "/team/frankwiles/"
      },
      "publisher": null,
      "mainEntityOfPage": null,
      "url": "https://www.revsys.com/tidbits/revsys-anniversary-and-office-warming-party/"
    }
  ]
}
  </script>



    
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-VM7VW0PNT9"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  
    gtag('config', 'G-VM7VW0PNT9');
    gtag('config', 'AW-17048165663');
</script>

  </head>

  <body class="blog">
    
      <header class="bg-white shadow font-rubik font-light tracking-wide uppercase">
        <div class="container mx-auto px-4 py-4">
          <div class="flex justify-between items-center">
            <a href="/" class="block lg:-ml-18" aria-label="REVSYS Homepage">
              
                <svg class="h-12" viewBox="0 0 1280 455.2" xml:space="preserve" alt="REVSYS Logo">
                  <style type="text/css"> .st0{fill:#24315D;} .st1{fill:#5194FC;} </style>
                  <g>
                    <path class="st0" d="M13,19.2h63.6c42.4,0,71.1,2,86.1,5.9c15,3.9,27.3,14,36.7,30.1c9.5,16.1,14.2,41.9,14.2,77.2 c0,32.3-3.3,54-10,65.1c-6.7,11.1-19.9,17.8-39.5,20c17.8,5.3,29.7,12.4,35.9,21.3c6.1,8.9,9.9,17,11.4,24.5 c1.5,7.4,2.2,27.9,2.2,61.4V434h-83.5V296.2c0-22.2-1.5-36-4.4-41.3c-2.9-5.3-10.6-7.9-23-7.9v187H13V19.2z M102.8,90.2v92.2 c10.1,0,17.2-1.7,21.2-5c4.1-3.3,6.1-14.1,6.1-32.4v-22.8c0-13.1-2-21.8-5.9-25.9S113.2,90.2,102.8,90.2z"/>
                    <path class="st0" d="M239.7,19.2h149.9v83h-60v78.7h56.2v78.9h-56.2V351h66v83H239.7V19.2z"/>
                    <path class="st0" d="M635.1,19.2L589.4,434H452.8L400.9,19.2h94.8c11,114.3,18.9,210.9,23.6,290 c4.6-79.9,9.6-150.9,14.8-212.9l6.2-77.1H635.1z"/>
                    <path class="st1" d="M840.7,144.7h-83.5V114c0-14.3-1.1-23.5-3.2-27.4c-2.1-3.9-5.7-5.9-10.7-5.9 c-5.4,0-9.5,2.6-12.3,8c-2.8,5.3-4.2,13.3-4.2,24.1c0,13.8,1.6,24.3,4.7,31.3c3,7,11.4,15.5,25.4,25.4c40,28.5,65.2,51.9,75.6,70.2 c10.4,18.3,15.6,47.7,15.6,88.4c0,29.6-2.9,51.3-8.6,65.3c-5.8,14-16.9,25.7-33.4,35.2c-16.5,9.5-35.7,14.2-57.6,14.2 c-24.1,0-44.6-5.5-61.6-16.4c-17-10.9-28.2-24.9-33.4-41.8c-5.3-16.9-7.9-40.9-7.9-72v-27.2h83.5v50.5c0,15.5,1.2,25.5,3.5,30 c2.3,4.4,6.5,6.7,12.5,6.7c6,0,10.4-2.8,13.4-8.5c2.9-5.6,4.4-14,4.4-25.1c0-24.4-2.8-40.4-8.3-47.9c-5.7-7.5-19.7-20.1-42.1-37.7 c-22.3-17.8-37.2-30.7-44.4-38.7c-7.3-8-13.3-19.1-18-33.3c-4.8-14.2-7.2-32.3-7.2-54.3c0-31.8,3.4-55,10.1-69.7 c6.8-14.7,17.7-26.2,32.8-34.5c15.1-8.3,33.3-12.4,54.7-12.4c23.3,0,43.2,4.5,59.7,13.6c16.4,9.1,27.3,20.5,32.7,34.2 c5.3,13.8,8,37.1,8,70.1V144.7z"/>
                    <path class="st1" d="M1059.1,19.2l-65.5,264.7V434h-83.3V283.9L847.1,19.2h82.6c12.9,81,20.2,135.5,21.8,163.5 c5-44.3,13.3-98.7,25-163.5H1059.1z"/>
                    <path class="st1" d="M1256.2,144.7h-83.5V114c0-14.3-1.1-23.5-3.2-27.4c-2.1-3.9-5.7-5.9-10.7-5.9 c-5.4,0-9.5,2.6-12.3,8c-2.8,5.3-4.2,13.3-4.2,24.1c0,13.8,1.6,24.3,4.7,31.3c3,7,11.4,15.5,25.4,25.4c40,28.5,65.2,51.9,75.6,70.2 c10.4,18.3,15.6,47.7,15.6,88.4c0,29.6-2.9,51.3-8.6,65.3c-5.8,14-16.9,25.7-33.4,35.2c-16.5,9.5-35.7,14.2-57.6,14.2 c-24.1,0-44.6-5.5-61.6-16.4c-17-10.9-28.1-24.9-33.4-41.8c-5.3-16.9-7.9-40.9-7.9-72v-27.2h83.5v50.5c0,15.5,1.2,25.5,3.5,30 c2.3,4.4,6.5,6.7,12.5,6.7c6,0,10.4-2.8,13.3-8.5c2.9-5.6,4.4-14,4.4-25.1c0-24.4-2.8-40.4-8.3-47.9c-5.7-7.5-19.7-20.1-42.1-37.7 c-22.3-17.8-37.1-30.7-44.4-38.7c-7.3-8-13.3-19.1-18-33.3c-4.8-14.2-7.2-32.3-7.2-54.3c0-31.8,3.4-55,10.1-69.7 c6.8-14.7,17.7-26.2,32.8-34.5c15.1-8.3,33.3-12.4,54.7-12.4c23.3,0,43.2,4.5,59.7,13.6c16.4,9.1,27.3,20.5,32.7,34.2 c5.3,13.8,8,37.1,8,70.1V144.7z"/>
                  </g>
                </svg>
              
            </a>
            <div>
              <div class="lg:hidden">
                <button type="button" class="flex items-center text-gray-500 hover:text-gray-600 focus:outline-none" aria-label="Toggle menu">
                  <svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
                    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
                  </svg>
                </button>
              </div>
              <nav class="hidden lg:flex">
                <ul class="flex lg:flex-row flex-col lg:space-x-8 space-y-4 lg:space-y-0">
                  <li><a href="/about/" class="text-gray-800 hover:text-blue-600">About</a></li>
                  <li><a href="/impact/" class="text-gray-800 hover:text-blue-600">Impact</a></li>
                  <li><a href="/products/" class="text-gray-800 hover:text-blue-600">Products</a></li>
                  <li><a href="/tidbits/" class="text-gray-800 hover:text-blue-600">Blog</a></li>
                  <li><a href="/contact/" class="text-gray-800 hover:text-blue-600">Contact</a></li>
                </ul>
              </nav>
            </div>
          </div>
        </div>
      </header>
    

    
      <main class="font-rubik">
        
  <div class="pt-24 lg:pt-28">
    

<nav class="border-b border-light-gray-border" aria-label="Blog sections">
  <div class="container mx-auto px-6 lg:px-12">
    <ul class="flex flex-wrap gap-x-8 gap-y-2 py-5 font-rubik font-light text-neutral-600">
      <li><a href="/tidbits/" class="hover:text-revsys-light">Blog</a></li>
      <li><a href="/about/press/" class="hover:text-revsys-light">News</a></li>
      <li><a href="/talks/" class="hover:text-revsys-light">Talks</a></li>
      <li><a href="/questions/" class="hover:text-revsys-light">Questions</a></li>
    </ul>
  </div>
</nav>

  </div>

  <section class="bg-white py-16 lg:py-24">
    <div class="container mx-auto px-6 lg:px-12">
      

      <div class="grid gap-8 md:grid-cols-2">
        
          <article class="border border-light-gray-border rounded-2xl p-8">
            <p class="text-base text-light-gray-font font-rubik italic mb-3">Frank Wiles</p>

            <h2 class="text-xl font-semibold mb-3">
              <a href="/tidbits/things-i-would-have-done-differently/" class="text-revsys-light hover:underline">
                Things I would have done differently...
              </a>
            </h2>

            <div class="text-neutral-600 font-rubik font-light leading-relaxed">
              
                <p data-block-key="yqdop">After 19 years running REVSYS, I’d invest in better tools sooner and trust my gut more often. The right software and reusable internal tools save far more time and money than they cost and  trusting my instincts about clients, projects, and partnerships is usually best. </p>
              
            </div>
          </article>
        
          <article class="border border-light-gray-border rounded-2xl p-8">
            <p class="text-base text-light-gray-font font-rubik italic mb-3">Frank Wiles</p>

            <h2 class="text-xl font-semibold mb-3">
              <a href="/tidbits/happy-holidays-from-revsys/" class="text-revsys-light hover:underline">
                Happy Holidays from REVSYS
              </a>
            </h2>

            <div class="text-neutral-600 font-rubik font-light leading-relaxed">
              
                <p data-block-key="aiv7t">’Twas the deploy before Christmas, when all through the office</p><p data-block-key="1ipb5">Not a pipeline was failing, not even a bug.</p><p data-block-key="bf0uj">The containers were built by the runner with care,</p><p data-block-key="9n3hj">In hopes that green checkmarks soon would be there.</p><p data-block-key="aur7v"></p>
              
            </div>
          </article>
        
          <article class="border border-light-gray-border rounded-2xl p-8">
            <p class="text-base text-light-gray-font font-rubik italic mb-3">Frank Wiles</p>

            <h2 class="text-xl font-semibold mb-3">
              <a href="/tidbits/sometimes-lfu-lru/" class="text-revsys-light hover:underline">
                Pro-Tip &ndash; Sometimes LFU &gt; LRU
              </a>
            </h2>

            <div class="text-neutral-600 font-rubik font-light leading-relaxed">
              
                <p data-block-key="04gdx">Stop letting bot traffic evict your customers' sessions. A simple Redis configuration switch from LRU to LFU solved our crawler problem, with a Django configuration example.</p>
              
            </div>
          </article>
        
          <article class="border border-light-gray-border rounded-2xl p-8">
            <p class="text-base text-light-gray-font font-rubik italic mb-3">Velda Kiara</p>

            <h2 class="text-xl font-semibold mb-3">
              <a href="/tidbits/boosting-seo-with-django-ninja-pydantic-and-json-ld/" class="text-revsys-light hover:underline">
                Boosting SEO with Django Ninja, Pydantic, and JSON-LD
              </a>
            </h2>

            <div class="text-neutral-600 font-rubik font-light leading-relaxed">
              
                <p data-block-key="0ah7o">At REVSYS, our first attempt at adding JSON-LD to our sites relied on embedding the data in the Django template. For the most part, this has worked fine, and we've had good results from an SEO perspective. But in terms of maintainability, it has not been the most efficient approach. We have now started transitioning to generating the structured data using <a href="https://django-ninja.dev/">Django Ninja</a> and <a href="https://docs.pydantic.dev/latest/">Pydantic</a>. As a result, we now have cleaner templates and better maintainability.</p>
              
            </div>
          </article>
        
          <article class="border border-light-gray-border rounded-2xl p-8">
            <p class="text-base text-light-gray-font font-rubik italic mb-3">Lacey Henschel</p>

            <h2 class="text-xl font-semibold mb-3">
              <a href="/tidbits/better-django-management-commands-with-django-click-and-django-typer/" class="text-revsys-light hover:underline">
                Better Django management commands with django-click and django-typer
              </a>
            </h2>

            <div class="text-neutral-600 font-rubik font-light leading-relaxed">
              
                <p data-block-key="acldf">Writing Django management commands can involve a ton of boilerplate code. But Revsys uses two libraries that cut our management command code in half while making it more readable and powerful: django-click and django-typer.</p>
              
            </div>
          </article>
        
          <article class="border border-light-gray-border rounded-2xl p-8">
            <p class="text-base text-light-gray-font font-rubik italic mb-3">Frank Wiles</p>

            <h2 class="text-xl font-semibold mb-3">
              <a href="/tidbits/django-deadlink-detection-linkchecker/" class="text-revsys-light hover:underline">
                Give Your Django Admin X‑Ray Vision—Automatic Dead‑Link Detection
              </a>
            </h2>

            <div class="text-neutral-600 font-rubik font-light leading-relaxed">
              
                <p data-block-key="8afm8">Stop link rot before users ever see it: this guide shows how one lightweight app scans your models, flags broken URLs, and slots neatly into any Django workflow.</p>
              
            </div>
          </article>
        
          <article class="border border-light-gray-border rounded-2xl p-8">
            <p class="text-base text-light-gray-font font-rubik italic mb-3">Frank Wiles</p>

            <h2 class="text-xl font-semibold mb-3">
              <a href="/tidbits/faster-python-docker-builds/" class="text-revsys-light hover:underline">
                Pro-Tip &ndash; Faster Python Docker Builds
              </a>
            </h2>

            <div class="text-neutral-600 font-rubik font-light leading-relaxed">
              
                <p data-block-key="942x8">The 4 Docker Sins Killing Your Python Productivity. You changed a single line of code and Docker has to rebuild everything! Dramatically improve both fresh builds and rebuilds when working in Docker.</p>
              
            </div>
          </article>
        
          <article class="border border-light-gray-border rounded-2xl p-8">
            <p class="text-base text-light-gray-font font-rubik italic mb-3">Frank Wiles</p>

            <h2 class="text-xl font-semibold mb-3">
              <a href="/tidbits/18-years-of-revsys/" class="text-revsys-light hover:underline">
                18 Years of REVSYS
              </a>
            </h2>

            <div class="text-neutral-600 font-rubik font-light leading-relaxed">
              
                <p data-block-key="8k5xd">Frank left his last corporate job in April of 2007 to start working on REVSYS full time. Prior to that he was just doing the occasional consulting and freelance work under the REVSYS brand.</p>
              
            </div>
          </article>
        
          <article class="border border-light-gray-border rounded-2xl p-8">
            <p class="text-base text-light-gray-font font-rubik italic mb-3">Kojo Idrissa</p>

            <h2 class="text-xl font-semibold mb-3">
              <a href="/tidbits/what-is-a-django-app/" class="text-revsys-light hover:underline">
                What IS a Django App?
              </a>
            </h2>

            <div class="text-neutral-600 font-rubik font-light leading-relaxed">
              
                <p data-block-key="2c0o5">To kick off a semi-regular series of blog posts about useful Django apps, we start with some definitions</p>
              
            </div>
          </article>
        
          <article class="border border-light-gray-border rounded-2xl p-8">
            <p class="text-base text-light-gray-font font-rubik italic mb-3">Frank Wiles</p>

            <h2 class="text-xl font-semibold mb-3">
              <a href="/tidbits/revsys-anniversary-and-office-warming-party/" class="text-revsys-light hover:underline">
                REVSYS Anniversary and Office Warming Party
              </a>
            </h2>

            <div class="text-neutral-600 font-rubik font-light leading-relaxed">
              
                <p data-block-key="1eunw">Come have some snacks and drinks at our new office.</p>
              
            </div>
          </article>
        
      </div>

      <div class="mt-12 text-center">
        

  <nav class="flex flex-wrap justify-center items-center gap-2 font-rubik font-light" aria-label="Pagination">
    
      <span class="px-4 py-2 mr-4 rounded-full text-light-gray-font cursor-default" aria-disabled="true">Prev</span>
    

    
      
        <span class="px-4 py-2 rounded-full bg-revsys-light text-white" aria-current="page">1</span>
      
    
      
        <a href="?page=2"
           class="px-4 py-2 rounded-full text-neutral-600 hover:bg-light-gray hover:text-dark-gray-font transition-colors">2</a>
      
    
      
        <a href="?page=3"
           class="px-4 py-2 rounded-full text-neutral-600 hover:bg-light-gray hover:text-dark-gray-font transition-colors">3</a>
      
    
      
        <a href="?page=4"
           class="px-4 py-2 rounded-full text-neutral-600 hover:bg-light-gray hover:text-dark-gray-font transition-colors">4</a>
      
    
      
        <a href="?page=5"
           class="px-4 py-2 rounded-full text-neutral-600 hover:bg-light-gray hover:text-dark-gray-font transition-colors">5</a>
      
    
      
        <a href="?page=6"
           class="px-4 py-2 rounded-full text-neutral-600 hover:bg-light-gray hover:text-dark-gray-font transition-colors">6</a>
      
    
      
        <a href="?page=7"
           class="px-4 py-2 rounded-full text-neutral-600 hover:bg-light-gray hover:text-dark-gray-font transition-colors">7</a>
      
    
      
        <a href="?page=8"
           class="px-4 py-2 rounded-full text-neutral-600 hover:bg-light-gray hover:text-dark-gray-font transition-colors">8</a>
      
    
      
        <a href="?page=9"
           class="px-4 py-2 rounded-full text-neutral-600 hover:bg-light-gray hover:text-dark-gray-font transition-colors">9</a>
      
    
      
        <a href="?page=10"
           class="px-4 py-2 rounded-full text-neutral-600 hover:bg-light-gray hover:text-dark-gray-font transition-colors">10</a>
      
    

    
      <a href="?page=2"
         class="px-4 py-2 ml-4 rounded-full text-neutral-600 hover:bg-light-gray hover:text-dark-gray-font transition-colors">Next</a>
    
  </nav>


      </div>
    </div>
  </section>

      </main>
    

    
      <footer class="text-gray-300 py-12 font-rubik bg-revsys-dark">
        <div class="container mx-auto px-4">
          <div class="flex flex-col md:flex-row justify-between items-center align-middle mb-8 pb-8 border-b border-gray-600">
            <img src="/static/images/2017/revsys-shapes.9b22ad5deab8.webp" class="w-64">
            <h3 class="mb-8 md:mb-0 text-gray-100 text-4xl md:text-5xl tracking-wide font-bold md:w-4/5">Let's work together.</h3>
            <a href="/contact/" class="md:ml-16 flex w-full items-center justify-center rounded-md bg-revsys-light px-3 py-4 tracking-wide font-semibold text-white shadow-xs hover:bg-blue-400 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-500">Contact Us</a>
          </div>

          <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-8">
            <div>
              <h2 class="text-gray-100 text-xl tracking-wide font-semibold mb-4">Services</h2>
              <ul class="space-y-2">
                <li><a href="/services/django/" class="hover:text-white">Django</a></li>
                <li><a href="/services/django/consulting/" class="hover:text-white">Django Consulting</a></li>
                <li><a href="/services/django/ai/" class="hover:text-white">AI Consulting with Django</a></li>
                <li><a href="/services/python/" class="hover:text-white">Python</a></li>
                <li><a href="/services/postgresql/" class="hover:text-white">PostgreSQL</a></li>
                <li><a href="/services/operations/" class="hover:text-white">Operations</a></li>
                <li><a href="/services/development/" class="hover:text-white">Development</a></li>
                <li><a href="/services/support/" class="hover:text-white">Open Source</a></li>
              </ul>
            </div>
            <div>
              <h2 class="text-gray-100 text-xl tracking-wide font-semibold mb-4">Products</h2>
              <ul class="space-y-2">
                <li><a href="/services/django/upgrades/" class="hover:text-white">Django Upgrade Service</a></li>
                <li><a href="/teststart/" class="hover:text-white">TestStart</a></li>
                <li><a href="/products/">Products</a></li>
              </ul>
            </div>
            <div>
              <h2 class="text-gray-100 text-xl tracking-wide font-semibold mb-4">Blog</h2>
              <ul class="space-y-2">
                <li><a href="/about/press/" class="hover:text-white">News</a></li>
                <li><a href="/tidbits/" class="hover:text-white">Blog</a></li>
                <li><a href="/writings/quicktips/" class="hover:text-white">Quick Tips</a></li>
                <li><a href="/talks/" class="hover:text-white">Talks</a></li>
                <li><a href="/questions/" class="hover:text-white">Questions</a></li>
                <li><a href="/writings/" class="hover:text-white">Other</a></li>
              </ul>
            </div>
            <div>
              <h2 class="text-gray-100 text-xl tracking-wide font-semibold mb-4">About</h2>
              <ul class="space-y-2">
                <li><a href="/about/" class="hover:text-white">Team</a></li>
                <li><a href="/clients/" class="hover:text-white">Clients</a></li>
                <li><a href="/testimonials/" class="hover:text-white">Testimonials</a></li>
                <li><a href="/impact/" class="hover:text-white">Case Studies</a></li>
                <li><a href="/about/press/" class="hover:text-white">Press</a></li>
                <li><a href="/hello/" class="hover:text-white">Hello!</a></li>
                <li><a href="/contact/" class="hover:text-white">Contact</a></li>
              </ul>
            </div>
            <div>
              <h2 class="text-gray-100 text-xl tracking-wide font-semibold mb-4">Get Connected</h2>
              <p class="mb-4"><a href="https://buttondown.com/revsys#subscribe-form" class="text-blue-400 hover:text-blue-500">Signup for our newsletter for tips and tricks.</a></p>
              <div class="flex space-x-4 mb-4">
                <a href="https://www.linkedin.com/company/revolution-systems/?viewAsMember=true" aria-label="Link to REVSYS LinkedIn Page">
                  <svg class="fill-gray-300 hover:fill-white h-8 w-8" viewBox="0 0 455 455" xml:space="preserve" alt="LinkedIn Logo">
                    <g>
                      <path style="fill-rule:evenodd;clip-rule:evenodd;" d="M246.4,204.35v-0.665c-0.136,0.223-0.324,0.446-0.442,0.665H246.4z"/>
                      <path style="fill-rule:evenodd;clip-rule:evenodd;" d="M0,0v455h455V0H0z M141.522,378.002H74.016V174.906h67.506V378.002z
                                                                            M107.769,147.186h-0.446C84.678,147.186,70,131.585,70,112.085c0-19.928,15.107-35.087,38.211-35.087
                                                                            c23.109,0,37.31,15.159,37.752,35.087C145.963,131.585,131.32,147.186,107.769,147.186z M385,378.002h-67.524V269.345
                                                                            c0-27.291-9.756-45.92-34.195-45.92c-18.664,0-29.755,12.543-34.641,24.693c-1.776,4.34-2.24,10.373-2.24,16.459v113.426h-67.537
                                                                            c0,0,0.905-184.043,0-203.096H246.4v28.779c8.973-13.807,24.986-33.547,60.856-33.547c44.437,0,77.744,29.02,77.744,91.398V378.002
                                                                            z"/>
                    </g>
                  </svg>
                </a>
                <a href="https://github.com/revsys/" aria-label="Linked to REVSYS Github Page">
                  <svg class="h-8 w-8" viewBox="0 0 20 20">
                    <g stroke="none" stroke-width="1" fill-rule="evenodd">
                      <g transform="translate(-140.000000, -7559.000000)" fill="#000000">
                        <g id="icons" transform="translate(56.000000, 160.000000)" class="fill-gray-300 hover:fill-white">
                          <path d="M94,7399 C99.523,7399 104,7403.59 104,7409.253 C104,7413.782 101.138,7417.624 97.167,7418.981 C96.66,7419.082 96.48,7418.762 96.48,7418.489 C96.48,7418.151 96.492,7417.047 96.492,7415.675 C96.492,7414.719 96.172,7414.095 95.813,7413.777 C98.04,7413.523 100.38,7412.656 100.38,7408.718 C100.38,7407.598 99.992,7406.684 99.35,7405.966 C99.454,7405.707 99.797,7404.664 99.252,7403.252 C99.252,7403.252 98.414,7402.977 96.505,7404.303 C95.706,7404.076 94.85,7403.962 94,7403.958 C93.15,7403.962 92.295,7404.076 91.497,7404.303 C89.586,7402.977 88.746,7403.252 88.746,7403.252 C88.203,7404.664 88.546,7405.707 88.649,7405.966 C88.01,7406.684 87.619,7407.598 87.619,7408.718 C87.619,7412.646 89.954,7413.526 92.175,7413.785 C91.889,7414.041 91.63,7414.493 91.54,7415.156 C90.97,7415.418 89.522,7415.871 88.63,7414.304 C88.63,7414.304 88.101,7413.319 87.097,7413.247 C87.097,7413.247 86.122,7413.234 87.029,7413.87 C87.029,7413.87 87.684,7414.185 88.139,7415.37 C88.139,7415.37 88.726,7417.2 91.508,7416.58 C91.513,7417.437 91.522,7418.245 91.522,7418.489 C91.522,7418.76 91.338,7419.077 90.839,7418.982 C86.865,7417.627 84,7413.783 84,7409.253 C84,7403.59 88.478,7399 94,7399" id="github-[#142]"></path>
                        </g>
                      </g>
                    </g>
                  </svg>
                </a>
                <a href="https://www.facebook.com/revsysllc/" aria-label="Link to REVSYS Facebook page">
                  <svg class="fill-gray-300 hover:fill-white h-8 w-8" viewBox="-143 145 512 512" xml:space="preserve" alt="Facebook Logo">
                    <path d="M-143,145v512h512V145H-143z M169.5,357.6l-2.9,38.3h-39.3v133H77.7v-133H51.2v-38.3h26.5v-25.7c0-11.3,0.3-28.8,8.5-39.7
                             c8.7-11.5,20.6-19.3,41.1-19.3c33.4,0,47.4,4.8,47.4,4.8l-6.6,39.2c0,0-11-3.2-21.3-3.2c-10.3,0-19.5,3.7-19.5,14v29.9H169.5z"/>
                  </svg>
                </a>
                <a href="https://twitter.com/revsys" aria-label="Link to REVSYS Twitter/X profile">
                  <svg class="fill-gray-300 hover:fill-white w-8 h-8" viewBox="0 0 543.684 543.684" xml:space="preserve" alt="Twitter / X Logo">
                    <g>
                      <path d="M527.657,106.697c-2.681,0.783-5.361,1.512-8.041,2.191c-16.384,4.137-17.89-1.322-6.028-13.366
                               c5.312-5.397,10.006-11.267,14.082-17.607c9.137-14.217,1.212-20.417-14.333-13.776c-5.545,2.369-11.182,4.517-16.897,6.432
                               c-16.017,5.379-38.746-2.735-53.018-11.787c-18.018-11.426-38.495-17.136-61.438-17.136c-32.137,0-59.529,11.334-82.192,33.984
                               c-22.656,22.662-33.99,50.062-33.99,82.191c0,4.394,0.251,8.855,0.747,13.378c0.814,7.362-11.585,12.699-28.317,10.336
                               c-36.194-5.11-70.582-16.077-103.171-32.889c-32.32-16.671-60.845-37.65-85.57-62.938C37.672,73.624,21.687,74.665,17.274,90.98
                               c-2.644,9.78-3.959,19.951-3.959,30.515c0,19.908,4.675,38.372,14.027,55.392c4.651,8.47,10.098,16.138,16.353,22.999
                               c10.521,11.549,8.911,18.25-5.734,14.144c-14.639-4.106-25.367-10.202-25.367-9.804s0,0.722,0,0.722
                               c0,28.048,8.807,52.693,26.432,73.911c10.857,13.072,23.47,23.17,37.834,30.282c15.147,7.503,22.203,11.688,13.733,12.784
                               c-5.11,0.661-10.251,0.991-15.422,0.991c-3.5,0-7.172-0.159-11.003-0.483c-6.059-0.514-7.148,12.111,2.038,26.298
                               c7.301,11.273,16.646,21.193,28.03,29.762c11.579,8.721,24.058,14.981,37.417,18.794c16.255,4.633,19.517,13.073,5.024,21.763
                               c-35.863,21.519-75.551,32.277-119.058,32.277c-4.902,0-9.578-0.11-14.045-0.324c-7.754-0.373-2.552,6.456,12.417,14.296
                               c46.775,24.499,97.43,36.738,151.972,36.738c41.237,0,79.964-6.529,116.176-19.596c36.199-13.066,67.136-30.576,92.791-52.516
                               c25.655-21.94,47.779-47.173,66.365-75.711c18.581-28.537,32.424-58.33,41.543-89.376c9.106-31.053,13.666-62.167,13.666-93.342
                               c0-2.809-0.024-5.331-0.067-7.552c-0.086-4.174,10.955-15.472,23.28-27.032c5.563-5.22,10.869-10.698,15.937-16.444
                               C548.833,107.78,543.882,101.966,527.657,106.697z"/>
                    </g>
                  </svg>
                </a>
              </div>
              <a href="mailto:sales@revsys.com" class="text-blue-400 hover:text-blue-500 text-lg" alt="Contact REVYS Sales">sales@revsys.com</a>
            </div>
          </div>

          <div class="pt-8 mt-8 border-t border-gray-600 text-center text-gray-400">
            <p class="mb-2">Have a comment or suggestion? <a href="mailto:comments@revsys.com" aria-label="Email us" class="text-blue-400 hover:text-blue-500">comments@revsys.com</a></p>
            <p class="mb-2">©2002–2026 Revolution Systems, LLC. All rights reserved</p>
            <p class="text-sm text-gray-500"><a href="/privacy">Privacy Policy</a></p>
          </div>
        </div>
      </footer>
    

    
    <script>
      // Mobile menu toggle
      document.addEventListener('DOMContentLoaded', function() {
        const menuButton = document.querySelector('button[aria-label="Toggle menu"]');
        const nav = document.querySelector('header nav');

        if (menuButton && nav) {
          menuButton.addEventListener('click', function() {
            nav.classList.toggle('hidden');
            if (nav.classList.contains('hidden')) {
              nav.classList.remove('block', 'absolute', 'top-16', 'left-0', 'right-0', 'bg-white', 'shadow-md', 'z-50', 'p-4');
            } else {
              nav.classList.add('block', 'absolute', 'top-16', 'left-0', 'right-0', 'bg-white', 'shadow-md', 'z-50', 'p-4');
            }
          });
        }
      });
    </script>
    <script src="https://analytics.ahrefs.com/analytics.js" data-key="BvcFznl7oz8dV6OAJsLvzw" async></script>
    <script type="text/javascript">
      _linkedin_partner_id = "7453916";
      window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
      window._linkedin_data_partner_ids.push(_linkedin_partner_id);
    </script><script type="text/javascript">
      (function(l) {
        if (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])};
          window.lintrk.q=[]}
        var s = document.getElementsByTagName("script")[0];
        var b = document.createElement("script");
        b.type = "text/javascript";b.async = true;
        b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
        s.parentNode.insertBefore(b, s);})(window.lintrk);
    </script>
    <noscript>
      <img height="1" width="1" style="display:none;" alt="" src="https://px.ads.linkedin.com/collect/?pid=7453916&fmt=gif" />
    </noscript>
  </body>
</html>
