{
  "collection": "blog",
  "label": "Blog Posts",
  "url": "https://ajcwebdev.com/posts/",
  "author": "Anthony Campolo",
  "count": 56,
  "urls": {
    "html": "https://ajcwebdev.com/posts/",
    "markdown": "https://ajcwebdev.com/posts/index.md",
    "json": "https://ajcwebdev.com/posts/index.json"
  },
  "feeds": {
    "rss": "https://ajcwebdev.com/rss.xml"
  },
  "entries": [
    {
      "title": "A First Look at Poetry",
      "slug": "first-look-poetry",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Learn how Poetry simplifies Python development by consolidating common tools for managing dependencies and environments efficiently",
      "summary": "Learn how Poetry simplifies Python development by consolidating common tools for managing dependencies and environments efficiently",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-poetry/"
      },
      "publishedAt": "2024-08-01T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2024-08-01T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-poetry/",
        "markdown": "https://ajcwebdev.com/first-look-poetry/index.md",
        "json": "https://ajcwebdev.com/first-look-poetry/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "overview",
          "text": "Overview"
        },
        {
          "depth": 3,
          "id": "python-tools-replaced-by-poetry",
          "text": "Python Tools Replaced by Poetry"
        },
        {
          "depth": 3,
          "id": "what-about-setuptools-and-wheel",
          "text": "What About Setuptools and Wheel"
        },
        {
          "depth": 2,
          "id": "getting-started",
          "text": "Getting Started"
        },
        {
          "depth": 3,
          "id": "install-poetry",
          "text": "Install Poetry"
        },
        {
          "depth": 3,
          "id": "create-and-build-a-new-project-with-poetry",
          "text": "Create and Build a New Project with Poetry"
        },
        {
          "depth": 3,
          "id": "adding-installing-and-updating-dependencies",
          "text": "Adding Installing and Updating Dependencies"
        },
        {
          "depth": 2,
          "id": "managing-environments",
          "text": "Managing Environments"
        },
        {
          "depth": 3,
          "id": "creating-and-activating-virtual-environments",
          "text": "Creating and Activating Virtual Environments"
        },
        {
          "depth": 3,
          "id": "environment-isolation-and-default-python-version",
          "text": "Environment Isolation and Default Python Version"
        },
        {
          "depth": 3,
          "id": "switching-and-deleting-environments",
          "text": "Switching and Deleting Environments"
        },
        {
          "depth": 3,
          "id": "environment-information-and-listing-environments",
          "text": "Environment Information and Listing Environments"
        },
        {
          "depth": 2,
          "id": "poetry-configuration-files",
          "text": "Poetry Configuration Files"
        },
        {
          "depth": 3,
          "id": "global-configuration-with-config-toml",
          "text": "Global Configuration with config-toml"
        },
        {
          "depth": 3,
          "id": "project-specific-local-configuration-with-poetry-toml",
          "text": "Project Specific Local Configuration with poetry-toml"
        },
        {
          "depth": 3,
          "id": "project-specific-version-controlled-configuration-with-pyproject-toml",
          "text": "Project Specific Version Controlled Configuration with pyproject-toml"
        }
      ],
      "tags": [
        "ai"
      ]
    },
    {
      "title": "A First Look at Dashmate",
      "slug": "first-look-dashmate",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "A beginner friendly tutorial for running a local version of Dash Platform with Dashmate. Includes creating an identity, data contract, and documents",
      "summary": "A beginner friendly tutorial for running a local version of Dash Platform with Dashmate. Includes creating an identity, data contract, and documents",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-dashmate/"
      },
      "publishedAt": "2024-07-15T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2024-07-15T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-dashmate/",
        "markdown": "https://ajcwebdev.com/first-look-dashmate/index.md",
        "json": "https://ajcwebdev.com/first-look-dashmate/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "overview",
          "text": "Overview"
        },
        {
          "depth": 3,
          "id": "prerequisites",
          "text": "Prerequisites"
        },
        {
          "depth": 3,
          "id": "install-dashmate",
          "text": "Install Dashmate"
        },
        {
          "depth": 2,
          "id": "setup-and-start-dashmate-local-network",
          "text": "Setup and Start Dashmate Local Network"
        },
        {
          "depth": 3,
          "id": "setup-group-of-local-nodes",
          "text": "Setup Group of Local Nodes"
        },
        {
          "depth": 3,
          "id": "start-local-group-and-check-network-status",
          "text": "Start Local Group and Check Network Status"
        },
        {
          "depth": 3,
          "id": "stop-or-restart-group",
          "text": "Stop or Restart Group"
        },
        {
          "depth": 3,
          "id": "reset-group",
          "text": "Reset Group"
        },
        {
          "depth": 2,
          "id": "setup-javascript-project",
          "text": "Setup JavaScript Project"
        },
        {
          "depth": 3,
          "id": "create-wallet",
          "text": "Create Wallet"
        },
        {
          "depth": 3,
          "id": "create-client-file-and-set-environment-variables",
          "text": "Create Client File and Set Environment Variables"
        },
        {
          "depth": 3,
          "id": "mint-local-tdash-with-wallet-command",
          "text": "Mint Local tDash with Wallet Command"
        },
        {
          "depth": 3,
          "id": "register-identity",
          "text": "Register Identity"
        },
        {
          "depth": 3,
          "id": "create-data-contract",
          "text": "Create Data Contract"
        },
        {
          "depth": 3,
          "id": "submit-and-query-documents",
          "text": "Submit and Query Documents"
        }
      ],
      "tags": [
        "blockchain"
      ]
    },
    {
      "title": "A First Look at Dash",
      "slug": "first-look-dash",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Dash is a cryptocurrency launched in 2014 that aims to be a convenient, fast, and private digital cash platform that is suitable for everyday transactions",
      "summary": "Dash is a cryptocurrency launched in 2014 that aims to be a convenient, fast, and private digital cash platform that is suitable for everyday transactions",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-dash/"
      },
      "publishedAt": "2024-04-01T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2024-04-01T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-dash/",
        "markdown": "https://ajcwebdev.com/first-look-dash/index.md",
        "json": "https://ajcwebdev.com/first-look-dash/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "dash-platform-overview",
          "text": "Dash Platform Overview"
        },
        {
          "depth": 3,
          "id": "setup-and-configure-node-project",
          "text": "Setup and Configure Node Project"
        },
        {
          "depth": 3,
          "id": "initialize-dash-client",
          "text": "Initialize Dash Client"
        },
        {
          "depth": 2,
          "id": "create-wallet-and-identity",
          "text": "Create Wallet and Identity"
        },
        {
          "depth": 3,
          "id": "add-funds-to-wallet-with-testnet-faucet",
          "text": "Add Funds to Wallet with Testnet Faucet"
        },
        {
          "depth": 3,
          "id": "register-and-retrieve-identity",
          "text": "Register and Retrieve Identity"
        },
        {
          "depth": 3,
          "id": "register-and-retrieve-name",
          "text": "Register and Retrieve Name"
        },
        {
          "depth": 2,
          "id": "data-contracts",
          "text": "Data Contracts"
        },
        {
          "depth": 3,
          "id": "register-retrieve-and-update-contract",
          "text": "Register Retrieve and Update Contract"
        },
        {
          "depth": 3,
          "id": "submit-and-retrieve-documents",
          "text": "Submit and Retrieve Documents"
        },
        {
          "depth": 3,
          "id": "update-and-delete-documents",
          "text": "Update and Delete Documents"
        },
        {
          "depth": 2,
          "id": "setup-backend-server-with-express",
          "text": "Setup Backend Server with Express"
        },
        {
          "depth": 2,
          "id": "create-next-app",
          "text": "Create Next App"
        },
        {
          "depth": 3,
          "id": "setup-react-project-structure",
          "text": "Setup React Project Structure"
        },
        {
          "depth": 3,
          "id": "add-fetch-button-to-react-app",
          "text": "Add Fetch Button to React App"
        }
      ],
      "tags": [
        "blockchain"
      ]
    },
    {
      "title": "Autogenerate Show Notes with Whisper-cpp, Llama-cpp, and Node-js",
      "slug": "autogen-shownotes",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "End-to-end scripting workflow to generate automatic show notes with LLMs from audio and video transcripts using Whisper.cpp, Llama.cpp, and Commander.js",
      "summary": "End-to-end scripting workflow to generate automatic show notes with LLMs from audio and video transcripts using Whisper.cpp, Llama.cpp, and Commander.js",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/autogen-shownotes/"
      },
      "publishedAt": "2024-03-01T00:00:00.000Z",
      "updatedAt": "2024-08-15T00:00:00.000Z",
      "freshness": {
        "label": "Updated",
        "value": "2024-08-15T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/autogen-shownotes/",
        "markdown": "https://ajcwebdev.com/autogen-shownotes/index.md",
        "json": "https://ajcwebdev.com/autogen-shownotes/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction-and-overview",
          "text": "Introduction and Overview"
        },
        {
          "depth": 2,
          "id": "project-setup",
          "text": "Project Setup"
        },
        {
          "depth": 3,
          "id": "create-directory-structure",
          "text": "Create Directory Structure"
        },
        {
          "depth": 3,
          "id": "autoshow-main-entry-point",
          "text": "AutoShow Main Entry Point"
        },
        {
          "depth": 2,
          "id": "parsing-arguments",
          "text": "Parsing Arguments"
        },
        {
          "depth": 3,
          "id": "utilities-for-process-video-command",
          "text": "Utilities for Process Video Command"
        },
        {
          "depth": 2,
          "id": "extract-and-download-audio-file",
          "text": "Extract and Download Audio File"
        },
        {
          "depth": 3,
          "id": "write-frontmatter-with-video-metadata",
          "text": "Write Frontmatter with Video Metadata"
        },
        {
          "depth": 3,
          "id": "prepare-audio-for-transcription",
          "text": "Prepare Audio for Transcription"
        },
        {
          "depth": 2,
          "id": "generate-a-formatted-transcription",
          "text": "Generate a Formatted Transcription"
        },
        {
          "depth": 3,
          "id": "setup-whisper-repo-and-model",
          "text": "Setup Whisper Repo and Model"
        },
        {
          "depth": 3,
          "id": "run-whisper-and-transform-output",
          "text": "Run Whisper and Transform Output"
        },
        {
          "depth": 2,
          "id": "generate-show-notes-with-llms",
          "text": "Generate Show Notes with LLMs"
        },
        {
          "depth": 3,
          "id": "create-show-notes-prompt",
          "text": "Create Show Notes Prompt"
        },
        {
          "depth": 3,
          "id": "run-llm-function-with-llama",
          "text": "Run LLM Function with Llama"
        },
        {
          "depth": 2,
          "id": "additional-process-commands",
          "text": "Additional Process Commands"
        },
        {
          "depth": 3,
          "id": "add-commands-to-process-multiple-videos",
          "text": "Add Commands to Process Multiple Videos"
        },
        {
          "depth": 3,
          "id": "add-command-to-process-local-files",
          "text": "Add Command to Process Local Files"
        },
        {
          "depth": 3,
          "id": "add-command-to-process-rss-feeds",
          "text": "Add Command to Process RSS Feeds"
        },
        {
          "depth": 2,
          "id": "example-show-notes-and-next-steps",
          "text": "Example Show Notes and Next Steps"
        }
      ],
      "tags": [
        "ai"
      ]
    },
    {
      "title": "Some Advice for How to Learn ChatGPT",
      "slug": "chatgpt-learning-advice",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Another AI opinion piece, this time about how someone should approach learning about ChatGPT so they can use it most effectively",
      "summary": "Another AI opinion piece, this time about how someone should approach learning about ChatGPT so they can use it most effectively",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/chatgpt-learning-advice/"
      },
      "publishedAt": "2023-06-09T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2023-06-09T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/chatgpt-learning-advice/",
        "markdown": "https://ajcwebdev.com/chatgpt-learning-advice/index.md",
        "json": "https://ajcwebdev.com/chatgpt-learning-advice/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "accomplishing-specific-tasks",
          "text": "Accomplishing Specific Tasks"
        },
        {
          "depth": 2,
          "id": "going-deeper-on-ai-models-and-current-capabilities",
          "text": "Going Deeper on AI Models and Current Capabilities"
        },
        {
          "depth": 2,
          "id": "using-chatgpt-in-your-daily-tasks",
          "text": "Using ChatGPT in Your Daily Tasks"
        },
        {
          "depth": 2,
          "id": "what-to-do-about-hallucinations",
          "text": "What to Do About Hallucinations"
        },
        {
          "depth": 2,
          "id": "learning-the-public-api-and-open-source-libraries",
          "text": "Learning the Public API and Open Source Libraries"
        },
        {
          "depth": 2,
          "id": "conclusion",
          "text": "Conclusion"
        },
        {
          "depth": 3,
          "id": "remaining-chatgpt-contentions",
          "text": "Remaining ChatGPT Contentions"
        },
        {
          "depth": 3,
          "id": "chatgpt-is-useless-and-words-arent-the-point",
          "text": "ChatGPT Is Useless and Words Arent the Point"
        },
        {
          "depth": 3,
          "id": "but-i-love-writing-and-would-never-give-it-up",
          "text": "But I Love Writing and Would NEVER Give It Up"
        },
        {
          "depth": 3,
          "id": "my-thoughts-are-constantly-evolving-and-yours-should-too",
          "text": "My Thoughts Are Constantly Evolving and Yours Should Too"
        }
      ],
      "tags": [
        "ai"
      ]
    },
    {
      "title": "The Implications of ChatGPT for DevRel",
      "slug": "chatgpt-devrel-implications",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "An opinion piece about the implications of ChatGPT on the workflows and careers of Developer Advocates and how they can best utilize it",
      "summary": "An opinion piece about the implications of ChatGPT on the workflows and careers of Developer Advocates and how they can best utilize it",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/chatgpt-devrel-implications/"
      },
      "publishedAt": "2023-06-04T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2023-06-04T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/chatgpt-devrel-implications/",
        "markdown": "https://ajcwebdev.com/chatgpt-devrel-implications/index.md",
        "json": "https://ajcwebdev.com/chatgpt-devrel-implications/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "what-about-hallucinations",
          "text": "What About Hallucinations"
        },
        {
          "depth": 3,
          "id": "a-chatgpt-challenge-for-developer-advocates",
          "text": "A ChatGPT Challenge for Developer Advocates"
        },
        {
          "depth": 3,
          "id": "why-is-no-one-in-devrel-talking-about-this",
          "text": "Why is No One in DevRel Talking About This"
        }
      ],
      "tags": [
        "ai"
      ]
    },
    {
      "title": "A First Look at tRPC",
      "slug": "first-look-trpc",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "tRPC is a TypeScript library for building end-to-end, type-safe APIs. It creates fully typed endpoints on the backend which are queried from a frontend client",
      "summary": "tRPC is a TypeScript library for building end-to-end, type-safe APIs. It creates fully typed endpoints on the backend which are queried from a frontend client",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-trpc/"
      },
      "publishedAt": "2023-03-08T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2023-03-08T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-trpc/",
        "markdown": "https://ajcwebdev.com/first-look-trpc/index.md",
        "json": "https://ajcwebdev.com/first-look-trpc/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "schema-validation-with-zod",
          "text": "Schema Validation with Zod"
        },
        {
          "depth": 3,
          "id": "similarities-and-differences-with-graphql",
          "text": "Similarities and Differences with GraphQL"
        },
        {
          "depth": 2,
          "id": "project-setup",
          "text": "Project Setup"
        },
        {
          "depth": 3,
          "id": "configure-node-and-typescript",
          "text": "Configure Node and TypeScript"
        },
        {
          "depth": 3,
          "id": "create-project-files",
          "text": "Create Project Files"
        },
        {
          "depth": 2,
          "id": "create-http-server",
          "text": "Create HTTP Server"
        },
        {
          "depth": 3,
          "id": "run-node-http-server",
          "text": "Run Node HTTP Server"
        },
        {
          "depth": 3,
          "id": "create-context-and-hello-router",
          "text": "Create Context and Hello Router"
        },
        {
          "depth": 3,
          "id": "add-input-validation-with-zod",
          "text": "Add Input Validation with Zod"
        },
        {
          "depth": 2,
          "id": "create-react-client",
          "text": "Create React Client"
        },
        {
          "depth": 3,
          "id": "configure-vite-root-component",
          "text": "Configure Vite Root Component"
        },
        {
          "depth": 3,
          "id": "create-tanstack-query-client",
          "text": "Create Tanstack Query Client"
        },
        {
          "depth": 3,
          "id": "create-http-handler",
          "text": "Create HTTP Handler"
        },
        {
          "depth": 2,
          "id": "migrate-to-next",
          "text": "Migrate to Next"
        },
        {
          "depth": 3,
          "id": "configure-project-for-next",
          "text": "Configure Project for Next"
        },
        {
          "depth": 3,
          "id": "configure-vercel-edge-runtime",
          "text": "Configure Vercel Edge Runtime"
        },
        {
          "depth": 3,
          "id": "deploy-to-vercel",
          "text": "Deploy to Vercel"
        }
      ],
      "tags": [
        "web",
        "backend"
      ]
    },
    {
      "title": "A First Look at SolidStart",
      "slug": "first-look-solidstart",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "SolidStart is a project starter and metaframework for SolidJS that provides a first-class way to build and deploy SolidJS applications",
      "summary": "SolidStart is a project starter and metaframework for SolidJS that provides a first-class way to build and deploy SolidJS applications",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-solidstart/"
      },
      "publishedAt": "2022-11-20T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2022-11-20T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-solidstart/",
        "markdown": "https://ajcwebdev.com/first-look-solidstart/index.md",
        "json": "https://ajcwebdev.com/first-look-solidstart/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "a-history-of-solidjs-and-how-it-compares-to-react",
          "text": "A History of SolidJS and How it Compares to React"
        },
        {
          "depth": 3,
          "id": "solidjs-benchmark-performance",
          "text": "SolidJS Benchmark Performance"
        },
        {
          "depth": 3,
          "id": "solidstart-motivations",
          "text": "SolidStart Motivations"
        },
        {
          "depth": 2,
          "id": "create-client-rendered-solid-project",
          "text": "Create Client Rendered Solid Project"
        },
        {
          "depth": 3,
          "id": "typescript-and-vite-project-configuration",
          "text": "TypeScript and Vite Project Configuration"
        },
        {
          "depth": 3,
          "id": "html-entry-css-styling-and-render-function",
          "text": "HTML Entry CSS Styling and Render Function"
        },
        {
          "depth": 3,
          "id": "start-development-server",
          "text": "Start Development Server"
        },
        {
          "depth": 2,
          "id": "migrate-project-to-solidstart",
          "text": "Migrate Project to SolidStart"
        },
        {
          "depth": 3,
          "id": "solidstart-scripts-and-vite-configuration",
          "text": "SolidStart Scripts and Vite Configuration"
        },
        {
          "depth": 3,
          "id": "index-route-root-and-entry-points",
          "text": "Index Route Root and Entry Points"
        },
        {
          "depth": 2,
          "id": "components-and-reactive-primitives",
          "text": "Components and Reactive Primitives"
        },
        {
          "depth": 3,
          "id": "create-signal",
          "text": "Create Signal"
        },
        {
          "depth": 3,
          "id": "create-effect",
          "text": "Create Effect"
        },
        {
          "depth": 3,
          "id": "create-route-data",
          "text": "Create Route Data"
        },
        {
          "depth": 2,
          "id": "api-routes",
          "text": "API Routes"
        },
        {
          "depth": 2,
          "id": "deployment-adapters",
          "text": "Deployment Adapters"
        },
        {
          "depth": 3,
          "id": "deploy-to-netlify",
          "text": "Deploy to Netlify"
        },
        {
          "depth": 3,
          "id": "deploy-to-vercel",
          "text": "Deploy to Vercel"
        },
        {
          "depth": 3,
          "id": "deploy-to-cloudflare",
          "text": "Deploy to Cloudflare"
        }
      ],
      "tags": [
        "web",
        "frontend"
      ]
    },
    {
      "title": "A First Look at create-t3-app",
      "slug": "first-look-create-t3-app",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "create-t3-app is a fullstack, typesafe React framework with Next.js, tRPC, Prisma, and Tailwind deployed on Vercel and Fly",
      "summary": "create-t3-app is a fullstack, typesafe React framework with Next.js, tRPC, Prisma, and Tailwind deployed on Vercel and Fly",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-create-t3-app/"
      },
      "publishedAt": "2022-08-13T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2022-08-13T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-create-t3-app/",
        "markdown": "https://ajcwebdev.com/first-look-create-t3-app/index.md",
        "json": "https://ajcwebdev.com/first-look-create-t3-app/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "why-the-t3-stack-was-created",
          "text": "Why the t3 Stack Was Created"
        },
        {
          "depth": 3,
          "id": "history-of-the-t3-stack-and-create-nex-app",
          "text": "History of the t3 Stack and Create Nex App"
        },
        {
          "depth": 2,
          "id": "create-t3-app",
          "text": "Create t3 App"
        },
        {
          "depth": 3,
          "id": "project-structure",
          "text": "Project Structure"
        },
        {
          "depth": 3,
          "id": "tailwind-styles",
          "text": "Tailwind Styles"
        },
        {
          "depth": 2,
          "id": "provision-postgresql-database",
          "text": "Provision PostgreSQL Database"
        },
        {
          "depth": 3,
          "id": "add-posts-model-to-prisma-schema",
          "text": "Add Posts Model to Prisma Schema"
        },
        {
          "depth": 3,
          "id": "initialize-railway-database-and-run-migration",
          "text": "Initialize Railway Database and Run Migration"
        },
        {
          "depth": 3,
          "id": "seed-a-blog-post",
          "text": "Seed a Blog Post"
        },
        {
          "depth": 2,
          "id": "query-posts-with-trpc",
          "text": "Query Posts with tRPC"
        },
        {
          "depth": 3,
          "id": "create-post-router",
          "text": "Create Post Router"
        },
        {
          "depth": 3,
          "id": "create-app-router",
          "text": "Create App Router"
        },
        {
          "depth": 3,
          "id": "query-posts-with-usequery",
          "text": "Query Posts with useQuery"
        },
        {
          "depth": 2,
          "id": "add-cells-for-declarative-data-fetching",
          "text": "Add Cells for Declarative Data Fetching"
        },
        {
          "depth": 3,
          "id": "create-default-query-cell",
          "text": "Create Default Query Cell"
        },
        {
          "depth": 3,
          "id": "create-post-page",
          "text": "Create Post Page"
        },
        {
          "depth": 3,
          "id": "create-posts-cell",
          "text": "Create Posts Cell"
        },
        {
          "depth": 2,
          "id": "deployment",
          "text": "Deployment"
        },
        {
          "depth": 3,
          "id": "deploy-to-vercel",
          "text": "Deploy to Vercel"
        },
        {
          "depth": 3,
          "id": "deploy-to-fly",
          "text": "Deploy to Fly"
        },
        {
          "depth": 2,
          "id": "resources-articles-and-videos",
          "text": "Resources Articles and Videos"
        }
      ],
      "tags": [
        "frontend",
        "backend",
        "deployment"
      ]
    },
    {
      "title": "Does Remix Scale",
      "slug": "does-remix-scale",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Zach Leatherman recently put out a provocative benchmark to compare different web frameworks on the speed at which they can generate a static site",
      "summary": "Zach Leatherman recently put out a provocative benchmark to compare different web frameworks on the speed at which they can generate a static site",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/does-remix-scale/"
      },
      "publishedAt": "2022-08-02T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2022-08-02T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/does-remix-scale/",
        "markdown": "https://ajcwebdev.com/does-remix-scale/index.md",
        "json": "https://ajcwebdev.com/does-remix-scale/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "the-results-in-a-nutshell",
          "text": "The Results in a Nutshell"
        },
        {
          "depth": 2,
          "id": "why-is-this-contrived-and-misleading",
          "text": "Why is this Contrived and Misleading"
        },
        {
          "depth": 2,
          "id": "benchmarks-as-propaganda",
          "text": "Benchmarks as Propaganda"
        },
        {
          "depth": 2,
          "id": "open-source-your-benchmark-or-shut-up",
          "text": "Open Source Your Benchmark or Shut Up"
        }
      ],
      "tags": [
        "web",
        "frontend"
      ]
    },
    {
      "title": "A First Look at IPFS",
      "slug": "first-look-ipfs",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "IPFS is a protocol defining a cryptographic-hashed and content-addressed peer-to-peer filesystem for directories and files",
      "summary": "IPFS is a protocol defining a cryptographic-hashed and content-addressed peer-to-peer filesystem for directories and files",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-ipfs/"
      },
      "publishedAt": "2022-06-12T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2022-06-12T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-ipfs/",
        "markdown": "https://ajcwebdev.com/first-look-ipfs/index.md",
        "json": "https://ajcwebdev.com/first-look-ipfs/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "getting-started-with-ipfs",
          "text": "Getting Started with IPFS"
        },
        {
          "depth": 3,
          "id": "install-ipfs-cli",
          "text": "Install IPFS CLI"
        },
        {
          "depth": 3,
          "id": "initialize-ipfs-repository",
          "text": "Initialize IPFS Repository"
        },
        {
          "depth": 3,
          "id": "get-peer-identity",
          "text": "Get Peer Identity"
        },
        {
          "depth": 3,
          "id": "list-project-files",
          "text": "List Project Files"
        },
        {
          "depth": 2,
          "id": "publish-a-website-on-ipfs",
          "text": "Publish a Website on IPFS"
        },
        {
          "depth": 3,
          "id": "create-project-files",
          "text": "Create Project Files"
        },
        {
          "depth": 3,
          "id": "add-files-and-directories-to-ipfs",
          "text": "Add Files and Directories to IPFS"
        },
        {
          "depth": 3,
          "id": "pin-repository",
          "text": "Pin Repository"
        },
        {
          "depth": 3,
          "id": "start-the-ipfs-daemon",
          "text": "Start the IPFS Daemon"
        },
        {
          "depth": 2,
          "id": "interplanetary-name-system",
          "text": "InterPlanetary Name System"
        },
        {
          "depth": 3,
          "id": "example-ipns-setup-with-cli",
          "text": "Example IPNS Setup with CLI"
        },
        {
          "depth": 2,
          "id": "ipfs-gateways",
          "text": "IPFS Gateways"
        },
        {
          "depth": 3,
          "id": "path",
          "text": "Path"
        },
        {
          "depth": 3,
          "id": "subdomain",
          "text": "Subdomain"
        },
        {
          "depth": 2,
          "id": "dnslink",
          "text": "DNSLink"
        },
        {
          "depth": 3,
          "id": "link-cloudflare-dns-to-dnslink",
          "text": "Link Cloudflare DNS to DNSLink"
        },
        {
          "depth": 2,
          "id": "reflections",
          "text": "Reflections"
        }
      ],
      "tags": [
        "blockchain"
      ]
    },
    {
      "title": "Storing NFT Information with Fauna",
      "slug": "storing-nft-information-with-fauna",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Learn how to create and deploy a Solidity smart contract to an Ethereum testnet, mint an NFT, and store NFT information in a Fauna database",
      "summary": "Learn how to create and deploy a Solidity smart contract to an Ethereum testnet, mint an NFT, and store NFT information in a Fauna database",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/storing-nft-information-with-fauna/"
      },
      "publishedAt": "2022-03-05T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2022-03-05T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/storing-nft-information-with-fauna/",
        "markdown": "https://ajcwebdev.com/storing-nft-information-with-fauna/index.md",
        "json": "https://ajcwebdev.com/storing-nft-information-with-fauna/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "fauna-and-nfts",
          "text": "Fauna and NFTs"
        },
        {
          "depth": 3,
          "id": "technology-in-this-project",
          "text": "Technology in this Project"
        },
        {
          "depth": 2,
          "id": "connect-to-alchemy-node",
          "text": "Connect to Alchemy Node"
        },
        {
          "depth": 3,
          "id": "create-an-alchemy-account",
          "text": "Create an Alchemy Account"
        },
        {
          "depth": 3,
          "id": "create-an-alchemy-application",
          "text": "Create an Alchemy Application"
        },
        {
          "depth": 2,
          "id": "create-hardhat-project",
          "text": "Create Hardhat Project"
        },
        {
          "depth": 3,
          "id": "connect-metamask-to-ropsten",
          "text": "Connect MetaMask to Ropsten"
        },
        {
          "depth": 3,
          "id": "add-ether-from-a-faucet",
          "text": "Add Ether from a Faucet"
        },
        {
          "depth": 3,
          "id": "initialize-the-hardhat-environment",
          "text": "Initialize the Hardhat Environment"
        },
        {
          "depth": 2,
          "id": "write-the-contract",
          "text": "Write the Contract"
        },
        {
          "depth": 3,
          "id": "hardhat-configuration-file",
          "text": "Hardhat Configuration File"
        },
        {
          "depth": 3,
          "id": "compile-the-contract",
          "text": "Compile the Contract"
        },
        {
          "depth": 2,
          "id": "mint-an-nft",
          "text": "Mint an NFT"
        },
        {
          "depth": 3,
          "id": "create-fauna-database",
          "text": "Create Fauna Database"
        },
        {
          "depth": 3,
          "id": "upload-graphql-schema",
          "text": "Upload GraphQL Schema"
        },
        {
          "depth": 3,
          "id": "create-mint-script",
          "text": "Create Mint Script"
        },
        {
          "depth": 3,
          "id": "save-information-in-fauna-database",
          "text": "Save Information in Fauna Database"
        },
        {
          "depth": 2,
          "id": "summary",
          "text": "Summary"
        }
      ],
      "tags": [
        "blockchain"
      ]
    },
    {
      "title": "A First Look at Ethers and Hardhat",
      "slug": "first-look-ethers-and-hardhat",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "This example uses Hardhat and Ethers to compile a smart contract written in Solidity and deploy that contract to an Ethereum test network with Alchemy",
      "summary": "This example uses Hardhat and Ethers to compile a smart contract written in Solidity and deploy that contract to an Ethereum test network with Alchemy",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-ethers-and-hardhat/"
      },
      "publishedAt": "2022-03-04T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2022-03-04T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-ethers-and-hardhat/",
        "markdown": "https://ajcwebdev.com/first-look-ethers-and-hardhat/index.md",
        "json": "https://ajcwebdev.com/first-look-ethers-and-hardhat/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "create-project",
          "text": "Create Project"
        },
        {
          "depth": 3,
          "id": "install-dependencies",
          "text": "Install Dependencies"
        },
        {
          "depth": 3,
          "id": "initialize-hardhat-environment",
          "text": "Initialize Hardhat Environment"
        },
        {
          "depth": 3,
          "id": "sample-deployment-script",
          "text": "Sample Deployment Script"
        },
        {
          "depth": 3,
          "id": "hardhat-configuration",
          "text": "Hardhat Configuration"
        },
        {
          "depth": 3,
          "id": "greeter-solidity-contract",
          "text": "Greeter Solidity Contract"
        },
        {
          "depth": 2,
          "id": "deploy-to-testnet",
          "text": "Deploy to Testnet"
        },
        {
          "depth": 3,
          "id": "compile-application-binary-interface",
          "text": "Compile Application Binary Interface"
        },
        {
          "depth": 3,
          "id": "start-test-node",
          "text": "Start Test Node"
        },
        {
          "depth": 3,
          "id": "run-deployment-script",
          "text": "Run Deployment Script"
        },
        {
          "depth": 2,
          "id": "connect-to-metamask",
          "text": "Connect to MetaMask"
        },
        {
          "depth": 3,
          "id": "import-account-into-metamask",
          "text": "Import Account into MetaMask"
        },
        {
          "depth": 2,
          "id": "create-react-app",
          "text": "Create React App"
        },
        {
          "depth": 3,
          "id": "start-development-server",
          "text": "Start Development Server"
        },
        {
          "depth": 3,
          "id": "connect-react-app-to-metamask",
          "text": "Connect React App to MetaMask"
        },
        {
          "depth": 2,
          "id": "deploy-to-ropsten-testnet",
          "text": "Deploy to Ropsten Testnet"
        },
        {
          "depth": 3,
          "id": "connect-metamask-to-ropsten",
          "text": "Connect MetaMask to Ropsten"
        },
        {
          "depth": 3,
          "id": "create-an-alchemy-account",
          "text": "Create an Alchemy Account"
        },
        {
          "depth": 3,
          "id": "create-an-alchemy-application",
          "text": "Create an Alchemy Application"
        },
        {
          "depth": 3,
          "id": "get-alchemy-key",
          "text": "Get Alchemy Key"
        },
        {
          "depth": 3,
          "id": "add-alchemy-endpoint-to-hardhat-configuration",
          "text": "Add Alchemy Endpoint to Hardhat Configuration"
        },
        {
          "depth": 3,
          "id": "deploy-contract-to-ropsten",
          "text": "Deploy Contract to Ropsten"
        }
      ],
      "tags": [
        "blockchain"
      ]
    },
    {
      "title": "Querying MongoDB with Prisma and Railway",
      "slug": "query-mongodb-with-prisma-and-railway",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Learn how to deploy and host a MongoDB database with Railway and query data by connecting to the database with Prisma Client",
      "summary": "Learn how to deploy and host a MongoDB database with Railway and query data by connecting to the database with Prisma Client",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/query-mongodb-with-prisma-and-railway/"
      },
      "publishedAt": "2022-02-01T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2022-02-01T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/query-mongodb-with-prisma-and-railway/",
        "markdown": "https://ajcwebdev.com/query-mongodb-with-prisma-and-railway/index.md",
        "json": "https://ajcwebdev.com/query-mongodb-with-prisma-and-railway/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "create-prisma-project",
          "text": "Create Prisma Project"
        },
        {
          "depth": 3,
          "id": "initialize-prisma-schema",
          "text": "Initialize Prisma Schema"
        },
        {
          "depth": 3,
          "id": "prisma-schema",
          "text": "Prisma Schema"
        },
        {
          "depth": 2,
          "id": "provision-a-mongodb-database-with-railway",
          "text": "Provision a MongoDB Database with Railway"
        },
        {
          "depth": 3,
          "id": "railway-dashboard",
          "text": "Railway Dashboard"
        },
        {
          "depth": 3,
          "id": "railway-cli",
          "text": "Railway CLI"
        },
        {
          "depth": 2,
          "id": "connect-railway-database-to-prisma-project",
          "text": "Connect Railway Database to Prisma Project"
        },
        {
          "depth": 3,
          "id": "set-environment-variable",
          "text": "Set Environment Variable"
        },
        {
          "depth": 3,
          "id": "seed-database",
          "text": "Seed Database"
        },
        {
          "depth": 3,
          "id": "generate-prisma-client",
          "text": "Generate Prisma Client"
        },
        {
          "depth": 2,
          "id": "create-a-script-to-query-the-database",
          "text": "Create a Script to Query the Database"
        },
        {
          "depth": 3,
          "id": "run-the-script",
          "text": "Run the Script"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at Astro",
      "slug": "first-look-astro",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Astro is a web framework that supports the Islands Architecture and includes integrations for React, Svelte, Vue, Solid, and many more",
      "summary": "Astro is a web framework that supports the Islands Architecture and includes integrations for React, Svelte, Vue, Solid, and many more",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-astro/"
      },
      "publishedAt": "2021-11-27T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-11-27T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-astro/",
        "markdown": "https://ajcwebdev.com/first-look-astro/index.md",
        "json": "https://ajcwebdev.com/first-look-astro/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "partial-hydration",
          "text": "Partial Hydration"
        },
        {
          "depth": 3,
          "id": "client-directives",
          "text": "Client Directives"
        },
        {
          "depth": 2,
          "id": "create-project",
          "text": "Create Project"
        },
        {
          "depth": 3,
          "id": "install-astro-dependency",
          "text": "Install Astro Dependency"
        },
        {
          "depth": 3,
          "id": "add-cli-commands",
          "text": "Add CLI Commands"
        },
        {
          "depth": 3,
          "id": "create-an-astro-page",
          "text": "Create an Astro Page"
        },
        {
          "depth": 3,
          "id": "start-development-server",
          "text": "Start Development Server"
        },
        {
          "depth": 3,
          "id": "add-styling",
          "text": "Add Styling"
        },
        {
          "depth": 3,
          "id": "create-a-markdown-page",
          "text": "Create a Markdown Page"
        },
        {
          "depth": 2,
          "id": "add-components",
          "text": "Add Components"
        },
        {
          "depth": 3,
          "id": "create-a-react-component",
          "text": "Create a React Component"
        },
        {
          "depth": 3,
          "id": "create-a-svelte-component",
          "text": "Create a Svelte Component"
        },
        {
          "depth": 3,
          "id": "create-a-vue-component",
          "text": "Create a Vue Component"
        },
        {
          "depth": 3,
          "id": "add-graphql-data-fetching",
          "text": "Add GraphQL Data Fetching"
        },
        {
          "depth": 2,
          "id": "deploy-to-netlify",
          "text": "Deploy to Netlify"
        },
        {
          "depth": 3,
          "id": "create-a-github-repository",
          "text": "Create a GitHub Repository"
        },
        {
          "depth": 3,
          "id": "connect-github-repository-to-netlify",
          "text": "Connect GitHub Repository to Netlify"
        }
      ],
      "tags": [
        "web",
        "frontend"
      ]
    },
    {
      "title": "What is Partial Hydration",
      "slug": "what-is-partial-hydration",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Hydration converts static HTML into dynamic pages with client-side JS. Partial hydration only hydrates the components of an app that need to be interactive",
      "summary": "Hydration converts static HTML into dynamic pages with client-side JS. Partial hydration only hydrates the components of an app that need to be interactive",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/what-is-partial-hydration/"
      },
      "publishedAt": "2021-11-22T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-11-22T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/what-is-partial-hydration/",
        "markdown": "https://ajcwebdev.com/what-is-partial-hydration/index.md",
        "json": "https://ajcwebdev.com/what-is-partial-hydration/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "to-hydrate-or-not-to-hydrate",
          "text": "To Hydrate or Not to Hydrate"
        },
        {
          "depth": 3,
          "id": "partial-hydration-and-progressive-rehydration",
          "text": "Partial Hydration and Progressive Rehydration"
        },
        {
          "depth": 3,
          "id": "islands-of-interactivity",
          "text": "Islands of Interactivity"
        },
        {
          "depth": 2,
          "id": "adding-partial-hydration-to-existing-frameworks",
          "text": "Adding Partial Hydration to Existing Frameworks"
        },
        {
          "depth": 3,
          "id": "react",
          "text": "React"
        },
        {
          "depth": 3,
          "id": "preact",
          "text": "Preact"
        },
        {
          "depth": 3,
          "id": "vue",
          "text": "Vue"
        },
        {
          "depth": 3,
          "id": "solid",
          "text": "Solid"
        },
        {
          "depth": 3,
          "id": "svelte",
          "text": "Svelte"
        },
        {
          "depth": 2,
          "id": "frameworks-built-for-partial-hydration",
          "text": "Frameworks Built for Partial Hydration"
        },
        {
          "depth": 3,
          "id": "marko",
          "text": "Marko"
        },
        {
          "depth": 3,
          "id": "elder-js",
          "text": "Elder-js"
        },
        {
          "depth": 3,
          "id": "astro",
          "text": "Astro"
        },
        {
          "depth": 3,
          "id": "slinkity",
          "text": "Slinkity"
        },
        {
          "depth": 3,
          "id": "iles",
          "text": "iles"
        },
        {
          "depth": 3,
          "id": "qwik",
          "text": "Qwik"
        },
        {
          "depth": 2,
          "id": "conclusion",
          "text": "Conclusion"
        }
      ],
      "tags": [
        "web",
        "frontend"
      ]
    },
    {
      "title": "How to Display a Custom Daily Greeting",
      "slug": "display-custom-daily-greeting",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Learn how to use JavaScript to create a custom daily message displaying a different greeting depending on the day of the week",
      "summary": "Learn how to use JavaScript to create a custom daily message displaying a different greeting depending on the day of the week",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/display-custom-daily-greeting/"
      },
      "publishedAt": "2021-11-10T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-11-10T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/display-custom-daily-greeting/",
        "markdown": "https://ajcwebdev.com/display-custom-daily-greeting/index.md",
        "json": "https://ajcwebdev.com/display-custom-daily-greeting/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "create-a-script-with-a-weekday-array",
          "text": "Create a Script with a Weekday Array"
        },
        {
          "depth": 3,
          "id": "set-weekday-value-to-the-current-date",
          "text": "Set Weekday Value to the Current Date"
        },
        {
          "depth": 3,
          "id": "write-to-the-document",
          "text": "Write to the Document"
        },
        {
          "depth": 3,
          "id": "noscript-fallback",
          "text": "Noscript Fallback"
        },
        {
          "depth": 2,
          "id": "full-script",
          "text": "Full Script"
        }
      ],
      "tags": [
        "web",
        "frontend"
      ]
    },
    {
      "title": "A First Look at Oak",
      "slug": "first-look-oak",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Oak is a middleware framework for Deno's native HTTP server and Deno Deploy inspired by Koa. In this tutorial we build an Oak REST API deployed on Deno Deploy",
      "summary": "Oak is a middleware framework for Deno's native HTTP server and Deno Deploy inspired by Koa. In this tutorial we build an Oak REST API deployed on Deno Deploy",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-oak/"
      },
      "publishedAt": "2021-11-02T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-11-02T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-oak/",
        "markdown": "https://ajcwebdev.com/first-look-oak/index.md",
        "json": "https://ajcwebdev.com/first-look-oak/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "setup",
          "text": "Setup"
        },
        {
          "depth": 3,
          "id": "install-deno-executable",
          "text": "Install Deno Executable"
        },
        {
          "depth": 3,
          "id": "install-deployctl",
          "text": "Install deployctl"
        },
        {
          "depth": 3,
          "id": "create-project-files",
          "text": "Create Project Files"
        },
        {
          "depth": 2,
          "id": "create-deno-server",
          "text": "Create Deno Server"
        },
        {
          "depth": 3,
          "id": "run-deno-server",
          "text": "Run Deno Server"
        },
        {
          "depth": 2,
          "id": "create-oak-server",
          "text": "Create Oak Server"
        },
        {
          "depth": 3,
          "id": "application-class",
          "text": "Application Class"
        },
        {
          "depth": 3,
          "id": "respond-with-html",
          "text": "Respond with HTML"
        },
        {
          "depth": 3,
          "id": "add-router",
          "text": "Add Router"
        },
        {
          "depth": 2,
          "id": "deno-deploy",
          "text": "Deno Deploy"
        },
        {
          "depth": 3,
          "id": "run-oak-server-with-deployctl",
          "text": "Run Oak Server with deployctl"
        },
        {
          "depth": 3,
          "id": "initialize-github-repository",
          "text": "Initialize GitHub Repository"
        },
        {
          "depth": 3,
          "id": "install-the-deno-deploy-github-app",
          "text": "Install the Deno Deploy GitHub App"
        },
        {
          "depth": 3,
          "id": "sign-up-for-deno-deploy",
          "text": "Sign Up for Deno Deploy"
        },
        {
          "depth": 3,
          "id": "create-deno-deploy-project",
          "text": "Create Deno Deploy Project"
        },
        {
          "depth": 3,
          "id": "connect-github-repository",
          "text": "Connect GitHub Repository"
        }
      ],
      "tags": [
        "web",
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at Nuxt 3",
      "slug": "first-look-nuxt-3",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Nuxt is a Vue metaframework for building performant web applications while maintaining an intuitive developer experience",
      "summary": "Nuxt is a Vue metaframework for building performant web applications while maintaining an intuitive developer experience",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-nuxt-3/"
      },
      "publishedAt": "2021-10-15T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-10-15T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-nuxt-3/",
        "markdown": "https://ajcwebdev.com/first-look-nuxt-3/index.md",
        "json": "https://ajcwebdev.com/first-look-nuxt-3/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "migrating-from-nuxt-2-to-nuxt-3",
          "text": "Migrating from Nuxt 2 to Nuxt 3"
        },
        {
          "depth": 2,
          "id": "create-nuxt-3-project-from-scratch",
          "text": "Create Nuxt 3 Project from Scratch"
        },
        {
          "depth": 3,
          "id": "app-component",
          "text": "App Component"
        },
        {
          "depth": 3,
          "id": "project-scripts",
          "text": "Project Scripts"
        },
        {
          "depth": 3,
          "id": "start-development-server",
          "text": "Start Development Server"
        },
        {
          "depth": 3,
          "id": "build-for-production",
          "text": "Build for Production"
        },
        {
          "depth": 3,
          "id": "pages-directory",
          "text": "Pages Directory"
        },
        {
          "depth": 2,
          "id": "server-engine",
          "text": "Server Engine"
        },
        {
          "depth": 3,
          "id": "server-directory-for-api-routes",
          "text": "Server Directory for API Routes"
        },
        {
          "depth": 2,
          "id": "deployment",
          "text": "Deployment"
        },
        {
          "depth": 3,
          "id": "deploy-to-vercel",
          "text": "Deploy to Vercel"
        },
        {
          "depth": 3,
          "id": "deploy-to-netlify",
          "text": "Deploy to Netlify"
        }
      ],
      "tags": [
        "web",
        "frontend"
      ]
    },
    {
      "title": "Why Im Hung Up on the Term Fullstack",
      "slug": "hung-up-on-fullstack",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "What is the definition of fullstack? An examination of when it is or isn't appropriate to categorize something as fullstack",
      "summary": "What is the definition of fullstack? An examination of when it is or isn't appropriate to categorize something as fullstack",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/hung-up-on-fullstack/"
      },
      "publishedAt": "2021-10-05T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-10-05T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/hung-up-on-fullstack/",
        "markdown": "https://ajcwebdev.com/hung-up-on-fullstack/index.md",
        "json": "https://ajcwebdev.com/hung-up-on-fullstack/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "why-is-this-personal-for-me",
          "text": "Why is this personal for me"
        },
        {
          "depth": 2,
          "id": "what-is-the-definition-of-full",
          "text": "What is the definition of Full"
        },
        {
          "depth": 2,
          "id": "is-there-actually-just-a-frontend-and-backend",
          "text": "Is there actually just a frontend and backend"
        },
        {
          "depth": 2,
          "id": "what-else-should-be-included-in-the-definition-of-fullstack",
          "text": "What else should be included in the definition of fullstack"
        }
      ],
      "tags": [
        "web",
        "frontend",
        "backend"
      ]
    },
    {
      "title": "Three Ways to Deploy a Serverless GraphQL API",
      "slug": "deploy-gql-serverless-with-lambda",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "How to deploy Apollo Server and GraphQL Yoga on serverless functions with Netlify Functions, Serverless Framework, and AWS Amplify",
      "summary": "How to deploy Apollo Server and GraphQL Yoga on serverless functions with Netlify Functions, Serverless Framework, and AWS Amplify",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/deploy-gql-serverless-with-lambda/"
      },
      "publishedAt": "2021-10-04T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-10-04T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/deploy-gql-serverless-with-lambda/",
        "markdown": "https://ajcwebdev.com/deploy-gql-serverless-with-lambda/index.md",
        "json": "https://ajcwebdev.com/deploy-gql-serverless-with-lambda/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "pros-and-cons",
          "text": "Pros and Cons"
        },
        {
          "depth": 2,
          "id": "deployment-providers",
          "text": "Deployment Providers"
        },
        {
          "depth": 3,
          "id": "netlify-functions",
          "text": "Netlify Functions"
        },
        {
          "depth": 3,
          "id": "serverless-framework",
          "text": "Serverless Framework"
        },
        {
          "depth": 3,
          "id": "amplify",
          "text": "Amplify"
        },
        {
          "depth": 2,
          "id": "serve-apollo-server-locally",
          "text": "Serve Apollo Server Locally"
        },
        {
          "depth": 3,
          "id": "apolloserver",
          "text": "ApolloServer"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-apollo-server-locally",
          "text": "Run test queries on Apollo Server Locally"
        },
        {
          "depth": 3,
          "id": "apollo-server-final-project-structure",
          "text": "Apollo Server Final Project Structure"
        },
        {
          "depth": 2,
          "id": "deploy-apollo-server-lambda-with-netlify",
          "text": "Deploy Apollo Server Lambda with Netlify"
        },
        {
          "depth": 3,
          "id": "apolloserver-2",
          "text": "ApolloServer"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-apollo-server-lambda-netlify-locally",
          "text": "Run test queries on Apollo Server Lambda Netlify Locally"
        },
        {
          "depth": 3,
          "id": "create-github-repo-and-connect-to-netlify",
          "text": "Create GitHub Repo and Connect to Netlify"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-apollo-server-lambda-netlify",
          "text": "Run test queries on Apollo Server Lambda Netlify"
        },
        {
          "depth": 3,
          "id": "apollo-server-lambda-netlify-final-project-structure",
          "text": "Apollo Server Lambda Netlify Final Project Structure"
        },
        {
          "depth": 2,
          "id": "deploy-apollo-server-lambda-with-serverless-framework",
          "text": "Deploy Apollo Server Lambda with Serverless Framework"
        },
        {
          "depth": 3,
          "id": "apolloserver-3",
          "text": "ApolloServer"
        },
        {
          "depth": 3,
          "id": "serverless-framework-configuration",
          "text": "Serverless Framework Configuration"
        },
        {
          "depth": 3,
          "id": "upload-to-aws-with-sls-deploy",
          "text": "Upload to AWS with sls deploy"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-apollo-server-lambda-serverless",
          "text": "Run test queries on Apollo Server Lambda Serverless"
        },
        {
          "depth": 3,
          "id": "apollo-server-lambda-serverless-final-project-structure",
          "text": "Apollo Server Lambda Serverless Final Project Structure"
        },
        {
          "depth": 2,
          "id": "deploy-apollo-server-lambda-with-amplify",
          "text": "Deploy Apollo Server Lambda with Amplify"
        },
        {
          "depth": 3,
          "id": "create-backend-with-amplify-add-api",
          "text": "Create backend with amplify add api"
        },
        {
          "depth": 3,
          "id": "apolloserver-4",
          "text": "ApolloServer"
        },
        {
          "depth": 3,
          "id": "upload-to-aws-with-amplify-push",
          "text": "Upload to AWS with amplify push"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-apollo-server-lambda-amplify",
          "text": "Run test queries on Apollo Server Lambda Amplify"
        },
        {
          "depth": 3,
          "id": "apollo-server-lambda-amplify-final-project-structure",
          "text": "Apollo Server Lambda Amplify Final Project Structure"
        },
        {
          "depth": 2,
          "id": "serve-graphql-yoga-locally",
          "text": "Serve GraphQL Yoga Locally"
        },
        {
          "depth": 3,
          "id": "graphqlserver",
          "text": "GraphQLServer"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-graphql-yoga-locally",
          "text": "Run test queries on GraphQL Yoga Locally"
        },
        {
          "depth": 3,
          "id": "graphql-yoga-final-project-structure",
          "text": "GraphQL Yoga Final Project Structure"
        },
        {
          "depth": 2,
          "id": "deploy-graphql-yoga-with-netlify",
          "text": "Deploy GraphQL Yoga with Netlify"
        },
        {
          "depth": 3,
          "id": "graphqlserverlambda",
          "text": "GraphQLServerLambda"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-graphql-yoga-netlify-locally",
          "text": "Run test queries on GraphQL Yoga Netlify Locally"
        },
        {
          "depth": 3,
          "id": "create-github-repo-and-connect-graphql-yoga-to-netlify",
          "text": "Create GitHub Repo and Connect GraphQL Yoga to Netlify"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-graphql-yoga-netlify",
          "text": "Run test queries on GraphQL Yoga Netlify"
        },
        {
          "depth": 3,
          "id": "graphql-yoga-netlify-final-project-structure",
          "text": "GraphQL Yoga Netlify Final Project Structure"
        },
        {
          "depth": 2,
          "id": "deploy-graphql-yoga-with-serverless-framework",
          "text": "Deploy GraphQL Yoga with Serverless Framework"
        },
        {
          "depth": 3,
          "id": "graphqlserverlambda-2",
          "text": "GraphQLServerLambda"
        },
        {
          "depth": 3,
          "id": "serverless-framework-configuration-2",
          "text": "Serverless Framework Configuration"
        },
        {
          "depth": 3,
          "id": "upload-to-aws-with-sls-deploy-2",
          "text": "Upload to AWS with sls deploy"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-graphql-yoga-serverless",
          "text": "Run test queries on GraphQL Yoga Serverless"
        },
        {
          "depth": 3,
          "id": "graphql-yoga-serverless-final-project-structure",
          "text": "GraphQL Yoga Serverless Final Project Structure"
        },
        {
          "depth": 2,
          "id": "deploy-graphql-yoga-with-amplify",
          "text": "Deploy GraphQL Yoga with Amplify"
        },
        {
          "depth": 3,
          "id": "create-backend-with-amplify-add-api-2",
          "text": "Create backend with amplify add api"
        },
        {
          "depth": 3,
          "id": "graphqlserverlambda-3",
          "text": "GraphQLServerLambda"
        },
        {
          "depth": 3,
          "id": "upload-to-aws-with-amplify-push-2",
          "text": "Upload to AWS with amplify push"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-graphql-yoga-amplify",
          "text": "Run test queries on GraphQL Yoga Amplify"
        },
        {
          "depth": 3,
          "id": "graphql-yoga-amplify-final-project-structure",
          "text": "GraphQL Yoga Amplify Final Project Structure"
        }
      ],
      "tags": [
        "backend",
        "graphql",
        "deployment"
      ]
    },
    {
      "title": "A First Look at Pulumi",
      "slug": "first-look-pulumi",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Pulumi provides open source infrastructure as code SDKs for creating, deploying, and managing infrastructure on multiple clouds in multiple languages",
      "summary": "Pulumi provides open source infrastructure as code SDKs for creating, deploying, and managing infrastructure on multiple clouds in multiple languages",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-pulumi/"
      },
      "publishedAt": "2021-09-27T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-09-27T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-pulumi/",
        "markdown": "https://ajcwebdev.com/first-look-pulumi/index.md",
        "json": "https://ajcwebdev.com/first-look-pulumi/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "setup",
          "text": "Setup"
        },
        {
          "depth": 3,
          "id": "install-pulumi-cli",
          "text": "Install Pulumi CLI"
        },
        {
          "depth": 3,
          "id": "configure-aws-credentials",
          "text": "Configure AWS Credentials"
        },
        {
          "depth": 3,
          "id": "login-to-pulumi",
          "text": "Login to Pulumi"
        },
        {
          "depth": 2,
          "id": "create-a-new-pulumi-project",
          "text": "Create a New Pulumi Project"
        },
        {
          "depth": 3,
          "id": "pulumi-yaml-files",
          "text": "Pulumi Yaml Files"
        },
        {
          "depth": 3,
          "id": "index-file",
          "text": "Index File"
        },
        {
          "depth": 3,
          "id": "html-index-file",
          "text": "HTML Index File"
        },
        {
          "depth": 2,
          "id": "deploy-to-pulumi-cloud",
          "text": "Deploy to Pulumi Cloud"
        },
        {
          "depth": 3,
          "id": "update-html-file",
          "text": "Update HTML File"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at GraphQL Helix",
      "slug": "first-look-gql-helix",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "GraphQL Helix is a runtime agnostic collection of utility functions that helps you build your own GraphQL API and HTTP server",
      "summary": "GraphQL Helix is a runtime agnostic collection of utility functions that helps you build your own GraphQL API and HTTP server",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-gql-helix/"
      },
      "publishedAt": "2021-09-20T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-09-20T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-gql-helix/",
        "markdown": "https://ajcwebdev.com/first-look-gql-helix/index.md",
        "json": "https://ajcwebdev.com/first-look-gql-helix/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "motivations-and-api",
          "text": "Motivations and API"
        },
        {
          "depth": 3,
          "id": "rendergraphiql-and-shouldrendergraphiql",
          "text": "renderGraphiQL and shouldRenderGraphiQL"
        },
        {
          "depth": 3,
          "id": "getgraphqlparameters",
          "text": "getGraphQLParameters"
        },
        {
          "depth": 3,
          "id": "processrequest",
          "text": "processRequest"
        },
        {
          "depth": 2,
          "id": "serve-graphql-helix-locally",
          "text": "Serve GraphQL Helix Locally"
        },
        {
          "depth": 3,
          "id": "index-js",
          "text": "index-js"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-graphql-helix-locally",
          "text": "Run test queries on GraphQL Helix Locally"
        },
        {
          "depth": 3,
          "id": "graphql-helix-final-project-structure",
          "text": "GraphQL Helix Final Project Structure"
        },
        {
          "depth": 2,
          "id": "deploy-graphql-helix-with-serverless-framework",
          "text": "Deploy GraphQL Helix with Serverless Framework"
        },
        {
          "depth": 3,
          "id": "index-js-2",
          "text": "index-js"
        },
        {
          "depth": 3,
          "id": "serverless-yml",
          "text": "serverless-yml"
        },
        {
          "depth": 3,
          "id": "upload-to-aws-with-sls-deploy",
          "text": "Upload to AWS with sls deploy"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-graphql-helix-serverless",
          "text": "Run test queries on GraphQL Helix Serverless"
        },
        {
          "depth": 3,
          "id": "graphql-helix-serverless-final-project-structure",
          "text": "GraphQL Helix Serverless Final Project Structure"
        },
        {
          "depth": 2,
          "id": "deploy-graphql-helix-with-amplify",
          "text": "Deploy GraphQL Helix with Amplify"
        },
        {
          "depth": 3,
          "id": "create-backend-with-amplify-add-api",
          "text": "Create backend with amplify add api"
        },
        {
          "depth": 3,
          "id": "index-js-3",
          "text": "index-js"
        },
        {
          "depth": 3,
          "id": "upload-to-aws-with-amplify-push",
          "text": "Upload to AWS with amplify push"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-graphql-helix-amplify",
          "text": "Run test queries on GraphQL Helix Amplify"
        },
        {
          "depth": 3,
          "id": "graphql-helix-amplify-final-project-structure",
          "text": "GraphQL Helix Amplify Final Project Structure"
        },
        {
          "depth": 2,
          "id": "deploy-graphql-helix-with-docker-and-fly",
          "text": "Deploy GraphQL Helix with Docker and Fly"
        },
        {
          "depth": 3,
          "id": "index-js-4",
          "text": "index-js"
        },
        {
          "depth": 3,
          "id": "dockerfile",
          "text": "Dockerfile"
        },
        {
          "depth": 3,
          "id": "dockerignore",
          "text": "dockerignore"
        },
        {
          "depth": 3,
          "id": "docker-compose-yml",
          "text": "docker-compose-yml"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-graphql-helix-docker",
          "text": "Run test queries on GraphQL Helix Docker"
        },
        {
          "depth": 3,
          "id": "launch-app-on-fly-with-fly-launch",
          "text": "Launch app on Fly with fly launch"
        },
        {
          "depth": 3,
          "id": "deploy-application-with-fly-deploy",
          "text": "Deploy application with fly deploy"
        },
        {
          "depth": 3,
          "id": "run-test-queries-on-graphql-helix-docker-fly",
          "text": "Run test queries on GraphQL Helix Docker Fly"
        },
        {
          "depth": 3,
          "id": "graphql-helix-docker-final-project-structure",
          "text": "GraphQL Helix Docker Final Project Structure"
        },
        {
          "depth": 2,
          "id": "resources",
          "text": "Resources"
        }
      ],
      "tags": [
        "backend",
        "graphql"
      ]
    },
    {
      "title": "Deploy a GraphQL Server with Docker and Fly",
      "slug": "deploy-gql-docker-container-with-fly",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Learn how to create a GraphQL server with Node.js and Express, build an image of the server with Docker, and deploy the container to Fly",
      "summary": "Learn how to create a GraphQL server with Node.js and Express, build an image of the server with Docker, and deploy the container to Fly",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/deploy-gql-docker-container-with-fly/"
      },
      "publishedAt": "2021-09-15T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-09-15T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/deploy-gql-docker-container-with-fly/",
        "markdown": "https://ajcwebdev.com/deploy-gql-docker-container-with-fly/index.md",
        "json": "https://ajcwebdev.com/deploy-gql-docker-container-with-fly/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "create-a-graphql-express-server",
          "text": "Create a GraphQL Express Server"
        },
        {
          "depth": 3,
          "id": "create-project-and-install-dependencies",
          "text": "Create Project and Install Dependencies"
        },
        {
          "depth": 3,
          "id": "create-graphqlhttp-server",
          "text": "Create graphqlHTTP Server"
        },
        {
          "depth": 3,
          "id": "run-local-server-and-execute-test-query",
          "text": "Run Local Server and Execute Test Query"
        },
        {
          "depth": 2,
          "id": "create-a-container-image",
          "text": "Create a Container Image"
        },
        {
          "depth": 3,
          "id": "dockerfile-commands",
          "text": "Dockerfile Commands"
        },
        {
          "depth": 3,
          "id": "build-image-and-list-top-level-images",
          "text": "Build Image and List Top Level Images"
        },
        {
          "depth": 2,
          "id": "run-the-docker-container-and-execute-a-test-query",
          "text": "Run the Docker Container and Execute a Test Query"
        },
        {
          "depth": 3,
          "id": "list-containers",
          "text": "List Containers"
        },
        {
          "depth": 3,
          "id": "create-a-docker-compose-file",
          "text": "Create a Docker Compose File"
        },
        {
          "depth": 2,
          "id": "publish-to-github-container-registry",
          "text": "Publish to GitHub Container Registry"
        },
        {
          "depth": 3,
          "id": "create-github-repo-and-login-to-container-registry",
          "text": "Create GitHub Repo and Login to Container Registry"
        },
        {
          "depth": 3,
          "id": "tag-image-push-to-registry-and-pull-image",
          "text": "Tag Image Push to Registry and Pull Image"
        },
        {
          "depth": 2,
          "id": "deploy-to-fly",
          "text": "Deploy to Fly"
        },
        {
          "depth": 3,
          "id": "install-and-authenticate-fly-cli",
          "text": "Install and Authenticate Fly CLI"
        },
        {
          "depth": 3,
          "id": "launch-and-deploy-fly-app",
          "text": "Launch and Deploy Fly App"
        },
        {
          "depth": 3,
          "id": "show-the-application-status",
          "text": "Show the Application Status"
        }
      ],
      "tags": [
        "backend",
        "graphql",
        "deployment"
      ]
    },
    {
      "title": "A First Look at AWS Fargate",
      "slug": "first-look-aws-fargate",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Fargate is an AWS service for dockerizing applications and running containers on ECS without managing servers or clusters of EC2 instances",
      "summary": "Fargate is an AWS service for dockerizing applications and running containers on ECS without managing servers or clusters of EC2 instances",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-aws-fargate/"
      },
      "publishedAt": "2021-09-06T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-09-06T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-aws-fargate/",
        "markdown": "https://ajcwebdev.com/first-look-aws-fargate/index.md",
        "json": "https://ajcwebdev.com/first-look-aws-fargate/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "example-container-task-definition",
          "text": "Example Container Task Definition"
        },
        {
          "depth": 2,
          "id": "setup-and-verify-ecs-cli-with-pgp-signatures",
          "text": "Setup and Verify ECS CLI with PGP Signatures"
        },
        {
          "depth": 3,
          "id": "install-gnupg-and-create-file-for-ecs-pgp-public-key",
          "text": "Install GnuPG and Create File for ECS PGP Public Key"
        },
        {
          "depth": 3,
          "id": "import-ecs-pgp-public-key",
          "text": "Import ECS PGP Public Key"
        },
        {
          "depth": 3,
          "id": "download-and-verify-ecs-cli-signature",
          "text": "Download and Verify ECS CLI Signature"
        },
        {
          "depth": 3,
          "id": "apply-execute-permissions-to-cli-binary",
          "text": "Apply Execute Permissions to CLI Binary"
        },
        {
          "depth": 3,
          "id": "check-cli-version-number",
          "text": "Check CLI Version Number"
        },
        {
          "depth": 2,
          "id": "configure-aws-credentials-and-iam-role",
          "text": "Configure AWS Credentials and IAM Role"
        },
        {
          "depth": 3,
          "id": "create-directory-and-project-files",
          "text": "Create Directory and Project Files"
        },
        {
          "depth": 3,
          "id": "create-task-execution-role",
          "text": "Create Task Execution Role"
        },
        {
          "depth": 3,
          "id": "attach-task-execution-role-policy",
          "text": "Attach Task Execution Role Policy"
        },
        {
          "depth": 3,
          "id": "configure-ecs-cli",
          "text": "Configure ECS CLI"
        },
        {
          "depth": 3,
          "id": "create-a-cli-profile",
          "text": "Create a CLI Profile"
        },
        {
          "depth": 2,
          "id": "create-ecs-cluster-and-security-group",
          "text": "Create ECS Cluster and Security Group"
        },
        {
          "depth": 3,
          "id": "create-cluster",
          "text": "Create Cluster"
        },
        {
          "depth": 3,
          "id": "retrieve-vpc-default-security-group-id",
          "text": "Retrieve VPC Default Security Group ID"
        },
        {
          "depth": 3,
          "id": "add-security-group-rule",
          "text": "Add Security Group Rule"
        },
        {
          "depth": 2,
          "id": "deploy-docker-container-to-the-cluster",
          "text": "Deploy Docker Container to the Cluster"
        },
        {
          "depth": 3,
          "id": "define-docker-compose-web-service",
          "text": "Define Docker Compose Web Service"
        },
        {
          "depth": 3,
          "id": "ecs-parameters",
          "text": "ECS Parameters"
        },
        {
          "depth": 3,
          "id": "deploy-compose-file",
          "text": "Deploy Compose File"
        },
        {
          "depth": 3,
          "id": "view-running-containers",
          "text": "View Running Containers"
        },
        {
          "depth": 3,
          "id": "view-web-application",
          "text": "View Web Application"
        },
        {
          "depth": 2,
          "id": "clean-up-and-summary",
          "text": "Clean Up and Summary"
        },
        {
          "depth": 3,
          "id": "delete-your-service",
          "text": "Delete Your Service"
        },
        {
          "depth": 3,
          "id": "take-down-your-cluster",
          "text": "Take Down Your Cluster"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "Deploy a Docker Container on AWS Lambda",
      "slug": "deploy-docker-with-aws-lambda",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "This example uses the Serverless Framework to deploy and query a Node.js server running in a Docker container on AWS Lambda",
      "summary": "This example uses the Serverless Framework to deploy and query a Node.js server running in a Docker container on AWS Lambda",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/deploy-docker-with-aws-lambda/"
      },
      "publishedAt": "2021-09-02T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-09-02T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/deploy-docker-with-aws-lambda/",
        "markdown": "https://ajcwebdev.com/deploy-docker-with-aws-lambda/index.md",
        "json": "https://ajcwebdev.com/deploy-docker-with-aws-lambda/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "create-project",
          "text": "Create Project"
        },
        {
          "depth": 2,
          "id": "serverless-yaml-configuration-file",
          "text": "Serverless YAML Configuration File"
        },
        {
          "depth": 3,
          "id": "aws-provider",
          "text": "AWS Provider"
        },
        {
          "depth": 3,
          "id": "functions-property",
          "text": "Functions Property"
        },
        {
          "depth": 2,
          "id": "dockerfile",
          "text": "Dockerfile"
        },
        {
          "depth": 2,
          "id": "function-handler",
          "text": "Function Handler"
        },
        {
          "depth": 2,
          "id": "deploy-to-aws",
          "text": "Deploy to AWS"
        },
        {
          "depth": 3,
          "id": "configure-aws-credentials",
          "text": "Configure AWS Credentials"
        },
        {
          "depth": 3,
          "id": "run-serverless-deploy-command",
          "text": "Run Serverless Deploy Command"
        },
        {
          "depth": 3,
          "id": "invoke-the-deployed-function",
          "text": "Invoke the Deployed Function"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at Serverless Cloud",
      "slug": "first-look-serverless-cloud",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Serverless Cloud is a new serverless app platform from Serverless, Inc. Unlike the Serverless Framework, it lives on a new hosting service in the cloud",
      "summary": "Serverless Cloud is a new serverless app platform from Serverless, Inc. Unlike the Serverless Framework, it lives on a new hosting service in the cloud",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-serverless-cloud/"
      },
      "publishedAt": "2021-09-02T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-09-02T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-serverless-cloud/",
        "markdown": "https://ajcwebdev.com/first-look-serverless-cloud/index.md",
        "json": "https://ajcwebdev.com/first-look-serverless-cloud/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "setup",
          "text": "Setup"
        },
        {
          "depth": 3,
          "id": "install-cloud-cli",
          "text": "Install Cloud CLI"
        },
        {
          "depth": 3,
          "id": "initialize-service",
          "text": "Initialize Service"
        },
        {
          "depth": 3,
          "id": "deploy-to-staging-environment",
          "text": "Deploy to Staging Environment"
        },
        {
          "depth": 2,
          "id": "index-entry-file",
          "text": "Index Entry File"
        },
        {
          "depth": 3,
          "id": "gettodos-function",
          "text": "getTodos Function"
        },
        {
          "depth": 3,
          "id": "get-todos",
          "text": "GET Todos"
        },
        {
          "depth": 3,
          "id": "post-updates-to-a-todo",
          "text": "POST Updates to a Todo"
        },
        {
          "depth": 3,
          "id": "delete-a-todo",
          "text": "DELETE a Todo"
        },
        {
          "depth": 3,
          "id": "custom-error-handler-middleware",
          "text": "Custom Error Handler Middleware"
        },
        {
          "depth": 3,
          "id": "check-for-overdue-todos-hourly",
          "text": "Check for Overdue Todos Hourly"
        },
        {
          "depth": 2,
          "id": "sample-todos",
          "text": "Sample Todos"
        },
        {
          "depth": 2,
          "id": "tests",
          "text": "Tests"
        },
        {
          "depth": 2,
          "id": "static-assets",
          "text": "Static Assets"
        },
        {
          "depth": 2,
          "id": "modify-html-index-file-and-deploy-to-production",
          "text": "Modify HTML Index File and Deploy to Production"
        },
        {
          "depth": 2,
          "id": "dashboard",
          "text": "Dashboard"
        },
        {
          "depth": 3,
          "id": "services",
          "text": "Services"
        },
        {
          "depth": 3,
          "id": "instances",
          "text": "Instances"
        },
        {
          "depth": 3,
          "id": "metrics",
          "text": "Metrics"
        },
        {
          "depth": 2,
          "id": "summary",
          "text": "Summary"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at KeystoneJS",
      "slug": "first-look-keystonejs",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "KeystoneJS is a CMS for developers that provides a GraphQL API & Management UI for content and data based on your schema",
      "summary": "KeystoneJS is a CMS for developers that provides a GraphQL API & Management UI for content and data based on your schema",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-keystonejs/"
      },
      "publishedAt": "2021-08-25T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-08-25T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-keystonejs/",
        "markdown": "https://ajcwebdev.com/first-look-keystonejs/index.md",
        "json": "https://ajcwebdev.com/first-look-keystonejs/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "create-keystone-app",
          "text": "Create Keystone App"
        },
        {
          "depth": 2,
          "id": "develop-keystone-app-locally",
          "text": "Develop Keystone App Locally"
        },
        {
          "depth": 3,
          "id": "create-a-user",
          "text": "Create a user"
        },
        {
          "depth": 3,
          "id": "create-a-post",
          "text": "Create a Post"
        },
        {
          "depth": 3,
          "id": "query-your-graphql-api",
          "text": "Query your GraphQL API"
        },
        {
          "depth": 2,
          "id": "deploy-keystone-app",
          "text": "Deploy Keystone App"
        }
      ],
      "tags": [
        "web",
        "backend",
        "graphql"
      ]
    },
    {
      "title": "A First Look at Slinkity",
      "slug": "first-look-slinkity",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Slinkity is a frontend component framework that uses Vite to bring dynamic, client side interactions to your static Eleventy sites",
      "summary": "Slinkity is a frontend component framework that uses Vite to bring dynamic, client side interactions to your static Eleventy sites",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-slinkity/"
      },
      "publishedAt": "2021-08-08T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-08-08T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-slinkity/",
        "markdown": "https://ajcwebdev.com/first-look-slinkity/index.md",
        "json": "https://ajcwebdev.com/first-look-slinkity/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "1-create-project",
          "text": "1- Create Project"
        },
        {
          "depth": 3,
          "id": "add-slinkity-dependency",
          "text": "Add Slinkity dependency"
        },
        {
          "depth": 3,
          "id": "eleventy-js",
          "text": "eleventy-js"
        },
        {
          "depth": 3,
          "id": "start-development-server",
          "text": "Start development server"
        },
        {
          "depth": 2,
          "id": "2-add-react-components",
          "text": "2- Add React Components"
        },
        {
          "depth": 3,
          "id": "hello-jsx",
          "text": "Hello-jsx"
        },
        {
          "depth": 3,
          "id": "counter-jsx",
          "text": "Counter-jsx"
        },
        {
          "depth": 2,
          "id": "3-create-a-component-page",
          "text": "3- Create a component page"
        },
        {
          "depth": 3,
          "id": "about-jsx",
          "text": "about-jsx"
        },
        {
          "depth": 2,
          "id": "4-layouts",
          "text": "4- Layouts"
        },
        {
          "depth": 3,
          "id": "applying-front-matter",
          "text": "Applying front matter"
        },
        {
          "depth": 3,
          "id": "layout-html",
          "text": "layout-html"
        },
        {
          "depth": 2,
          "id": "5-deploy-your-site-to-netlify",
          "text": "5- Deploy your site to Netlify"
        },
        {
          "depth": 3,
          "id": "netlify-toml",
          "text": "netlify-toml"
        },
        {
          "depth": 3,
          "id": "npx-slinkity",
          "text": "npx slinkity"
        },
        {
          "depth": 3,
          "id": "create-github-repo",
          "text": "Create GitHub Repo"
        },
        {
          "depth": 3,
          "id": "connect-your-repo-to-netlify",
          "text": "Connect your repo to Netlify"
        }
      ],
      "tags": [
        "web",
        "frontend"
      ]
    },
    {
      "title": "A First Look at Fly",
      "slug": "first-look-fly",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Fly is a platform for fullstack applications and databases build with Dockerfiles or Buildpacks that need to run globally",
      "summary": "Fly is a platform for fullstack applications and databases build with Dockerfiles or Buildpacks that need to run globally",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-fly/"
      },
      "publishedAt": "2021-08-04T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-08-04T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-fly/",
        "markdown": "https://ajcwebdev.com/first-look-fly/index.md",
        "json": "https://ajcwebdev.com/first-look-fly/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "fly-setup",
          "text": "Fly Setup"
        },
        {
          "depth": 3,
          "id": "install-flyctl",
          "text": "Install flyctl"
        },
        {
          "depth": 3,
          "id": "create-fly-account",
          "text": "Create Fly Account"
        },
        {
          "depth": 3,
          "id": "login-to-fly-account",
          "text": "Login to Fly Account"
        },
        {
          "depth": 2,
          "id": "create-project",
          "text": "Create Project"
        },
        {
          "depth": 3,
          "id": "create-server",
          "text": "Create Server"
        },
        {
          "depth": 3,
          "id": "run-server",
          "text": "Run Server"
        },
        {
          "depth": 3,
          "id": "create-dockerfile",
          "text": "Create Dockerfile"
        },
        {
          "depth": 2,
          "id": "launch-application-on-fly",
          "text": "Launch Application on Fly"
        },
        {
          "depth": 3,
          "id": "deploy-application",
          "text": "Deploy Application"
        },
        {
          "depth": 3,
          "id": "show-current-application-status",
          "text": "Show Current Application Status"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at GitHub Actions",
      "slug": "first-look-github-actions",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "GitHub Actions can be used to automate, customize, and execute software development workflows from within a GitHub repository",
      "summary": "GitHub Actions can be used to automate, customize, and execute software development workflows from within a GitHub repository",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-github-actions/"
      },
      "publishedAt": "2021-07-20T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-07-20T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-github-actions/",
        "markdown": "https://ajcwebdev.com/first-look-github-actions/index.md",
        "json": "https://ajcwebdev.com/first-look-github-actions/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "create-an-action",
          "text": "Create an Action"
        },
        {
          "depth": 3,
          "id": "complete-github-action",
          "text": "Complete GitHub Action"
        },
        {
          "depth": 2,
          "id": "push-your-project-to-a-github-repository",
          "text": "Push your project to a GitHub repository"
        },
        {
          "depth": 3,
          "id": "create-a-new-blank-repository",
          "text": "Create a new blank repository"
        }
      ],
      "tags": [
        "deployment"
      ]
    },
    {
      "title": "A First Look at PostGraphile with Railway",
      "slug": "first-look-postgraphile-with-railway",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "PostGraphile builds a GraphQL API from a PostgreSQL schema that automatically detects information such as tables, columns, indexes, and relationships",
      "summary": "PostGraphile builds a GraphQL API from a PostgreSQL schema that automatically detects information such as tables, columns, indexes, and relationships",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-postgraphile-with-railway/"
      },
      "publishedAt": "2021-07-17T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-07-17T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-postgraphile-with-railway/",
        "markdown": "https://ajcwebdev.com/first-look-postgraphile-with-railway/index.md",
        "json": "https://ajcwebdev.com/first-look-postgraphile-with-railway/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "provision-a-postgresql-database-with-railway",
          "text": "Provision a PostgreSQL database with Railway"
        },
        {
          "depth": 3,
          "id": "railway-dashboard",
          "text": "Railway Dashboard"
        },
        {
          "depth": 3,
          "id": "railway-cli",
          "text": "Railway CLI"
        },
        {
          "depth": 3,
          "id": "check-railway-cli-version",
          "text": "Check Railway CLI version"
        },
        {
          "depth": 3,
          "id": "login-with-railway-login",
          "text": "Login with railway login"
        },
        {
          "depth": 3,
          "id": "initialize-project-with-railway-init",
          "text": "Initialize project with railway init"
        },
        {
          "depth": 3,
          "id": "provision-postgresql-with-railway-add",
          "text": "Provision PostgreSQL with railway add"
        },
        {
          "depth": 3,
          "id": "connect-to-database",
          "text": "Connect to database"
        },
        {
          "depth": 3,
          "id": "seed-database",
          "text": "Seed database"
        },
        {
          "depth": 3,
          "id": "list-tables-in-database",
          "text": "List tables in database"
        },
        {
          "depth": 3,
          "id": "describe-table",
          "text": "Describe table"
        },
        {
          "depth": 3,
          "id": "quit-psql",
          "text": "Quit psql"
        },
        {
          "depth": 3,
          "id": "copy-database-connection-string-to-clipboard",
          "text": "Copy database connection string to clipboard"
        },
        {
          "depth": 2,
          "id": "introspect-database-with-postgraphile",
          "text": "Introspect Database with PostGraphile"
        },
        {
          "depth": 3,
          "id": "introspect-railway-database",
          "text": "Introspect Railway Database"
        },
        {
          "depth": 3,
          "id": "test-the-endpoint",
          "text": "Test the endpoint"
        },
        {
          "depth": 3,
          "id": "connect-to-endpoint-with-ngrok",
          "text": "Connect to endpoint with ngrok"
        }
      ],
      "tags": [
        "backend",
        "graphql",
        "deployment"
      ]
    },
    {
      "title": "A First Look at Docker",
      "slug": "first-look-docker",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Docker is a set of tools that deliver software in isolated packages called containers that bundle their software, libraries and configuration",
      "summary": "Docker is a set of tools that deliver software in isolated packages called containers that bundle their software, libraries and configuration",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-docker/"
      },
      "publishedAt": "2021-07-12T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-07-12T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-docker/",
        "markdown": "https://ajcwebdev.com/first-look-docker/index.md",
        "json": "https://ajcwebdev.com/first-look-docker/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "create-node-project",
          "text": "Create Node Project"
        },
        {
          "depth": 3,
          "id": "initialize-project-and-install-dependencies",
          "text": "Initialize Project and Install Dependencies"
        },
        {
          "depth": 3,
          "id": "create-server",
          "text": "Create Server"
        },
        {
          "depth": 3,
          "id": "run-server",
          "text": "Run Server"
        },
        {
          "depth": 2,
          "id": "create-and-build-container-image",
          "text": "Create and Build Container Image"
        },
        {
          "depth": 3,
          "id": "create-dockerfile-and-dockerignore-files",
          "text": "Create Dockerfile and dockerignore files"
        },
        {
          "depth": 3,
          "id": "build-project",
          "text": "Build Project"
        },
        {
          "depth": 3,
          "id": "list-images",
          "text": "List Images"
        },
        {
          "depth": 2,
          "id": "run-the-image",
          "text": "Run the Image"
        },
        {
          "depth": 3,
          "id": "run-docker-container",
          "text": "Run Docker Container"
        },
        {
          "depth": 3,
          "id": "list-containers",
          "text": "List Containers"
        },
        {
          "depth": 3,
          "id": "print-output-of-app",
          "text": "Print Output of App"
        },
        {
          "depth": 3,
          "id": "call-app-using-curl",
          "text": "Call App using curl"
        },
        {
          "depth": 2,
          "id": "create-docker-compose-file",
          "text": "Create Docker Compose File"
        },
        {
          "depth": 3,
          "id": "create-and-start-containers",
          "text": "Create and Start Containers"
        },
        {
          "depth": 2,
          "id": "push-project-to-a-github-repository",
          "text": "Push Project to a GitHub Repository"
        },
        {
          "depth": 3,
          "id": "initialize-git",
          "text": "Initialize Git"
        },
        {
          "depth": 3,
          "id": "create-a-new-repository",
          "text": "Create a New Repository"
        },
        {
          "depth": 2,
          "id": "publish-to-github-container-registry",
          "text": "Publish to GitHub Container Registry"
        },
        {
          "depth": 3,
          "id": "login-to-ghcr",
          "text": "Login to ghcr"
        },
        {
          "depth": 3,
          "id": "tag-image",
          "text": "Tag Image"
        },
        {
          "depth": 3,
          "id": "push-to-registry",
          "text": "Push to Registry"
        },
        {
          "depth": 3,
          "id": "pull-image-from-registry",
          "text": "Pull Image from Registry"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at Azure Functions",
      "slug": "first-look-azure-functions",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Azure Functions is an event-driven compute platform that manages deploying and maintaining servers and can be used to create serverless API endpoints",
      "summary": "Azure Functions is an event-driven compute platform that manages deploying and maintaining servers and can be used to create serverless API endpoints",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-azure-functions/"
      },
      "publishedAt": "2021-07-11T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-07-11T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-azure-functions/",
        "markdown": "https://ajcwebdev.com/first-look-azure-functions/index.md",
        "json": "https://ajcwebdev.com/first-look-azure-functions/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "setup-environment",
          "text": "Setup Environment"
        },
        {
          "depth": 3,
          "id": "install-the-azure-functions-core-tools",
          "text": "Install the Azure Functions Core Tools"
        },
        {
          "depth": 3,
          "id": "initialize-a-local-functions-project",
          "text": "Initialize a Local Functions Project"
        },
        {
          "depth": 3,
          "id": "host-metadata",
          "text": "Host Metadata"
        },
        {
          "depth": 3,
          "id": "local-settings",
          "text": "Local Settings"
        },
        {
          "depth": 2,
          "id": "create-http-trigger-function",
          "text": "Create HTTP Trigger Function"
        },
        {
          "depth": 3,
          "id": "javascript-index-file",
          "text": "JavaScript Index File"
        },
        {
          "depth": 3,
          "id": "function-bindings",
          "text": "Function Bindings"
        },
        {
          "depth": 3,
          "id": "test-function-locally",
          "text": "Test Function Locally"
        },
        {
          "depth": 2,
          "id": "create-an-azure-subscription",
          "text": "Create an Azure Subscription"
        },
        {
          "depth": 3,
          "id": "install-the-azure-cli",
          "text": "Install the Azure CLI"
        },
        {
          "depth": 3,
          "id": "authenticate-with-the-azure-cli",
          "text": "Authenticate with the Azure CLI"
        },
        {
          "depth": 3,
          "id": "configure-subscription",
          "text": "Configure Subscription"
        },
        {
          "depth": 2,
          "id": "create-a-function-app",
          "text": "Create a Function App"
        },
        {
          "depth": 3,
          "id": "create-a-resource-group",
          "text": "Create a Resource Group"
        },
        {
          "depth": 3,
          "id": "create-a-storage-account",
          "text": "Create a Storage Account"
        },
        {
          "depth": 3,
          "id": "publish-function-app",
          "text": "Publish Function App"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "Deploy Node on Digital Ocean with PM2",
      "slug": "deploy-node-with-digital-ocean-and-pm2",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Learn how to create a backend Node.js server and deploy it on Digital Ocean with a popular Node process manager called PM2",
      "summary": "Learn how to create a backend Node.js server and deploy it on Digital Ocean with a popular Node process manager called PM2",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/deploy-node-with-digital-ocean-and-pm2/"
      },
      "publishedAt": "2021-06-12T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-06-12T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/deploy-node-with-digital-ocean-and-pm2/",
        "markdown": "https://ajcwebdev.com/deploy-node-with-digital-ocean-and-pm2/index.md",
        "json": "https://ajcwebdev.com/deploy-node-with-digital-ocean-and-pm2/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "create-node-app-with-pm2",
          "text": "Create Node App with PM2"
        },
        {
          "depth": 3,
          "id": "create-http-server",
          "text": "Create HTTP Server"
        },
        {
          "depth": 3,
          "id": "start-server-on-localhost",
          "text": "Start Server on Localhost"
        },
        {
          "depth": 3,
          "id": "configure-node-app-for-pm2",
          "text": "Configure Node App for PM2"
        },
        {
          "depth": 3,
          "id": "create-github-repository",
          "text": "Create GitHub Repository"
        },
        {
          "depth": 2,
          "id": "deploy-linux-server-on-digital-ocean-droplet",
          "text": "Deploy Linux Server on Digital Ocean Droplet"
        },
        {
          "depth": 3,
          "id": "setup-ssh-keys",
          "text": "Setup SSH Keys"
        },
        {
          "depth": 3,
          "id": "generate-an-rsa-key-pair",
          "text": "Generate an RSA Key Pair"
        },
        {
          "depth": 3,
          "id": "create-a-password",
          "text": "Create a Password"
        },
        {
          "depth": 3,
          "id": "copy-key-to-the-clipboard",
          "text": "Copy Key to the Clipboard"
        },
        {
          "depth": 3,
          "id": "choose-a-hostname",
          "text": "Choose a Hostname"
        },
        {
          "depth": 3,
          "id": "login-to-server-from-terminal",
          "text": "Login to Server from Terminal"
        },
        {
          "depth": 3,
          "id": "enter-password",
          "text": "Enter Password"
        },
        {
          "depth": 2,
          "id": "install-server-dependencies-and-start-server",
          "text": "Install Server Dependencies and Start Server"
        },
        {
          "depth": 3,
          "id": "install-node",
          "text": "Install Node"
        },
        {
          "depth": 3,
          "id": "clone-github-repository-and-install-node-modules",
          "text": "Clone GitHub Repository and Install Node Modules"
        },
        {
          "depth": 3,
          "id": "start-app-as-a-process-with-pm2",
          "text": "Start App as a Process with PM2"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at the Serverless Framework",
      "slug": "first-look-serverless-framework",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "The Serverless Framework consists of an open source CLI and a hosted dashboard. We will create a boilerplate Node Lambda handler and deploy it to AWS",
      "summary": "The Serverless Framework consists of an open source CLI and a hosted dashboard. We will create a boilerplate Node Lambda handler and deploy it to AWS",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-serverless-framework/"
      },
      "publishedAt": "2021-06-10T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-06-10T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-serverless-framework/",
        "markdown": "https://ajcwebdev.com/first-look-serverless-framework/index.md",
        "json": "https://ajcwebdev.com/first-look-serverless-framework/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "history",
          "text": "History"
        },
        {
          "depth": 2,
          "id": "core-concepts",
          "text": "Core Concepts"
        },
        {
          "depth": 3,
          "id": "functions",
          "text": "Functions"
        },
        {
          "depth": 3,
          "id": "events",
          "text": "Events"
        },
        {
          "depth": 3,
          "id": "resources",
          "text": "Resources"
        },
        {
          "depth": 3,
          "id": "services",
          "text": "Services"
        },
        {
          "depth": 2,
          "id": "create-a-project",
          "text": "Create a Project"
        },
        {
          "depth": 3,
          "id": "install-the-serverless-cli",
          "text": "Install the Serverless CLI"
        },
        {
          "depth": 3,
          "id": "function-handler",
          "text": "Function Handler"
        },
        {
          "depth": 3,
          "id": "serverless-deploy",
          "text": "Serverless Deploy"
        },
        {
          "depth": 3,
          "id": "serverless-invoke",
          "text": "Serverless Invoke"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at React 18 with Vite and Netlify",
      "slug": "first-look-react-18-with-vite-and-netlify",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Learn how to create a boilerplate React app with Vite, upgrade the application to React 18, and deploy the app to Netlify",
      "summary": "Learn how to create a boilerplate React app with Vite, upgrade the application to React 18, and deploy the app to Netlify",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-react-18-with-vite-and-netlify/"
      },
      "publishedAt": "2021-06-08T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-06-08T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-react-18-with-vite-and-netlify/",
        "markdown": "https://ajcwebdev.com/first-look-react-18-with-vite-and-netlify/index.md",
        "json": "https://ajcwebdev.com/first-look-react-18-with-vite-and-netlify/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "react-18-working-group",
          "text": "React 18 Working Group"
        },
        {
          "depth": 2,
          "id": "create-react-app-with-vite-react-template",
          "text": "Create React App with Vite React Template"
        },
        {
          "depth": 3,
          "id": "install-dependencies-and-start-development-server",
          "text": "Install Dependencies and Start Development Server"
        },
        {
          "depth": 3,
          "id": "root-component",
          "text": "Root Component"
        },
        {
          "depth": 3,
          "id": "app-component",
          "text": "App Component"
        },
        {
          "depth": 2,
          "id": "deploy-to-netlify",
          "text": "Deploy to Netlify"
        }
      ],
      "tags": [
        "web",
        "frontend",
        "deployment"
      ]
    },
    {
      "title": "Edge GraphQL with Cloudflare Workers",
      "slug": "deploy-gql-edge-server-with-cloudflare",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Learn how to build and deploy a GraphQL server on the edge with Apollo GraphQL, Cloudflare Workers, Webpack, and Wrangler",
      "summary": "Learn how to build and deploy a GraphQL server on the edge with Apollo GraphQL, Cloudflare Workers, Webpack, and Wrangler",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/deploy-gql-edge-server-with-cloudflare/"
      },
      "publishedAt": "2021-05-28T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-05-28T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/deploy-gql-edge-server-with-cloudflare/",
        "markdown": "https://ajcwebdev.com/deploy-gql-edge-server-with-cloudflare/index.md",
        "json": "https://ajcwebdev.com/deploy-gql-edge-server-with-cloudflare/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "generate-project",
          "text": "Generate Project"
        },
        {
          "depth": 3,
          "id": "set-account-id-in-wrangler-configuration",
          "text": "Set Account ID in Wrangler Configuration"
        },
        {
          "depth": 3,
          "id": "deploy-to-cloudflare",
          "text": "Deploy to Cloudflare"
        }
      ],
      "tags": [
        "backend",
        "graphql",
        "deployment"
      ]
    },
    {
      "title": "A First Look at Architect",
      "slug": "first-look-architect",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Architect is an Infrastructure as Code framework for provisioning build artifacts. It provides a compact syntax that compiles down to CloudFormation",
      "summary": "Architect is an Infrastructure as Code framework for provisioning build artifacts. It provides a compact syntax that compiles down to CloudFormation",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-architect/"
      },
      "publishedAt": "2021-05-14T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-05-14T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-architect/",
        "markdown": "https://ajcwebdev.com/first-look-architect/index.md",
        "json": "https://ajcwebdev.com/first-look-architect/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "setup",
          "text": "Setup"
        },
        {
          "depth": 3,
          "id": "install-architect-cli-and-aws-sdk",
          "text": "Install Architect CLI and AWS SDK"
        },
        {
          "depth": 3,
          "id": "initialize-project",
          "text": "Initialize Project"
        },
        {
          "depth": 3,
          "id": "start-development-server",
          "text": "Start Development Server"
        },
        {
          "depth": 2,
          "id": "project-structure",
          "text": "Project Structure"
        },
        {
          "depth": 3,
          "id": "arc-app-entry-point",
          "text": "Arc App Entry Point"
        },
        {
          "depth": 3,
          "id": "arc-configuration",
          "text": "Arc Configuration"
        },
        {
          "depth": 3,
          "id": "lambda-handler",
          "text": "Lambda Handler"
        },
        {
          "depth": 3,
          "id": "create-an-about-page",
          "text": "Create an About Page"
        },
        {
          "depth": 2,
          "id": "deploy-to-aws",
          "text": "Deploy to AWS"
        },
        {
          "depth": 3,
          "id": "deploy-to-staging-environment",
          "text": "Deploy to Staging Environment"
        },
        {
          "depth": 3,
          "id": "deploy-to-production-environment",
          "text": "Deploy to Production Environment"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at Amplify with Vite",
      "slug": "first-look-amplify-with-vite",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "AWS Amplify is a set of tools and services to help frontend web and mobile developers build scalable fullstack applications with AWS infrastructure",
      "summary": "AWS Amplify is a set of tools and services to help frontend web and mobile developers build scalable fullstack applications with AWS infrastructure",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-amplify-with-vite/"
      },
      "publishedAt": "2021-05-09T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-05-09T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-amplify-with-vite/",
        "markdown": "https://ajcwebdev.com/first-look-amplify-with-vite/index.md",
        "json": "https://ajcwebdev.com/first-look-amplify-with-vite/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "setup",
          "text": "Setup"
        },
        {
          "depth": 3,
          "id": "configure-aws-cli",
          "text": "Configure AWS CLI"
        },
        {
          "depth": 3,
          "id": "install-amplify-cli",
          "text": "Install Amplify CLI"
        },
        {
          "depth": 3,
          "id": "initialize-project",
          "text": "Initialize Project"
        },
        {
          "depth": 3,
          "id": "start-development-server",
          "text": "Start Development Server"
        },
        {
          "depth": 2,
          "id": "project-structure",
          "text": "Project Structure"
        },
        {
          "depth": 3,
          "id": "app-component",
          "text": "App Component"
        },
        {
          "depth": 2,
          "id": "initialize-amplify-project",
          "text": "Initialize Amplify Project"
        },
        {
          "depth": 3,
          "id": "deploy-to-cloudfront-and-s3",
          "text": "Deploy to CloudFront and S3"
        }
      ],
      "tags": [
        "frontend",
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at Remix",
      "slug": "first-look-remix",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Remix is a React metaframework created by Ryan Florence and Michael Jackson. It primarily uses standard web APIs and is built on React Router",
      "summary": "Remix is a React metaframework created by Ryan Florence and Michael Jackson. It primarily uses standard web APIs and is built on React Router",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-remix/"
      },
      "publishedAt": "2021-05-06T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-05-06T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-remix/",
        "markdown": "https://ajcwebdev.com/first-look-remix/index.md",
        "json": "https://ajcwebdev.com/first-look-remix/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "initialize-starter-project",
          "text": "Initialize Starter Project"
        },
        {
          "depth": 3,
          "id": "start-development-server",
          "text": "Start Development Server"
        },
        {
          "depth": 3,
          "id": "index-routes",
          "text": "Index Routes"
        },
        {
          "depth": 3,
          "id": "css-styling",
          "text": "CSS Styling"
        },
        {
          "depth": 3,
          "id": "loader-functions",
          "text": "Loader Functions"
        },
        {
          "depth": 2,
          "id": "deploy-to-vercel",
          "text": "Deploy to Vercel"
        }
      ],
      "tags": [
        "web",
        "frontend"
      ]
    },
    {
      "title": "A First Look at Cloudflare Workers",
      "slug": "first-look-cloudflare-workers",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "A Cloudflare Worker runs JavaScript on Cloudflare's edge servers. A Cloudflare Service Worker specifically handles HTTP traffic",
      "summary": "A Cloudflare Worker runs JavaScript on Cloudflare's edge servers. A Cloudflare Service Worker specifically handles HTTP traffic",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-cloudflare-workers/"
      },
      "publishedAt": "2021-05-03T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-05-03T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-cloudflare-workers/",
        "markdown": "https://ajcwebdev.com/first-look-cloudflare-workers/index.md",
        "json": "https://ajcwebdev.com/first-look-cloudflare-workers/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "install-the-wrangler-cli",
          "text": "Install the Wrangler CLI"
        },
        {
          "depth": 3,
          "id": "install-wrangler-with-volta",
          "text": "Install Wrangler with Volta"
        },
        {
          "depth": 3,
          "id": "login-to-cloudflare-account",
          "text": "Login to Cloudflare Account"
        },
        {
          "depth": 2,
          "id": "create-workers-project",
          "text": "Create Workers Project"
        },
        {
          "depth": 3,
          "id": "wrangler-configuration-file",
          "text": "Wrangler Configuration File"
        },
        {
          "depth": 3,
          "id": "workers-script",
          "text": "Workers Script"
        },
        {
          "depth": 3,
          "id": "test-worker-locally",
          "text": "Test Worker Locally"
        },
        {
          "depth": 2,
          "id": "deploy-worker-to-cloudflare",
          "text": "Deploy Worker to Cloudflare"
        }
      ],
      "tags": [
        "web",
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at AWS SAM",
      "slug": "first-look-aws-sam",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "AWS Serverless Application Model (SAM) is an open-source framework for building serverless applications with a shorthand syntax for common cloud resources",
      "summary": "AWS Serverless Application Model (SAM) is an open-source framework for building serverless applications with a shorthand syntax for common cloud resources",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-aws-sam/"
      },
      "publishedAt": "2021-05-02T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-05-02T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-aws-sam/",
        "markdown": "https://ajcwebdev.com/first-look-aws-sam/index.md",
        "json": "https://ajcwebdev.com/first-look-aws-sam/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "comparison-to-cdk",
          "text": "Comparison to CDK"
        },
        {
          "depth": 2,
          "id": "setup",
          "text": "Setup"
        },
        {
          "depth": 3,
          "id": "configure-aws-cli",
          "text": "Configure AWS CLI"
        },
        {
          "depth": 3,
          "id": "install-sam-cli",
          "text": "Install SAM CLI"
        },
        {
          "depth": 2,
          "id": "initialize-project",
          "text": "Initialize Project"
        },
        {
          "depth": 3,
          "id": "select-a-template",
          "text": "Select a Template"
        },
        {
          "depth": 3,
          "id": "select-package-type",
          "text": "Select Package Type"
        },
        {
          "depth": 3,
          "id": "select-language-runtime",
          "text": "Select Language Runtime"
        },
        {
          "depth": 3,
          "id": "select-project-name",
          "text": "Select Project Name"
        },
        {
          "depth": 3,
          "id": "select-example-application",
          "text": "Select Example Application"
        },
        {
          "depth": 2,
          "id": "project-structure",
          "text": "Project Structure"
        },
        {
          "depth": 3,
          "id": "sam-template",
          "text": "SAM Template"
        },
        {
          "depth": 3,
          "id": "app-entry-point",
          "text": "App Entry Point"
        },
        {
          "depth": 3,
          "id": "test-handler",
          "text": "Test Handler"
        },
        {
          "depth": 3,
          "id": "events",
          "text": "Events"
        },
        {
          "depth": 2,
          "id": "deploy-to-aws",
          "text": "Deploy to AWS"
        },
        {
          "depth": 3,
          "id": "build-application",
          "text": "Build Application"
        },
        {
          "depth": 3,
          "id": "configure-sam-deploy",
          "text": "Configure SAM Deploy"
        },
        {
          "depth": 3,
          "id": "delete-stack",
          "text": "Delete Stack"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "A First Look at AWS CDK",
      "slug": "first-look-aws-cdk",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "AWS Cloud Development Kit (CDK) is a framework for defining cloud infrastructure in code and provisioning it through AWS CloudFormation",
      "summary": "AWS Cloud Development Kit (CDK) is a framework for defining cloud infrastructure in code and provisioning it through AWS CloudFormation",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-aws-cdk/"
      },
      "publishedAt": "2021-04-30T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-04-30T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-aws-cdk/",
        "markdown": "https://ajcwebdev.com/first-look-aws-cdk/index.md",
        "json": "https://ajcwebdev.com/first-look-aws-cdk/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "setup",
          "text": "Setup"
        },
        {
          "depth": 3,
          "id": "configure-aws-cli",
          "text": "Configure AWS CLI"
        },
        {
          "depth": 3,
          "id": "install-cdk-cli",
          "text": "Install CDK CLI"
        },
        {
          "depth": 3,
          "id": "create-project-directory",
          "text": "Create Project Directory"
        },
        {
          "depth": 3,
          "id": "initialize-project",
          "text": "Initialize Project"
        },
        {
          "depth": 3,
          "id": "list-stacks",
          "text": "List Stacks"
        },
        {
          "depth": 2,
          "id": "project-structure",
          "text": "Project Structure"
        },
        {
          "depth": 3,
          "id": "cdk-configuration",
          "text": "CDK Configuration"
        },
        {
          "depth": 3,
          "id": "app-entry-point",
          "text": "App Entry Point"
        },
        {
          "depth": 3,
          "id": "hellocdkstack",
          "text": "HelloCdkStack"
        },
        {
          "depth": 2,
          "id": "add-s3-bucket",
          "text": "Add S3 Bucket"
        },
        {
          "depth": 3,
          "id": "define-s3-bucket-construct",
          "text": "Define S3 Bucket Construct"
        },
        {
          "depth": 3,
          "id": "generate-cloudformation-template",
          "text": "Generate CloudFormation Template"
        },
        {
          "depth": 3,
          "id": "deploy-stack-to-aws",
          "text": "Deploy Stack to AWS"
        }
      ],
      "tags": [
        "backend",
        "deployment"
      ]
    },
    {
      "title": "Can I Use MongoDB with Prisma Yet",
      "slug": "use-mongodb-with-prisma",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "MongoDB is a database. It does stuff with data and then puts it in a base. Prisma now lets you do that without writing MongoDB stuff",
      "summary": "MongoDB is a database. It does stuff with data and then puts it in a base. Prisma now lets you do that without writing MongoDB stuff",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/use-mongodb-with-prisma/"
      },
      "publishedAt": "2021-04-21T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-04-21T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/use-mongodb-with-prisma/",
        "markdown": "https://ajcwebdev.com/use-mongodb-with-prisma/index.md",
        "json": "https://ajcwebdev.com/use-mongodb-with-prisma/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "deploy-database-on-mongodb-atlas",
          "text": "Deploy Database on MongoDB Atlas"
        },
        {
          "depth": 2,
          "id": "create-prisma-project",
          "text": "Create Prisma Project"
        },
        {
          "depth": 3,
          "id": "install-dependencies",
          "text": "Install Dependencies"
        },
        {
          "depth": 3,
          "id": "initialize-prisma-schema",
          "text": "Initialize Prisma Schema"
        },
        {
          "depth": 3,
          "id": "prisma-schema",
          "text": "Prisma Schema"
        },
        {
          "depth": 3,
          "id": "generate-prisma-client",
          "text": "Generate Prisma Client"
        },
        {
          "depth": 3,
          "id": "use-prisma-client",
          "text": "Use Prisma Client"
        },
        {
          "depth": 3,
          "id": "environment-variable",
          "text": "Environment Variable"
        },
        {
          "depth": 3,
          "id": "run-script",
          "text": "Run Script"
        },
        {
          "depth": 2,
          "id": "next-steps",
          "text": "Next Steps"
        }
      ],
      "tags": [
        "backend"
      ]
    },
    {
      "title": "A First Look at Cloudflare Pages",
      "slug": "first-look-cloudflare-pages",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Cloudflare Pages is a Jamstack platform for frontend developers to collaborate and deploy websites by syncing a GitHub repo and building a static frontend",
      "summary": "Cloudflare Pages is a Jamstack platform for frontend developers to collaborate and deploy websites by syncing a GitHub repo and building a static frontend",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-cloudflare-pages/"
      },
      "publishedAt": "2021-04-08T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-04-08T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-cloudflare-pages/",
        "markdown": "https://ajcwebdev.com/first-look-cloudflare-pages/index.md",
        "json": "https://ajcwebdev.com/first-look-cloudflare-pages/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "create-a-react-app",
          "text": "Create a React App"
        }
      ],
      "tags": [
        "web",
        "frontend",
        "deployment"
      ]
    },
    {
      "title": "How to Query the Rick and Morty GraphQL API",
      "slug": "query-rick-and-morty-gql-api",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Learn how to use a GraphQL API by querying the Rick and Morty GraphQL API with curl, the Fetch API, graphql-request, and Apollo Client",
      "summary": "Learn how to use a GraphQL API by querying the Rick and Morty GraphQL API with curl, the Fetch API, graphql-request, and Apollo Client",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/query-rick-and-morty-gql-api/"
      },
      "publishedAt": "2021-03-25T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-03-25T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/query-rick-and-morty-gql-api/",
        "markdown": "https://ajcwebdev.com/query-rick-and-morty-gql-api/index.md",
        "json": "https://ajcwebdev.com/query-rick-and-morty-gql-api/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "query-with-graphiql",
          "text": "Query with GraphiQL"
        },
        {
          "depth": 2,
          "id": "query-with-curl",
          "text": "Query with CURL"
        },
        {
          "depth": 2,
          "id": "query-with-the-fetch-api",
          "text": "Query with the Fetch API"
        },
        {
          "depth": 3,
          "id": "create-project",
          "text": "Create Project"
        },
        {
          "depth": 3,
          "id": "html-entrypoint",
          "text": "HTML Entrypoint"
        },
        {
          "depth": 3,
          "id": "fetch-request",
          "text": "Fetch Request"
        },
        {
          "depth": 2,
          "id": "query-with-graphql-request",
          "text": "Query with GraphQL Request"
        },
        {
          "depth": 3,
          "id": "install-dependencies",
          "text": "Install Dependencies"
        },
        {
          "depth": 3,
          "id": "add-scripts-and-browsers-list",
          "text": "Add Scripts and Browsers List"
        },
        {
          "depth": 3,
          "id": "initialize-graphql-request-client",
          "text": "Initialize GraphQL Request Client"
        },
        {
          "depth": 2,
          "id": "query-with-apollo-client",
          "text": "Query with Apollo Client"
        },
        {
          "depth": 3,
          "id": "install-apollo-dependencies",
          "text": "Install Apollo Dependencies"
        },
        {
          "depth": 3,
          "id": "initialize-apollo-client",
          "text": "Initialize Apollo Client"
        }
      ],
      "tags": [
        "web",
        "graphql"
      ]
    },
    {
      "title": "TypeScript Generics",
      "slug": "typescript-generics",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "A Socratic dialogue about the nature and purpose of TypeScript Generics. Generics are a way to prepare types for the unknown",
      "summary": "A Socratic dialogue about the nature and purpose of TypeScript Generics. Generics are a way to prepare types for the unknown",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/typescript-generics/"
      },
      "publishedAt": "2021-03-21T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-03-21T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/typescript-generics/",
        "markdown": "https://ajcwebdev.com/typescript-generics/index.md",
        "json": "https://ajcwebdev.com/typescript-generics/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "generics-dictionary-definition",
          "text": "Generics Dictionary Definition"
        },
        {
          "depth": 3,
          "id": "a-generic-is-like-a-function",
          "text": "A Generic is Like a Function"
        },
        {
          "depth": 3,
          "id": "generics-enable-reusable-types",
          "text": "Generics Enable Reusable Types"
        },
        {
          "depth": 3,
          "id": "generic-constraints",
          "text": "Generic Constraints"
        }
      ],
      "tags": [
        "web"
      ]
    },
    {
      "title": "Notes on ES Modules with Chantastic",
      "slug": "es-module-notes-with-chantastic",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "A collection of examples from Michael Chan (Chantastic) demonstrating static and dynamic imports, export lists, and import aliases",
      "summary": "A collection of examples from Michael Chan (Chantastic) demonstrating static and dynamic imports, export lists, and import aliases",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/es-module-notes-with-chantastic/"
      },
      "publishedAt": "2021-03-12T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-03-12T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/es-module-notes-with-chantastic/",
        "markdown": "https://ajcwebdev.com/es-module-notes-with-chantastic/index.md",
        "json": "https://ajcwebdev.com/es-module-notes-with-chantastic/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 3,
          "id": "index-main-file",
          "text": "Index Main File"
        },
        {
          "depth": 3,
          "id": "prepared-module-files",
          "text": "Prepared Module Files"
        },
        {
          "depth": 3,
          "id": "assignments",
          "text": "Assignments"
        },
        {
          "depth": 2,
          "id": "import-a-module-from-the-file-system",
          "text": "Import a Module from the File System"
        },
        {
          "depth": 3,
          "id": "leaky-modules",
          "text": "Leaky Modules"
        },
        {
          "depth": 3,
          "id": "add-globally-executing-code-to-a-module",
          "text": "Add Globally Executing Code to a Module"
        },
        {
          "depth": 2,
          "id": "import-a-module-dynamically",
          "text": "Import a Module Dynamically"
        },
        {
          "depth": 3,
          "id": "change-the-static-import-to-a-dynamic-import",
          "text": "Change the Static Import to a Dynamic Import"
        },
        {
          "depth": 2,
          "id": "export-lists",
          "text": "Export Lists"
        },
        {
          "depth": 3,
          "id": "add-a-variable-and-function-declaration-to-the-module",
          "text": "Add a Variable and Function Declaration to the Module"
        },
        {
          "depth": 3,
          "id": "use-an-export-list-to-export-a-function",
          "text": "Use an Export List to Export a Function"
        },
        {
          "depth": 2,
          "id": "alias-or-rename-imports-and-exports",
          "text": "Alias or Rename Imports and Exports"
        },
        {
          "depth": 3,
          "id": "rename-a-function-while-exporting",
          "text": "Rename a Function while Exporting"
        }
      ],
      "tags": [
        "web"
      ]
    },
    {
      "title": "A First Look at Vite",
      "slug": "first-look-vite",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Vite is a frontend build tool and open source project created by Evan You that increases development speed and serves native ES modules with ESBuild & Rollup",
      "summary": "Vite is a frontend build tool and open source project created by Evan You that increases development speed and serves native ES modules with ESBuild & Rollup",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-vite/"
      },
      "publishedAt": "2021-03-05T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2021-03-05T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-vite/",
        "markdown": "https://ajcwebdev.com/first-look-vite/index.md",
        "json": "https://ajcwebdev.com/first-look-vite/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "create-a-project-from-scratch",
          "text": "Create a Project from Scratch"
        },
        {
          "depth": 3,
          "id": "create-html-entry-file",
          "text": "Create HTML Entry File"
        },
        {
          "depth": 3,
          "id": "install-vite-dependency",
          "text": "Install Vite Dependency"
        },
        {
          "depth": 3,
          "id": "add-dev-script",
          "text": "Add Dev Script"
        },
        {
          "depth": 3,
          "id": "start-development-server",
          "text": "Start Development Server"
        },
        {
          "depth": 3,
          "id": "create-javascript-entry-file",
          "text": "Create JavaScript Entry File"
        },
        {
          "depth": 3,
          "id": "create-css-stylesheet",
          "text": "Create CSS Stylesheet"
        },
        {
          "depth": 3,
          "id": "create-a-single-page-app-that-renders-a-root-component",
          "text": "Create a Single Page App that Renders a Root Component"
        },
        {
          "depth": 2,
          "id": "create-vue-app",
          "text": "Create Vue App"
        },
        {
          "depth": 3,
          "id": "initialize-project",
          "text": "Initialize Project"
        },
        {
          "depth": 3,
          "id": "project-structure",
          "text": "Project Structure"
        },
        {
          "depth": 3,
          "id": "app-vue-component",
          "text": "App Vue Component"
        },
        {
          "depth": 3,
          "id": "helloworld-component",
          "text": "HelloWorld Component"
        },
        {
          "depth": 3,
          "id": "deploy-to-netlify",
          "text": "Deploy to Netlify"
        }
      ],
      "tags": [
        "web",
        "frontend"
      ]
    },
    {
      "title": "Semantic GitHub",
      "slug": "semantic-github",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "A semantic pull request lets you tell others about changes you've pushed to a branch but in a way that actually means something",
      "summary": "A semantic pull request lets you tell others about changes you've pushed to a branch but in a way that actually means something",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/semantic-github/"
      },
      "publishedAt": "2020-12-12T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2020-12-12T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/semantic-github/",
        "markdown": "https://ajcwebdev.com/semantic-github/index.md",
        "json": "https://ajcwebdev.com/semantic-github/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "action-semantic-pull-request",
          "text": "action-semantic-pull-request"
        },
        {
          "depth": 2,
          "id": "semantic-release",
          "text": "semantic-release"
        },
        {
          "depth": 2,
          "id": "semantic-pull-requests",
          "text": "semantic-pull-requests"
        }
      ],
      "tags": [
        "deployment"
      ]
    },
    {
      "title": "GraphQL Caching",
      "slug": "gql-caching",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Since the GraphQL specification aims to be as general as possible, caching has been considered out-of-scope for the spec itself",
      "summary": "Since the GraphQL specification aims to be as general as possible, caching has been considered out-of-scope for the spec itself",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/gql-caching/"
      },
      "publishedAt": "2020-11-10T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2020-11-10T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/gql-caching/",
        "markdown": "https://ajcwebdev.com/gql-caching/index.md",
        "json": "https://ajcwebdev.com/gql-caching/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "does-the-graphql-specification-address-caching",
          "text": "Does the GraphQL Specification Address Caching"
        },
        {
          "depth": 2,
          "id": "http-caching",
          "text": "HTTP Caching"
        },
        {
          "depth": 3,
          "id": "client-side-and-gateway-caches",
          "text": "Client Side and Gateway Caches"
        },
        {
          "depth": 3,
          "id": "freshness-and-validation",
          "text": "Freshness and Validation"
        },
        {
          "depth": 2,
          "id": "graphql-caching",
          "text": "GraphQL Caching"
        },
        {
          "depth": 3,
          "id": "globally-unique-ids",
          "text": "Globally Unique IDs"
        },
        {
          "depth": 3,
          "id": "compatibility-with-existing-apis",
          "text": "Compatibility with Existing APIs"
        },
        {
          "depth": 3,
          "id": "alternatives",
          "text": "Alternatives"
        },
        {
          "depth": 2,
          "id": "apollo-client",
          "text": "Apollo Client"
        },
        {
          "depth": 3,
          "id": "inmemorycache",
          "text": "InMemoryCache"
        },
        {
          "depth": 3,
          "id": "data-normalization",
          "text": "Data Normalization"
        },
        {
          "depth": 3,
          "id": "readquery",
          "text": "readQuery"
        },
        {
          "depth": 3,
          "id": "readfragment",
          "text": "readFragment"
        },
        {
          "depth": 3,
          "id": "writequery-and-writefragment",
          "text": "writeQuery and writeFragment"
        },
        {
          "depth": 3,
          "id": "combining-reads-and-writes",
          "text": "Combining Reads and Writes"
        },
        {
          "depth": 3,
          "id": "modify-cache",
          "text": "Modify Cache"
        },
        {
          "depth": 2,
          "id": "urql",
          "text": "urql"
        },
        {
          "depth": 2,
          "id": "micro-graphql-react",
          "text": "micro-graphql-react"
        },
        {
          "depth": 3,
          "id": "import-client-for-global-subscriptions-to-keep-cache-correct",
          "text": "Import client for global subscriptions to keep cache correct"
        },
        {
          "depth": 3,
          "id": "sync-changes-when-relevant-mutations-happen",
          "text": "Sync changes when relevant mutations happen"
        },
        {
          "depth": 3,
          "id": "cache-resetting",
          "text": "Cache Resetting"
        },
        {
          "depth": 2,
          "id": "section-and-distributed-graphql",
          "text": "Section and Distributed GraphQL"
        },
        {
          "depth": 2,
          "id": "persistent-queries",
          "text": "Persistent Queries"
        },
        {
          "depth": 2,
          "id": "resources",
          "text": "Resources"
        }
      ],
      "tags": [
        "web",
        "graphql"
      ]
    },
    {
      "title": "A First Look at SvelteKit",
      "slug": "first-look-sveltekit",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "SvelteKit is a serverless first Svelte metaframework for building web applications with filesystem-based routing and multiple rendering modes",
      "summary": "SvelteKit is a serverless first Svelte metaframework for building web applications with filesystem-based routing and multiple rendering modes",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/first-look-sveltekit/"
      },
      "publishedAt": "2020-11-06T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2020-11-06T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/first-look-sveltekit/",
        "markdown": "https://ajcwebdev.com/first-look-sveltekit/index.md",
        "json": "https://ajcwebdev.com/first-look-sveltekit/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "initialize-demo-app",
          "text": "Initialize Demo App"
        },
        {
          "depth": 3,
          "id": "install-dependencies-and-start-development-server",
          "text": "Install Dependencies and Start Development Server"
        },
        {
          "depth": 2,
          "id": "project-structure",
          "text": "Project Structure"
        },
        {
          "depth": 3,
          "id": "html-entry-point",
          "text": "HTML Entry Point"
        },
        {
          "depth": 3,
          "id": "app-entry-point",
          "text": "App Entry Point"
        },
        {
          "depth": 3,
          "id": "pages",
          "text": "Pages"
        },
        {
          "depth": 3,
          "id": "counter-component",
          "text": "Counter Component"
        },
        {
          "depth": 2,
          "id": "modules",
          "text": "Modules"
        },
        {
          "depth": 2,
          "id": "layouts",
          "text": "Layouts"
        },
        {
          "depth": 2,
          "id": "stores",
          "text": "Stores"
        },
        {
          "depth": 2,
          "id": "config",
          "text": "Config"
        },
        {
          "depth": 3,
          "id": "official-adapters-for-deployment",
          "text": "Official Adapters for Deployment"
        }
      ],
      "tags": [
        "web",
        "frontend"
      ]
    },
    {
      "title": "Why Do So Many Musicians Become Programmers",
      "slug": "why-musicians-become-programmers",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Before becoming a web developer, I spent nearly a decade as an aspiring professional musician and music teacher. Does it have anything to do with programming?",
      "summary": "Before becoming a web developer, I spent nearly a decade as an aspiring professional musician and music teacher. Does it have anything to do with programming?",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/why-musicians-become-programmers/"
      },
      "publishedAt": "2020-07-24T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2020-07-24T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/why-musicians-become-programmers/",
        "markdown": "https://ajcwebdev.com/why-musicians-become-programmers/index.md",
        "json": "https://ajcwebdev.com/why-musicians-become-programmers/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "do-many-musicians-actually-become-programmers",
          "text": "Do Many Musicians Actually Become Programmers"
        },
        {
          "depth": 3,
          "id": "do-musicians-actually-make-better-programmers",
          "text": "Do Musicians Actually Make Better Programmers"
        },
        {
          "depth": 2,
          "id": "do-musicians-become-programmers-because-they-are-traumatized",
          "text": "Do Musicians Become Programmers Because They Are Traumatized"
        },
        {
          "depth": 3,
          "id": "the-death-of-live-music-and-rise-of-streaming",
          "text": "The Death of Live Music and Rise of Streaming"
        },
        {
          "depth": 3,
          "id": "the-decision-to-pivot",
          "text": "The Decision to Pivot"
        },
        {
          "depth": 3,
          "id": "the-moment-you-make-it",
          "text": "The Moment You Make It"
        }
      ],
      "tags": [
        "web"
      ]
    },
    {
      "title": "Crypto Constitutions",
      "slug": "crypto-constitutions",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "Digital governance is not simply a technical challenge. It is a communicative, sociological, and distinctly human challenge",
      "summary": "Digital governance is not simply a technical challenge. It is a communicative, sociological, and distinctly human challenge",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/crypto-constitutions/"
      },
      "publishedAt": "2018-07-17T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2018-07-17T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/crypto-constitutions/",
        "markdown": "https://ajcwebdev.com/crypto-constitutions/index.md",
        "json": "https://ajcwebdev.com/crypto-constitutions/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "introduction",
          "text": "Introduction"
        },
        {
          "depth": 2,
          "id": "crypto-governance",
          "text": "Crypto Governance"
        },
        {
          "depth": 3,
          "id": "crypto-representatives",
          "text": "Crypto Representatives"
        },
        {
          "depth": 3,
          "id": "crypto-civics",
          "text": "Crypto Civics"
        },
        {
          "depth": 3,
          "id": "one-btc-one-vote",
          "text": "One BTC One Vote"
        },
        {
          "depth": 2,
          "id": "democratic-operating-system",
          "text": "Democratic Operating System"
        },
        {
          "depth": 3,
          "id": "decentralized-government",
          "text": "Decentralized Government"
        },
        {
          "depth": 3,
          "id": "skin-in-the-trust-machine",
          "text": "Skin in the Trust Machine"
        },
        {
          "depth": 3,
          "id": "crypto-founders",
          "text": "Crypto Founders"
        },
        {
          "depth": 2,
          "id": "conclusion",
          "text": "Conclusion"
        }
      ],
      "tags": [
        "blockchain"
      ]
    },
    {
      "title": "The Potential of Web3",
      "slug": "potential-of-web3",
      "collection": "blog",
      "contentType": "Blog post",
      "description": "An explanation of the goals and ambitions of web3 developers and the potential of web3 technology to create a sustainable structure for open source projects",
      "summary": "An explanation of the goals and ambitions of web3 developers and the potential of web3 technology to create a sustainable structure for open source projects",
      "author": {
        "name": "Anthony Campolo"
      },
      "source": {
        "originalUrl": "https://ajcwebdev.com/potential-of-web3/"
      },
      "publishedAt": "2018-02-08T00:00:00.000Z",
      "updatedAt": null,
      "freshness": {
        "label": "Published",
        "value": "2018-02-08T00:00:00.000Z"
      },
      "urls": {
        "html": "https://ajcwebdev.com/potential-of-web3/",
        "markdown": "https://ajcwebdev.com/potential-of-web3/index.md",
        "json": "https://ajcwebdev.com/potential-of-web3/index.json"
      },
      "headings": [
        {
          "depth": 2,
          "id": "the-year-crypto-went-mainstream",
          "text": "The Year Crypto Went Mainstream"
        },
        {
          "depth": 3,
          "id": "hype-versus-reality",
          "text": "Hype versus Reality"
        }
      ],
      "tags": [
        "blockchain"
      ]
    }
  ],
  "discovery": {
    "apiIndex": "https://ajcwebdev.com/api/index.json",
    "llmsTxt": "https://ajcwebdev.com/llms.txt",
    "llmsFullTxt": "https://ajcwebdev.com/llms-full.txt",
    "sitemapMd": "https://ajcwebdev.com/sitemap.md"
  },
  "nextActions": [
    {
      "action": "get_rss_feed",
      "url": "https://ajcwebdev.com/rss.xml",
      "method": "GET",
      "accept": "application/rss+xml"
    },
    {
      "action": "get_markdown_sitemap",
      "url": "https://ajcwebdev.com/sitemap.md",
      "method": "GET",
      "accept": "text/markdown"
    }
  ]
}