{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Steven Develops Blog",
  "home_page_url": "https://stevendevelops.com",
  "feed_url": "https://stevendevelops.com/feed.json",
  "description": "Notes from Steven Brown on software engineering, systems, algorithms, and web development.",
  "icon": "https://stevendevelops.com/images/logo_icon.png",
  "language": "en-us",
  "authors": [
    {
      "name": "Steven Brown",
      "url": "https://stevendevelops.com"
    }
  ],
  "items": [
    {
      "id": "https://stevendevelops.com/blog/post/chunking-strategies-for-rag",
      "url": "https://bliztek.com/blog/post/chunking-strategies-for-rag",
      "title": "Chunking Strategies for RAG, Measured",
      "summary": "AI answers from your documents only work if search hands the model the right passage. How you cut the documents decides that: from 74% to 95% found.",
      "image": "https://images.unsplash.com/photo-1481627834876-b7833e8f5570?q=80&w=2070&auto=format&fit=crop",
      "date_published": "2026-10-18T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "RAG",
        "Chunking",
        "Embeddings",
        "Retrieval"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/a-star-search-heuristics",
      "url": "https://bliztek.com/blog/post/a-star-search-heuristics",
      "title": "A* Search: Dijkstra With a Sense of Direction",
      "summary": "Finding the shortest route in maps and games: Dijkstra searches in every direction, A* aims at the goal. Same route, a tenth of the squares checked.",
      "image": "https://images.unsplash.com/photo-1524661135-423995f22d0b?q=80&w=2070&auto=format&fit=crop",
      "date_published": "2026-10-09T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "A* Search",
        "Pathfinding",
        "Heuristics",
        "Dijkstra"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/backpressure-bounded-queues",
      "url": "https://bliztek.com/blog/post/backpressure-bounded-queues",
      "title": "Backpressure: Bounding Queues Before They Bound You",
      "summary": "When a server gets more work than it can handle, an unlimited waiting line turns a 30% overload into six-minute waits. A capped line keeps it to 168ms.",
      "image": "https://images.unsplash.com/photo-1483664852095-d6cc6870702d?q=80&w=2070&auto=format&fit=crop",
      "date_published": "2026-09-03T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Backpressure",
        "Bounded Queues",
        "Little's Law",
        "Load Shedding"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/consistent-hashing-nodes-that-come-and-go",
      "url": "https://bliztek.com/blog/post/consistent-hashing-nodes-that-come-and-go",
      "title": "Consistent Hashing: Adding Nodes Without Losing the Cache",
      "summary": "Add one server to a cache cluster and the usual approach moves 89% of the cached data. Consistent hashing moves 12%. How it works, built and measured.",
      "image": "https://images.unsplash.com/photo-1483347756197-71ef80e95f73?q=80&w=2070&auto=format&fit=crop",
      "date_published": "2026-08-27T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Consistent Hashing",
        "Distributed Systems",
        "Caching",
        "Hash Ring"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/bloom-filters-skipping-lookups",
      "url": "https://bliztek.com/blog/post/bloom-filters-skipping-lookups",
      "title": "Bloom Filters: Skipping Lookups That Can Only Miss",
      "summary": "Skip slow lookups for things that were never stored: a Bloom filter answers \"definitely not here\" for a million keys in 1.14 MiB instead of 88 MB.",
      "image": "https://images.unsplash.com/photo-1519681393784-d120267933ba?q=80&w=2070&auto=format&fit=crop",
      "date_published": "2026-08-20T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Bloom Filter",
        "Probabilistic Data Structures",
        "Caching",
        "Hashing"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/rate-limiting-token-buckets-sliding-windows",
      "url": "https://bliztek.com/blog/post/rate-limiting-token-buckets-sliding-windows",
      "title": "Rate Limiting: Token Buckets and Sliding Windows in Practice",
      "summary": "Rate limits stop one client from flooding an API. The four common ways to enforce them, and why the simplest one can let through double the limit.",
      "image": "https://images.unsplash.com/photo-1418985991508-e47386d96a71?q=80&w=2070&auto=format&fit=crop",
      "date_published": "2026-08-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Rate Limiting",
        "Token Bucket",
        "Sliding Window",
        "API Design"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/lru-caches-constant-time-eviction",
      "url": "https://bliztek.com/blog/post/lru-caches-constant-time-eviction",
      "title": "LRU Caches: Constant-Time Eviction for Real Systems",
      "summary": "When a cache fills up, something has to go. An LRU cache drops whatever was used longest ago, instantly. How to build one, and when to pick another rule.",
      "image": "https://images.unsplash.com/photo-1609280372161-1f48f5550151?q=80&w=2342&auto=format&fit=crop",
      "date_published": "2026-08-09T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "LRU Cache",
        "Caching",
        "HashMap",
        "Linked List"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/practical-graph-algorithms-real-world-systems",
      "url": "https://bliztek.com/blog/post/practical-graph-algorithms-real-world-systems",
      "title": "Practical Graph Algorithms for Real-World Services",
      "summary": "A checkout request touches many services. Four graph algorithms answer the useful questions: what is reachable, what starts first, and the fastest path.",
      "image": "https://images.unsplash.com/photo-1594935975218-a3596da034a3?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
      "date_published": "2025-12-06T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Algorithms",
        "Software Engineering"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/greedy-algorithms-priority-queues-js",
      "url": "https://bliztek.com/blog/post/greedy-algorithms-priority-queues-js",
      "title": "Greedy Algorithms and Priority Queues in JavaScript Systems",
      "summary": "Picking the best option at each step solves scheduling and top-10 problems quickly. How greedy algorithms pair with priority queues, in JavaScript.",
      "image": "https://images.unsplash.com/photo-1710981855156-1dd4b48e668d?q=80&w=1473&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
      "date_published": "2025-11-21T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Systems Engineering",
        "Algorithms",
        "JavaScript"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/heaps-for-event-driven-systems",
      "url": "https://bliztek.com/blog/post/heaps-for-event-driven-systems",
      "title": "Heaps for Event-Driven Systems: A Deep Dive",
      "summary": "A scheduler always needs the next task that is due. A heap hands it over instantly and keeps adding new tasks cheap. Building one in TypeScript.",
      "image": "https://images.unsplash.com/photo-1684758135817-513b6916edcc?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=1194",
      "date_published": "2025-11-14T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Systems Engineering",
        "Event-Driven Systems",
        "Algorithms"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/stacks-structure-behavior-practical-insight",
      "url": "https://bliztek.com/blog/post/stacks-structure-behavior-practical-insight",
      "title": "Stacks: Structure, Behavior, and Practical Insight",
      "summary": "Undo, the back button and every function call work the same way: last in, first out. How stacks shape memory, execution and everyday code.",
      "image": "https://images.unsplash.com/photo-1704715878897-7305f04ff63f?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=1170",
      "date_published": "2025-11-09T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Data Structures",
        "Systems Engineering",
        "Algorithms"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/fast-and-slow-pointer-technique",
      "url": "https://bliztek.com/blog/post/fast-and-slow-pointer-technique",
      "title": "Fast and Slow Pointer Technique: Detecting Cycles and Beyond",
      "summary": "How do you tell if a chain of linked records loops back on itself without remembering every step? Send two pointers at different speeds.",
      "image": "https://images.unsplash.com/photo-1645761521003-876c3d3d74fd?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=2070",
      "date_published": "2025-11-01T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Systems Engineering",
        "Algorithms",
        "Data Structures"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/linked-lists-in-systems",
      "url": "https://bliztek.com/blog/post/linked-lists-in-systems",
      "title": "Linked Lists in Systems: Structure, Context, and Practical Insight",
      "summary": "Arrays beat linked lists in most code because of how computers read memory. Where linked lists still earn their place, from kernels to networking.",
      "image": "https://images.unsplash.com/photo-1482841628122-9080d44bb807?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=1171a",
      "date_published": "2025-10-25T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Systems Engineering",
        "Algorithms"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/understanding-hashmaps-constant-time-lookups",
      "url": "https://bliztek.com/blog/post/understanding-hashmaps-constant-time-lookups",
      "title": "Understanding HashMaps: Constant-Time Lookups in Practice",
      "summary": "Hash maps find any key almost instantly however much data they hold, until they don't. How they work, when they slow down, and what to use instead.",
      "image": "https://images.unsplash.com/photo-1625696825581-166f8343fcda?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=1025",
      "date_published": "2025-10-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Data Structures",
        "Algorithms",
        "Software Engineering"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/two-pointer-pattern-system-performance",
      "url": "https://bliztek.com/blog/post/two-pointer-pattern-system-performance",
      "title": "Efficient by Design: The Two-Pointer Pattern and System Performance",
      "summary": "Finding matching pairs in a sorted list does not need every combination. Walk inward from both ends and a single pass does it.",
      "image": "https://images.unsplash.com/photo-1623479322729-28b25c16b011?ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&q=80&w=2070",
      "date_published": "2025-10-11T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Systems Engineering",
        "Algorithms",
        "Performance",
        "Data Structures"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/aws-vpn-options-explained",
      "url": "https://bliztek.com/blog/post/aws-vpn-options-explained",
      "title": "AWS VPN Options Explained",
      "summary": "Connecting an office, remote staff or branch sites to AWS? Site-to-Site VPN, Client VPN and VPN CloudHub each fit one of those jobs.",
      "image": "https://images.unsplash.com/photo-1531403009284-440f080d1e12?q=80&w=2670&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
      "date_published": "2025-03-29T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "cloud-infrastructure",
        "AWS",
        "VPN",
        "Cloud Infrastructure",
        "Networking",
        "Security"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/dynamic-vs-static-site-strategies",
      "url": "https://bliztek.com/blog/post/dynamic-vs-static-site-strategies",
      "title": "Dynamic vs. Static Site Strategies",
      "summary": "A static site is built ahead of time and served as ready-made pages; a dynamic site builds each page on request. How that affects speed, cost and editing.",
      "image": "https://images.unsplash.com/flagged/photo-1579888798036-3b823ff1a2f5?q=80&w=2670&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
      "date_published": "2025-03-22T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "development",
        "Performance"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/navigating-the-legal-requirements-of-cookies",
      "url": "https://bliztek.com/blog/post/navigating-the-legal-requirements-of-cookies",
      "title": "Navigating the Legal Requirements for Cookies on Your Website",
      "summary": "Does your site need a cookie banner? Most U.S. state laws require a way to opt out of data sales; GDPR requires consent first. What applies to you.",
      "image": "https://images.unsplash.com/photo-1434989407504-46a53b1b8a6d?&q=80&w=2670&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
      "date_published": "2025-03-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "privacy",
        "Privacy",
        "Compliance"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/what-is-responsive-design",
      "url": "https://bliztek.com/blog/post/what-is-responsive-design",
      "title": "What is Responsive Design?",
      "summary": "Responsive design keeps one website readable on phones, tablets and desktops. The principles behind it and how to apply them.",
      "image": "https://images.unsplash.com/photo-1576153192396-180ecef2a715?q=80&w=2574&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
      "date_published": "2025-03-01T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "development",
        "Responsive Design",
        "Web Development",
        "UX"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/our-open-source-rss-feed-generator",
      "url": "https://bliztek.com/blog/post/our-open-source-rss-feed-generator",
      "title": "Our Open Source RSS Feed Generator",
      "summary": "RSS, Atom and JSON Feed let readers follow a site without social media. Our open-source Node.js library writes all three, with no dependencies.",
      "image": "https://images.unsplash.com/photo-1496449903678-68ddcb189a24?q=80&w=2340&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
      "date_published": "2024-12-30T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "open-source",
        "Open Source",
        "Node.js",
        "Content Syndication"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/how-to-generate-an-ssl-certifcate-for-development",
      "url": "https://bliztek.com/blog/post/how-to-generate-an-ssl-certifcate-for-development",
      "title": "How to Generate an SSL Certificate for Development",
      "summary": "Test HTTPS on your own machine without browser warnings: create a self-signed certificate and serve it locally with Nginx and Docker Compose.",
      "image": "https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?q=80&w=2670&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
      "date_published": "2024-12-24T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "development",
        "SSL",
        "HTTPS",
        "Web Development",
        "Docker",
        "Nginx"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/using-lhci-with-nextjs-and-github",
      "url": "https://bliztek.com/blog/post/using-lhci-with-nextjs-and-github",
      "title": "Integrating Lighthouse CI into GitHub CI/CD Workflow",
      "summary": "Catch slow pages and accessibility problems before they ship: run Lighthouse audits automatically on every pull request with GitHub Actions.",
      "image": "https://images.unsplash.com/photo-1534972195531-d756b9bfa9f2?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
      "date_published": "2024-12-13T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "devops",
        "Lighthouse CI",
        "GitHub Actions",
        "CI/CD",
        "Performance"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/why-your-website-needs-seo",
      "url": "https://bliztek.com/blog/post/why-your-website-needs-seo",
      "title": "Why Your Website Needs SEO",
      "summary": "Paid ads stop bringing visitors when the budget runs out; search rankings keep working once earned. Why SEO matters for a small business site.",
      "image": "https://images.unsplash.com/photo-1464722557942-f2cf145d3cae?q=80&w=1974&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
      "date_published": "2024-11-30T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "digital-marketing",
        "SEO",
        "Digital Marketing",
        "Organic Search"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/difference-between-frontend-and-backend-development",
      "url": "https://bliztek.com/blog/post/difference-between-frontend-and-backend-development",
      "title": "What Is the Difference Between Front-End and Back-End Development?",
      "summary": "Front-end developers build what you see and click in the browser; back-end developers build the servers and data behind it. What each does.",
      "image": "https://images.unsplash.com/photo-1511376777868-611b54f68947?q=80&w=5340&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
      "date_published": "2024-02-23T00:00:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "development",
        "Front-End",
        "Back-End",
        "Web Development",
        "Software Engineering"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/a-brief-look-at-mvc-architecture-in-react",
      "url": "https://stevendevelops.com/blog/post/a-brief-look-at-mvc-architecture-in-react",
      "title": "A Brief Look at MVC Architecture in React",
      "summary": "Today I am exploring what MVC Architecture is, and how we can apply some of those concepts to a React Application.",
      "image": "https://stevendevelops.com/images/blog/a-brief-look-at-mvc-architecture-in-react.jpg",
      "date_published": "2023-10-18T23:29:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "MVC",
        "Software Design"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/securing-your-api-defense-in-layers",
      "url": "https://stevendevelops.com/blog/post/securing-your-api-defense-in-layers",
      "title": "Securing your API: Defense in Layers",
      "summary": "In this article, I explore different strategies of implementing security controls at various levels of the OSI model.",
      "image": "https://stevendevelops.com/images/blog/securing-your-api-defense-in-layers.jpg",
      "date_published": "2023-10-15T08:26:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "security",
        "API",
        "Security",
        "OSI Model"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/choosing-between-grpc-and-restful-api",
      "url": "https://stevendevelops.com/blog/post/choosing-between-grpc-and-restful-api",
      "title": "Choosing between gRPC and RESTful API",
      "summary": "As I prepare to build an application using gRPC, I figured the best way to start is finding out what it is and how it is different from a RESTful API.",
      "image": "https://stevendevelops.com/images/blog/choosing-between-grpc-and-restful-api.jpg",
      "date_published": "2023-10-07T22:49:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "gRPC",
        "REST",
        "API"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/a-quick-glance-at-golang-for-api-development",
      "url": "https://stevendevelops.com/blog/post/a-quick-glance-at-golang-for-api-development",
      "title": "A Quick Glance at Golang for API Development",
      "summary": "Reflecting on some of the strengths and weaknesses of the Go programming language and its use in API development.",
      "image": "https://stevendevelops.com/images/blog/a-quick-glance-at-golang-for-api-development.jpg",
      "date_published": "2023-10-01T16:21:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Golang",
        "Software Development"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/my-favorite-web-development-tool-sanity",
      "url": "https://stevendevelops.com/blog/post/my-favorite-web-development-tool-sanity",
      "title": "My Favorite Web Development Tool - Sanity",
      "summary": "Sanity is my favorite tool I reach for when developing websites for clients. In this post, I detail out 3 reasons why it's my go to.",
      "image": "https://stevendevelops.com/images/blog/my-favorite-web-development-tool-sanity.jpg",
      "date_published": "2023-09-30T23:08:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "Sanity",
        "Software Engineering"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/becoming-a-ham-radio-operator",
      "url": "https://stevendevelops.com/blog/post/becoming-a-ham-radio-operator",
      "title": "Becoming a HAM Radio Operator",
      "summary": "This blog posts summarizes my reflections over the past month as I studied for the HAM Radio Operator Technician exam.",
      "image": "https://stevendevelops.com/images/blog/becoming-a-ham-radio-operator.jpg",
      "date_published": "2023-09-30T22:16:36.097Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "ham-radio",
        "Amateur Radio",
        "Radio Technician"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/part-2-deploying-an-apollo-graphql-odyssey-react-app-with-aws-amplify",
      "url": "https://stevendevelops.com/blog/post/part-2-deploying-an-apollo-graphql-odyssey-react-app-with-aws-amplify",
      "title": "Part 2: Deploying an Apollo GraphQL Odyssey React App with AWS Amplify",
      "summary": "Welcome to Part 2 of deploying our Apollo GraphQL Castronaut App with Amazon Web Services. In this post, we deploy the React client using AWS Amplify to complete the full-stack journey.",
      "image": "https://stevendevelops.com/images/blog/part-2-deploying-an-apollo-graphql-odyssey-react-app-with-aws-amplify.png",
      "date_published": "2022-04-24T06:32:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "GraphQL",
        "AWS"
      ]
    },
    {
      "id": "https://stevendevelops.com/blog/post/part-1-deploying-an-apollo-graphql-odyssey-server-with-aws-lambda",
      "url": "https://stevendevelops.com/blog/post/part-1-deploying-an-apollo-graphql-odyssey-server-with-aws-lambda",
      "title": "Part 1: Deploying an Apollo GraphQL Odyssey Server with AWS Lambda",
      "summary": "As I approached the finale of my Apollo Odyssey GraphQL journey, my adventure took an unexpected turn. Due to a recent event involving Heroku and GitHub tokens, Heroku revoked all OAuth tokens, pushing me to deploy with AWS Lambda instead.",
      "image": "https://stevendevelops.com/images/blog/part-1-deploying-an-apollo-graphql-odyssey-server-with-aws-lambda.png",
      "date_published": "2022-04-23T13:27:00.000Z",
      "authors": [
        {
          "name": "Steven Brown",
          "url": "https://stevendevelops.com"
        }
      ],
      "tags": [
        "software-engineering",
        "GraphQL",
        "AWS"
      ]
    }
  ]
}