PROFESSIONALLY OPTIMIZED WEBSITES STARTING AT $995
Our team of SEO Web Design gurus are standing by to assist you achieve your online marketing goals.

(541) 799-0040‬

info@seowebdesignllc.com

REQUEST QUOTE
SEO Web Design, LLC aims to improve business by delivering effective solutions based on innovative technologies and professional designs. Discover the variety of services we offer and convince yourself on the basis of the latest works that we've done. We love building fresh, unique and usable websites optimized specifically for your niche.

Responsive Web Design

SEO / SEM / Social Media

Conversion Rate Optimization

Email Marketing

Online Presence Analysis

Web Hosting
Top
SEO Web Design / Web Design  / Create A Bookmarking Application With FaunaDB, Netlify And 11ty

Create A Bookmarking Application With FaunaDB, Netlify And 11ty

About The Author

Bryan is a designer, developer, and educator with a passion for CSS and static sites. He actively works to mentor and teach developers and designers the value … More about Bryan Robinson[1]

In this article, we’ll create a personal bookmarking site using FaunaDB, Netlify Functions and 11ty data files.

The JAMstack (JavaScript, APIs and Markup) revolution is in full swing. Static sites are secure, fast, reliable and fun to work on. At the heart of the JAMstack are static site generators (SSGs) that store your data as flat files: Markdown, YAML, JSON, HTML, and so on. Sometimes, managing data this way can be overly complicated. Sometimes, we still need a database.

With that in mind, Netlify — a static site host and FaunaDB — a serverless cloud database — collaborated to make combining both systems easier. 

Why A Bookmarking Site?

The JAMstack is great for many professional uses, but one of my favorite aspects of this set of technology is its low barrier to entry for personal tools and projects.

There are plenty of good products on the market for most applications I could come up with, but none would be exactly set up for me. None would give me full control over my content. None would come without a cost (monetary or informational).

With that in mind, we can create our own mini-services using JAMstack methods. In this case, we’ll be creating a site to store and publish any interesting articles I come across in my daily technology reading.

I spend a lot of time reading articles that have been shared on Twitter. When I like one, I hit the “heart” icon. Then, within a few days, it’s nearly impossible to find with the influx of new favorites. I want to build something as close to the ease of the “heart,” but that I own and control.

How are we going to do that? I’m glad you asked.

Interested in getting the code? You can

grab it on Github[2] or just deploy straight to Netlify from that repository! Take a look at the finished product here[3].

Our Technologies

Hosting And Serverless Functions: Netlify

For hosting and serverless functions, we’ll be utilizing Netlify. As an added bonus, with the new collaboration mentioned above, Netlify’s CLI — “Netlify Dev” — will automatically connect to FaunaDB and store our API keys as environment variables.

Database: FaunaDB

FaunaDB is a “serverless” NoSQL database. We’ll be using it to store our bookmarks data.

Static Site Generator: 11ty

I’m a big believer in HTML. Because of this, the tutorial won’t be using front-end JavaScript to render our bookmarks. Instead, we’ll utilize 11ty as a static site generator. 11ty has built-in data functionality that makes fetching data from an API as easy as writing a couple of short JavaScript functions.

iOS Shortcuts

We’ll need an easy way to post data to our database. In this case, we’ll use iOS’s Shortcuts app. This could be converted to an Android or desktop JavaScript bookmarklet, as well.

Setting Up FaunaDB Via Netlify Dev

Whether you have already signed up for FaunaDB or you need to create a new account, the easiest way to set up a link between FaunaDB and Netlify is via Netlify’s CLI: Netlify Dev. You can find full instructions from FaunaDB here[4] or follow along below.

Netlify Dev running in the final project with our environment variable names showing
Netlify Dev running in the final project with our environment variable names showing (Large preview[5])

If you don’t already have this installed, you can run the following command in Terminal:

npm install netlify-cli -g

From within your project directory, run through the following commands:

netlify init // This will connect your project to a Netlify project

netlify addons:create fauna // This will install the FaunaDB "addon"

netlify addons:auth fauna // This command will run you through connecting your account or setting up an account

Once this is all connected, you can run netlify dev in your project. This will run any build scripts we set up, but also connect to the Netlify and FaunaDB services and grab any necessary environment variables. Handy!

Creating Our First Data

From here, we’ll log into FaunaDB and create our first data set. We’ll start by creating a new Database called “bookmarks.” Inside a Database, we have Collections, Documents and Indexes.

A screenshot of the FaunaDB console with data
A screenshot of the FaunaDB console with data (Large preview[6])

A Collection is a categorized group of data. Each piece of data takes the form of a Document. A Document is a “single, changeable record within a FaunaDB database,” according to Fauna’s documentation. You can think of Collections as a traditional database table and a Document as a row.

For our application, we need one Collection, which we’ll call “links.” Each document within the “links” Collection will be a simple JSON object with three properties. To start, we’ll add a new Document that we’ll use to build our first data fetch.

{
  "url": "https://css-irl.info/debugging-css-grid-part-2-what-the-fraction/",
  "pageTitle": "CSS { In Real Life } | Debugging CSS Grid – Part 2: What the Fr(action)?",
  "description": "CSS In Real Life is a blog covering CSS topics and useful snippets on the web’s most beautiful language. Published by Michelle Barker, front end developer at Ordoo and CSS superfan."
}

This creates the basis for the information we’ll need to pull from our bookmarks as well as provides us with our first set of data to pull into our template.

If you’re like me, you want to see the fruits of your labor right away. Let’s get something on the page!

Installing 11ty And Pulling Data Into A Template

Since we want the bookmarks to be rendered in HTML and not fetched by the browser, we’ll need something to do the rendering. There are many great ways of doing it, but for ease and power, I love using the 11ty static site generator.

Since 11ty is a JavaScript static site generator, we can install it via NPM.

npm install --save @11ty/eleventy

From that installation, we can run eleventy or eleventy --serve in our project to get up and running.

Netlify Dev will often detect 11ty as a requirement and run the command for us. To have this work – and make sure we’re ready to deploy, we can also create “serve” and “build” commands in our package.json.

"scripts": {
    "build": "npx eleventy",
    "serve": "npx eleventy --serve"
  }

11ty’s Data Files

Most static site generators have an idea of a “data file” built-in. Usually, these files will be JSON or YAML files that allow you to add extra information to your site.

In 11ty, you can use JSON data files or JavaScript data files. By utilizing a JavaScript file, we can actually make our API calls and return the data directly into a template.

By default, 11ty wants data files stored in a _data directory. You can then access the data by using the file name as a variable in your templates. In our case, we’ll create a file at _data/bookmarks.js and access that via the {{ bookmarks }} variable name.

If you want to dig deeper into data file configuration, you can read through examples in the 11ty documentation[7] or check out this tutorial on using 11ty data files with the Meetup API[8].

The file will be a JavaScript module. So in order to have anything work, we need to export either our data or a function. In our case, we’ll export a function.

module.exports = async function() {  
    const data = mapBookmarks(await getBookmarks());  

    return data.reverse()  
}

Let’s break that down. We have two functions doing our main work here: mapBookmarks() and getBookmarks()

The getBookmarks() function will go fetch our data from our FaunaDB database and mapBookmarks() will take an array of bookmarks and restructure it to work better for our template.

Let’s dig deeper into getBookmarks().

getBookmarks()

First, we’ll need to install and initialize an instance of the FaunaDB JavaScript driver.

npm install --save faunadb

Now that we’ve installed it, let’s add it to the top of our data file. This code is straight from Fauna’s docs[9].

// Requires the Fauna module and sets up the query module, which we can use to create custom queries.
const faunadb = require('faunadb'),  
      q = faunadb.query;

// Once required, we need a new instance with our secret
var adminClient = new faunadb.Client({  
   secret: process.env.FAUNADB_SERVER_SECRET  
});

After that, we can create our function. We’ll start by building our first query using built-in methods on the driver. This first bit of code will return the database references we can use to get full data for all of our bookmarked links. We use the Paginate method, as a helper to manage cursor state should we decide to paginate the data before handing it to 11ty. In our case, we’ll just return all the references.

In this example, I’m assuming you installed and connected FaunaDB via the Netlify Dev CLI. Using this process, you get local environment variables of the FaunaDB secrets. If you didn’t install it this way or aren’t running netlify dev in your project, you’ll need a package like dotenv to create the environment variables. You’ll also need to add your environment variables to your Netlify site configuration to make deploys work later.

adminClient.query(q.Paginate(  
       q.Match( // Match the reference below
           q.Ref("indexes/all_links") // Reference to match, in this case, our all_links index  
       )  
   ))  
   .then( response => { ... })

This code will return an array of all of our links in reference form. We can now build a query list to send to our database.

adminClient.query(...)
    .then((response) => {  
        const linkRefs = response.data; // Get just the references for the links from the response 
        const getAllLinksDataQuery = linkRefs.map((ref) => {  
        return q.Get(ref) // Return a Get query based on the reference passed in  
   })  

return adminClient.query(getAllLinksDataQuery).then(ret => {  
    return ret // Return an array of all the links with full data  
       })  
   }).catch(...)

From here, we just need to clean up the data returned. That’s where mapBookmarks() comes in!

mapBookmarks()

In this function, we deal with two aspects of the data.

First, we get a free dateTime in FaunaDB. For any data created, there’s a timestamp (ts) property. It’s not formatted in a way that makes Liquid’s default date filter happy, so let’s fix that.

function mapBookmarks(data) {
    return data.map(bookmark => {
        const dateTime = new Date(bookmark.ts / 1000);
        ...
    })
}

With that out of the way, we can build a new object for our data. In this case, it will have a time property, and we’ll use the Spread operator to destructure our data object to make them all live at one level.

function mapBookmarks(data) {
    return data.map(bookmark => {
        const dateTime = new Date(bookmark.ts / 1000);

        return { time: dateTime, ...bookmark.data }
    })
}

Here’s our data before our function:

{ 
  ref: Ref(Collection("links"), "244778237839802888"),
  ts: 1569697568650000,
  
  data: { 
    url: 'https://sample.com',
    pageTitle: 'Sample title',
    description: 'An escaped description goes here' 
  } 
}

Here’s our data after our function:

{
    time: 1569697568650,
    url: 'https://sample.com',
    pageTitle: 'Sample title'
    description: 'An escaped description goes here'
}

Now, we’ve got well-formatted data that’s ready for our template!

Let’s write a simple template. We’ll loop through our bookmarks and validate that each has a pageTitle and a url so we don’t look silly.

{% for link in bookmarks %} {% if link.url and link.pageTitle %} // confirms there’s both title AND url for safety

{{ link.pageTitle }}

Saved on {{ link.time | date: "%b %d, %Y" }}

{% if link.description != "" %}

{{ link.description }}

{% endif %}
{% endif %} {% endfor %}

We’re now ingesting and displaying data from FaunaDB. Let’s take a moment and think about how nice it is that this renders out pure HTML and there’s no need to fetch data on the client side!

But that’s not really enough to make this a useful app for us. Let’s figure out a better way than adding a bookmark in the FaunaDB console.

Enter Netlify Functions

Netlify’s Functions add-on is one of the easier ways to deploy AWS lambda functions. Since there’s no configuration step, it’s perfect for DIY projects where you just want to write the code.

This function will live at a URL in your project that looks like this: https://myproject.com/.netlify/functions/bookmarks assuming the file we create in our functions folder is bookmarks.js.

Basic Flow

  1. Pass a URL as a query parameter to our function URL.
  2. Use the function to load the URL and scrape the page’s title and description if available.
  3. Format the details for FaunaDB.
  4. Push the details to our FaunaDB Collection.
  5. Rebuild the site.

Requirements

We’ve got a few packages we’ll need as we build this out. We’ll use the netlify-lambda CLI to build our functions locally. request-promise is the package we’ll use for making requests. Cheerio.js is the package we’ll use to scrape specific items from our requested page (think jQuery for Node). And finally, we’ll need FaunaDb (which should already be installed.

npm install --save netlify-lambda request-promise cheerio

Once that’s installed, let’s configure our project to build and serve the functions locally.

We’ll modify our “build” and “serve” scripts in our package.json to look like this:

"scripts": {
    "build": "npx netlify-lambda build lambda --config ./webpack.functions.js && npx eleventy",
    "serve": "npx netlify-lambda build lambda --config ./webpack.functions.js && npx eleventy --serve"
}

Warning: There’s an error with Fauna’s NodeJS driver when compiling with Webpack, which Netlify’s Functions use to build. To get around this[10], we need to define a configuration file for Webpack. You can save the following code to a newor existingwebpack.config.js.

const webpack = require('webpack');

module.exports = {
  plugins: [ new webpack.DefinePlugin({ "global.GENTLY": false }) ]
};

Once this file exists, when we use the netlify-lambda command, we’ll need to tell it to run from this configuration. This is why our “serve” and “build scripts use the --config value for that command.

Function Housekeeping

In order to keep our main Function file as clean as possible, we’ll create our functions in a separate bookmarks directory and import them into our main Function file.

import { getDetails, saveBookmark } from "./bookmarks/create";

getDetails(url)

The getDetails() function will take a URL, passed in from our exported handler. From there, we’ll reach out to the site at that URL and grab relevant parts of the page to store as data for our bookmark.

We start by requiring the NPM packages we need:

const rp = require('request-promise');  
const cheerio = require('cheerio');

Then, we’ll use the request-promise module to return an HTML string for the requested page and pass that into cheerio to give us a very jQuery-esque interface.

const getDetails = async function(url) {  
    const data = rp(url).then(function(htmlString) {  
        const $ = cheerio.load(htmlString);  
        ...  
}

From here, we need to get the page title and a meta description. To do that, we’ll use selectors like you would in jQuery. 

Note: In this code, we use 'head > title' as the selector to get the title of the page. If you don’t specify this, you may end up getting </code> <em>tags inside of all SVGs on the page, which is less than ideal.</em></p> <div readability="11"> <pre><code>const getDetails = async function(url) { const data = rp(url).then(function(htmlString) { const $ = cheerio.load(htmlString); const title = $('head > title').text(); // Get the text inside the tag const description = $('meta[name="description"]').attr('content'); // Get the text of the content attribute // Return out the data in the structure we expect return { pageTitle: title, description: description }; }); return data //return to our main function }</code></pre> </div> <p>With data in hand, it’s time to send our bookmark off to our Collection in FaunaDB!</p> <h4><code>saveBookmark(details)</code></h4> <p>For our save function, we’ll want to pass the details we acquired from <code>getDetails</code> as well as the URL as a singular object. The Spread operator strikes again!</p> <pre><code>const savedResponse = await saveBookmark({url, ...details});</code></pre> <p>In our <code>create.js</code> file, we also need to require and setup our FaunaDB driver. This should look very familiar from our 11ty data file.</p> <pre><code>const faunadb = require('faunadb'), q = faunadb.query; const adminClient = new faunadb.Client({ secret: process.env.FAUNADB_SERVER_SECRET }); </code></pre> <p>Once we’ve got that out of the way, we can code.</p> <p>First, we need to format our details into a data structure that Fauna is expecting for our query. Fauna expects an object with a data property containing the data we wish to store.</p> <pre><code>const saveBookmark = async function(details) { const data = { data: details }; ... }</code></pre> <p>Then we’ll open a new query to add to our Collection. In this case, we’ll use our query helper and use the Create method. Create() takes two arguments. First is the Collection in which we want to store our data and the second is the data itself.</p> <p>After we save, we return either success or failure to our handler.</p> <div readability="13"> <pre><code>const saveBookmark = async function(details) { const data = { data: details }; return adminClient.query(q.Create(q.Collection("links"), data)) .then((response) => { /* Success! return the response with statusCode 200 */ return { statusCode: 200, body: JSON.stringify(response) } }).catch((error) => { /* Error! return the error with statusCode 400 */ return { statusCode: 400, body: JSON.stringify(error) } }) }</code></pre> </div> <p>Let’s take a look at the full Function file.</p> <div readability="16"> <pre><code>import { getDetails, saveBookmark } from "./bookmarks/create"; import { rebuildSite } from "./utilities/rebuild"; // For rebuilding the site (more on that in a minute) exports.handler = async function(event, context) { try { const url = event.queryStringParameters.url; // Grab the URL const details = await getDetails(url); // Get the details of the page const savedResponse = await saveBookmark({url, ...details}); //Save the URL and the details to Fauna if (savedResponse.statusCode === 200) { // If successful, return success and trigger a Netlify build await rebuildSite(); return { statusCode: 200, body: savedResponse.body } } else { return savedResponse //or else return the error } } catch (err) { return { statusCode: 500, body: `Error: ${err}` }; } }; </code></pre> </div> <h4><code>rebuildSite()</code></h4> <p>The discerning eye will notice that we have one more function imported into our handler: <code>rebuildSite()</code>. This function will use Netlify’s Deploy Hook functionality to rebuild our site from the new data every time we submit a new — successful — bookmark save.</p> <p>In your site’s settings in Netlify, you can access your Build & Deploy settings and create a new “Build Hook.” Hooks have a name that appears in the Deploy section and an option for a non-master branch to deploy if you so wish. In our case, we’ll name it “new_link” and deploy our master branch.</p> <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58bf7a4f-3248-4227-bb3c-0c2a6ed96d69/bookmarking-application-faunadb-netlify-11ty-netlify-build-hook.png"><img decoding="async" srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58bf7a4f-3248-4227-bb3c-0c2a6ed96d69/bookmarking-application-faunadb-netlify-11ty-netlify-build-hook.png 400w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58bf7a4f-3248-4227-bb3c-0c2a6ed96d69/bookmarking-application-faunadb-netlify-11ty-netlify-build-hook.png 800w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58bf7a4f-3248-4227-bb3c-0c2a6ed96d69/bookmarking-application-faunadb-netlify-11ty-netlify-build-hook.png 1200w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58bf7a4f-3248-4227-bb3c-0c2a6ed96d69/bookmarking-application-faunadb-netlify-11ty-netlify-build-hook.png 1600w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58bf7a4f-3248-4227-bb3c-0c2a6ed96d69/bookmarking-application-faunadb-netlify-11ty-netlify-build-hook.png 2000w" src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58bf7a4f-3248-4227-bb3c-0c2a6ed96d69/bookmarking-application-faunadb-netlify-11ty-netlify-build-hook.png" sizes="100vw" alt="A visual reference for the Netlify Admin’s build hook setup"></a><figcaption>A visual reference for the Netlify Admin’s build hook setup (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58bf7a4f-3248-4227-bb3c-0c2a6ed96d69/bookmarking-application-faunadb-netlify-11ty-netlify-build-hook.png" name="readabilityLink-11">Large preview</a><a href="https://www.smashingmagazine.com/feed/#readabilityFootnoteLink-11"><small><sup>[11]</sup></small></a>)</figcaption></figure> <p>From there, we just need to send a POST request to the URL provided.</p> <p>We need a way of making requests and since we’ve already installed <code>request-promise</code>, we’ll continue to use that package by requiring it at the top of our file.</p> <div readability="15"> <pre><code>const rp = require('request-promise'); const rebuildSite = async function() { var options = { method: 'POST', uri: 'https://api.netlify.com/build_hooks/5d7fa6175504dfd43377688c', body: {}, json: true }; const returned = await rp(options).then(function(res) { console.log('Successfully hit webhook', res); }).catch(function(err) { console.log('Error:', err); }); return returned } </code></pre> </div> <figure>[embedded content]<figcaption>A demo of the Netlify Function setup and the iOS Shortcut setup combined</figcaption></figure> <h3>Setting Up An iOS Shortcut</h3> <p>So, we have a database, a way to display data and a function to add data, but we’re still not very user-friendly.</p> <p>Netlify provides URLs for our Lambda functions, but they’re not fun to type into a mobile device. We’d also have to pass a URL as a query parameter into it. That’s a LOT of effort. How can we make this as little effort as possible?</p> <figure><a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d68438f8-23dc-4253-b34c-bce3428ade47/bookmarking-application-faunadb-netlify-11ty-ios-shortcuts-image.png"><img decoding="async" srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d68438f8-23dc-4253-b34c-bce3428ade47/bookmarking-application-faunadb-netlify-11ty-ios-shortcuts-image.png 400w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d68438f8-23dc-4253-b34c-bce3428ade47/bookmarking-application-faunadb-netlify-11ty-ios-shortcuts-image.png 800w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d68438f8-23dc-4253-b34c-bce3428ade47/bookmarking-application-faunadb-netlify-11ty-ios-shortcuts-image.png 1200w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d68438f8-23dc-4253-b34c-bce3428ade47/bookmarking-application-faunadb-netlify-11ty-ios-shortcuts-image.png 1600w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d68438f8-23dc-4253-b34c-bce3428ade47/bookmarking-application-faunadb-netlify-11ty-ios-shortcuts-image.png 2000w" src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d68438f8-23dc-4253-b34c-bce3428ade47/bookmarking-application-faunadb-netlify-11ty-ios-shortcuts-image.png" sizes="100vw" alt="A visual reference for the setup for our Shortcut functionality"></a><figcaption>A visual reference for the setup for our Shortcut functionality (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d68438f8-23dc-4253-b34c-bce3428ade47/bookmarking-application-faunadb-netlify-11ty-ios-shortcuts-image.png" name="readabilityLink-12">Large preview</a><a href="https://www.smashingmagazine.com/feed/#readabilityFootnoteLink-12"><small><sup>[12]</sup></small></a>)</figcaption></figure> <p>Apple’s Shortcuts app allows the building of custom items to go into your share sheet. Inside these shortcuts, we can send various types of requests of data collected in the share process.</p> <p>Here’s the step-by-step Shortcut:</p> <ol> <li>Accept any items and store that item in a “text” block.</li> <li>Pass that text into a “Scripting” block to URL encode (just in case).</li> <li>Pass that string into a URL block with our Netlify Function’s URL and a query parameter of <code>url</code>.</li> <li>From “Network” use a “Get contents” block to POST to JSON to our URL.</li> <li>Optional: From “Scripting” “Show” the contents of the last step (to confirm the data we’re sending).</li> </ol> <p>To access this from the sharing menu, we open up the settings for this Shortcut and toggle on the “Show in Share Sheet” option.</p> <p>As of iOS13, these share “Actions” are able to be favorited and moved to a high position in the dialog.</p> <p>We now have a working “app” for sharing bookmarks across multiple platforms!</p> <p>If you’re inspired to try this yourself, there are a lot of other possibilities to add functionality. The joy of the DIY web is that you can make these sorts of applications work for you. Here are a few ideas:</p> <ol> <li>Use a faux “API key” for quick authentication, so other users don’t post to your site (mine uses an API key, so don’t try to post to it!).</li> <li>Add tag functionality to organize bookmarks.</li> <li>Add an RSS feed for your site so that others can subscribe.</li> <li>Send out a weekly roundup email programmatically for links that you’ve added.</li> </ol> <p>Really, the sky is the limit, so start experimenting!</p> <div><img decoding="async" src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial"><span>(dm, yk)</span></div> <div> <h3>References</h3> <ol> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-1" title="Jump to Link in Article">^</a></sup></small> <a href="https://www.smashingmagazine.com/author/bryan-robinson" name="readabilityFootnoteLink-1">More about Bryan Robinson …</a><small> (www.smashingmagazine.com)</small></li> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-2" title="Jump to Link in Article">^</a></sup></small> <a href="https://github.com/brob/netlify-fauna-bookmarks" name="readabilityFootnoteLink-2">grab it on Github</a><small> (github.com)</small></li> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-3" title="Jump to Link in Article">^</a></sup></small> <a href="https://fauna-bookmarks.netlify.com/" name="readabilityFootnoteLink-3">finished product here</a><small> (fauna-bookmarks.netlify.com)</small></li> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-4" title="Jump to Link in Article">^</a></sup></small> <a href="https://docs.fauna.com/fauna/current/start/netlify" name="readabilityFootnoteLink-4">from FaunaDB here</a><small> (docs.fauna.com)</small></li> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-5" title="Jump to Link in Article">^</a></sup></small> <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/167ab831-afbf-4c2e-9242-db2547709b3d/bookmarking-application-faunadb-netlify-11ty-netlify-dev-screenshot.jpg" name="readabilityFootnoteLink-5">Large preview</a><small> (cloud.netlifyusercontent.com)</small></li> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-6" title="Jump to Link in Article">^</a></sup></small> <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/ec14f2d9-0fa8-4245-bfaf-fed66229a540/bookmarking-application-faunadb-netlify-11ty-fauna-console-with-links.jpg" name="readabilityFootnoteLink-6">Large preview</a><small> (cloud.netlifyusercontent.com)</small></li> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-7" title="Jump to Link in Article">^</a></sup></small> <a href="https://www.11ty.io/docs/data/" name="readabilityFootnoteLink-7">11ty documentation</a><small> (www.11ty.io)</small></li> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-8" title="Jump to Link in Article">^</a></sup></small> <a href="https://bryanlrobinson.com/blog/using-eleventys-javascript-data-files/" name="readabilityFootnoteLink-8">using 11ty data files with the Meetup API</a><small> (bryanlrobinson.com)</small></li> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-9" title="Jump to Link in Article">^</a></sup></small> <a href="https://docs.fauna.com/fauna/current/drivers/javascript#requiring-the-driver" name="readabilityFootnoteLink-9">straight from Fauna’s docs</a><small> (docs.fauna.com)</small></li> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-10" title="Jump to Link in Article">^</a></sup></small> <a href="https://github.com/netlify/netlify-faunadb-example/issues/8" name="readabilityFootnoteLink-10">get around this</a><small> (github.com)</small></li> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-11" title="Jump to Link in Article">^</a></sup></small> <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/58bf7a4f-3248-4227-bb3c-0c2a6ed96d69/bookmarking-application-faunadb-netlify-11ty-netlify-build-hook.png" name="readabilityFootnoteLink-11">Large preview</a><small> (cloud.netlifyusercontent.com)</small></li> <li><small><sup><a href="https://www.smashingmagazine.com/feed/#readabilityLink-12" title="Jump to Link in Article">^</a></sup></small> <a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/d68438f8-23dc-4253-b34c-bce3428ade47/bookmarking-application-faunadb-netlify-11ty-ios-shortcuts-image.png" name="readabilityFootnoteLink-12">Large preview</a><small> (cloud.netlifyusercontent.com)</small></li> </ol> </div> <p class="wpematico_credit"><small>Powered by <a href="http://www.wpematico.com" target="_blank" rel="noopener noreferrer">WPeMatico</a></small></p> </div> <div class="mkdf-category-share-holder clearfix"> <div class="mkdf-single-tags-holder"> <div class="mkdf-tags"> <a href="https://www.seowebdesignllc.com/keyword/developers/" rel="tag">developers</a><a href="https://www.seowebdesignllc.com/keyword/smashing-magazine/" rel="tag">smashing magazine</a><a href="https://www.seowebdesignllc.com/keyword/web-designers/" rel="tag">web designers</a> </div> </div> <div class="mkdf-share-icons-single"> <span class="mkdf-share-label">Share</span> <div class="mkdf-social-share-holder mkdf-list"> <ul> <li class="mkdf-facebook-share"> <a class="mkdf-share-link" href="#" onclick="window.open('http://www.facebook.com/sharer.php?s=100&p[title]=create-a-bookmarking-application-with-faunadb-netlify-and-11ty&p[url]=https%3A%2F%2Fwww.seowebdesignllc.com%2Fcreate-a-bookmarking-application-with-faunadb-netlify-and-11ty%2F&p[images][0]=&p[summary]=about-the-author-bryan-is-a-designer-developer-and-educator-with-a-passion-for-css-and-static-sites-he-actively-works-to-mentor-and-teach-developers-and-designers-the-value-more-about-bry', 'sharer', 'toolbar=0,status=0,width=620,height=280');"> <span class="mkdf-social-network-icon social_facebook"></span> </a> </li><li class="mkdf-twitter-share"> <a class="mkdf-share-link" href="#" onclick="window.open('https://twitter.com/intent/tweet?text=About+The+Author+Bryan+is+a+designer%2C+developer%2C+and+educator+with+a+passion+for+CSS+and+static+sites.+He+actively+https://www.seowebdesignllc.com/create-a-bookmarking-application-with-faunadb-netlify-and-11ty/', 'popupwindow', 'scrollbars=yes,width=800,height=400');"> <span class="mkdf-social-network-icon social_twitter"></span> </a> </li><li class="mkdf-linkedin-share"> <a class="mkdf-share-link" href="#" onclick="popUp=window.open('http://linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.seowebdesignllc.com%2Fcreate-a-bookmarking-application-with-faunadb-netlify-and-11ty%2F&title=Create+A+Bookmarking+Application+With+FaunaDB%2C+Netlify+And+11ty', 'popupwindow', 'scrollbars=yes,width=800,height=400');popUp.focus();return false;"> <span class="mkdf-social-network-icon social_linkedin"></span> </a> </li> </ul> </div> </div> </div> </div> </div> </article> <div class="mkdf-author-description"> <div class="mkdf-author-description-inner clearfix"> <div class="mkdf-author-description-image"> <a href="https://www.seowebdesignllc.com/author/smashingmagazine/"> <img src='https://www.seowebdesignllc.com/wp-content/uploads/2019/08/smashing-magazine-logo-icon-150x150.png' class='avatar pp-user-avatar avatar-102 photo ' height='102' width='102' /> </a> </div> <div class="mkdf-author-description-text-holder"> <h4 class="mkdf-author-name"> <a href="https://www.seowebdesignllc.com/author/smashingmagazine/"> <span itemprop="author"> Smashing Magazine </span> </a> </h4> <p class="mkdf-author-email">smashmag@seowdllc.com</p> <div class="mkdf-author-text"> <p>Smashing Magazine is a website and eBook publisher that offers editorial content and professional resources for web developers and web designers.</p> </div> </div> </div> </div> <div class="mkdf-blog-single-navigation clearfix"> <div class="mkdf-blog-single-navigation-inner clearfix"> <div class="mkdf-blog-single-prev clearfix "> <div class="mkdf-single-nav-content-holder"> <h6> <a href="https://www.seowebdesignllc.com/writing-a-multiplayer-text-adventure-engine-in-node-js-game-engine-server-design-part-2/"> Writing A Multiplayer Text Adventure Engine In Node.js: Game Engine Server Design (Part 2) </a> </h6> <a href="https://www.seowebdesignllc.com/writing-a-multiplayer-text-adventure-engine-in-node-js-game-engine-server-design-part-2/"> <span aria-hidden="true" class="mkdf-icon-font-elegant arrow_carrot-left_alt2 " ></span> <span>Previous</span> </a> </div> </div> <!-- close div.blog_prev --> <div class="mkdf-blog-single-next clearfix mkdf-single-nav-with-image"> <div class="mkdf-single-nav-image-holder"> <a href="https://www.seowebdesignllc.com/the-ultimate-collection-of-free-design-rersources/"> <img width="150" height="150" src="https://www.seowebdesignllc.com/wp-content/uploads/2019/10/381f49d9-unsplash-150x150.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" /> </a> </div> <div class="mkdf-single-nav-content-holder"> <h6> <a href="https://www.seowebdesignllc.com/the-ultimate-collection-of-free-design-rersources/"> The Ultimate Collection of Free Design Rersources </a> </h6> <a href="https://www.seowebdesignllc.com/the-ultimate-collection-of-free-design-rersources/"> <span>Next</span> <span aria-hidden="true" class="mkdf-icon-font-elegant arrow_carrot-right_alt2 " ></span> </a> </div> </div> </div> </div> <div class="mkdf-related-posts-holder"> <div class="mkdf-related-posts-title"> <h3>Related Posts</h3> </div> <div class="mkdf-related-posts-inner clearfix"> <div class="mkdf-related-post"> <a href="https://www.seowebdesignllc.com/creating-custom-emmet-snippets-in-vs-code/ "> <div class="mkdf-related-post-image"> <img width="200" height="200" src="https://www.seowebdesignllc.com/wp-content/uploads/2021/06/manuel-matuzovic-200x200-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" srcset="https://www.seowebdesignllc.com/wp-content/uploads/2021/06/manuel-matuzovic-200x200-1.jpg 200w, https://www.seowebdesignllc.com/wp-content/uploads/2021/06/manuel-matuzovic-200x200-1-100x100.jpg 100w, https://www.seowebdesignllc.com/wp-content/uploads/2021/06/manuel-matuzovic-200x200-1-150x150.jpg 150w" sizes="(max-width: 200px) 100vw, 200px" /> </div> </a> <div class="mkdf-related-post-title"> <a href="https://www.seowebdesignllc.com/creating-custom-emmet-snippets-in-vs-code/" title="Creating Custom Emmet Snippets In VS Code"><h4>Creating Custom Emmet Snippets In VS Code</h4></a> </div> </div> <div class="mkdf-related-post"> <a href="https://www.seowebdesignllc.com/creating-a-multi-author-blog-with-next-js/ "> <div class="mkdf-related-post-image"> <img width="200" height="200" src="https://www.seowebdesignllc.com/wp-content/uploads/2021/06/dom-habersack200x200.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://www.seowebdesignllc.com/wp-content/uploads/2021/06/dom-habersack200x200.jpg 200w, https://www.seowebdesignllc.com/wp-content/uploads/2021/06/dom-habersack200x200-100x100.jpg 100w, https://www.seowebdesignllc.com/wp-content/uploads/2021/06/dom-habersack200x200-150x150.jpg 150w" sizes="(max-width: 200px) 100vw, 200px" /> </div> </a> <div class="mkdf-related-post-title"> <a href="https://www.seowebdesignllc.com/creating-a-multi-author-blog-with-next-js/" title="Creating A Multi-Author Blog With Next.js"><h4>Creating A Multi-Author Blog With Next.js</h4></a> </div> </div> <div class="mkdf-related-post"> <a href="https://www.seowebdesignllc.com/how-to-run-a-ux-audit-for-a-major-edtech-platform-case-study/ "> <div class="mkdf-related-post-image"> <img width="200" height="200" src="https://www.seowebdesignllc.com/wp-content/uploads/2021/06/mark-lankmiller-200x200-1.jpeg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://www.seowebdesignllc.com/wp-content/uploads/2021/06/mark-lankmiller-200x200-1.jpeg 200w, https://www.seowebdesignllc.com/wp-content/uploads/2021/06/mark-lankmiller-200x200-1-100x100.jpeg 100w, https://www.seowebdesignllc.com/wp-content/uploads/2021/06/mark-lankmiller-200x200-1-150x150.jpeg 150w" sizes="(max-width: 200px) 100vw, 200px" /> </div> </a> <div class="mkdf-related-post-title"> <a href="https://www.seowebdesignllc.com/how-to-run-a-ux-audit-for-a-major-edtech-platform-case-study/" title="How To Run A UX Audit For A Major EdTech Platform (Case Study)"><h4>How To Run A UX Audit For A Major EdTech Platform (Case Study)</h4></a> </div> </div> </div> </div> </div> </div> </div> <div class="mkdf-column2"> <div class="mkdf-column-inner"> <aside class="mkdf-sidebar"> <div id="text-15" class="widget widget_text"> <div class="textwidget"><a href="http://www.sitegroundhost.com" onClick="this.href='https://www.siteground.com/web-hosting.htm?afbannercode=3cd78141f0daec82f325cab018a344f2'" ><img src="https://ua.siteground.com/img/banners/general/best-pack/468x60.gif" alt="Web Hosting" width="468" height="60" border="0"></a></div> </div><div id="text-14" class="widget widget_text"><h4><span class="mkdf-sidearea-title">Request An Estimate</span><span class="mkdf-sidearea-line"></span></h4> <div class="textwidget"> <div class="wpcf7 no-js" id="wpcf7-f3657-p6863-o1" lang="en-US" dir="ltr"> <div class="screen-reader-response"><p role="status" aria-live="polite" aria-atomic="true"></p> <ul></ul></div> <form action="/create-a-bookmarking-application-with-faunadb-netlify-and-11ty/#wpcf7-f3657-p6863-o1" method="post" class="wpcf7-form init" aria-label="Contact form" novalidate="novalidate" data-status="init"> <div style="display: none;"> <input type="hidden" name="_wpcf7" value="3657" /> <input type="hidden" name="_wpcf7_version" value="5.8.6" /> <input type="hidden" name="_wpcf7_locale" value="en_US" /> <input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f3657-p6863-o1" /> <input type="hidden" name="_wpcf7_container_post" value="6863" /> <input type="hidden" name="_wpcf7_posted_data_hash" value="" /> <input type="hidden" name="_wpcf7_recaptcha_response" value="" /> </div> <div class="wpcf7-form cf7_custom_style_1"> <p><span class="wpcf7-form-control-wrap" data-name="your-name"><input size="40" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required" aria-required="true" aria-invalid="false" placeholder="Name*" value="" type="text" name="your-name" /></span> </p> </div> <div class="wpcf7-form cf7_custom_style_1"> <p><span class="wpcf7-form-control-wrap" data-name="your-email"><input size="40" class="wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email" aria-required="true" aria-invalid="false" placeholder="Email*" value="" type="email" name="your-email" /></span> </p> </div> <div class="wpcf7-form cf7_custom_style_1"> <p><span class="wpcf7-form-control-wrap" data-name="your-phone"><input size="40" class="wpcf7-form-control wpcf7-tel wpcf7-text wpcf7-validates-as-tel" aria-invalid="false" placeholder="Phone" value="" type="tel" name="your-phone" /></span> </p> </div> <div class="wpcf7-form cf7_custom_style_1"> <p><span class="wpcf7-form-control-wrap" data-name="your-message"><textarea cols="40" rows="10" class="wpcf7-form-control wpcf7-textarea" aria-invalid="false" placeholder="Describe your project..." name="your-message"></textarea></span> </p> </div> <div> </div> <div> <p><input class="wpcf7-form-control wpcf7-submit has-spinner" type="submit" value="SEND" /> </p> </div><div class="wpcf7-response-output" aria-hidden="true"></div> </form> </div> </div> </div><div id="text-12" class="widget widget_text"><h4><span class="mkdf-sidearea-title">About SEO Web Design</span><span class="mkdf-sidearea-line"></span></h4> <div class="textwidget">SEO Web Design, LLC specializes in creating professionally optimized websites for businesses, organizations, and/or individuals. We aim to improve online exposure by delivering effective solutions based on innovative technologies and professional designs. <a href="http://www.sitegroundhost.com" onClick="this.href='https://www.siteground.com/web-hosting.htm?afbannercode=5f5e3f359094ae08cbb7ba4fb361768b'" ><img src="https://ua.siteground.com/img/banners/general/static/468x60.jpg" alt="Web Hosting" width="468" height="60" border="0"></a></div> </div><div id="tag_cloud-2" class="widget widget_tag_cloud"><h4><span class="mkdf-sidearea-title">Popular Keywords</span><span class="mkdf-sidearea-line"></span></h4><div class="tagcloud"><a href="https://www.seowebdesignllc.com/keyword/backlinko/" class="tag-cloud-link tag-link-278 tag-link-position-1" style="font-size: 15.276315789474pt;" aria-label="backlinko (75 items)">backlinko</a> <a href="https://www.seowebdesignllc.com/keyword/best-hosting-company/" class="tag-cloud-link tag-link-129 tag-link-position-2" style="font-size: 8pt;" aria-label="best hosting company (1 item)">best hosting company</a> <a href="https://www.seowebdesignllc.com/keyword/best-hosting-security/" class="tag-cloud-link tag-link-225 tag-link-position-3" style="font-size: 8pt;" aria-label="best hosting security (1 item)">best hosting security</a> <a href="https://www.seowebdesignllc.com/keyword/best-hosting-speed/" class="tag-cloud-link tag-link-224 tag-link-position-4" style="font-size: 8pt;" aria-label="best hosting speed (1 item)">best hosting speed</a> <a href="https://www.seowebdesignllc.com/keyword/best-hosting-support/" class="tag-cloud-link tag-link-131 tag-link-position-5" style="font-size: 8pt;" aria-label="best hosting support (1 item)">best hosting support</a> <a href="https://www.seowebdesignllc.com/keyword/best-joomla-hosting/" class="tag-cloud-link tag-link-201 tag-link-position-6" style="font-size: 8pt;" aria-label="best joomla hosting (1 item)">best joomla hosting</a> <a href="https://www.seowebdesignllc.com/keyword/best-wordpress-hosting/" class="tag-cloud-link tag-link-200 tag-link-position-7" style="font-size: 8pt;" aria-label="best wordpress hosting (1 item)">best wordpress hosting</a> <a href="https://www.seowebdesignllc.com/keyword/brainstorming/" class="tag-cloud-link tag-link-216 tag-link-position-8" style="font-size: 8pt;" aria-label="brainstorming (1 item)">brainstorming</a> <a href="https://www.seowebdesignllc.com/keyword/business-breakdown/" class="tag-cloud-link tag-link-214 tag-link-position-9" style="font-size: 8pt;" aria-label="business breakdown (1 item)">business breakdown</a> <a href="https://www.seowebdesignllc.com/keyword/developers/" class="tag-cloud-link tag-link-270 tag-link-position-10" style="font-size: 19.236842105263pt;" aria-label="developers (546 items)">developers</a> <a href="https://www.seowebdesignllc.com/keyword/high-quality-media/" class="tag-cloud-link tag-link-215 tag-link-position-11" style="font-size: 8pt;" aria-label="high quality media (1 item)">high quality media</a> <a href="https://www.seowebdesignllc.com/keyword/in-bound-marketing/" class="tag-cloud-link tag-link-287 tag-link-position-12" style="font-size: 11.223684210526pt;" aria-label="in bound marketing (9 items)">in bound marketing</a> <a href="https://www.seowebdesignllc.com/keyword/increase-opportunites/" class="tag-cloud-link tag-link-212 tag-link-position-13" style="font-size: 8pt;" aria-label="increase opportunites (1 item)">increase opportunites</a> <a href="https://www.seowebdesignllc.com/keyword/info-gathering/" class="tag-cloud-link tag-link-213 tag-link-position-14" style="font-size: 8pt;" aria-label="info gathering (1 item)">info gathering</a> <a href="https://www.seowebdesignllc.com/keyword/lead-capture/" class="tag-cloud-link tag-link-211 tag-link-position-15" style="font-size: 8pt;" aria-label="lead capture (1 item)">lead capture</a> <a href="https://www.seowebdesignllc.com/keyword/lead-generation/" class="tag-cloud-link tag-link-210 tag-link-position-16" style="font-size: 8pt;" aria-label="lead generation (1 item)">lead generation</a> <a href="https://www.seowebdesignllc.com/keyword/moz/" class="tag-cloud-link tag-link-283 tag-link-position-17" style="font-size: 11.223684210526pt;" aria-label="moz (9 items)">moz</a> <a href="https://www.seowebdesignllc.com/keyword/optimization/" class="tag-cloud-link tag-link-205 tag-link-position-18" style="font-size: 8pt;" aria-label="optimization (1 item)">optimization</a> <a href="https://www.seowebdesignllc.com/keyword/search-engine-land/" class="tag-cloud-link tag-link-290 tag-link-position-19" style="font-size: 21.401315789474pt;" aria-label="search engine land (1,610 items)">search engine land</a> <a href="https://www.seowebdesignllc.com/keyword/search-engine-marketing/" class="tag-cloud-link tag-link-291 tag-link-position-20" style="font-size: 21.907894736842pt;" aria-label="search engine marketing (2,095 items)">search engine marketing</a> <a href="https://www.seowebdesignllc.com/keyword/search-engine-optimization/" class="tag-cloud-link tag-link-279 tag-link-position-21" style="font-size: 22pt;" aria-label="search engine optimization (2,179 items)">search engine optimization</a> <a href="https://www.seowebdesignllc.com/keyword/search-engine-watch/" class="tag-cloud-link tag-link-294 tag-link-position-22" style="font-size: 19.006578947368pt;" aria-label="search engine watch (485 items)">search engine watch</a> <a href="https://www.seowebdesignllc.com/keyword/sem/" class="tag-cloud-link tag-link-292 tag-link-position-23" style="font-size: 21.907894736842pt;" aria-label="sem (2,095 items)">sem</a> <a href="https://www.seowebdesignllc.com/keyword/seo/" class="tag-cloud-link tag-link-202 tag-link-position-24" style="font-size: 8pt;" aria-label="seo (1 item)">seo</a> <a href="https://www.seowebdesignllc.com/keyword/seo-case-studies/" class="tag-cloud-link tag-link-282 tag-link-position-25" style="font-size: 15.276315789474pt;" aria-label="seo case studies (75 items)">seo case studies</a> <a href="https://www.seowebdesignllc.com/keyword/seo-resources/" class="tag-cloud-link tag-link-284 tag-link-position-26" style="font-size: 11.223684210526pt;" aria-label="seo resources (9 items)">seo resources</a> <a href="https://www.seowebdesignllc.com/keyword/seo-software/" class="tag-cloud-link tag-link-286 tag-link-position-27" style="font-size: 11.223684210526pt;" aria-label="seo software (9 items)">seo software</a> <a href="https://www.seowebdesignllc.com/keyword/seo-strategies/" class="tag-cloud-link tag-link-281 tag-link-position-28" style="font-size: 15.276315789474pt;" aria-label="seo strategies (75 items)">seo strategies</a> <a href="https://www.seowebdesignllc.com/keyword/seo-tips/" class="tag-cloud-link tag-link-280 tag-link-position-29" style="font-size: 15.276315789474pt;" aria-label="seo tips (75 items)">seo tips</a> <a href="https://www.seowebdesignllc.com/keyword/seo-tools/" class="tag-cloud-link tag-link-285 tag-link-position-30" style="font-size: 11.223684210526pt;" aria-label="seo tools (9 items)">seo tools</a> <a href="https://www.seowebdesignllc.com/keyword/sitegroundhost-com/" class="tag-cloud-link tag-link-130 tag-link-position-31" style="font-size: 8pt;" aria-label="sitegroundhost.com (1 item)">sitegroundhost.com</a> <a href="https://www.seowebdesignllc.com/keyword/smashing-magazine/" class="tag-cloud-link tag-link-268 tag-link-position-32" style="font-size: 19.236842105263pt;" aria-label="smashing magazine (546 items)">smashing magazine</a> <a href="https://www.seowebdesignllc.com/keyword/web-design/" class="tag-cloud-link tag-link-203 tag-link-position-33" style="font-size: 18.730263157895pt;" aria-label="web design (425 items)">web design</a> <a href="https://www.seowebdesignllc.com/keyword/webdesigner-depot/" class="tag-cloud-link tag-link-271 tag-link-position-34" style="font-size: 18.730263157895pt;" aria-label="webdesigner depot (424 items)">webdesigner depot</a> <a href="https://www.seowebdesignllc.com/keyword/web-designers/" class="tag-cloud-link tag-link-269 tag-link-position-35" style="font-size: 19.559210526316pt;" aria-label="web designers (643 items)">web designers</a> <a href="https://www.seowebdesignllc.com/keyword/web-design-ledger/" class="tag-cloud-link tag-link-277 tag-link-position-36" style="font-size: 15.782894736842pt;" aria-label="web design ledger (97 items)">web design ledger</a> <a href="https://www.seowebdesignllc.com/keyword/website-design/" class="tag-cloud-link tag-link-204 tag-link-position-37" style="font-size: 8pt;" aria-label="website design (1 item)">website design</a></div> </div><div id="search-2" class="widget widget_search"><h4><span class="mkdf-sidearea-title">Search Our Site</span><span class="mkdf-sidearea-line"></span></h4><form method="get" id="searchform" class="searchform clearfix" action="https://www.seowebdesignllc.com/"> <div class="clearfix"> <input type="submit" id="searchsubmit" value="" /> <input type="text" value="" placeholder="Types..." name="s" id="s" /> </div> </form></div> </aside> </div> </div> </div> </div> </div> </div> <!-- close div.content_inner --> </div> <!-- close div.content --> <footer class="mkdf-page-footer"> <div class="mkdf-footer-inner clearfix"> <div class="mkdf-footer-top-holder"> <div class="mkdf-footer-top mkdf-footer-top-aligment-left"> <div class="mkdf-container"> <div class="mkdf-container-inner"> <div class="mkdf-three-columns"> <div class="mkdf-three-columns-inner clearfix"> <div class="mkdf-column"> <div class="mkdf-column-inner"> <div id="text-6" class="widget mkdf-footer-column-1 widget_text"><h5 class="mkdf-footer-widget-title">Company Info</h5> <div class="textwidget"><span style="color:#ffffff !important;">SEO Web Design, LLC aims to improve business by delivering effective solutions based on innovative technologies and professional designs. We love building fresh, unique and usable websites optimized specifically for your niche.</span> <div class="vc_empty_space" style="height: 20px"><span class="vc_empty_space_inner"></span></div> <div class="mkdf-icon-list-item mkdf-icon-list-item-headings-font-family"> <div class="mkdf-icon-list-icon-holder"> <div class="mkdf-icon-list-icon-holder-inner clearfix"> <i class="mkdf-icon-simple-line-icon icon-call-in " style="color:#ffffff;font-size:17px" ></i> </div> </div> <p class="mkdf-icon-list-text" style="color:#ffffff" > (541) 799-0040‬‬</p> </div> <div class="mkdf-icon-list-item mkdf-icon-list-item-headings-font-family"> <div class="mkdf-icon-list-icon-holder"> <div class="mkdf-icon-list-icon-holder-inner clearfix"> <i class="mkdf-icon-simple-line-icon icon-envelope " style="color:#ffffff;font-size:17px" ></i> </div> </div> <p class="mkdf-icon-list-text" style="color:#ffffff" > info@seowebdesignllc.com</p> </div> <div class="mkdf-icon-list-item mkdf-icon-list-item-headings-font-family"> <div class="mkdf-icon-list-icon-holder"> <div class="mkdf-icon-list-icon-holder-inner clearfix"> <i class="mkdf-icon-simple-line-icon icon-location-pin " style="color:#ffffff;font-size:17px" ></i> </div> </div> <p class="mkdf-icon-list-text" style="color:#ffffff" > Made in the USA</p> </div> <a href="http://www.sitegroundhost.com" onClick="this.href='https://www.siteground.com/web-hosting.htm?afbannercode=ed1de8516de6fab199b939228373cbab'" ><img src="https://ua.siteground.com/img/banners/general/comfort/468x60.gif" alt="Web Hosting" width="468" height="60" border="0"></a></div> </div> </div> </div> <div class="mkdf-column"> <div class="mkdf-column-inner"> <div id="nav_menu-3" class="widget mkdf-footer-column-2 widget_nav_menu"><h5 class="mkdf-footer-widget-title">Important Links</h5><div class="menu-footer-widget-menu-container"><ul id="menu-footer-widget-menu" class="menu"><li id="menu-item-26663" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26663"><a href="https://www.seowebdesignllc.com/free-quote/">Get Free Quote</a></li> <li id="menu-item-26658" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26658"><a href="https://www.seowebdesignllc.com/info/">Company Information</a></li> <li id="menu-item-26657" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26657"><a href="https://www.seowebdesignllc.com/reviews/">Client Testimonials</a></li> <li id="menu-item-26664" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26664"><a href="https://www.seowebdesignllc.com/website-design/">Website Design</a></li> <li id="menu-item-26660" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26660"><a href="https://www.seowebdesignllc.com/internet-marketing/">Internet Marketing</a></li> <li id="menu-item-26661" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26661"><a href="https://www.seowebdesignllc.com/portfolio/">Live Portfolio</a></li> <li id="menu-item-26662" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26662"><a href="https://www.seowebdesignllc.com/pricing/">Base Price Guide</a></li> <li id="menu-item-26659" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26659"><a href="https://www.seowebdesignllc.com/contact/">Customer Support</a></li> </ul></div></div> </div> </div> <div class="mkdf-column"> <div class="mkdf-column-inner"> <div id="woocommerce_products-3" class="widget mkdf-footer-column-3 woocommerce widget_products"><h5 class="mkdf-footer-widget-title">Featured Product</h5><ul class="product_list_widget"><li> <a class="mkdf-woo-product-widget-image" href="https://www.seowebdesignllc.com/product/seo-content-extended-1000-words/" title="SEO Content (1000+ Words)"> <img width="600" height="600" src="https://www.seowebdesignllc.com/wp-content/uploads/2016/10/seo-content-writing-product-image-square2.png" class="attachment-woocommerce_thumbnail size-woocommerce_thumbnail" alt="SEO Content Writing 1 - SEO Web Design" /> </a> <div class="mkdf-woo-product-widget-content"> <a class="mkdf-woo-product-widget-title" href="https://www.seowebdesignllc.com/product/seo-content-extended-1000-words/"> <span class="product-title">SEO Content (1000+ Words)</span> </a> <del aria-hidden="true"><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">$</span>195.00</bdi></span></del> <ins><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">$</span>150.00</bdi></span></ins> </div> </li></ul></div> </div> </div> </div> </div> </div> </div> </div> </div> <div class="mkdf-footer-bottom-holder"> <div class="mkdf-footer-bottom-holder-inner"> <div class="mkdf-container"> <div class="mkdf-container-inner"> <div class="mkdf-two-columns-50-50"> <div class="mkdf-two-columns-50-50-inner clearfix"> <div class="mkdf-column"> <div class="mkdf-column-inner"> <div id="text-9" class="widget mkdf-footer-bottom-left widget_text"> <div class="textwidget">© 2013-2023 / <a href="https://www.seowebdesignllc.com/" color="white" title="SEO Web Design"><strong>SEO Web Design</strong></a>, LLC / All rights reserved. <br /><small><a href="/terms/">Terms</a> | <a href="/privacy/">Privacy</a> | <a href="/refunds/">Refunds</a> | <a href="/sitemap/">Sitemap</a></small></div> </div> </div> </div> <div class="mkdf-column"> <div class="mkdf-column-inner"> <div id="mkd_social_icon_widget-7" class="widget mkdf-footer-bottom-left widget_mkd_social_icon_widget"> <a class="mkdf-social-icon-widget-holder mkdf-social_facebook" href="https://www.facebook.com/seowebdesignllc/" target="_blank"> <span class="mkdf-social-icon-widget social_facebook"></span> </a> </div> <div id="mkd_social_icon_widget-6" class="widget mkdf-footer-bottom-left widget_mkd_social_icon_widget"> <a class="mkdf-social-icon-widget-holder mkdf-social_twitter" href="https://twitter.com/SEOWebDesignLLC" target="_blank"> <span class="mkdf-social-icon-widget social_twitter"></span> </a> </div> <div id="mkd_social_icon_widget-9" class="widget mkdf-footer-bottom-left widget_mkd_social_icon_widget"> <a class="mkdf-social-icon-widget-holder mkdf-social_linkedin" href="https://www.linkedin.com/in/kylehaak" target="_blank"> <span class="mkdf-social-icon-widget social_linkedin"></span> </a> </div> <div id="mkd_social_icon_widget-8" class="widget mkdf-footer-bottom-left widget_mkd_social_icon_widget"> <a class="mkdf-social-icon-widget-holder mkdf-social_googleplus" href="https://goo.gl/maps/yHUgBawsNJs92gxT9" target="_blank"> <span class="mkdf-social-icon-widget social_googleplus"></span> </a> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </footer> </div> <!-- close div.mkdf-wrapper-inner --> </div> <!-- close div.mkdf-wrapper --> <!-- GA Google Analytics @ https://m0n.co/ga --> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-33889204-1', 'auto'); ga('send', 'pageview'); </script> <script type='text/javascript'> (function () { var c = document.body.className; c = c.replace(/woocommerce-no-js/, 'woocommerce-js'); document.body.className = c; })(); </script> <!-- <link rel='stylesheet' id='wc-blocks-style-css' href='https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks.css?ver=11.8.0-dev' type='text/css' media='all' /> --> <link rel="stylesheet" type="text/css" href="//www.seowebdesignllc.com/wp-content/cache/wpfc-minified/q9l0htd0/g3s8k.css" media="all"/> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=5.8.6" id="swv-js"></script> <script type="text/javascript" id="contact-form-7-js-extra"> /* <![CDATA[ */ var wpcf7 = {"api":{"root":"https:\/\/www.seowebdesignllc.com\/wp-json\/","namespace":"contact-form-7\/v1"}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/contact-form-7/includes/js/index.js?ver=5.8.6" id="contact-form-7-js"></script> <script type="text/javascript" id="stripe-handler-ng-js-extra"> /* <![CDATA[ */ var wpASPNG = {"iframeUrl":"https:\/\/www.seowebdesignllc.com\/asp-payment-box\/","ppSlug":"asp-payment-box","prefetch":"0","ckey":"3230a7a7a7ed231cb033e2adfd6c68b9","aspDevMode":"1"}; /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/stripe-payments/public/assets/js/stripe-handler-ng.js?ver=2.0.83" id="stripe-handler-ng-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js?ver=8.5.2" id="sourcebuster-js-js"></script> <script type="text/javascript" id="wc-order-attribution-js-extra"> /* <![CDATA[ */ var wc_order_attribution = {"params":{"lifetime":1.0000000000000000818030539140313095458623138256371021270751953125e-5,"session":30,"ajaxurl":"https:\/\/www.seowebdesignllc.com\/wp-admin\/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":"yes"}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js?ver=8.5.2" id="wc-order-attribution-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/vendor/wp-polyfill-inert.min.js?ver=3.1.2" id="wp-polyfill-inert-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/vendor/regenerator-runtime.min.js?ver=0.14.0" id="regenerator-runtime-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0" id="wp-polyfill-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/vendor/react.min.js?ver=18.2.0" id="react-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/hooks.min.js?ver=c6aec9a8d4e5a5d543a1" id="wp-hooks-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/deprecated.min.js?ver=73ad3591e7bc95f4777a" id="wp-deprecated-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/dom.min.js?ver=49ff2869626fbeaacc23" id="wp-dom-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/vendor/react-dom.min.js?ver=18.2.0" id="react-dom-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/escape-html.min.js?ver=03e27a7b6ae14f7afaa6" id="wp-escape-html-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/element.min.js?ver=ed1c7604880e8b574b40" id="wp-element-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/is-shallow-equal.min.js?ver=20c2b06ecf04afb14fee" id="wp-is-shallow-equal-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/i18n.min.js?ver=7701b0c3857f914212ef" id="wp-i18n-js"></script> <script type="text/javascript" id="wp-i18n-js-after"> /* <![CDATA[ */ wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/keycodes.min.js?ver=3460bd0fac9859d6886c" id="wp-keycodes-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/priority-queue.min.js?ver=422e19e9d48b269c5219" id="wp-priority-queue-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/compose.min.js?ver=3189b344ff39fef940b7" id="wp-compose-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/private-apis.min.js?ver=11cb2ebaa70a9f1f0ab5" id="wp-private-apis-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/redux-routine.min.js?ver=0be1b2a6a79703e28531" id="wp-redux-routine-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/data.min.js?ver=dc5f255634f3da29c8d5" id="wp-data-js"></script> <script type="text/javascript" id="wp-data-js-after"> /* <![CDATA[ */ ( function() { var userId = 0; var storageKey = "WP_DATA_USER_" + userId; wp.data .use( wp.data.plugins.persistence, { storageKey: storageKey } ); } )(); /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/vendor/lodash.min.js?ver=4.17.19" id="lodash-js"></script> <script type="text/javascript" id="lodash-js-after"> /* <![CDATA[ */ window.lodash = _.noConflict(); /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-registry.js?ver=1c879273bd5c193cad0a" id="wc-blocks-registry-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/url.min.js?ver=b4979979018b684be209" id="wp-url-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/api-fetch.min.js?ver=0fa4dabf8bf2c7adf21a" id="wp-api-fetch-js"></script> <script type="text/javascript" id="wp-api-fetch-js-after"> /* <![CDATA[ */ wp.apiFetch.use( wp.apiFetch.createRootURLMiddleware( "https://www.seowebdesignllc.com/wp-json/" ) ); wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware( "728a4ec99d" ); wp.apiFetch.use( wp.apiFetch.nonceMiddleware ); wp.apiFetch.use( wp.apiFetch.mediaUploadMiddleware ); wp.apiFetch.nonceEndpoint = "https://www.seowebdesignllc.com/wp-admin/admin-ajax.php?action=rest-nonce"; /* ]]> */ </script> <script type="text/javascript" id="wc-settings-js-before"> /* <![CDATA[ */ var wcSettings = wcSettings || JSON.parse( decodeURIComponent( '%7B%22shippingCostRequiresAddress%22%3Afalse%2C%22adminUrl%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2Fwp-admin%5C%2F%22%2C%22countries%22%3A%7B%22AF%22%3A%22Afghanistan%22%2C%22AX%22%3A%22%5Cu00c5land%20Islands%22%2C%22AL%22%3A%22Albania%22%2C%22DZ%22%3A%22Algeria%22%2C%22AS%22%3A%22American%20Samoa%22%2C%22AD%22%3A%22Andorra%22%2C%22AO%22%3A%22Angola%22%2C%22AI%22%3A%22Anguilla%22%2C%22AQ%22%3A%22Antarctica%22%2C%22AG%22%3A%22Antigua%20and%20Barbuda%22%2C%22AR%22%3A%22Argentina%22%2C%22AM%22%3A%22Armenia%22%2C%22AW%22%3A%22Aruba%22%2C%22AU%22%3A%22Australia%22%2C%22AT%22%3A%22Austria%22%2C%22AZ%22%3A%22Azerbaijan%22%2C%22BS%22%3A%22Bahamas%22%2C%22BH%22%3A%22Bahrain%22%2C%22BD%22%3A%22Bangladesh%22%2C%22BB%22%3A%22Barbados%22%2C%22BY%22%3A%22Belarus%22%2C%22PW%22%3A%22Belau%22%2C%22BE%22%3A%22Belgium%22%2C%22BZ%22%3A%22Belize%22%2C%22BJ%22%3A%22Benin%22%2C%22BM%22%3A%22Bermuda%22%2C%22BT%22%3A%22Bhutan%22%2C%22BO%22%3A%22Bolivia%22%2C%22BQ%22%3A%22Bonaire%2C%20Saint%20Eustatius%20and%20Saba%22%2C%22BA%22%3A%22Bosnia%20and%20Herzegovina%22%2C%22BW%22%3A%22Botswana%22%2C%22BV%22%3A%22Bouvet%20Island%22%2C%22BR%22%3A%22Brazil%22%2C%22IO%22%3A%22British%20Indian%20Ocean%20Territory%22%2C%22BN%22%3A%22Brunei%22%2C%22BG%22%3A%22Bulgaria%22%2C%22BF%22%3A%22Burkina%20Faso%22%2C%22BI%22%3A%22Burundi%22%2C%22KH%22%3A%22Cambodia%22%2C%22CM%22%3A%22Cameroon%22%2C%22CA%22%3A%22Canada%22%2C%22CV%22%3A%22Cape%20Verde%22%2C%22KY%22%3A%22Cayman%20Islands%22%2C%22CF%22%3A%22Central%20African%20Republic%22%2C%22TD%22%3A%22Chad%22%2C%22CL%22%3A%22Chile%22%2C%22CN%22%3A%22China%22%2C%22CX%22%3A%22Christmas%20Island%22%2C%22CC%22%3A%22Cocos%20%28Keeling%29%20Islands%22%2C%22CO%22%3A%22Colombia%22%2C%22KM%22%3A%22Comoros%22%2C%22CG%22%3A%22Congo%20%28Brazzaville%29%22%2C%22CD%22%3A%22Congo%20%28Kinshasa%29%22%2C%22CK%22%3A%22Cook%20Islands%22%2C%22CR%22%3A%22Costa%20Rica%22%2C%22HR%22%3A%22Croatia%22%2C%22CU%22%3A%22Cuba%22%2C%22CW%22%3A%22Cura%26ccedil%3Bao%22%2C%22CY%22%3A%22Cyprus%22%2C%22CZ%22%3A%22Czech%20Republic%22%2C%22DK%22%3A%22Denmark%22%2C%22DJ%22%3A%22Djibouti%22%2C%22DM%22%3A%22Dominica%22%2C%22DO%22%3A%22Dominican%20Republic%22%2C%22EC%22%3A%22Ecuador%22%2C%22EG%22%3A%22Egypt%22%2C%22SV%22%3A%22El%20Salvador%22%2C%22GQ%22%3A%22Equatorial%20Guinea%22%2C%22ER%22%3A%22Eritrea%22%2C%22EE%22%3A%22Estonia%22%2C%22SZ%22%3A%22Eswatini%22%2C%22ET%22%3A%22Ethiopia%22%2C%22FK%22%3A%22Falkland%20Islands%22%2C%22FO%22%3A%22Faroe%20Islands%22%2C%22FJ%22%3A%22Fiji%22%2C%22FI%22%3A%22Finland%22%2C%22FR%22%3A%22France%22%2C%22GF%22%3A%22French%20Guiana%22%2C%22PF%22%3A%22French%20Polynesia%22%2C%22TF%22%3A%22French%20Southern%20Territories%22%2C%22GA%22%3A%22Gabon%22%2C%22GM%22%3A%22Gambia%22%2C%22GE%22%3A%22Georgia%22%2C%22DE%22%3A%22Germany%22%2C%22GH%22%3A%22Ghana%22%2C%22GI%22%3A%22Gibraltar%22%2C%22GR%22%3A%22Greece%22%2C%22GL%22%3A%22Greenland%22%2C%22GD%22%3A%22Grenada%22%2C%22GP%22%3A%22Guadeloupe%22%2C%22GU%22%3A%22Guam%22%2C%22GT%22%3A%22Guatemala%22%2C%22GG%22%3A%22Guernsey%22%2C%22GN%22%3A%22Guinea%22%2C%22GW%22%3A%22Guinea-Bissau%22%2C%22GY%22%3A%22Guyana%22%2C%22HT%22%3A%22Haiti%22%2C%22HM%22%3A%22Heard%20Island%20and%20McDonald%20Islands%22%2C%22HN%22%3A%22Honduras%22%2C%22HK%22%3A%22Hong%20Kong%22%2C%22HU%22%3A%22Hungary%22%2C%22IS%22%3A%22Iceland%22%2C%22IN%22%3A%22India%22%2C%22ID%22%3A%22Indonesia%22%2C%22IR%22%3A%22Iran%22%2C%22IQ%22%3A%22Iraq%22%2C%22IE%22%3A%22Ireland%22%2C%22IM%22%3A%22Isle%20of%20Man%22%2C%22IL%22%3A%22Israel%22%2C%22IT%22%3A%22Italy%22%2C%22CI%22%3A%22Ivory%20Coast%22%2C%22JM%22%3A%22Jamaica%22%2C%22JP%22%3A%22Japan%22%2C%22JE%22%3A%22Jersey%22%2C%22JO%22%3A%22Jordan%22%2C%22KZ%22%3A%22Kazakhstan%22%2C%22KE%22%3A%22Kenya%22%2C%22KI%22%3A%22Kiribati%22%2C%22KW%22%3A%22Kuwait%22%2C%22KG%22%3A%22Kyrgyzstan%22%2C%22LA%22%3A%22Laos%22%2C%22LV%22%3A%22Latvia%22%2C%22LB%22%3A%22Lebanon%22%2C%22LS%22%3A%22Lesotho%22%2C%22LR%22%3A%22Liberia%22%2C%22LY%22%3A%22Libya%22%2C%22LI%22%3A%22Liechtenstein%22%2C%22LT%22%3A%22Lithuania%22%2C%22LU%22%3A%22Luxembourg%22%2C%22MO%22%3A%22Macao%22%2C%22MG%22%3A%22Madagascar%22%2C%22MW%22%3A%22Malawi%22%2C%22MY%22%3A%22Malaysia%22%2C%22MV%22%3A%22Maldives%22%2C%22ML%22%3A%22Mali%22%2C%22MT%22%3A%22Malta%22%2C%22MH%22%3A%22Marshall%20Islands%22%2C%22MQ%22%3A%22Martinique%22%2C%22MR%22%3A%22Mauritania%22%2C%22MU%22%3A%22Mauritius%22%2C%22YT%22%3A%22Mayotte%22%2C%22MX%22%3A%22Mexico%22%2C%22FM%22%3A%22Micronesia%22%2C%22MD%22%3A%22Moldova%22%2C%22MC%22%3A%22Monaco%22%2C%22MN%22%3A%22Mongolia%22%2C%22ME%22%3A%22Montenegro%22%2C%22MS%22%3A%22Montserrat%22%2C%22MA%22%3A%22Morocco%22%2C%22MZ%22%3A%22Mozambique%22%2C%22MM%22%3A%22Myanmar%22%2C%22NA%22%3A%22Namibia%22%2C%22NR%22%3A%22Nauru%22%2C%22NP%22%3A%22Nepal%22%2C%22NL%22%3A%22Netherlands%22%2C%22NC%22%3A%22New%20Caledonia%22%2C%22NZ%22%3A%22New%20Zealand%22%2C%22NI%22%3A%22Nicaragua%22%2C%22NE%22%3A%22Niger%22%2C%22NG%22%3A%22Nigeria%22%2C%22NU%22%3A%22Niue%22%2C%22NF%22%3A%22Norfolk%20Island%22%2C%22KP%22%3A%22North%20Korea%22%2C%22MK%22%3A%22North%20Macedonia%22%2C%22MP%22%3A%22Northern%20Mariana%20Islands%22%2C%22NO%22%3A%22Norway%22%2C%22OM%22%3A%22Oman%22%2C%22PK%22%3A%22Pakistan%22%2C%22PS%22%3A%22Palestinian%20Territory%22%2C%22PA%22%3A%22Panama%22%2C%22PG%22%3A%22Papua%20New%20Guinea%22%2C%22PY%22%3A%22Paraguay%22%2C%22PE%22%3A%22Peru%22%2C%22PH%22%3A%22Philippines%22%2C%22PN%22%3A%22Pitcairn%22%2C%22PL%22%3A%22Poland%22%2C%22PT%22%3A%22Portugal%22%2C%22PR%22%3A%22Puerto%20Rico%22%2C%22QA%22%3A%22Qatar%22%2C%22RE%22%3A%22Reunion%22%2C%22RO%22%3A%22Romania%22%2C%22RU%22%3A%22Russia%22%2C%22RW%22%3A%22Rwanda%22%2C%22ST%22%3A%22S%26atilde%3Bo%20Tom%26eacute%3B%20and%20Pr%26iacute%3Bncipe%22%2C%22BL%22%3A%22Saint%20Barth%26eacute%3Blemy%22%2C%22SH%22%3A%22Saint%20Helena%22%2C%22KN%22%3A%22Saint%20Kitts%20and%20Nevis%22%2C%22LC%22%3A%22Saint%20Lucia%22%2C%22SX%22%3A%22Saint%20Martin%20%28Dutch%20part%29%22%2C%22MF%22%3A%22Saint%20Martin%20%28French%20part%29%22%2C%22PM%22%3A%22Saint%20Pierre%20and%20Miquelon%22%2C%22VC%22%3A%22Saint%20Vincent%20and%20the%20Grenadines%22%2C%22WS%22%3A%22Samoa%22%2C%22SM%22%3A%22San%20Marino%22%2C%22SA%22%3A%22Saudi%20Arabia%22%2C%22SN%22%3A%22Senegal%22%2C%22RS%22%3A%22Serbia%22%2C%22SC%22%3A%22Seychelles%22%2C%22SL%22%3A%22Sierra%20Leone%22%2C%22SG%22%3A%22Singapore%22%2C%22SK%22%3A%22Slovakia%22%2C%22SI%22%3A%22Slovenia%22%2C%22SB%22%3A%22Solomon%20Islands%22%2C%22SO%22%3A%22Somalia%22%2C%22ZA%22%3A%22South%20Africa%22%2C%22GS%22%3A%22South%20Georgia%5C%2FSandwich%20Islands%22%2C%22KR%22%3A%22South%20Korea%22%2C%22SS%22%3A%22South%20Sudan%22%2C%22ES%22%3A%22Spain%22%2C%22LK%22%3A%22Sri%20Lanka%22%2C%22SD%22%3A%22Sudan%22%2C%22SR%22%3A%22Suriname%22%2C%22SJ%22%3A%22Svalbard%20and%20Jan%20Mayen%22%2C%22SE%22%3A%22Sweden%22%2C%22CH%22%3A%22Switzerland%22%2C%22SY%22%3A%22Syria%22%2C%22TW%22%3A%22Taiwan%22%2C%22TJ%22%3A%22Tajikistan%22%2C%22TZ%22%3A%22Tanzania%22%2C%22TH%22%3A%22Thailand%22%2C%22TL%22%3A%22Timor-Leste%22%2C%22TG%22%3A%22Togo%22%2C%22TK%22%3A%22Tokelau%22%2C%22TO%22%3A%22Tonga%22%2C%22TT%22%3A%22Trinidad%20and%20Tobago%22%2C%22TN%22%3A%22Tunisia%22%2C%22TR%22%3A%22Turkey%22%2C%22TM%22%3A%22Turkmenistan%22%2C%22TC%22%3A%22Turks%20and%20Caicos%20Islands%22%2C%22TV%22%3A%22Tuvalu%22%2C%22UG%22%3A%22Uganda%22%2C%22UA%22%3A%22Ukraine%22%2C%22AE%22%3A%22United%20Arab%20Emirates%22%2C%22GB%22%3A%22United%20Kingdom%20%28UK%29%22%2C%22US%22%3A%22United%20States%20%28US%29%22%2C%22UM%22%3A%22United%20States%20%28US%29%20Minor%20Outlying%20Islands%22%2C%22UY%22%3A%22Uruguay%22%2C%22UZ%22%3A%22Uzbekistan%22%2C%22VU%22%3A%22Vanuatu%22%2C%22VA%22%3A%22Vatican%22%2C%22VE%22%3A%22Venezuela%22%2C%22VN%22%3A%22Vietnam%22%2C%22VG%22%3A%22Virgin%20Islands%20%28British%29%22%2C%22VI%22%3A%22Virgin%20Islands%20%28US%29%22%2C%22WF%22%3A%22Wallis%20and%20Futuna%22%2C%22EH%22%3A%22Western%20Sahara%22%2C%22YE%22%3A%22Yemen%22%2C%22ZM%22%3A%22Zambia%22%2C%22ZW%22%3A%22Zimbabwe%22%7D%2C%22currency%22%3A%7B%22code%22%3A%22USD%22%2C%22precision%22%3A2%2C%22symbol%22%3A%22%24%22%2C%22symbolPosition%22%3A%22left%22%2C%22decimalSeparator%22%3A%22.%22%2C%22thousandSeparator%22%3A%22%2C%22%2C%22priceFormat%22%3A%22%251%24s%252%24s%22%7D%2C%22currentUserId%22%3A0%2C%22currentUserIsAdmin%22%3Afalse%2C%22dateFormat%22%3A%22F%20j%2C%20Y%22%2C%22homeUrl%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2F%22%2C%22locale%22%3A%7B%22siteLocale%22%3A%22en_US%22%2C%22userLocale%22%3A%22en_US%22%2C%22weekdaysShort%22%3A%5B%22Sun%22%2C%22Mon%22%2C%22Tue%22%2C%22Wed%22%2C%22Thu%22%2C%22Fri%22%2C%22Sat%22%5D%7D%2C%22dashboardUrl%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2Fmy-account%5C%2F%22%2C%22orderStatuses%22%3A%7B%22pending%22%3A%22Pending%20payment%22%2C%22processing%22%3A%22Processing%22%2C%22on-hold%22%3A%22On%20hold%22%2C%22completed%22%3A%22Completed%22%2C%22cancelled%22%3A%22Cancelled%22%2C%22refunded%22%3A%22Refunded%22%2C%22failed%22%3A%22Failed%22%2C%22checkout-draft%22%3A%22Draft%22%7D%2C%22placeholderImgSrc%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2Fwp-content%5C%2Fuploads%5C%2Fwoocommerce-placeholder.png%22%2C%22productsSettings%22%3A%7B%22cartRedirectAfterAdd%22%3Afalse%7D%2C%22siteTitle%22%3A%22SEO%20Web%20Design%22%2C%22storePages%22%3A%7B%22myaccount%22%3A%7B%22id%22%3A553%2C%22title%22%3A%22My%20Account%22%2C%22permalink%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2Fmy-account%5C%2F%22%7D%2C%22shop%22%3A%7B%22id%22%3A550%2C%22title%22%3A%22Shop%22%2C%22permalink%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2Fproduct%5C%2F%22%7D%2C%22cart%22%3A%7B%22id%22%3A551%2C%22title%22%3A%22Cart%22%2C%22permalink%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2Fcart%5C%2F%22%7D%2C%22checkout%22%3A%7B%22id%22%3A552%2C%22title%22%3A%22Checkout%22%2C%22permalink%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2Fcheckout%5C%2F%22%7D%2C%22privacy%22%3A%7B%22id%22%3A0%2C%22title%22%3A%22%22%2C%22permalink%22%3Afalse%7D%2C%22terms%22%3A%7B%22id%22%3A3660%2C%22title%22%3A%22Refund%20Policy%22%2C%22permalink%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2Frefunds%5C%2F%22%7D%7D%2C%22wcAssetUrl%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2Fwp-content%5C%2Fplugins%5C%2Fwoocommerce%5C%2Fassets%5C%2F%22%2C%22wcVersion%22%3A%228.5.2%22%2C%22wpLoginUrl%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2Fwp-login.php%3Fitsec-hb-token%3Dgloryhole%22%2C%22wpVersion%22%3A%226.4.3%22%2C%22collectableMethodIds%22%3A%5B%5D%2C%22admin%22%3A%7B%22wccomHelper%22%3A%7B%22isConnected%22%3Afalse%2C%22connectURL%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%5C%2Fwp-admin%5C%2Fadmin.php%3Fpage%3Dwc-addons%26section%3Dhelper%26wc-helper-connect%3D1%26wc-helper-nonce%3Daffa226d02%22%2C%22userEmail%22%3A%22%22%2C%22userAvatar%22%3A%22https%3A%5C%2F%5C%2Fsecure.gravatar.com%5C%2Favatar%5C%2F%3Fs%3D48%26d%3Didenticon%26r%3Dg%22%2C%22storeCountry%22%3A%22US%22%2C%22inAppPurchaseURLParams%22%3A%7B%22wccom-site%22%3A%22https%3A%5C%2F%5C%2Fwww.seowebdesignllc.com%22%2C%22wccom-back%22%3A%22%252Fcreate-a-bookmarking-application-with-faunadb-netlify-and-11ty%252F%22%2C%22wccom-woo-version%22%3A%228.5.2%22%2C%22wccom-connect-nonce%22%3A%22affa226d02%22%7D%7D%2C%22_feature_nonce%22%3A%221a813b9c40%22%2C%22alertCount%22%3A%222%22%2C%22visibleTaskListIds%22%3A%5B%22extended%22%5D%7D%7D' ) ); /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/client/blocks/wc-settings.js?ver=07c2f0675ddd247d2325" id="wc-settings-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/data-controls.min.js?ver=fe4ccc8a1782ea8e2cb1" id="wp-data-controls-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/html-entities.min.js?ver=36a4a255da7dd2e1bf8e" id="wp-html-entities-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/notices.min.js?ver=38e88f4b627cf873edd0" id="wp-notices-js"></script> <script type="text/javascript" id="wc-blocks-middleware-js-before"> /* <![CDATA[ */ var wcBlocksMiddlewareConfig = { storeApiNonce: 'a3692222e6', wcStoreApiNonceTimestamp: '1708953782' }; /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-middleware.js?ver=ca04183222edaf8a26be" id="wc-blocks-middleware-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-data.js?ver=c96aba0171b12e03b8a6" id="wc-blocks-data-store-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/dom-ready.min.js?ver=392bdd43726760d1f3ca" id="wp-dom-ready-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/a11y.min.js?ver=7032343a947cfccf5608" id="wp-a11y-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/primitives.min.js?ver=6984e6eb5d6157c4fe44" id="wp-primitives-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/dist/warning.min.js?ver=122829a085511691f14d" id="wp-warning-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/client/blocks/blocks-components.js?ver=b165bb2bd213326d7f31" id="wc-blocks-components-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/client/blocks/blocks-checkout.js?ver=9f469ef17beaf7c51576" id="wc-blocks-checkout-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution-blocks.min.js?ver=8.5.2" id="wc-order-attribution-blocks-js"></script> <script type="text/javascript" id="ppress-frontend-script-js-extra"> /* <![CDATA[ */ var pp_ajax_form = {"ajaxurl":"https:\/\/www.seowebdesignllc.com\/wp-admin\/admin-ajax.php","confirm_delete":"Are you sure?","deleting_text":"Deleting...","deleting_error":"An error occurred. Please try again.","nonce":"48ebccc2e6","disable_ajax_form":"false","is_checkout":"0","is_checkout_tax_enabled":"0"}; /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/wp-user-avatar/assets/js/frontend.min.js?ver=4.14.3" id="ppress-frontend-script-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.2" id="jquery-ui-core-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/jquery/ui/tabs.min.js?ver=1.13.2" id="jquery-ui-tabs-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/jquery/ui/accordion.min.js?ver=1.13.2" id="jquery-ui-accordion-js"></script> <script type="text/javascript" id="mediaelement-core-js-before"> /* <![CDATA[ */ var mejsL10n = {"language":"en","strings":{"mejs.download-file":"Download File","mejs.install-flash":"You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https:\/\/get.adobe.com\/flashplayer\/","mejs.fullscreen":"Fullscreen","mejs.play":"Play","mejs.pause":"Pause","mejs.time-slider":"Time Slider","mejs.time-help-text":"Use Left\/Right Arrow keys to advance one second, Up\/Down arrows to advance ten seconds.","mejs.live-broadcast":"Live Broadcast","mejs.volume-help-text":"Use Up\/Down Arrow keys to increase or decrease volume.","mejs.unmute":"Unmute","mejs.mute":"Mute","mejs.volume-slider":"Volume Slider","mejs.video-player":"Video Player","mejs.audio-player":"Audio Player","mejs.captions-subtitles":"Captions\/Subtitles","mejs.captions-chapters":"Chapters","mejs.none":"None","mejs.afrikaans":"Afrikaans","mejs.albanian":"Albanian","mejs.arabic":"Arabic","mejs.belarusian":"Belarusian","mejs.bulgarian":"Bulgarian","mejs.catalan":"Catalan","mejs.chinese":"Chinese","mejs.chinese-simplified":"Chinese (Simplified)","mejs.chinese-traditional":"Chinese (Traditional)","mejs.croatian":"Croatian","mejs.czech":"Czech","mejs.danish":"Danish","mejs.dutch":"Dutch","mejs.english":"English","mejs.estonian":"Estonian","mejs.filipino":"Filipino","mejs.finnish":"Finnish","mejs.french":"French","mejs.galician":"Galician","mejs.german":"German","mejs.greek":"Greek","mejs.haitian-creole":"Haitian Creole","mejs.hebrew":"Hebrew","mejs.hindi":"Hindi","mejs.hungarian":"Hungarian","mejs.icelandic":"Icelandic","mejs.indonesian":"Indonesian","mejs.irish":"Irish","mejs.italian":"Italian","mejs.japanese":"Japanese","mejs.korean":"Korean","mejs.latvian":"Latvian","mejs.lithuanian":"Lithuanian","mejs.macedonian":"Macedonian","mejs.malay":"Malay","mejs.maltese":"Maltese","mejs.norwegian":"Norwegian","mejs.persian":"Persian","mejs.polish":"Polish","mejs.portuguese":"Portuguese","mejs.romanian":"Romanian","mejs.russian":"Russian","mejs.serbian":"Serbian","mejs.slovak":"Slovak","mejs.slovenian":"Slovenian","mejs.spanish":"Spanish","mejs.swahili":"Swahili","mejs.swedish":"Swedish","mejs.tagalog":"Tagalog","mejs.thai":"Thai","mejs.turkish":"Turkish","mejs.ukrainian":"Ukrainian","mejs.vietnamese":"Vietnamese","mejs.welsh":"Welsh","mejs.yiddish":"Yiddish"}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/mediaelement/mediaelement-and-player.min.js?ver=4.2.17" id="mediaelement-core-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/mediaelement/mediaelement-migrate.min.js?ver=6.4.3" id="mediaelement-migrate-js"></script> <script type="text/javascript" id="mediaelement-js-extra"> /* <![CDATA[ */ var _wpmejsSettings = {"pluginPath":"\/wp-includes\/js\/mediaelement\/","classPrefix":"mejs-","stretching":"responsive","audioShortcodeLibrary":"mediaelement","videoShortcodeLibrary":"mediaelement"}; /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/mediaelement/wp-mediaelement.min.js?ver=6.4.3" id="wp-mediaelement-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/jquery.appear.js?ver=6.4.3" id="appear-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/modernizr.custom.85257.js?ver=6.4.3" id="modernizr-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/hoverIntent.min.js?ver=1.10.2" id="hoverIntent-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/jquery.plugin.js?ver=6.4.3" id="jquery-plugin-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/jquery.countdown.min.js?ver=6.4.3" id="countdown-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/owl.carousel.min.js?ver=6.4.3" id="owl-carousel-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/parallax.min.js?ver=6.4.3" id="parallax-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/js/select2/select2.full.min.js?ver=4.0.3-wc.8.5.2" id="select2-js" defer="defer" data-wp-strategy="defer"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/easypiechart.js?ver=6.4.3" id="easypiechart-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/jquery.waypoints.min.js?ver=6.4.3" id="waypoints-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/Chart.min.js?ver=6.4.3" id="Chart-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/counter.js?ver=6.4.3" id="counter-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/absoluteCounter.js?ver=6.4.3" id="absoluteCounter-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/fluidvids.min.js?ver=6.4.3" id="fluidvids-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/woocommerce/assets/js/prettyPhoto/jquery.prettyPhoto.min.js?ver=3.1.6-wc.8.5.2" id="prettyPhoto-js" defer="defer" data-wp-strategy="defer"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/jquery.nicescroll.min.js?ver=6.4.3" id="nicescroll-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/ScrollToPlugin.min.js?ver=6.4.3" id="ScrollToPlugin-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/TweenLite.min.js?ver=6.4.3" id="TweenLite-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/TimelineLite.min.js?ver=6.4.3" id="TimelineLite-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/CSSPlugin.min.js?ver=6.4.3" id="CSSPlugin-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/EasePack.min.js?ver=6.4.3" id="EasePack-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/jquery.mixitup.min.js?ver=6.4.3" id="mixitup-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/jquery.waitforimages.js?ver=6.4.3" id="waitforimages-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/jquery.infinitescroll.min.js?ver=6.4.3" id="infinitescroll-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/jquery.easing.1.3.js?ver=6.4.3" id="easing-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/skrollr.js?ver=6.4.3" id="skrollr-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/bootstrapCarousel.js?ver=6.4.3" id="bootstrapCarousel-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules/plugins/jquery.touchSwipe.min.js?ver=6.4.3" id="touchSwipe-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/js_composer/assets/lib/bower/isotope/dist/isotope.pkgd.min.js?ver=6.6.0" id="isotope-js"></script> <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCa_M6nk0SSd4jT_o6hTkAksxcG-rPc94U&ver=6.4.3" id="google_map_api-js"></script> <script type="text/javascript" id="optimize-mikado-modules-js-extra"> /* <![CDATA[ */ var mkdfGlobalVars = {"vars":{"mkdfAddForAdminBar":0,"mkdfElementAppearAmount":-150,"mkdfFinishedMessage":"No more posts","mkdfMessage":"Loading new posts...","mkdfTopBarHeight":46,"mkdfStickyHeaderHeight":0,"mkdfStickyHeaderTransparencyHeight":60,"mkdfLogoAreaHeight":0,"mkdfMenuAreaHeight":138,"mkdfMobileHeaderHeight":100}}; var mkdfPerPageVars = {"vars":{"mkdfStickyScrollAmount":0,"mkdfHeaderTransparencyHeight":0}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/modules.min.js?ver=6.4.3" id="optimize-mikado-modules-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/blog.min.js?ver=6.4.3" id="optimize-mikado-blog-js"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-includes/js/comment-reply.min.js?ver=6.4.3" id="comment-reply-js" async="async" data-wp-strategy="async"></script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/js_composer/assets/js/dist/js_composer_front.min.js?ver=6.6.0" id="wpb_composer_front_js-js"></script> <script type="text/javascript" id="optimize-mikado-like-js-extra"> /* <![CDATA[ */ var mkdfLike = {"ajaxurl":"https:\/\/www.seowebdesignllc.com\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/themes/optimizewp/assets/js/like.min.js?ver=1.0" id="optimize-mikado-like-js"></script> <script type="text/javascript" src="https://www.google.com/recaptcha/api.js?render=6LclLoMUAAAAAFc71q_Sson140GBvDZguEjSBANL&ver=3.0" id="google-recaptcha-js"></script> <script type="text/javascript" id="wpcf7-recaptcha-js-extra"> /* <![CDATA[ */ var wpcf7_recaptcha = {"sitekey":"6LclLoMUAAAAAFc71q_Sson140GBvDZguEjSBANL","actions":{"homepage":"homepage","contactform":"contactform"}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.seowebdesignllc.com/wp-content/plugins/contact-form-7/modules/recaptcha/index.js?ver=5.8.6" id="wpcf7-recaptcha-js"></script> </body> </html><!-- WP Fastest Cache file was created in 0.56995010375977 seconds, on 26-02-24 13:23:02 -->