Month: July 2020

Best Office Chairs

If you’re spending 40+ hours per week seated at a desk, having a great office chair is crucial for both comfort and functionality. The right office chair can even boost your productivity.

On the flip side, the wrong office chair can cause pain in your neck, back, hips, legs, and more. Your chair could even make you susceptible to long-term health complications.

With remote work becoming the new normal, so many people are trying to upgrade their home offices. Getting a new office chair is the first step.

Whether you’re buying office chairs in-bulk for your conference room or just need a single chair for your home office, this guide contains the top nine office chairs on the market today.

The Top 9 Best Office Chairs

Each review below contains the features, benefits, pricing, and use cases for the office chairs on our list. Use this information to find the best office chair for you.

#1 – Steelcase Gesture — Best Overall Office Chair

• Starts at $1,698
• 12 colors
• Supports different postures
• Fully customizable
Shop Now

The Steelcase Gesture is the best office chair available on the market today. For home offices and at-work use alike, it has everything you could possibly need or want in a chair.

Steelcase conducted a posture study on 2,000 people while designing this chair. This ensures that it can accommodate a wide range of seating needs and preferences while delivering comfort and support.

It comes in 12 different colors to match any space or work environment. The chair comes in a wide range of pre-configured options—wrapped back, headrest, stool, shell back, stool with shell back, and stool with wrapped back.

If you don’t like one of those pre-configured chairs, you’ll have the freedom and flexibility to customize your own.

Optional features include:

  • Polished aluminum base
  • Glides
  • Adjustable lumbar
  • Coat hanger
  • Fixed arm
  • Armless

The Steelcase Gesture starts at $1,698, which is a little steep for some people. But if you’re spending 40+ hours a week sitting in a chair, the price is justifiable.

#2 – Herman Miller Mirra 2 — Best For Home Offices

• Starts at $745
• 12 year warranty
• Free shipping
• 30 day free returns
Shop Now

The Herman Miller Mirra 2 makes an excellent addition to any home office. It has the perfect balance between comfort and sleek design.

Choose one of five modern colors—alpine, graphite, cappuccino, dark turquoise, or slate grey. You’ll also have the option to select a butterfly suspension back or a triflex polymer back.

Herman Miller gives you the option to customize your chair based on preferences for comfort and functionality, including:

  • Adjustable lumbar support
  • Standard tilt
  • Tilt limiter
  • Tilt limiter and seat angle
  • Adjustable arms
  • Fixed arms
  • Fixed seat depth
  • Front adjustable seat depth
  • Carpet vs. hard floor casters

The chair is made at a 100% green-energy facility in Michigan. It comes with a 12-year warranty, free shipping, and 30-day free returns.

The Herman Miller Mirra 2 starts at $745.

#3 – Humanscale Liberty Task — Best Mesh Back Office Chair

• Starts at $1,069
• Weight-sensitive recline
• Form-sensing mesh
• Lumbar support
Shop Now

Humanscale has a wide range of different office chairs for you to choose from. But their Liberty Task chair is a top choice for anyone who prefers a mesh back.

The chair is designed to encourage movement while accommodating users of different sizes and weights. It features a weight-sensitive recline, so there’s no need to make any manual adjustments.

The ability to accommodate any user makes the Liberty Task chair a popular choice for conference rooms and shared office spaces.

It provides excellent comfort and lumbar support while still offering a minimalist aesthetic and modern design.

You can customize your own Liberty Task chair or choose from a wide range of pre-configured models. Features available for customization include

  • Armrests
  • Frame color
  • Back mesh
  • Mesh color
  • Seat textile
  • Seat type
  • Cylinder height
  • Fireproofing
  • Base upgrades

The one potential drawback is the shipping time. Custom models typically don’t ship for 2-4 weeks, which isn’t ideal if you need an office chair ASAP.

The Humanscale Liberty Task chair starts at $1,069.

#4 – Autonomous ErgoChair 2 — Best Ergonomic Office Chair

• Starts at $349
• Free shipping
• 2 year warranty
• Fully adjustable components
30 Day Free Trial

As the name implies, the Autonomous ErgoChair 2 is built with ergonomic design. This chair is perfect for anyone who prioritizes maximum efficiency related to comfort.

It’s great for preventing back pain, improving posture, and providing extra lumbar support.

The Autonomous ErgoChair 2 carries a BIMFA (Business and Institutional Furniture Manufacturer’s Association) certification for its safety, performance, and ergonomics.

Essentially every feature of the chair can be adjusted for comfort:

  • Headrest height
  • Headrest tilt
  • Back tilt
  • Back tilt tension
  • Seat tilt
  • Lumbar support tension
  • Handrail height
  • Handrail direction
  • Chair height

For such a comfortable and functional chair, the Autonomous ErgoChair 2 is surprisingly affordable. It can be yours for just $349.

The chair comes with a two-year warranty and free shipping. Try it free for 30 days.

#5 – BTExpert Mid Back Task Chair — Best Armless Office Chair

• $105
• Compact Design
• 360 degree swivel
• Rolling caster wheels
Shop Now

If you’re not sitting at a desk all day and just need a small chair for writing quick notes or sending out the occasional email, you don’t need to spend a fortune on an office chair.

The Mid Back Task Chair from BTExpert is perfect for small desks or even low built-in counter spaces where you open the mail, write checks, or don’t spend a ton of time sitting.

The compact design makes it easy to tuck beneath a desk or table when it’s not being used, without taking up a ton of space in the room.

It’s simple, modern, and elegant, while still proving sturdy support and functionality.

You’ll benefit from features like a 360-degree swivel, fast assembly, non-scratch leg tip, five-point stainless steel finish, and rolling caster wheels.

Unlike other office chairs on the market, you can’t really customize the Mid Back Task Chair. What you see is what you get. But it’s one of the best cheap office chairs on the market. Buy it now for the low price of just $105.

#6 – Global Arturo — Best Leather Office Chair

• Starts at $1,007
• Premium leather
• Memory foam
• Customizable
Shop Now

The Global Arturo is a premium leather chair that comes with plush cushions and detailed stitching.

It’s available in three different models—high back, extended high back, and low back.

The chair is perfect for anyone who wants an office chair that blends comfort with luxury. It comes standard with upholstered arms for added comfort and a padded headrest to provide extra head and neck support.

All three models can be fully customized. You can choose your preferences for features like:

  • Base finish
  • Cylinder
  • Gaster glides
  • Frame
  • Backing
  • Memory foam
  • Commercial vs. performance textiles

The Global Arturo office chair starts at $1,007.

#7 – Via Oslo — Best Custom Office Chair

• Starts at $1,283
• Low and high back models
• 400 lbs. capacity
• Fully customizable
Build Your Own

For those of you who want a unique office chair, the Via Oslo is fully customizable. In fact, there aren’t any pre-configured models for you to choose from.

The only way to get this chair is by building your own.

Start by choosing from a high-back or mid-back chair. Then personalize virtually every aspect of the chair, including:

  • Arms
  • Base
  • Casters
  • Upholstery
  • Upholstery layout
  • Colors
  • Textiles

The Via Oslo delivers a timeless design. You’ll also benefit from saddle stitch lines, tilt adjustment, depth adjustment, and more. It has an impressive 400-pound maximum weight capacity, so you know that the chair is sturdy and strong.

All models are backed by a 12-year warranty. The low-back model starts at $1,283, and the high-back model starts at $2,448.

#8 – Branch Task Chair — Best Budget Office Chair

• $199
• Free shipping
• Easy to assemble
• 5 adjustable options
Shop Now

Some office chairs can be pretty pricey. So if you don’t want to spend $500+ or upwards of $1,000 on a chair, you can still get an excellent quality product from Branch.

The Branch Task Chair is the best office chair under $200. It’s proof that you can get a budget office chair without sacrificing comfort and functionality.

This is a great option for anyone who wants a sleek design with premium ergonomics at an affordable price point. You’ll benefit from features like adjustable lumbar support, breathable mesh, and five points of adjustment:

  • Tilt adjust
  • Tilt tension adjust
  • Height adjust
  • Armrest adjust
  • Lumbar adjust

Aesthetically, the Branch Task Chair blends in well with any home office design. It’s easy to assemble and ships for free in 1-3 days.

Buy it now for $199.

#9 – Vari Active Seat — Best Office Chair For Standing Desks

• $250
• No assembly required
• Free shipping
• 30 day money back guarantee
Shop Now

Standing desks have been growing in popularity. But even with an adjustable-height desk, you probably won’t spend the whole day standing.

So if you want to sit from time to time while working at your standing desk, the Vari Active Seat is perfect for you.

The Vari active seat comes fully assembled right out of the box so you can start using right away.

It features a wide cushioned seat and a bent plywood base to deliver maximum comfort and sustainable durability. You’ll benefit from a dynamic range of motion with the chair’s articulating pedestal—it’s designed for movement.

The Vari Active Seat lifts up to 32.75 inches, making it easy to use at your standing desk.

It’s comfortable but still lets you work with great posture. Vari also has a wide range of standing desks, so you can get more than just an office chair with your order.

The Vari Active Chair costs $250. It’s backed by a 30-day guarantee and ships for free.

How to Find the Best Office Chairs For You

How hard can it be to pick an office chair? Surprisingly enough, not all chairs are the same.

This is the methodology that we used to narrow down our top picks in this guide. Keep these factors in mind as you’re evaluating prospective options.


First and foremost, your chair needs to be comfortable. Some of you might be sitting in this chair for 40-60+ hours per week.

The best way to evaluate comfort without actually sitting in the chair itself is by checking out customer reviews. Some companies will even offer a money-back guarantee or trial period.


If you’re buying an office chair online, it typically won’t come fully assembled. This means you’ll have to put it together on your own.

In most cases, this shouldn’t be too complicated. Depending on the chair, this could take anywhere from five to ten minutes at most. Consider looking at the instructions before you buy to see if it’s something you feel like tackling on your own.


The best office chairs come with extended coverage. What if something happens to the chair and it breaks next month? What about next year?

If you’re paying hundreds or even $1,000+ on a product, you want to make sure that the manufacturer stands behind its quality.


Make sure you can adjust the chair. This will accommodate different desk heights and users, which is crucial if the chair is being shared by multiple people.

The best chairs allow you to adjust the seat height, seat angle, and seat depth. In some cases, you’ll also be able to adjust the armrests, back height, back angle, and more.

Lumbar Support

It’s possible for chairs to be comfortable, but terrible for your back. The best office chairs provide excellent lumbar support, which will help prevent back pain and long-term damage to your spine.


I’m typically more of a “function over form” type of person. But depending on the circumstances, some office chairs might not fit the environment.

You don’t want your office chair to be an eye-sore in the room. The best chairs allow you to customize the colors and other features to match your office. However, this may not be important to everyone.


What’s the best office chair on the market today? We recommend the Steelcase Gesture. But there are plenty of other excellent options to choose from depending on your needs.

If you’re on a tight budget, check out the Branch Task Chair or the BTExpert Mid Back Task Chair. For those of you with a standing desk, the Vari Active Seat will be the best option for you.

Want a premium leather office chair? Get the Global Arturo. Anyone that prioritizes ergonomics will love the Autonomous ErgoChair 2. The Herman Miller Mirra 2 is our favorite home office chair. The Via Oslo is fully customizable.

Make sure you refer to our buying guide methodology as you’re shopping around. No matter what type of chair your office needs, you can find it on our list.

Secret documents from US antitrust probe reveal big tech’s plot to control or crush the competition

Nearly 500 pages of evidence were made public during the House Judiciary’s marathon hearing this week on potential anti-competitive actions by Amazon, Facebook, Google and Apple. We’ve collected them here with added context and an omnibus, searchable version for anyone who’d rather not juggle four dozen documents.

The emails, chat logs, and other communications listed here trickled out online as the hearings went on. Many are internal documents that were never meant to be exposed publicly — for instance, Facebook CEO Mark Zuckerberg telling a colleague that “we can likely always just buy any competitive startups” shortly before acquiring Instagram in 2012.

Congressional investigators wield considerable power in compelling the release of such documents, even against the will of the companies, which would almost certainly never provide such self-incriminating information to journalists. As such these documents contain all manner of useful information, most of it providing insight into the the otherwise opaque thinking of executives as their companies made key decisions about growing their businesses — and hint at strategies traditionally employed by monopolies.

While there isn’t anything that could be called a smoking gun, these are not the only evidence the investigation collected, only those it needed to make public for this hearing. Legislators spoke of other documents and also of interviews and testimony that corroborated their allegations, or contradicted companies’ accounts of events.

While there are too many documents to discuss individually, we’ve noted some interesting exchanges we’ve come across in the files for each company. A combined, searchable mega-file of the internal documents can be found at the bottom of this post. It’s not in any particular order, so it’s best to sift through by looking for key terms, key figures and company names.


Image Credits: Screenshot via House Judiciary Committee

The documents contain internal communications about Amazon’s pursuit and eventual purchase of, which also came up in the hearing itself. Aggressive price cutting by the former forced the latter out of business, allowing it to be snapped up and integrated. In one document, we see that Amazon discusses setting up special automatic pricing rules that more aggressively undercut prices compared to other sellers of diapers and toys.

Another document shows that Amazon lost in the neighborhood of $200M in a single quarter during this period, showing that it was willing to take on losses at a scale that the smaller business couldn’t possibly withstand — a classic monopolistic tactic only possible if you command a giant chunk of a market. Rep. Scanlon (D-PA) pushed Amazon CEO Jeff Bezos on this at about the 2 hour 15 minute mark.

Jeff Bezos, spurred by a TechCrunch post, asks what the plan is for’s next play,, and receives a summary of the existing plan, which “undercuts the core diapers business for,” and “will slow the adoption of” This email shows how Amazon acknowledged that it has positioned itself as “the place to sell globally,” particularly with manufacturers from China who wanted direct access to American consumers. A deck of metrics mentions “predatory pricing” and Amazon as very specific threats to their short- and long-term plans.

Regarding Amazon’s purchase of Ring, which might have emerged as a smart home competitor, this document shows senior management discussing being “willing to pay for market position as it’s hard to catch the leader.” Another email offers more context on Amazon’s thoughts on the acquisition of Ring (at the time referred to as Project Darwin) before it went through. Bezos himself says in this exchange that “we’re buying market position — not technology. And that market position and momentum is very valuable.”


Image Credits: Screenshot via House Judiciary Committee

In an email exchange from March 2012, the month before Facebook announced it would buy Instagram, Zuckerberg shares a conversation about China’s “strong culture of cloning things quickly.”

In the original conversation, sent to Facebook Product lead Chris Cox and CTO Mike Schroepfer, a high level Facebook employee describes how they met with the founders of Chinese company RenRen who described how their own company copied apps like Voxer and Pinterest. The author comments that it’s easier for those companies to get products out quickly “since they’re copying other people” and goes on to suggest how a similar strategy could work for Facebook. Forwarding the email to Sheryl Sandberg, Zuckerberg comments “You’ll probably find this interesting and agree.”

Another set of documents captures Mark Zuckerberg’s private courtship of Instagram co-founder Kevin Systrom. Tellingly, a side conversation between Systrom and a former Facebook product VP shows that the Instagram creator was concerned about Zuckerberg going into “destroy mode” if Systrom didn’t agree to sell. There’s also more insight about how Facebook saw the Instagram deal and how the company decided to keep it as separate product.

The Facebook documents also include some conversation about the WhatsApp acquisition, which it nicknames “Project Cobalt” including the minutes from a board meeting four days before Facebook went public with its acquisition plans. “Ms. Sandberg emphasized that the high concentration of the mobile operating system market — with two providers serving the vast majority of smartphone users around the world — poses a significant strategic threat to [Facebook’s] business…” the minutes state.



Image Credits: Screenshot via House Judiciary Committee

Apple’s isn’t as well-known for crushing competitors as the other three companies, but it certainly likes to wring revenues out of its software partners while handling maintaining a tight grip on both its hardware and software. Many of the documents focus on Apple’s internal strategies responding to criticism on issues like the right-to-repair controversy and developers unhappy with the obsessive level of control Apple exercises over its products.

The Apple documents also detail how the App Store creator gives preferential treatment to some companies on the commissions it takes. In 2016 emails between Amazon CEO Jeff Bezos and Apple SVP Eddy Cue, Apple looks to have struck a special deal over the Amazon Prime Video app for iOS and Apple TV.

An email exchange back in 2011 also details how Apple mulled raising commissions to 40% for the first year for subscription apps. “I think we may be leaving money on the table if we just asked for about 30% of the first year of sub,” Cue wrote. This didn’t come to pass, but the correspondence does provide insight into some questions about setting its own rules that the company didn’t really have an answer to in the hearing.


Image Credits: Screenshot via House Judiciary Committee

In a confidential internal presentation from 2006, Google raises alarm about the “orthogonal threat” posed by social networks and other websites with “high entertainment value,” like YouTube.

“… The team developed an opinion that these social networking sites will ultimately represent a threat to our search business as people will spend more time on those sites and ultimately may do most searches from the search boxes available there. They aren’t direct competitors, but they may displace us in end-user time tradeoff.”

The presentation goes on to argue that Google should “own the search box on the entertainment sites” and develop its own social networking solution so those sites don’t win out. That same year, Google announced its landmark acquisition of YouTube.

Other email chains from around the same time capture Google’s internal thinking in the run-up to buying YouTube.

“YouTube’s value to us would be a smart team and a platform we could build from (maybe enough to justify an acquisition on its own), but would we really be able to preserve their community once we start reviewing and pulling copyright or inappropriate content? If anything, that’s likely to cast a poor light on Google,” then-Google Director of Product Hunter Walk wrote, in an interesting moment foreshadowing Google’s current content moderation woes.

After floating a $200 million deal for the company and having YouTube turn up its nose, Google eventually went on to buy the now-ubiquitous video sharing platform for $1.65 billion.

You can read and search through the documents here:

House Antitrust Subcommitte… by TechCrunch on Scribd

What Do Dolphins Eat? Lessons from How Kids Search — Best of Whiteboard Friday

Posted by willcritchlow

We’re bringing back this slightly different-from-the-norm Whiteboard Friday, in which the fantastic Will Critchlow shares lessons from how kids search. Kids may search differently than adults, but there are some interesting insights from how they use Google that can help deepen our understanding of searchers in general. Comfort levels with particular search strategies, reading only the bold words, taking search suggestions and related searches as answers — there’s a lot to dig into. 

Click on the whiteboard image above to open a high-resolution version in a new tab!

Video Transcription

Hi, everyone. I’m Will Critchlow, founder and CEO of Distilled, and this week’s Whiteboard Friday is a little bit different. I want to talk about some surprising and interesting and a few funny facts that I learnt when I was reading some research that Google did about how kids search for information. So this isn’t super actionable. This is not about tactics of improving your website particularly. But I think we get some insights — they were studying kids aged 7 to 11 — by looking at how kids interact. We can see some reflections or some ideas about how there might be some misconceptions out there about how adults search as well. So let’s dive into it.

What do dolphins eat?

I’ve got this “What do dolphins eat?” because this was the first question that the researchers gave to the kids to say sit down in front of a search box, go. They tell this little anecdote, a little bit kind of soul-destroying, of this I think it was a seven-year-old child who starts typing dolphin, D-O-L-F, and then presses Enter, and it was like sadly there’s no dolphins, which hopefully they found him some dolphins. But a lot of the kids succeeded at this task.

Different kinds of searchers

The researchers divided the ways that the kids approached it up into a bunch of different categories. They found that some kids were power searchers. Some are what they called “developing.” They classified some as “distracted.” But one that I found fascinating was what they called visual searchers. I think they found this more commonly among the younger kids who were perhaps a little bit less confident reading and writing. It turns out that, for almost any question you asked them, these kids would turn first to image search.

So for this particular question, they would go to image search, typically just type “dolphin” and then scroll and go looking for pictures of a dolphin eating something. Then they’d find a dolphin eating a fish, and they’d turn to the researcher and say “Look, dolphins eat fish.” Which, when you think about it, I quite like in an era of fake news. This is the kids doing primary research. They’re going direct to the primary source. But it’s not something that I would have ever really considered, and I don’t know if you would. But hopefully this kind of sparks some thought and some insights and discussions at your end. They found that there were some kids who pretty much always, no matter what you asked them, would always go and look for pictures.

Kids who were a bit more developed, a bit more confident in their reading and writing would often fall into one of these camps where they were hopefully focusing on the attention. They found a lot of kids were obviously distracted, and I think as adults this is something that we can relate to. Many of the kids were not really very interested in the task at hand. But this kind of path from distracted to developing to power searcher is an interesting journey that I think totally applies to grown-ups as well.

In practice: [wat do dolfin eat]

So I actually, after I read this paper, went and did some research on my kids. So my kids were in roughly this age range. When I was doing it, my daughter was eight and my son was five and a half. Both of them interestingly typed “wat do dolfin eat” pretty much like this. They both misspelled “what,” and they both misspelled “dolphin.” Google was fine with that. Obviously, these days this is plenty close enough to get the result you wanted. Both of them successfully answered the question pretty much, but both of them went straight to the OneBox. This is, again, probably unsurprising. You can guess this is probably how most people search.

“Oh, what’s a cephalopod?” The path from distracted to developing

So there’s a OneBox that comes up, and it’s got a picture of a dolphin. So my daughter, a very confident reader, she loves reading, “wat do dolfin eat,” she sat and she read the OneBox, and then she turned to me and she said, “It says they eat fish and herring. Oh, what’s a cephalopod?” I think this was her going from distracted into developing probably. To start off with, she was just answering this question because I had asked her to. But then she saw a word that she didn’t know, and suddenly she was curious. She had to kind of carefully type it because it’s a slightly tricky word to spell. But she was off looking up what is a cephalopod, and you could see the engagement shift from “I’m typing this because Dad has asked me to and it’s a bit interesting I guess” to “huh, I don’t know what a cephalopod is, and now I’m doing my own research for my own reasons.” So that was interesting.

“Dolphins eat fish, herring, killer whales”: Reading the bold words

My son, as I said, typed something pretty similar, and he, at the point when he was doing this, was at the stage of certainly capable of reading, but generally would read out loud and a little bit halting. What was fascinating on this was he only read the bold words. He read it out loud, and he didn’t read the OneBox. He just read the bold words. So he said to me, “Dolphins eat fish, herring, killer whales,” because killer whales, for some reason, was bolded. I guess it was pivoting from talking about what dolphins eat to what killer whales eat, and he didn’t read the context. This cracked him up. So he thought that was ridiculous, and isn’t it funny that Google thinks that dolphins eat killer whales.

That is similar to some stuff that was in the original research, where there were a bunch of common misconceptions it turns out that kids have and I bet a bunch of adults have. Most adults probably don’t think that the bold words in the OneBox are the list of the answer, but it does point to the problems with factual-based, truthy type queries where Google is being asked to be the arbiter of truth on some of this stuff. We won’t get too deep into that.

Common misconceptions for kids when searching

1. Search suggestions are answers

But some common misconceptions they found some kids thought that the search suggestions, so the drop-down as you start typing, were the answers, which is bit problematic. I mean we’ve all seen kind of racist or hateful drop-downs in those search queries. But in this particular case, it was mainly just funny. It would end up with things like you start asking “what do dolphins eat,” and it would be like “Do dolphins eat cats” was one of the search suggestions.

2. Related searches are answers

Similar with related searches, which, as we know, are not answers to the question. These are other questions. But kids in particular — I mean, I think this is true of all users — didn’t necessarily read the directions on the page, didn’t read that they were related searches, just saw these things that said “dolphin” a lot and started reading out those. So that was interesting.

How kids search complicated questions

The next bit of the research was much more complex. So they started with these easy questions, and they got into much harder kind of questions. One of them that they asked was this one, which is really quite hard. So the question was, “Can you find what day of the week the vice president’s birthday will fall on next year?” This is a multifaceted, multipart question.

How do they handle complex, multi-step queries?

Most of the younger kids were pretty stumped on this question. Some did manage it. I think a lot of adults would fail at this. So if you just turn to Google, if you just typed this in or do a voice search, this is the kind of thing that Google is almost on the verge of being able to do. If you said something like, “When is the vice president’s birthday,” that’s a question that Google might just be able to answer. But this kind of three-layered thing, what day of the week and next year, make this actually a very hard query. So the kids had to first figure out that, to answer this, this wasn’t a single query. They had to do multiple stages of research. When is the vice president’s birthday? What day of the week is that date next year? Work through it like that.

I found with my kids, my eight-year-old daughter got stuck halfway through. She kind of realized that she wasn’t going to get there in one step, but also couldn’t quite structure the multi-levels needed to get to, but also started getting a bit distracted again. It was no longer about cephalopods, so she wasn’t quite as interested.

Search volume will grow in new areas as Google’s capabilities develop

This I think is a whole area that, as Google’s capabilities develop to answer more complex queries and as we start to trust and learn that those kind of queries can be answered, what we see is that there is going to be increasing, growing search volume in new areas. So I’m going to link to a post I wrote about a presentation I gave about the next trillion searches. This is my hypothesis that essentially, very broad brush strokes, there are a trillion desktop searches a year. There are a trillion mobile searches a year. There’s another trillion out there in searches that we don’t do yet because they can’t be answered well. I’ve got some data to back that up and some arguments why I think it’s about that size. But I think this is kind of closely related to this kind of thing, where you see kids get stuck on these kind of queries.

Incidentally, I’d encourage you to go and try this. It’s quite interesting, because as you work through trying to get the answer, you’ll find search results that appear to give the answer. So, for example, I think there was an page that actually purported to give the answer. It said, “What day of the week is the vice president’s birthday on?” But it had been written a year before, and there was no date on the page. So actually it was wrong. It said Thursday. That was the answer in 2016 or 2017. So that just, again, points to the difference between primary research, the difference between answering a question and truth. I think there’s a lot of kind of philosophical questions baked away in there.

Kids get comfortable with how they search – even if it’s wrong

So we’re going to wrap up with possibly my favorite anecdote of the user research that these guys did, which was that they said some of these kids, somewhere in this developing stage, get very attached to searching in one particular way. I guess this is kind of related to the visual search thing. They find something that works for them. It works once. They get comfortable with it, they’re familiar with it, and they just do that for everything, whether it’s appropriate or not. My favorite example was this one child who apparently looked for information about both dolphins and the vice president of the United States on the SpongeBob SquarePants website, which I mean maybe it works for dolphins, but I’m guessing there isn’t an awful lot of VP information.

So anyway, I hope you’ve enjoyed this little adventure into how kids search and maybe some things that we can learn from it. Drop some anecdotes of your own in the comments. I’d love to hear your experiences and some of the funny things that you’ve learnt along the way. Take care.

Video transcription by

To help us serve you better, please consider taking the 2020 Moz Blog Reader Survey, which asks about who you are, what challenges you face, and what you’d like to see more of on the Moz Blog.

Take the Survey

Sign up for The Moz Top 10, a semimonthly mailer updating you on the top ten hottest pieces of SEO news, tips, and rad links uncovered by the Moz team. Think of it as your exclusive digest of stuff you don’t have time to hunt down but want to read!

Translating Design Wireframes Into Accessible HTML/CSS

Translating Design Wireframes Into Accessible HTML/CSS

Translating Design Wireframes Into Accessible HTML/CSS

Harris Schneiderman

All too often, accessibility doesn’t cross a designer’s mind when creating user interfaces. Overlooking accessibility considerations in the design phase can trickle down through to your website or application and have a large impact on your users. Whether it is usability testing, creating prototypes, adopting an accessible pattern library, or even just annotating wireframes, designers must incorporate accessibility into their workflow. Instead of overloading QA engineers to find accessibility defects, thinking of accessibility from the start, or “shifting left,” can have a tremendously positive impact on the content you create.

Shifting Left

There are many studies that show the changes in the cost of fixing defects at different stages of the development process. Based on the cost of fixing a defect at the design stage as having a factor of 1x, these studies show cost differences that increase to 6x during implementation, 15x during testing after code commit, and as high as 100x if caught after the defect makes it into production. Research by the NIST estimates the defects fixing costs being as 10x during integration testing and 15x during system testing but only 30x in production.[^2] Regardless of what your organization’s actual costs are, one thing is certain: catching defects in the design and development phase is orders-of-magnitude less expensive than later in the process.

Deque has assembled data from 20 years of accessibility testing. Based on our data, a trend that we have seen over the last five years, as Web applications have increased in complexity, is that the number of defects per page has been increasing steadily to between 30 and 50 defects per page. These defect numbers often dwarf any functional defect rates and amplify the value in shifting accessibility testing and fixing as far left in the process as possible.

Around 70% of accessibility defects can be avoided through the appropriate combination of automated and guided testing during the design and development process.

This article is aimed at giving you an overview of how this can be achieved.

The Design Phase


Annotations are textual or graphical explanations added to a design to inform the implementer of intent. Similar to a designer annotating things like color and font-size, accessibility information must also be conveyed in designs. Let’s dive into a simple audio player widget and assess what kinds of annotations we will need.

Our audio player will consist of three controls:

  1. A control to go to the previous track (when applicable)
  2. A control to play and pause the currently playing audio track
  3. A control to go to the next track (when applicable)
Audio player controls design with name and role annotations
(Large preview)

Name, Role And State

The accessible name of a component will dictate what an assistive technology user will be informed of when interacting with it. It is very important to annotate each of our audio player controls because, visually, they are represented with iconography alone and no textual content. This means that we will annotate the 3 controls with accessible names of “Previous track,” “Pause,” and “Next track.”

Next, we want to think about the purpose of each of these 3 controls. Since they are clickable elements that perform audio player actions, the obvious choice of role here is “button”. This is not something that should be assumed through the design but, rather, this is something that designers must annotate to ensure the implementers add this semantic information to the controls. Having the roles mapped out from the start will save you from having to go back and add them to the controls after the implementation has already taken place.

Finally, just as designers map out how a control appears when hovered, they must be thinking about the various states of their widget in terms of accessibility. In the case of our audio player, we actually have quite a few states to annotate for the implementer. Starting with the “Previous track” button, we know that it should be disabled when there is no previous track to play. The play/pause button should toggle the audio player between the playing and paused states. This means we need to annotate that the accessible name needs to match that state. The button’s accessible name should be “Pause” when audio is playing and “Play” when audio is paused. For the “Next track” button, we should annotate the fact that it should be disabled when there is no next track. Lastly, the hover and focus states for each of the buttons should be annotated so keyboard users have some visual indication of the currently focused control in the audio player.

Pause button with focus state annotations
(Large preview)

Interaction for the entire component

When on first track: disable “previous track” button

When on last track: disable “next track” button

When playing, display the “pause” button and hide the “play” button

When not playing: display the “play” button and hide the “pause” button

After clicking “play”, place focus on the “pause” button

After clicking “pause” place focus on the “play” button

Usability Testing

Usability testing, a UX research methodology in which a researcher has a user perform a series of tasks and analyzes their behavior, is a very important stage in the design phase. Information gathered from usability testing is vital in shaping digital user experiences. Performing this testing with users with disabilities is extremely important because it allows your team to get an idea of how easily these users will be able to interact with the content they are creating. If you are doing usability testing on an existing system, you will be able to get a very realistic scenario set up for the participant which is great when it comes to users who rely on various assistive technologies.

If you are doing usability testing on a non-existing system, be prepared to deal with accessibility challenges surrounding the output of design software. The interactive prototypes outputted from these tools are often extremely different from what the end product will be in a browser or on an OS platform. In addition, these “functional prototypes” are usually extremely inaccessible. If possible, find a close alternative out in the wild that you can use in your prototype’s place, which can give you a good idea of how your participants will interact with your system. For example, if you are building a new mobile navigation component, find an existing one on the Internet, and do usability testing with it. Determine what worked in this alternative and learn what needs to be improved. Either way, always be prepared to make accommodations for your usability testing participants based on their disabilities. Ensuring that the tests go smoothly without any roadblocks will not only make your participants happy but will also allow you to get through more testing in less time.

Pattern Libraries

Pattern libraries are collections of user interface components and are extremely beneficial in both the design and the development phases. Having a sufficient set of UI components at your fingertips makes building fully functional applications much easier. For the designer, these components help keep a nice consistency across your application which improves the overall experience for your users. For the developer, having fully-tested, accessible, reusable components help produce high-quality content rapidly. These components should be treated with special care in terms of accessibility because they will presumably be used numerous times through your application(s).

Work With the Developers

Speaking with fellow developers and designers at conferences and meetups, I frequently hear of divided teams in which the designers and developers work in complete isolation from one another. Not only should developers be included in the design phase in things like design review meetings, but designers should also be included in the development phase.

Collaboration is key when it comes to creating awesome accessible content.

Oftentimes, developers are privy to implementation details that can help shape design comps or even pivot an approach to solving a design problem. Likewise, designers can help keep developers in check when it comes to implementing their designs accessibly because detail-oriented aspects such as spacing and specific color usage can have a huge impact on accessibility. While the developers implement a design, designers should pay close attention to things like focus indication, tab order, reading order, fonts, colors, and even accessible names and alt texts of images. Because, after all, what good are all of those amazing accessibility-specific annotations if the developer ignores them?

The Development Phase

Automate Accessibility Testing

Us developers love the idea that certain things in our workflows can be completely automated. Thankfully, there are many amazing accessibility automation libraries available, which your team should leverage to assist in creating sustainable accessible interfaces. Static analysis tools such as eslint-plugin-jsx-a11y can provide immediate feedback to developers warning them of potential accessibility issues while they are coding. Developers can even set their text editor up to display these warnings right as they type code, catching these defects live as they pop up.

Accessibility rules engines, such as axe-core, can be integrated into almost any framework or environment and can help catch many extremely common accessibility issues. A great way to ensure your entire team is creating accessible content is to integrate these types of tools into your CI (continuous integration) and CD (continuous delivery) pipelines. Writing accessibility-specific test cases (unit or end-to-end) is another great form of automation. On my team, we have all of the above configured so no pull requests can even be merged until all of our accessibility automation tests have passed. This means we can guarantee minimal accessibility defects even make it to our dev servers and definitely won’t make it into production.

Manage Accessibility Defects Systematically

Accessibility issues should be treated no differently than security or functionality defects. They should be triaged and prioritized regularly with the rest of the “normal” workload. Measuring progress and gathering metrics specific to accessibility defects can also be useful, especially if your team is just beginning to ramp up on accessibility. This can also help identify your system’s weak points or bottlenecks. If your team participates in sprint retrospectives (or something similar), accessibility should be a talking point. Reflecting on what works and what doesn’t is a healthy exercise and can lead to enhancements in your team’s overall approach towards sustainable accessibility.

This Cool axe Beta tool

We’ve talked about accessibility automation, which is a great starting point for testing. However, inevitably, a human must pick up where the robots leave off to get full accessibility testing coverage. Manual testing requires a deep understanding of accessibility as well as the W3C Web Content Accessibility Guidelines, or “WCAG.” The axe Beta application assists in getting you through this manual testing without having to be an expert in accessibility. It has a large suite of Intelligent Guided Tests, which ask extremely simple questions and does all of the heavy liftings for you!

Given that we always strive to automate everything, one might react skeptically to the assertion that accessibility testing cannot be fully automated and requires a human brain to cover all bases. However, let’s take images as an example and what information, if any, they provide in the context of a webpage. An accessibility automation library cannot derive informational intent by scanning or processing an image. Even if we feed a machine learning algorithm an image and it can spit out a perfect description of what is in that image, it doesn’t know what that image conveys in the context of the page. The information a given image conveys, or whether that image is used solely as decoration, is completely up to the author of the content.

Tying It All Together

Having accessibility in mind from the very beginning of development makes creating accessible content much easier than making these considerations late in the software development lifecycle. Baking accessibility into the ideation, design and implementation of your software creates a more sustainable product.

Set your team up for success by utilizing resources such as WCAG, ARIA, ARIA Authoring Practices, and Stack Overflow. Prevent accessibility defects from finding their way into your software by leveraging accessibility automation libraries and integrating them into your continuous integration servers. Our team has worked hard on filling in the gap between automated and manual testing, we’d love for you to give axe Beta a try! If accessibility defects are handled systematically, not only can you rid your applications of these issues, but you can prevent them from finding their way back in the future.

Do you want to join me in a free workshop on this exact topic? Register for our upcoming Translating Design Wireframes Virtual Workshop which will be split into two 3 hour sessions.

Smashing Editorial (ra, il)

Building Desktop Apps With Electron And Vue

Building Desktop Apps With Electron And Vue

Building Desktop Apps With Electron And Vue

Timi Omoyeni

JavaScript used to be known as the language for building websites and web applications especially with some of its frameworks such as React, Vue, and Angular but over time (as early as 2009), it became possible for JavaScript to run outside the browser with the emergence of Node.js, an open-source, cross-platform, JavaScript runtime environment that executes JavaScript code outside a web browser. This has led to the ability to use JavaScript for a whole lot more than just web applications, and one of which is building desktop applications using Electron.js.

Electron enables you to create desktop applications with pure JavaScript by providing a runtime with rich native (operating system) APIs. You can see it as a variant of the Node.js runtime that is focused on desktop applications instead of web servers.

In this tutorial, we’re going to learn how to build desktop applications using Electron, we’re also going to learn how to use Vuejs to build Electron applications.

Note: Basic knowledge of Vue.js and the Vue CLI is required to follow this tutorial. All of the code used in this tutorial can be found on my GitHub. Feel free to clone and play around with it!

What Are Desktop Applications?

Desktop applications are applications that run stand-alone in desktop or laptop computers. They are applications that perform specific tasks and are installed solely for this purpose.

An example of a desktop application is your Microsoft Word, which is used for creating and typing documents. Other examples of common desktop applications are web browsers, Visual Studio Code, and Adobe Photoshop. Desktop applications are different from web applications because you have to install the desktop application in order for you to access and make use of it, and they sometimes do not need internet access for them to work. Web apps, on the other hand, can be accessed by simply visiting the URL that such an app is hosted on and always need internet access before you can access them.

Examples of frameworks used in building desktop apps include:

  1. Java
    Java is a general-purpose programming language that is class-based, object-oriented, and designed to have as few implementation dependencies as possible. It is intended to let application developers write once, run anywhere (WORA), meaning that compiled Java code can run on all platforms that support Java without the need for recompilation.
  2. Java FX
    According to their official documentation, it is an open-source, next-generation client application platform for desktop, mobile, and embedded systems built on Java.
  3. C#
    C# is a general-purpose, multi-paradigm programming language encompassing strong typing, lexically scoped, imperative, declarative, functional, generic, object-oriented, and component-oriented programming disciplines.
  4. .NET
    .NET is a free, cross-platform, open-source developer platform for building many different types of applications. With .NET, you can use multiple languages, editors, and libraries to build for web, mobile, desktop, gaming, and IoT.

What Is Electron?

Electron is an open-source framework for building desktop applications. It was formerly known as ‘Atom shell’ and is developed and maintained by GitHub. It lets you write cross-platform desktop applications using HTML, CSS, and JavaScript. This means that you can build desktop applications for Windows, MacOS and other platforms using one code base. It is based on Node.js and Chromium. Examples of applications built with Electron include the popular Atom editior, Visual Studio Code, WordPress for desktop, and Slack.


You can install Electron in your project using NPM:

npm install electron --save-dev

You can also install it globally if you’re going to be working with electron apps a lot using this command:

npm install electron -g

Building Vuejs Apps For Desktop With Electron

If you’re familiar with building web applications using Vuejs, it is possible to build desktop applications using Vuejs. All you need for this is the Vue CLI Plugin Electron Builder.

The Vue CLI Plugin Electron Builder

This tool allows you to build Vue apps for desktop with Electron, this means that it makes your Vue application work as an electron app. This means that your Vue application which possibly is a web application can be extended to work in desktop environments without the need to build a separate desktop application in another framework. This gives Vue developers the option and power to go beyond the web. Going forward, you can work on that idea you have and give users a desktop application option — one that can run on Windows, macOS, and Linux.

To see this in action, we’re going to be building a News app using the News API. The application will provide breaking news headlines and allow you to search for articles from news sources and blogs all over the web with their API. All you need to get started with them is your personal API key which can be gotten from here.

We’ll be building a simple app that offers the following:

  1. A page that displays top and breaking headlines from a selected country with the option to choose a country using their /top-headlines endpoint. News API provides news from a list of countries that they support, find the list here.
  2. News from a selected category using a combination of their /everything endpoint and a query parameter q with which we’ll specify our category.

After getting your API Key, we can create our application using the Vue CLI. Ensure you have the Vue CLI installed on your system, if you do not, install it using this command:

npm install -g @vue/cli
# OR
yarn global add @vue/cli

Once this is done, create your News app using the CLI:

vue create news-app

We’ll fetch the data from the News API by using Axios for this tutorial, but you can use any alternative you’re more comfortable with. You can install Axios by using any of the following commands:

npm install axios
yarn add axios

The next step would be to set up an Axios instance for global config in our application. We’re going to be creating a plugins folder in the src folder where we’ll create this axios.js file. After creating the file, add the following lines of code:

import axios from "axios";
let baseURL = ``;
let apiKey = process.env.VUE_APP_APIKEY;
const instance = axios.create({ baseURL: baseURL, timeout: 30000, headers: { "X-Api-Key": apiKey, },
export default instance;

Here, we define our baseURL and apiKey which we got from News API and pass it to a new instance of Axios. This instance accepts the baseURL and apiKey together with a timeout property. News API requires you to add your API Key when making a request to their API and offers 3 ways to attach it to your request but here, we’re adding it to the header X-Api-Key property after which we export instance. Once this is done, we can now use this config for all our Axios requests in our app.

When this is done, you can add the Plugin Electron builder with the CLI using this command:

vue add electron-builder

You’ll be prompted to select your preferred Electron version, I selected version 9.0.0 because it is the latest version of Electron (at the time of writing).

When this is done, you can now serve your application using this command:

Using Yarn(strongly recommended)
yarn electron:serve
npm run electron:serve

This will take some time to compile and serve your app. When that is done, your application will pop open on your system, this should look like this:

default open state of your electron app
Auto-open state of your electron app. (Large preview)

If you close the devtools of your app, it should look like this:

anding page your app
Landing page your app. (Large preview)

This electron plugin is super helpful and easy to use because every part of the development of this app works the same way as a Vue app. This means you can have one codebase for both your web application and desktop app. Our app will have three parts:

  1. A landing page that renders top news from a country chosen at random.
  2. A page for rendering top news from the user’s country of choice.
  3. A page that renders top news from a category of the user’s selection.

For this, we’re going to be needing a header component for all our nav links. So let us create a file in the components folder and name it header.vue, and afterward add the following lines of code to it:

<template> <header class="header"> <div class="logo"> <div class="logo__container"> <img src="../assets/logo.png" alt="News app logo" class="logo__image" /> </div> <h1>News App</h1> </div> <nav class="nav"> <h4 class="nav__link"> <router-link to="/home">Home</router-link> </h4> <h4 class="nav__link"> <router-link to="/top-news">Top News</router-link> </h4> <h4 class="nav__link"> <router-link to="/categories">News By Category</router-link> </h4> </nav> </header>
<script> export default { name: "app-header", };
<style> .header { display: flex; flex-wrap: wrap; justify-content: space-between; } .logo { display: flex; flex-wrap: nowrap; justify-content: space-between; align-items: center; height: 50px; } .logo__container { width: 50px; height: 50px; } .logo__image { max-width: 100%; max-height: 100%; } .nav { display: flex; flex-wrap: wrap; width: 350px; justify-content: space-between; }

Here, we create a header component that has our app name and logo (image can be found on my GitHub) together with a nav section that contains links to the other parts of our application. The next thing would be to import this page on our layout page — App.vue so we can see our header on every page.

<template> <div id="app"> <app-header /> <router-view /> </div>
<script> import appHeader from "@/components/Header.vue"; export default { name: "layout", components: { appHeader, }, };
<style> @import url(""); html, #app { min-height: 100vh; } #app { font-family: "Abel", sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; background-color: #fff; } #app h1 { font-family: "Staatliches", cursive; } a { font-weight: bold; color: #2c3e50; text-decoration: none; } a:hover { text-decoration: underline; } a.router-link-exact-active { color: #42b983; }

Here, we replace the default content in the template section with our newly created header component after we have imported and declared it in the script section. Finally, we add some styling for the whole app in the style section.

Now if we try to view our app, it should look like this:

empty landing page
Empty landing page. (Large preview)

The next step would be to add content to our Home.vue file. This page would host the first section of our app; Top news from a country selected at random. Update your Home.vue file with the following lines of code:

<template> <section class="home"> <h1>Welcome to News App</h1> <h4>Displaying Top News from {{ }}</h4> <div class="articles__div" v-if="articles"> <news-card v-for="(article, index) in articles" :key="index" :article="article" ></news-card> </div> </section>
<script> import { mapActions, mapState } from "vuex"; import NewsCard from "../components/NewsCard"; export default { data() { return { articles: "", countryInfo: "", }; }, components: { NewsCard, }, mounted() { this.fetchTopNews(); }, computed: { ...mapState(["countries"]), }, methods: { ...mapActions(["getTopNews"]), async fetchTopNews() { let countriesLength = this.countries.length; let countryIndex = Math.floor( Math.random() * (countriesLength - 1) + 1 ); this.countryInfo = this.countries[countryIndex]; let { data } = await this.getTopNews( this.countries[countryIndex].value ); this.articles = data.articles; }, }, };
<style> .articles__div { display: flex; flex-wrap: wrap; justify-content: center; }

In the script section of this file, we import mapState and mapActions from Vuex, which we’ll be using later on in this file. We also import a NewsCard component (we’ll create this next) that would render all news headlines on this page. We then make use of the fetchTopNews method to fetch the latest news from a country selected at random from the array of countries in our store. This country is passed to our getTopNews action, this would be appended to the baseURL as a query for a country like so baseURL/top-news?country=${randomCountry}. Once this is done, we loop through this data and pass it to the article prop of our Newscard component in the template section. We also have a paragraph that indicates which country the top news is from.

The next thing would be to set up our NewsCard component that will display this news. Create a new file inside your components folder, name it NewsCard.vue, and add the following lines of code to it:

<template> <section class="news"> <div class="news__section"> <h1 class="news__title"> <a class="article__link" :href="article.url" target="_blank"> {{ article.title }} </a> </h1> <h3 class="news__author" v-if="">{{ }}</h3> <!-- <p class="article__paragraph">{{ article.description }}</p> --> <h5 class="article__published">{{ new Date(article.publishedAt) }}</h5> </div> <div class="image__container"> <img class="news__img" src="../assets/logo.png" :data-src="article.urlToImage" :alt="article.title" /> </div> </section>
<script> export default { name: "news-card", props: { article: Object, }, mounted() { this.lazyLoadImages(); }, methods: { lazyLoadImages() { const images = document.querySelectorAll(".news__img"); const options = { // If the image gets within 50px in the Y axis, start the download. root: null, // Page as root rootMargin: "0px", threshold: 0.1, }; const fetchImage = (url) => { return new Promise((resolve, reject) => { const image = new Image(); image.src = url; image.onload = resolve; image.onerror = reject; }); }; const loadImage = (image) => { const src = image.dataset.src; fetchImage(src).then(() => { image.src = src; }); }; const handleIntersection = (entries) => { entries.forEach((entry) => { if (entry.intersectionRatio > 0) { loadImage(; } }); }; // The observer for the images on the page const observer = new IntersectionObserver(handleIntersection, options); images.forEach((img) => { observer.observe(img); }); }, }, };
<style> .news { width: 100%; display: flex; flex-direction: row; align-items: flex-start; max-width: 550px; box-shadow: 2px 1px 7px 1px #eee; padding: 20px 5px; box-sizing: border-box; margin: 15px 5px; border-radius: 4px; } .news__section { width: 100%; max-width: 350px; margin-right: 5px; } .news__title { font-size: 15px; text-align: left; margin-top: 0; } .news__author { font-size: 14px; text-align: left; font-weight: normal; } .article__published { text-align: left; } .image__container { width: 100%; max-width: 180px; max-height: 180px; } .news__img { transition: max-width 300ms cubic-bezier(0.4, 0, 1, 1), max-height 300ms cubic-bezier(0.4, 0, 1, 1); max-width: 150px; max-height: 150px; } .news__img:hover { max-width: 180px; max-height: 180px; } .article__link { text-decoration: none; color: inherit; }

Here, we display data passed into this component using the article object prop. We also have a method that lazy loads the images attached to each article. This method loops through the number of article images we have and lazy loads them when they become visible. Finally, we have styles targeted at this component in the style section.

The next thing will be to set up our store so we can start getting the latest news. Add the following lines of code to your index.js file:

import Vue from "vue";
import Vuex from "vuex";
import axios from "../plugins/axios";
const store = new Vuex.Store({ state: { countries: [{ name: "United States of America", value: "us", }, { name: "Nigeria", value: "ng", }, { name: "Argentina", value: "ar", }, { name: "Canada", value: "ca", }, { name: "South Africa", value: "za", }, ], categories: [ "entertainment", "general", "health", "science", "business", "sports", "technology", ], }, mutations: {}, actions: { async getTopNews(context, country) { let res = await axios({ url: `/top-headlines?country=${country}`, method: "GET", }); return res; }, },
export default store;

We are adding two properties to our store, one of these properties is countries. This property contains an array of countries’ object. We also have the categories property; this contains an array of available categories on the News API. The reader will like the freedom to view the top news from specific countries and categories; this will also be needed in more than one part of the app and that is why we’re making use of the store. In the actions section of our store, we have a getTopNews method that fetches top news from a country(this country was passed from the component that called this action).

At this point, if we open our app, we should see our landing page that looks like this:

Updated landing page
Updated landing page. (Large preview)

The background.js file

This file is the entry point for Electron into your app. It controls all the Desktop app-like settings for this app. The default state of this file can be found on my GitHub.

In this file, we have some predefined configurations set for the app such as the default height and width for your app. Let’s take a look at some of the things you can do in this file.

Enabling the Vuejs devtools

By default, you have access to dev tools in Electron but it is not enabled after installation. This is as a result of an existing bug on windows 10, so if you open you background.js file, you will find some commented out code with comments that state why they’re commented out:

// Install Vue Devtools
// Devtools extensions are broken in Electron 6.0.0 and greater
// See for more info
// Electron will not launch with Devtools extensions installed on Windows 10 with dark mode
// If you are not using Windows 10 dark mode, you may uncomment these lines
// In addition, if the linked issue is closed, you can upgrade electron and uncomment these lines
// try {
// await installVueDevtools()
// } catch (e) {
// console.error('Vue Devtools failed to install:', e.toString())
// }

So if you’re not affected by this bug, you can uncomment the try/catch block and also search for installVueDevtools in this same file(line 5) and also uncomment it. Once this is done, your app will automatically restart, and when you check your dev tools, you should see the Vuejs Devtools.

Vuejs in devtools
Vuejs in devtools. (Large preview)
Selecting A Custom Icon For Your App

By default, the Electron icon is set as the default icon for your app, and most of the time, you probably would like to set your own custom icon. To do this, move your icon into your public folder, and rename it to be icon.png. The next thing to do would be to add the required dependency, electron-icon-builder.

You can install it using any of the following commands:

// With Yarn:
yarn add --dev electron-icon-builder
// or with NPM:
npm install --save-dev electron-icon-builder

Once this is done, you can run this next command. It will convert your icon into Electron format and print the following in your console when this done.

generated info in terminal
Generated info in terminal. (Large preview)

The next thing would be to set the icon option in background.js file. This option goes inside the BrowserWindow option that is imported from Electron. To do this, update BrowserWindow to look like this:

// Add this to the top of your file
/* global __static */
// import path
import path from 'path' // Replace
win = new BrowserWindow({ width: 800, height: 600 })
// With
win = new BrowserWindow({ width: 800, height: 600, icon: path.join(__static, 'icon.png')

Now if we run yarn run electron:build and view our app, we should see the updated icon being used as the app icon but it doesn’t change in development. This issue helps address a manual fix for it on macOS.

Setting Title For Your App

You will notice the title of your app is set to the app name (news-app in this case) and we’ll need to change it. To do that, we have to add a title property to the BrowserWindow method in our background.js file like this:

win = new BrowserWindow({ width: 600, height: 500, title: "News App", icon: path.join(__static, "icon.png"), webPreferences: { // Use pluginOptions.nodeIntegration, leave this alone // See for more info nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION, }, });

Here, we’re setting the title of our app to ‘News App’. But if your index.html file has a title selected or your title doesn’t change to this, try adding this code to your file:

win.on("page-title-updated", (event) => event.preventDefault());

We’re listening for an event that gets fired when our title is updated from BrowserWindow. When this event is fired, we’re telling Electron not to update the title with the one found in index.html file.

Another thing that might be worth changing is the productName, this controls what name appears when you hover on your app’s icon or what your computer recognizes the app as. Right now, the name of our app is Electron. To change this name in production, create a vue.config.js file and add the following lines of code to it:

module.exports = { pluginOptions: { electronBuilder: { builderOptions: { productName: "News App", }, }, },

Here, we define productName to be ‘News App’ so that when we run the build command for our app, the name changes from ‘Electron’ to ‘News App’.

Multi Platform Build

By default, when you run the build command, the app that gets created is dependent on the platform that it is being run on. This means if you run the build command on Linux, the app that gets created would be a Linux desktop app. The same also applies to other platforms(macOS and windows). But Electron comes with the option to specify a platform (or two platforms) you want to generate. The available options are:

  1. mac
  2. win
  3. linux

So in order to build the Windows version of your app, run the following command:

// NPM
npm electron:build -- --win nsis
yarn electron:build --win nsis


The completed application can be found on my GitHub. The official Electron documentation provides information and a guide that helps you customize your desktop app whichever way you want. Some of the things I tried out but aren’t included in this tutorial are:

  1. Customizing your dock on macOS —
  2. Setting resizeable, maximizable, and many more —

So if you’re looking to do much more with your Electron application, their official docs is a good place to start.

  1. Node.js
  2. Java (programming language)
  3. Electron (software framework)
  4. JavaFX 14
  5. electronjs
  6. Electron Documentation
  7. Vue CLI Plugin Electron Builder
  8. Lazy Loading Images for Performance Using Intersection Observer by Chris Nwamba
  9. axios
  10. Getting Started With Axios In Nuxt by Timi Omoyeni
Smashing Editorial (ks, ra, yk, il)

Our Top 10 Social Media Engagement Hacks for 2020

Social media moves dizzyingly fast, but some fundamental concepts stay the same—like the importance of organic engagement and connecting with your audience.  In this article, I’ve rounded up 10 ideas to boost organic engagement, with examples from brands that are successfully adding followers and building communities online. That way, you can use these tips to start improving your own engagement right away.

Burger King Facebook post

Here are 10 hacks for improving your social media engagement in 2020:

  1. Private Facebook groups
  2. Games and giveaways
  3. Video challenges
  4. Gif conversations on Twitter
  5. User-generated content
  6. Virtual events
  7. Collaborations and takeovers
  8. Augmented reality lenses
  9. Mixed media
  10. More in-app actions

But first, let’s make sure we’re clear on why organic engagement is an important metric.

Why organic engagement matters on social media

From time to time, someone will announce that organic social media is over. It’s all about the ads. And it is certainly true that the accuracy of targeted ads on social networks like Facebook, Instagram, and TikTok has increased.

 But at the same time, ad costs are rising, and, especially right now, more people are relying on digital media to stay in touch with friends and make meaningful connections.

TikTok tops this most downloaded apps graphic

TikTok was downloaded 87 million times just last month.

All of which means that genuine, organic engagement still matters. In fact, it matters more than ever. If you want your brand to succeed on social media, you need to build an active and authentic community which adds value for your followers.

10 social media engagement hacks in 2020

These engagement hacks are based on strategies and tools that I’ve used myself and found worked really well for different types of companies in many different countries. Take a look and see what inspires you!

1. Private Facebook groups

Facebook has been encouraging the use of groups for a while. While your main Facebook page is great for broadcasting information, groups allow you to create a focused, tight-knit community where people can share, discuss, and collaborate around your brand.

Anyone can request to join a Facebook group, but you can set up filter questions to make sure that your group is populated with your target audience.

social media engagement with Facebook group example

I really encourage people to work with Facebook groups, because they’re a workable way to build engagement for almost any business. There are broadly three categories of Facebook group run by brands:

  1. Support groups: People share ideas, knowledge and advice.
  2. Social groups: People share projects, make friends and organize events.
  3. Insider groups: People get exclusive access to branded content, releases and events.

For example, this fashion brand runs a book club as a private Facebook social group.

social media engagement with social Facebook group example

Meanwhile, this SaaS brand runs a support group for its users. People compare notes about the application, share their work, and even suggest new features that they’d like to see. The group also uses Facebook’s “Mentorship” feature, which connects experienced users with those who need a hand. Brand admins are very active in the group, so members feel that their engagement is valued.

social media engagement with Facebook group example

Lastly, here’s an example of an insider Facebook group, run by a brand. If you’ve ever taken a content marketing course from HubSpot, you probably got an invitation to join this group.

social media engagement with Facebook group example HubSpot

HubSpot uses it to run invite-only webinars and make product announcements. At the same time, they reap all the engagement benefits of running a social or support group.

2. Games and giveaways

It’s strange to think how fast social media has evolved. In the beginning, we just shared written status updates. Then photographs took over. Then we discovered that video content got more engagement then photos.

So what’s next? Interactive video, playable ads, and mini-games. Big brands (with budgets to match) are increasingly ambitious with the content they share: platform games, interactive video storylines and so on. Interactive content increases the time that followers spend on your social media profile, it has strong viral potential, and it can function as a painless method of lead generation.

The most recent example I’ve seen (via Mobile Marketer) is this game from Burberry, a mix of dressing up and classic platform game. It’s surprisingly addictive.

social media engagement game from Burberry

The game is available on Burberry’s own site, other shopping sites, the app WeChat and as an in-store activity. (If you want to know why that’s significant, jump ahead to hack #10!) And when you finish playing, you get access to exclusive Burberry-branded gifs, so that you keep sharing online.

Obviously, this level of game design is beyond most content marketers’ budgets. However, you can reproduce the ideas on a smaller and more feasible scale. Ready-made apps, game platforms for marketers and simple puzzles are rapidly becoming more popular.

Ideally, any branded game will tap into a dynamic that’s already popular. For example, hidden objects games have been around for decades. If you use an off-the-shelf app, you just have to supply your own graphics and the game is ready to play.

social media engagement with game example

Spin the wheel games are also popular, just like the classic TV show “Wheel of Fortune.” People love to play it, it’s completely fool-proof, and you can run a major promotion without blowing the whole budget on rewards.

I suspect that interactive content has partly become more popular this year due to lockdown. We’re all desperate for distractions, either for ourselves or for our reluctantly home-schooled children. Paradoxically, that’s great news for brands—because it means that consumers will reward you for creativity and entertainment value.

3. Video challenges

You might not have taken part in a video challenge yet, but you’ve definitely heard of them.

The ice bucket challenge. The cinnamon challenge. The Renegade dance challenge.

Most video challenges share some key characteristics. They’re quick and easy to do at home. They often have a signature soundtrack or phrase. And because they’re filmed as short video clips, popular challenges tend to spill over from their original social platform and onto other social media. (This is great news in terms of viral reach.)

To create your own challenge, you just need a fun idea and an active audience. Don’t create a challenge that’s too difficult, time-consuming, or derivative; if you borrow someone else’s idea, you risk a backlash.

Here are a couple of examples to get you started. Remember the first few weeks of the 2020 lockdown, when everyone was suddenly making that coffee?

social media engagement with Dalgona coffee

The Dalgona coffee challenge was inspired by a Korean TV show, took off on YouTube, and then spread to TikTok. And it was a gift to instant coffee manufacturers.

Like many challenges, Dalgona coffee emerged pretty much spontaneously. But some consumer brands have successfully engineered viral challenges, such as the NYX cosmetics challenge that publicized their new Butter Gloss Pop product.

social media engagement TikTok example

Image source

Last time I checked, the hashtag had already reached 10.8 billion views. These challenges are designed to increase reach and brand awareness. They aren’t ideal for lead generation or reaching a very focused audience, but they can help to bring your brand to a larger public.

4. Gif conversations on Twitter

Let’s be blunt: I know of at least a few marketers who have given up on Twitter. But I think they’re missing out. Twitter is still a key channel for customer service, customer feedback, and online discussion. It’s also a great way to reach specific demographics, including B2B audiences.

If you want a quick engagement fix, then starting a gif thread can get you some attention on Twitter. This is where you pose a question, or give people a prompt, and ask them to respond with a single gif.

For some reason, this is especially popular with sports communities.

social media engagement with Twitter gifs

So why does this work? Well, like most things on social media, it’s easy for people to join in. A frictionless experience is vital when you want people to engage with you.

Secondly, it mixes text with visual media and pop culture references. It taps into the media and style of communication that people are already using on Twitter, and gets plenty of attention in the process. You’ll benefit from showing that you appreciate and understand online culture, especially if your brand skews to younger demographics.

5. Sharing user-generated content on brand hashtags

This trend has been around for a while, but it shows no signs of slowing down in 2020. The idea is simple, and similar to a video challenge: You create a hashtag that refers to your brand, and encourage people to share. But instead of asking people to complete a challenge or show a specific product, you invite them to share their unique experience of your brand.

Fashion and cosmetics brands are often at the forefront of consumer-focused social media, so it’s no surprise that they’re skilled at this. For example, the cult footwear brand Rothys uses the hashtag #rothysinthewild to collect photos and videos posted by their customers. All of that user-generated content is essentially free advertising, bringing Rothys to new audiences and building a mountain of social proof.

social media engagement example #rothysinthewild hashtag

 The key to getting user-generated posts like this is to reward people who post. Whenever content pops up on your hashtag, reshare it to your own feed or add it to a dedicated Instagram highlight. Show people that you’ve noticed their contributions!

Once your hashtag is established and there’s a regular stream of posts coming in, this is also a way to build community online. People who share posts with your brand will find each other through the hashtag. This solves a key problem for some social networks: While you can’t create groups on Twitter or Instagram, you can develop a strong sense of community through hashtags.

6. Virtual events, chats, and networking

We’ve already touched on the idea of social media groups, or hashtag communities, around your brand. The natural next step is community events in real time: webinars, live chats, interactive livestreams, and networking.

The good news is that social media networks are rapidly introducing new features to support this. You can now broadcast live video on every single social platform, and most offer the option for viewers to share comments and reactions in real time.

Early in 2020, Facebook released Messenger Rooms for live video chats. This takes live broadcasts to the next level: you can invite a select group of people to fully participate in the conversation. When you create a room, you can choose to invite specific people or open the room to anyone. You can also schedule a room to “unlock” at a specific time or date, which is really useful for busy social media managers.

It’s already available across Facebook Messenger and Instagram, with WhatsApp expected to follow soon.

Facebook room example

Facebook is still playing around with the details of Rooms, but this is an app with huge potential. You can create private rooms within Facebook groups. Rooms also works on Instagram—just tap the video camera icon in the top-right of your private messages.

Most brand events in 2020 have, of necessity, been virtual. But even when life goes back to normal, don’t lose touch with these virtual channels. Virtual events—or at least livestreaming in-person events—will help you reach people who can’t attend due to distance, other commitments, or accessibility issues.

(And speaking of accessibility, follow these tips to make your video more accessible for people with hearing impairments. If you plan to use video regularly, invest in good software for automatic captions.)

7. Collaborations and takeovers

When you hear the word “collaboration,” a lot of marketers’ minds jump to expensive influencer campaigns. And those have their value—but, as always on social media, there are simpler and more affordable alternatives.

As we’ve seen, ordinary customers can bring huge benefits to your brand when they share content about your brand. So why not give them the chance to run your account for a day?

You can collaborate with customers, other local businesses, and complementary companies (for example, a brewery teaming up with a snack company). One great example of this is the Paperchase ambassador scheme. Every year, the stationery company selects a few university students to represent the brand. They get to run the brand’s social media accounts for a day and try out new products.

social media engagement with account takeover example

You could team up with an influencer, customer or partner brand to run Twitter chats, Facebook Live, split-screen Instagram Lives or TikTok takeovers.

If you partner with someone who already has a sizeable audience, collaborations can increase your reach very rapidly. But they’re also powerful because they create a sense of excitement for your regular followers. You can transform a weekly Q&A session into a sold-out event just by adding a new name and face into the mix.

8. Augmented reality lenses

Don’t be fooled by the science fiction name: augmented reality is already an everyday part of our lives. If you’ve ever used an Instagram Story effect, you’ve used augmented reality.

With that said, augmented reality lenses are rapidly becoming more sophisticated—and both social networks and brands are waking up to the possibilities. Single Grain has pinpointed augmented reality as a major trend for Facebook Ads in 2020, while SnapChat is busy adding new features for brands and creators to design new AR lenses.

Many young creators, artists, and influencers are already playing around with these lens creation tools. They’re easier to use than you think! If you’re not sure where to start, speak to a graphic designer or try contacting a creator whose work you enjoy.

For example, you can search for AR effects by theme in your Instagram Story editor. Just tap the icon of a magnifying glass with stars on it. Each effect is credited to a creator who you can then track down and contact.

AR lens example

So what’s the engagement value of these lenses?

Well, like every other hack mentioned here, they’re something that social media users already enjoy interacting with. When you join in the fun, you have the chance to increase your audience and connect with followers by showing you care about the same things. Try creating AR filters that link to your followers’ interests, let them play with your products, or even represent your values.

9. Mixed media

One of the things I love about social media is that people always find a way to make it work for them. Long before Twitter had a built-in camera, people were sharing video from other sites. And when Instagram users wished they could use their words more, people started sharing screencaps of Tweets and notes.

The only problem with this DIY version of social media is that it doesn’t always look beautiful. You can save a lot of time on content creation by re-sharing content across different platforms—but you have to make sure your design is up to scratch.

My favorite app for this is Remix by Buffer. The design tools are very effective, and it’s extremely fast to use. Start by putting in the URL of any website, tweet or even a Shopify product listing. The app then allows you to add backgrounds, change the image dimensions and pick a design that will look great.

mixed media example

 This is a fun way to share news, customer reviews or testimonials, or even just funny Tweets that caught your eye. If you decide to share content from other users, make sure you include proper credit. If it’s your own content … fire away!

10. More in-app actions

Finally, let’s take a second to think about the future of social media. What’s coming next?

Judging from the features that social networks are putting out, the goal is to do more and more within social media. Facebook, Instagram, and Pinterest have all released new in-app shopping features during 2020. Instagram now offers Story stickers to buy gift cards, make charitable donations and order food. SnapChat has announced their new SnapChat Minis scheme, which gives brands the power to build mini-apps on the platform.

in-app actions example

The inspiration for many of these ideas is the Chinese social media giant, WeChat. You can pretty much live your entire life inside WeChat, including messaging, social sharing, shopping, ordering food, paying bills, and booking appointments.

It remains to be seen whether this approach will work for Western audiences. While in-app features offer plenty of convenience, they also involve handing over a lot more data to the social media giants. So finding the right balance—and keeping your data policies transparent, accurate and up to date—will be key.

Start improving your social media engagement today

The key to success on social media is to keep on posting, engaging, and trying out new ideas. By this time next year, we’ll probably have 10 new social media engagement hacks to share! But in the meantime, I’d love to hear if you’ve tried out any of these engagement hacks and what results you saw

About the author

Corinna Keefe is a freelance writer who specializes in digital marketing, tech and social media. 

How To Build An Accessible Front-End Application With Chakra UI And Nuxt.js

How To Build An Accessible Front-End Application With Chakra UI And Nuxt.js

How To Build An Accessible Front-End Application With Chakra UI And Nuxt.js

Kelvin Omereshone

For many people, the web is an essential part of their daily lives. They use it at work, home, and even on the road. Web accessibility means people with disabilities can use the web equally. So it’s crucial for developers and organizations building on the web to build inclusivity and accessibility into their applications.

In order to make the web more accessible, there are a couple of best practices and standards that you will have to implement in your applications, such as adhering to the following:

Learning to implement these standards can seem like a daunting task when you factor in project deadlines and other constraints that you have to work with as a developer. In that light, let me introduce you to a UI design system that was built to help you make your web applications accessible.

Chakra UI

Chakra UI is a design system and UI framework created by Segun Adebayo. It was created with simplicity, modularity, composability, and accessibility in mind. Chakra UI gives you all the building blocks needed to create accessible front-end applications.

Note: While Chakra UI depends on CSS-in-JS under the hood, you don’t need to know it in order to use the library.

Though the framework was originally created for React, Jonathan Bakebwa spear-headed the porting to Vue. So Vuejs/NuxtJS developers can now utilize Chakra UI to create accessible web applications.

Features Of Chakra UI

Chakra UI was created with the following principles in mind:

  • Style props
    Chakra UI makes it possible to style components or override their styles by using props. This reduces the need for stylesheet or inline styles. Chakra UI achieves this level of flexibility by using Styled Systems under the hood.
  • Composition
    Components in Chakra UI have been broken down into smaller parts with minimal props to keep complexity low, and compose them together. This will ensure that the styles and functionality are flexible and extensible. For example, you can use the CBox and CPseudoBox components to create new components.
  • Accessible
    Chakra UI components follow the WAI-ARIA guidelines specifications and have the right aria-* attributes. You can also find the accessibility report of each authored component in a file called See the accessibility report for the CAccordion component.
  • Themeable
    Chakra UI affords you the ability to easily reference values from your theme throughout your entire application, on any component.
  • Dark mode support
    Most components in Chakra UI are dark mode compatible right out of the box.

How Chakra UI Supports Accessibility

One of the core principles behind the creation of Chakra UI is accessibility. With that in mind, all components in Chakra UI comes out of the box with support for accessibility by providing:

  • Keyboard Navigation — useful for users with motor skills disabilities,
  • Focus Management,
  • aria-* attributes which are needed by screen readers,
  • Focus trapping and restoration for modal dialogs.

Getting Started With Chakra UI And Nuxt

Note: To use Chakra UI with Vue.js see the Getting Started guide.

For our demo project, we will be building Chakra-ui explorer — an accessible single-page web application to search Chakra UI components.

Getting Started With Chakra-ui Explorer

Assuming you already have NPM installed, create a new Nuxt application by running:

$ npx create-nuxt-app chakra-ui-explorer

Or if you prefer in yarn, then run:

$ yarn create nuxt-app chakra-ui-explorer

Follow the installation prompt to finish creating your Nuxt application.

Setting Up Chakra UI

Chakra UI uses Emotion for handling component styles. So to get started with Chakra UI, you will need to install Chakra UI alongside Emotion as a peer dependency. For this project, we will be using the official Nuxt modules for both Chakra UI and Emotion which will reduce the friction in getting started with Chakra UI. Let’s add them to our project by running the following command:

npm i @chakra-ui/nuxt @nuxtjs/emotion

Note: @nuxtjs/emotion allows your component styles to be generated and injected in the server build.

After installing both modules, you will need to register them in the nuxt.config.js file under the modules array option:

// nuxt.config.js
modules: ['@chakra-ui/nuxt', '@nuxtjs/emotion'],

To complete our setup process of Chakra UI, we need to touch our default layout component in layouts/ and add CThemeProvider, CColorModeProvider, and CReset components from Chakra UI.

It is recommended thatyou use the CReset component to ensure all components provided by Chakra UI work correctly.

The CThemeProvider component will make your theme available to every part of your application, while the CColorModeProvider component is responsible for handling our application’s color mode which can be in one of two states: light or dark. Finally, the CReset component will remove all browser default styles.

Let’s add the aforementioned components in layouts/default.vue. In our template section, let’s add this:

<!-- layouts/default.vue -->
<template> <div class="container"> <c-theme-provider> <c-color-mode-provider> <c-box as="section"> <c-reset /> <nuxt /> </c-box> </c-color-mode-provider> </c-theme-provider> </div>

Then in our script section, we will import and register the components like so:

import { CThemeProvider, CColorModeProvider, CReset, CBox } from '@chakra-ui/vue' export default { name: 'DefaultLayout', components: { CThemeProvider, CColorModeProvider, CReset, CBox }

Your default.vue layout component should look like this:

<template> <div class="container"> <c-theme-provider> <c-color-mode-provider> <c-box as="section"> <c-reset /> <nuxt /> </c-box> </c-color-mode-provider> </c-theme-provider> </div>
</template> <script>
import { CThemeProvider, CColorModeProvider, CReset, CBox } from '@chakra-ui/vue' export default { name: 'DefaultLayout', components: { CThemeProvider, CColorModeProvider, CReset, CBox }

Note: Notice I am wrapping both <c-reset /> and <nuxt /> components in a c-box component.

Setting Your Application Theme

Chakra UI allows you the ability to set a theme for your application. By ‘theme’, I mean the setting of your application’s color palette, type scale, font stacks, breakpoints, border-radius values, and so on. Since colors and contrast are vital components of accessibility, it’s important to use colors that are easily perceived.

Out of the box Chakra UI ships with a default theme object that affords for most of your application needs in terms of colors, fonts, and so on. The default theme is set up with contrast in mind which allows for the easily toggling of color modes (more on this later).

Chakra UI, however, allows you to extend or completely replaced the default theme. This is possible by accepting a theme object based on the Styled System Theme Specification.

The values in the theme object are automatically available for use in your application. For example, the colors specified in theme.colors can be referenced by the color, borderColor, backgroundColor, fill, stroke, and style props in your components.

To personalize your application, you can override the default theme provided by Chakra UI or set new values in it. To do that, the Chakra UI Nuxt module exposes a chakra object which will take in an extendTheme property which takes an object. The object given to extendTheme will be recursively merged to the Chakra UI default theme object. Let’s add our brand color palette to Chakra so we can use it in our application.

Note: Chakra UI recommends adding color palette into the colors object of your theme using keys from 50 — 900. You can use web tools like coolors and palx to generate these palettes.

For our demo homepage, I will be using a brand color of lime. To make Chakra UI aware of this color, I’ll create a customeTheme object in a folder called chakra(you can call it whatever you want) in the root of my project’s directory. In this object, I will define our brand color palette.

Create a file called theme.js in the folder you created and then add the following snippet:

// ./chakra/theme.js const customTheme = { colors: { brand: { 50: '#f6fcee', 100: '#e2f4c8', 200: '#cbec9e', 300: '#b2e26e', 400: '#94d736', 500: '#75c800', 600: '#68b300', 700: '#599900', 800: '#477900', 900: '#294700' } }
} module.exports = customTheme

Now let’s merge our custom theme to Chakra UI. We do that in nuxt.config.js. First, we need our custom theme object:

import customTheme from './chakra/theme'

Next, we have to specify the chakra key provided by the Chakra UI Nuxt module and pass in customTheme to the extendTheme property:

chakra: { extendTheme: customTheme

Your nuxt.config.js file should look like this:

// nuxt.config.js
import customTheme from './chakra/theme' export default { mode: 'spa', /* * Headers of the page */ head: { title: process.env.npm_package_name || '', meta: [ { charset: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1' }, { hid: 'description', name: 'description', content: process.env.npm_package_description || '' } ], link: [{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }] }, /* * Customize the progress-bar color */ loading: { color: '#fff' }, /* * Global CSS */ css: [], /* * Plugins to load before mounting the App */ plugins: [], /* * Nuxt.js dev-modules */ buildModules: [ // Doc: '@nuxtjs/eslint-module' ], /* * Nuxt.js modules */ modules: [ '@chakra-ui/nuxt', '@nuxtjs/emotion' ], chakra: { extendTheme: customTheme }, /* * Build configuration */ build: { /* * You can extend webpack config here */ extend (config, ctx) {} }

When you run your application with npm run dev, your homepage should look like this:

A demo application showing Chakra UI and NuxtJS
(Large preview)

Now that we have successfully installed Chakra UI and added our application’s custom theme, let’s begin building out Chakra-ui explorer.

Creating Our Main Navigation

We want our navigation to have our brand name, in this case, it will be Chakra-ui explorer, 2 navigation links: Documentation and Repo, and a button which is responsible for toggling our color mode. Let’s create a new component under the components directory called NavBar in which we’ll create our application’s main navigation using Chakra UI.

Let’s do this. Add the following snippet to NavBar.vue:

<template> <c-box as="nav" h="60px" px="4" d="flex" align-items="center" shadow="sm" > <c-link as="nuxt-link" to="/" color="brand.700" font-weight="bold" :_hover="{ color: 'brand.900' }" > Chakra-ui Explorer </c-link> <c-box as="ul" color="gray.500" d="flex" align-items="center" list-style-type="none" ml="auto" > <c-box as="li" mr="8"> <c-link color="gray.500" :_hover="{ color: 'brand.400' }" is-external href="" > Documentation </c-link> </c-box> <c-box as="li" mr="8"> <c-link color="gray.500" :_hover="{ color: 'brand.400' }" is-external href="" > Repo </c-link> </c-box> <c-box as="li"> <c-icon-button variant="ghost" variant-color="gray[900]" aria-label="Switch to dark mode" icon="moon" /> </c-box> </c-box> </c-box>
</template> <script>
import { CBox, CLink, CIconButton } from '@chakra-ui/vue'
export default { name: 'NavBar', components: { CBox, CLink, CIconButton }

Next, we need to import this component in our default layout component — default.vue and add it to our template so overall our default layout should look like this:

<template> <div class="container"> <c-theme-provider> <c-color-mode-provider> <c-box as="section"> <c-reset /> <nav-bar /> <nuxt /> </c-box> </c-color-mode-provider> </c-theme-provider> </div>
</template> <script>
import { CThemeProvider, CColorModeProvider, CReset, CBox } from '@chakra-ui/vue'
import NavBar from '@/components/NavBar'
export default { name: 'DefaultLayout', components: { CThemeProvider, CColorModeProvider, CReset, CBox, NavBar }

When you run your application now, you’ll get to see this:

You can see that the navigation is already accessible without even specifying it. This can only be seen when you hit the Tab key on your keyboard; Chakra UI handles focus management while you can focus on each link on the navigation menu.

The as Prop

From our NavBar.vue’s snippet above, you will notice the as prop. This is a feature available to Chakra UI components that allows you to pass an HTML tag or another component to be rendered as the base tag of the component along with all its styles and props. So when we did:

<c-box as="li"> <c-icon-button variant="ghost" variant-color="gray[900]" aria-label="Switch to dark mode" icon="moon" />

we are asking Chakra UI to render an <li> element and place a button component inside it. You can also see us use that pattern here:

 <c-link as="nuxt-link" to="/" color="brand.700" font-weight="bold" :_hover="{ color : 'brand.900' }"> ChakraMart </c-link>

In the above case, we are asking Chakra UI to render the Nuxt’s <nuxt-link /> component.

The as prop gives you the power to use the right(or wrong) element for the context of your markup. What this means, is you can leverage it to build your application template using semantic markups which will make your application more meaningful to screen readers. So instead of using a generic div element for the main content of your application, with the as prop you can render a main element telling screen readers that this is the main content of your application.

Note: Check out the documentation for all props exposed by Chakra UI components. Also, take a closer look at how the brand color in chakra/theme.js was specified. You can see from the snippet above that we’re using it as any of the colors that Chakra UI provides. Another thing to be aware of is the moon icon that we used for the CIconButton on our NavBar. The moon icon is one of the default icons that Chakra UI provides out of the box.

Color Mode

One of the features of Chakra UI is color mode support. And you can tell from the use of the moon icon in Chakra-ui explorer’s navigation, we plan on integrating dark mode. So instead of leaving it for last, let’s get it over with and wire it up right now. To do this, CColorModeProvider using Vue’s provide/inject, provides, $chakraColorMode and $toggleColorMode functions. $chakraColorMode returns the current color mode of your application while $toggleColorMode toggles the color mode from light to dark and vice versa. To use these two functions, we’ll need to inject them into the NavBar.vue component. Let’s do this below in the <script /> section:

import { CBox, CLink, CIconButton } from '@chakra-ui/vue'
export default { name: 'NavBar', inject: ['$chakraColorMode', '$toggleColorMode'], components: { CBox, CLink, CIconButton },

Let’s create a computed property to return the color mode:

... computed: { colorMode () { return this.$chakraColorMode() } }

Now that we have injected both functions in NavBar.vue let’s modify the toggle color mode button. We’ll start with the icon so that it shows a different icon depending on the color mode. Our CIconButton component now looks like this at this state:

<c-icon-button variant="ghost" variant-color="gray[900]" aria-label="Switch to dark mode" :icon="colorMode == 'light' ? 'moon' : 'sun'"

Currently, we are using an aria-label attribute to tell screen-readers to Switch to dark mode. Let’s modify this to support both light and dark mode:

<c-icon-button variant="ghost" variant-color="gray[900]" :aria-label="`Switch to ${colorMode == 'light' ? 'dark : 'light'} mode`" :icon="colorMode == 'light' ? 'moon' : 'sun'"

Lastly, we will add a click event handler on the button to toggle the color mode of our application using the $toggleColorMode function. Like so:

<c-icon-button variant="ghost" variant-color="gray[900]" :aria-label="`Switch to ${colorMode == 'light' ? 'dark' : 'light'} mode`" :icon="colorMode == 'light' ? 'moon' : 'sun'" @click="$toggleColorMode"

To test if our color mode set up is working, I’ll add an interpolation of the color mode and a text next to the CIconButton toggling our color mode. Like so:

<c-box as="li"> <c-icon-button variant="ghost" variant-color="gray[900]" :aria-label="`Switch to ${colorMode == 'light' ? 'dark' : 'light'} mode`" :icon="colorMode == 'light' ? 'moon' : 'sun'" @click="$toggleColorMode" /> Current mode: {{ colorMode }}

Here is what our app currently looks like:

So we have done the heavy lifting in setting up color mode in Chakra UI. So now we can style our application based on the color mode. Let’s go to default.vue and use the color mode slot prop provided by CColorModeProvider to style our application. Let’s modify our template first in default.vue.

<template> <div class="container"> <c-theme-provider> <c-color-mode-provider #default="{ colorMode }"> <c-box v-bind="mainStyles[colorMode]" w="100vw" h="100vh" as="section" > <c-reset /> <nav-bar /> <nuxt /> </c-box> </c-color-mode-provider> </c-theme-provider> </div>

We are destructuring colorMode from the slot props property provided by CColorModeProvider and then passing it as a dynamic key to a mainStyle object which we will create in a bit. The idea is to use a different set of styles based on the colorMode value. I am also using the width and height with the shorthand props — w and h respectively to set the width and height of our CBox component. Let’s define this mainStyles object in our script section:

import { CThemeProvider, CColorModeProvider, CReset, CBox } from '@chakra-ui/vue'
import NavBar from '@/components/NavBar'
export default { name: 'DefaultLayout', components: { CThemeProvider, CColorModeProvider, CReset, CBox, NavBar }, data () { return { mainStyles: { dark: { bg: 'gray.900', color: 'whiteAlpha.900' }, light: { bg: 'whiteAlpha.900', color: 'gray.900' } } } }

Chakra-ui explorer now has dark mode support!

Now we have our navigation bar and have successfully set up dark mode support for our application, let’s focus on index.vue in our pages/ directory where the meat of our application can be found. We’ll start off with adding a CBox component like so:

<c-box as="main" d="flex" direction="column" align-items="center" p="10" >

Then we’ll add the CInput component inside it. Our index.vue page component will then look like this:

<template> <c-box as="main" d="flex" align-items="center" direction="column" w="auto" p="16" > <c-input placeholder="Search components..." size="lg" mb="5" is-full-width /> </c-box>
</template> <script>
import { CBox, CInput } from '@chakra-ui/vue'
export default { components: { CBox, CInput }

Here is how our application looks like now:

You can see from the above screencast how the CInput element automatically knows when it’s in dark mode and adjust accordingly even though we didn’t explicitly set that. Also, the user can hit the tab key to focus on that CInput component.

Adding The Components’ List

So the idea of the Chakra-ui explorer (as stated earlier) is to show the user all of the available components in Chakra UI so that we can have a list of those components as well as the links that will take the user to the documentation of the component. To do this, I will create a folder called data at the root of our project’s directory then create a file called index.js. In index.js, I will export an array of objects which will contain the names of the components. Here is how the file should look like:

// ./data/index.js export const components = [ { name: 'Accordion' }, { name: 'Alert' }, { name: 'AlertDialog' }, { name: 'AspectRatioBox' }, { name: 'AspectRatioBox' }, { name: 'Avatar' }, { name: 'Badge' }, { name: 'Box' }, { name: 'Breadcrumb' }, { name: 'Button' }, { name: 'Checkbox' }, { name: 'CircularProgress' }, { name: 'CloseButton' }, { name: 'Code' }, { name: 'Collapse' }, { name: 'ControlBox' }, { name: 'Divider' }, { name: 'Drawer' }, { name: 'Editable' }, { name: 'Flex' }, { name: 'Grid' }, { name: 'Heading' }, { name: 'Icon' }, { name: 'IconButton' }, { name: 'IconButton' }, { name: 'Input' }, { name: 'Link' }, { name: 'List' }, { name: 'Menu' }, { name: 'Modal' }, { name: 'NumberInput' }, { name: 'Popover' }, { name: 'Progress' }, { name: 'PseudoBox' }, { name: 'Radio' }, { name: 'SimpleGrid' }, { name: 'Select' }, { name: 'Slider' }, { name: 'Spinner' }, { name: 'Stat' }, { name: 'Stack' }, { name: 'Switch' }, { name: 'Tabs' }, { name: 'Tag' }, { name: 'Text' }, { name: 'Textarea' }, { name: 'Toast' }, { name: 'Tooltip' }

For our implementation to be complete, I will import the above array into pages/index.vue and iterate over it to display all the components. Also, we will give the user the ability to filter the components using the search box. Here is the complete implementation:

// pages/index.vue
<template> <c-box as="main" d="flex" align-items="space-between" flex-direction="column" w="auto" p="16" > <c-input v-model="search" placeholder="Search components..." size="lg" mb="10" is-full-width /> <c-grid template-columns="repeat(4, 1fr)" gap="3" p="5"> <c-box v-for="(chakraComponent, index) of filteredComponents" :key="index" h="10"> {{ }} <c-badge> <c-link is-external :href="lowercase(`${}`)" > <c-icon name="info" size="18px" /> </c-link> </c-badge> </c-box> </c-grid> </c-box>
</template> <script>
import { CBox, CInput, CGrid, CLink, CBadge, CIcon } from '@chakra-ui/vue'
import { components as chakraComponents } from '../data'
export default { components: { CBox, CInput, CGrid, CBadge, CIcon, CLink }, data () { return { search: '' } }, computed: { filteredComponents () { return chakraComponents.filter((component) => { return this.lowercase( }) } }, methods: { lowercase (value) { return value.toLowerCase() } }

And now our application looks like this:

You can now see how dark mode is automatic for the component’s list as well as how the focus management is added for the links (by default) to aid accessibility.

Putting Chakra UI To The Test

Finally, let’s see how our app scores by running the Lighthouse accessibility test on it. Mind you, this test is based on the Axe user impact assessment. Below is a screencast of the test. You can also run the test yourself by following these steps.

From the screencast above you can see that our Chakra UI app has a score of 85 on the lighthouse accessibility test.


In this article, we have touched on the need for building accessible interfaces and we have also seen how to use Chakra UI to build accessible applications from the ground up by building an explorer (Chakra-ui explorer) for the Chakra UI components.

Smashing Editorial (ra, yk, il)

The Best WordPress Themes for Blogs

Want to jump straight to the answer? I think Newspaper and CheerUp are the best WordPress themes for blogs.

With more than 30 million blogs in the US alone, you need the best WordPress theme so your blog stands out.

You might be a great writer. But if your blog doesn’t look good, people will stop browsing. In fact, 38% of people stop engaging with sites with unattractive layouts.

And if you nail the theme, it even boosts your SEO and organic reach.

My 10 Favorite Blog Themes for WordPress

I’ve done my research and narrowed down the top ten WordPress themes for blogs in 2020.

This guide can serve as a reference to help you pick the best theme for your blog.

1. Newspaper

Newspaper Theme

Newspaper is a paid WordPress theme. It costs $59.

And yes, it’s worth every single penny.

The design is professional and modern. I’ll admit, the name of this theme is a bit misleading since it’s extremely versatile. While it is a popular choice for magazine and newspaper sites, this theme can also be customized to fit a review website or blog. It doesn’t matter which category or niche you’re in; this theme can meet your needs.

The versatility and easy customization both make Newspaper one of my favorite options. It has a drag and drop editor so you can easily change more than 100 different elements on the page.

I’d recommend starting with one of the sleek pre-built templates and then making any changes you see fit. You don’t have to be tech savvy or know how to code to do this, which makes this theme a solid choice for literally anyone.

You’ll also have tons of options for customizing the header and footer of your blog. The theme lets you implement a grid design to highlight specific pages, categories, and tags. It’s easy for you to stay organized on the backend, while your website visitors can navigate seamlessly on the frontend.

Newspaper has fast page loading speeds and is AMP ready. In addition to being extremely responsive, it’s compatible with Woocommerce and Google AdSense. The Newspaper WordPress theme is mobile friendly and applies SEO best practices as well.

It’s one of the most versatile WordPress themes you’ll find, and I’d recommend it for any blog.

2. CheerUp

CheerUp Theme

CheerUp is another versatile WordPress blogging theme. While it can be used for nearly any blog, it’s designed for bloggers who are a bit more tech-savvy, as opposed to the average WordPress user.

This theme is made to work in unison with the custom sets of tools, widgets, and plugins that webmasters use to enhance their WordPress site. So if your blog is using lots of add-ons, this is definitely a top option for you.

CheerUp comes with 12 different designs. While that may not seem like much at first glance, these 12 designs come with more than 1,000 layout variations. This helps ensure that your blog is unique among the other websites using the same theme.

The pre-built designs are made to appeal to specific audiences. Some popular categories include:

  • Fitness
  • Parenting
  • Fashion
  • Travel
  • Beauty
  • Lifestyle

Once you select and customize a design, you’ll also be able to choose unique styles for your posts. For example, you could have a full-width text or magazine-style text. Add a cover image to the top of your blog, or omit that option. The choice is completely up to you.

CheerUp can be integrated with social media networks. This will encourage social sharing for your blog posts.

This theme is also AMP supported, optimized for search engines, has fast loading times, and is highly responsive. You can purchase CheerUp for $59.

3. Kale

Kale Theme

As the name implies, the Kale WordPress theme is designed for food bloggers. Unlike the other options we’ve looked at so far, this is a free template.

If you’re a blogger in this niche category, you know how difficult it can be to stand out from your competition. This theme can give you an edge since it eliminates clutter on your blog, while still showcasing your images.

While this theme is intended for all things related to food, cooking, and recipes, it’s versatile enough to be applied to blogs in the fashion industry — particularly because both niches are so photocentric.

There are tons of layouts, sidebar options, multi-level menus, and color overlay options for banners and sliders. And all YouTube videos are automatically responsive with Kale. That’s an extremely important feature if you’re a food blogger who includes video demonstrations embedded in your posts.

It’s very easy to install the theme and get started in minutes. Kale has WooCommerce integration as well, for those of you who are selling in addition to blogging.

4. Stockholm

Stockholm Theme

Modern. Clean. Trendy. All of these words come to mind when I think about the Stockholm WordPress theme.

As a blogger, you need to make sure it’s easy for your website visitors to access your content, navigate on the page, and engage with your writing. The Stockholm theme can help you accomplish all of these things.

It’s so versatile that it’s a top choice for blogs in every category. Start with one of the simple but elegant designs and customize it to meet your specific needs. You’ll be able to do this without any coding or design knowledge.

This theme will enhance your entire website, going far beyond your blog. It has specific layouts designed for ecommerce shops, restaurants, and architecture. So if your blog falls into one of these three categories, I’d definitely recommend looking into this option.

Stockholm can be purchased for $59.

5. Jevelin

Jevelin Theme

I like this option because it’s versatile enough for blogs in so many different industries. Some popular categories offered on the Jevelin WordPress theme are:

  • Education
  • Food & Drink
  • Portofolio
  • Fitness
  • Photography
  • Events
  • Medical
  • Finance
  • Beauty

The theme can be installed to your blog with just one click. It’s easy to customize as well. Once you pick a pre-built layout, you can adjust every element on the page. Jevelin lets you do this without having to do any coding. It’s quick, easy, responsive, and shows you live previews of your changes in real time.

I also like the different layout options that are specific for blogs. Some of the best ones include:

  • Masonry
  • Creative
  • Grid

Adding one of these layouts to your blog will definitely make it more visually appealing. Nobody will navigate to your pages and think that they look boring.

This is another paid theme. It costs $59.

6. Editorial

Editorial Theme

The Editorial WordPress theme has a magazine style layout, which is great for bloggers who want to showcase their content with featured images. This format also makes it easier for you to prioritize your best work.

With Editorial, you’ll have access to a live editing feature to easily move sections around and see all of your changes in real time.

For those of you who have tons of blog content but don’t know how to organize it, consider this theme. It’s great because your readers won’t feel overwhelmed when they visit your website.

This theme also has plenty of widgets that allow for added customization. You don’t have to be a tech wizard to figure all of it out either.

Another great benefit of Editorial is that it’s free with free support.

7. GoBlog

GoBlog Theme

The GoBlog theme is perfect for bloggers who want to take a simple, minimalist approach to their website design.

I like this theme because it supports eight different post formats.

  • Gallery
  • Standard
  • Quote
  • Video
  • Image
  • Link
  • Status
  • Audio

It’s extremely easy for you to embed audio and video content into your posts. This will ultimately help you run a successful video blog.

GoBlog is highly responsive on both desktop and mobile devices. You can also add sliders below the headers, which are perfect for text introductions. With a simple theme like GoBlog, you can prioritize your content without having too many complex distractions.

You can purchase the GoBlog theme for $54.

8. Flat

Flat Theme

Flat is a trendy WordPress theme. If you want your blog to be bold, modern, and colorful, consider this option. You should also educate yourself on the top trending website color schemes.

This theme uses Javascript, HTML5, and CSS3 to ensure that all interaction and engagement on is fully responsive and beautiful. You can add different effects for transitions as users scroll through your content. Some of those include:

  • Fade-ins
  • Slide-ins
  • Drop-ins
  • Fly-ins
  • Progress bars
  • Animated circles

Flat also comes with extra shortcodes and options for custom post types. The best part of this theme is arguably the drag-and-drop builder. It makes it easy for anyone, regardless of their technical or design ability, to customize the content blocks. The drag-and-drop builder can be used on the front end of your website, so you can see exactly what your visitors will see.

Another reason why this theme is great for bloggers is because it’s optimized for search engines. You’ll also have access to Google Fonts for styling options on each page.

Unlike other themes that aren’t updated frequently, Flat guarantees that it will always work with the latest WordPress versions. Updates are made automatically, without having to make any additional installations.

Pricing for Flat starts at $59. There is also a developer option for $69. For those of you who are currently using another WordPress theme, Flat will give you 50% off of your purchase for switching to them. It’s an enticing offer to consider.

9. WPVoyager

WPVoyager Theme

WPVoyager is another $59 theme, but specifically made for travel blogs. That’s because the theme is fully integrated with Google Maps so your content can be displayed in a map view, as shown with the screenshot above.

This is a unique approach to organizing blog posts on your website. Visitors can browse for blogs simply by navigating on the map to points of interest.

It’s the perfect solution for travel bloggers who take lots of photos during their adventures as well. The map feature does much more than just show your visitors the location that you’re blogging about. Let me give you an example.

The screenshot above is pretty straightforward. The title of the post is “5 Reasons You Need to Visit Budapest,” with Budapest marked on the map. But when you click on the post, take a look at how the map changes.

WPVoyager Theme Map

Now there are five points marked within the city. If you click on each one, a photo pops up with a brief description. As you scroll down the page and navigate away from the map, the blog is shown in a more traditional format.

The possibilities with this theme are nearly endless for travel bloggers and photography bloggers. If I were in this niche, I would definitely use this theme on my WordPress site.

10. Vixen Blog

Vixen Blog Theme

The Vixen Blog theme is simple, elegant, and beautiful. This design has a deliberate feminine touch. You can create a visually appealing blog with this WordPress theme, even if you don’t have any experience with design. It’s fully responsive on both the frontend and backend.

Vixen Blog is optimized for search engines, made for readability, and has a compatible Instagram feed feature. So it’s easy for you to integrate your blog with your social media strategy.

Pricing for this theme starts at $34. There is also an extended license for $2,200. This is made for developers who can then sell those licenses to their clients.


What’s the best WordPress theme for blogs? With thousands of options to consider, it’s tough to name just one. There isn’t a one size fits all blog theme. Your blog is unique, so it’s important for you to find a theme that fits your style and needs.

Some of these themes appeal to certain niches, such as travel, photography, or food blogs. Other options are bold, modern, and trendy, while some themes take a more minimalist approach. There are paid themes, free WordPress themes for blogs, and licenses made for developers as well.

Whenever I write a review like this, I try to include something for everyone so no matter what category you fall into, you’ll be able to find a them you like in this guide.

Best Social Media WordPress Plugin – (Review Updated for 2020)

A good social media WordPress plugin lets visitors engage with you on social media. It also helps social media followers convert on your website.

Let’s look at an example: You wrote and published a killer blog post. A reader loves your post and wants to share it with their friends on social media. How do they do this?

Without the proper tools, the person would have to copy your blog link, navigate to the social platform, login, and manually paste the link before sharing it. The person may ultimately decide that it’s just not worth going through all of those steps to share your post. That decision may not even be conscious—they may get distracted and move on to something else.

Social media WordPress plugins can make it easy for website visitors to share with just one click.

That’s just one example of why you need to install a social media plugin to your WordPress site. As we continue through this guide and review the best social media WordPress plugins, you’ll learn about the additional benefits.

The 6 Best Social Media WordPress Plugins

After taking a look at dozens of social media WordPress plugins, I’ve narrowed it down to the six best:

  • Social Warfare
  • Instagram Feed
  • Social Locker
  • Super Socializer
  • Revive Old Post
  • Kiwi Social Share

Read on to find my in-depth reviews of each one.

1. Social Warfare

Social Warfare

Social Warfare is considered among the best social media WordPress plugins because it’s so simple. Other plugins have a reputation for slowing down your website, but that shouldn’t happen with Social Warfare.

This plugin is designed to increase shares by adding social sharing icons to your website. You can add buttons for the most popular social media networks, including:

  • Facebook
  • LinkedIn
  • Twitter
  • Pinterest

If you upgrade to Social Warfare Pro, you’ll gain access to share buttons for other platforms like Reddit, WhatsApp, Buffer, Tumblr, Pocket, and more.

Social Warfare also lets you choose exactly where you want to place the sharing buttons. You can add them above your content, below your content, in both of these locations, or manually place them on your pages. This plugin offers floating share icons as well — as a user scrolls your site, the sharing buttons remain in view at all times.

Social Warfare allows you to track your results with UTM parameters. You can view analytics to see how well your sharing icons are performing so you can tweak them, if necessary.

2. Instagram Feed

Instagram Feed

As the name implies, the Instagram Feed WordPress plugin lets you share your Instagram content directly on your website. By adding your Instagram posts to your website, visitors will have a better idea of what type of content you share on that platform. And, they won’t have to search for your profile on Instagram. This is a great way to increase your Instagram followers. It’s also a great way to keep your site updated with the fresh images you’re posting on Instagram.

Setting up the plugin is easy. All you need to do is link your Instagram account and determine where you want the feed displayed on your website.

There is a premium version of this plugin that comes with features like:

  • Shoppable feeds
  • Ability to filter content based on hashtags
  • Popup lightboxes
  • Hashtag feeds
  • Advanced moderation for hiding or showcasing specific posts
  • Post comments for user feeds

For one website, you can purchase the pro license for $39. But if you just want the basic feed on your website, you can stick with the free version and save a few bucks.

3. Social Locker

Social Locker

Social Locker is definitely one of my favorite social media WordPress plugins. Personally, I love the whole concept behind how this plugin works.

Here’s the thing. Just adding social sharing icons to your website doesn’t necessarily give people a reason to follow you or share your content. You can increase those chances by installing this plugin.

That’s because Social Locker restricts your premium content. For example, let’s say you have an ebook on your website. As opposed to charging for downloads, you use social media engagement as a currency. If someone follows, likes, or shares content on your website, the ebook is unlocked.

Here’s an example of what this would look like from the perspective of a website visitor:

Social Locker Example

For those of you who normally charge for various types of content on your website and don’t want to give it away for free, you can use these social engagements to generate discounts for that content.

Maybe you have an online video tutorial that you normally charge to view. With Social Locker, you can choose to offer the video at a discount if a user shares your content.

This plugin helps you drive social media traffic while simultaneously gaining quality followers. It’s a great way to generate new leads and drive conversions with social media integration on your website.

4. Super Socializer

Super Socializer

Allowing your website visitors to create a customer profile benefits everyone — the user will receive more personalized content, and you’ll be able to learn more information about your customers so you can target them accordingly. It’s a win-win situation.

In order for this strategy to be effective, people need to create these profiles in the first place. That’s easier said than done.

Think about it for a minute: What steps does someone need to take to create a profile? At a minimum, they need to provide you with some personal information and create a username and password. People have so many accounts to keep track of on various websites. Is your site important enough to them to go through this?

You can increase your chances of getting more visitors to do this by integrating your sign up and login process with social media. Super Socializer is perfect for this.

Now users can create an account and login with just one click since they’re likely already signed in to their social media profiles. Plus, they won’t have to remember a new username and password.

Another benefit of this plugin is that you’ll get access to more information about your website visitors. You can target people accordingly based on their social media likes and habits. You can also enable social comments with Super Socializer. This is a great way to drive conversation and get more comments on your blog posts.

Overall, this plugin definitely has more advanced features and functionality that goes far beyond simple social sharing icons, although it does have those options as well. If you want an all in one plugin for social logins, social comments, and social sharing, Super Socializer is worth checking out.

5. Revive Old Post

Revive Old Post
What happens to your blog posts after you publish them? In a perfect world, they remain relevant in terms of SEO forever, but that doesn’t necessarily help you out on social media.

Here’s another question for you. How are you deciding what to share on your social platforms each day? It’s not always easy to come up with ideas for social media posts.

The Revive Old Post WordPress plugin by Revive Social provides a solution to both of these questions. This plugin automatically shares your previously published content on your social media platforms like:

  • Facebook
  • Twitter
  • LinkedIn
  • Tumblr
  • Pinterest

Revive Old Post can share more than just your blog posts. It can also share pages, custom posts, and media from your website. The plugin will automatically fetch images from your content and attach them to the social media post.

You’ll have complete control over how each post is shared. Maybe you just want the title of your post or page. Some of you may want more, such as a hashtag or additional text.

Revive Old Post can be integrated with your Google Analytics profile. This is ideal for campaign tracking to see how well these links are performing. Overall, it’s a great way to automate your social media posting while simultaneously driving traffic to your website.

BONUS: Revive Network

Revive Social has another plugin, called the Revive Network. This plugin is designed specifically for Facebook and Twitter. It’s made for sharing content from other websites in your industry on social media. This is a great way to expand your professional network, in addition to sharing relevant information on your website. It’s great for those of you who don’t have an active blog or lots of content of your own.

6. Kiwi Social Share

Kiwi Social Share

Kiwi Social Share is designed for the average WordPress user. If you’re looking for a plugin that’s easy to install, setup, and won’t confuse you with too many complex features, you’ll definitely want to take a closer look at this option.

With Kiwi Social Share, you’ll be able to create custom icons for social media sharing on your website. You can customize the position of the icons, as well as enable a floating bar that’s always in view. Kiwi Social Share also gives you the option to change the size and shape of the sharing buttons.

It has a “click to tweet” function for specific phrases as well. So if you’re writing a blog and want to highlight one of your favorite quotes, users can share that quote via Twitter with a link back to your blog.

Kiwi Social Share doesn’t slow down your website and lets you create social sharing icons that are visually appealing to your visitors. Installing this plugin puts you in a great position to increase engagement on your website and gain more exposure on social media.

Top features to look for in a social media WordPress plugin

Before we analyze specific plugins, I want to take a moment to identify some of the functionalities to keep your eye on when searching for a social media plugin:

Social icons — This shows your website visitors that you have social media pages. If they click on an icon, they’ll automatically be directed to the corresponding profile.

Social logins — Allow people to sign into customer profiles using their social media accounts. This makes it easier on your customers since they won’t have to create brand new usernames and passwords to access content on your website.

Social sharing icons — Website visitors can share content from your site to their social media profiles with just one click.

Social feeds — Showcase your social media feeds directly on your website. This feature gives your website visitors an idea of what to expect if they follow your profiles.

Social locking — Restrict your best content with a social locking tool. Content can be unlocked if a website visitor makes a specified action, such as following you or sharing content on social media.

Social comments — Enhance the conversation in your comments section by adding social media comments to your posts. This is a great way to drive engagement and get more blog comments.

Automated posting — Instead of manually posting your website content on social media, you can take advantage of plugins that do this for you.

Now that you know the top features of the best social media WordPress plugins, it’s time to check out the top options to consider.


It’s obvious that your website and social media profiles need to be working together to generate optimal results. So what’s the best social media WordPress plugin? It depends on what you’re looking for.

Some of you might just want to add something simple, like social sharing icons to your blog posts or Instagram feeds to your landing pages. While others might be looking for features that are a bit more advanced, like restricting content based on social media actions.

Maybe you want an all-in-one plugin that also has features like social signups and logins.

Do you want to automate your social media posts with your previously published content? There’s a plugin for that too.

As you can see from this guide, there’s a social media WordPress plugin for everyone based on your specific needs. Now, share this post with a friend who needs it. Naturally, there are social buttons right here for you to do just that.

The Single Best WordPress Plugin Across Every Essential Category

WordPress is great—for a lot of reasons.

One of the biggest reasons is because it’s flexible. There are tons of amazing WordPress plugins you can use to customize your website.

But which one is the best? And which one will do the most for your website?

There are more than 54,300 WordPress plugins. It’s an overwhelming number to say the least.

That’s why I took the time to identify the best WordPress plugins for the most popular categories. I’ve already created extensive guides for each one of these 13 categories. Every guide contains a list of the best WordPress plugins in each segment. And if you’re after something specific, you should check out that post — many of plugins I recommend are for particular use cases.

In-Depth Reviews of the Best WordPress Plugins in 13 Categories

This my the complete list of my in-depth plugin reviews for…

The Best of the Best WordPress Plugins

Each of those posts reviews multiple plugins in each category. But most people don’t need to go that deep. That’s why I made this best of the best list. This is a resource to identify the top must-have plugin for each category.

The plugins on this list are not the niche options; these are the plugins that will appeal to the masses. They’re the WordPress plugins I’d recommend broadly.

Best SEO Plugin for WordPress — Yoast SEO

There are hundreds of WordPress plugins that will help improve your SEO strategy, but one stands above the rest.

Yoast SEO

Yoast SEO plugin

Yoast SEO is an all-in-one solution for your WordPress SEO needs. With more than five million active installations, it’s one of the most popular WordPress plugins on the market. I’m not saying you should always follow the crowd, but a number that big is a great indication of quality.

Why I like it:

  • Create and manage XML sitemaps without having to code on your own
  • Identify and avoid duplicate content on your website
  • Comes standard with templates for meta-descriptions and titles

Cost: Free; $89 per year for premium

Best Google Analytics Plugin for WordPress — MonsterInsights

Google Analytics gives you in-depth knowledge and insights about your website traffic. By installing a plugin, you can have access to all of your Google Analytics reports without leaving your WordPress dashboard.


MonsterInsights is the best WordPress plugin for Google Analytics. This plugin lets you add your Google Analytics code to your website without any manual coding required. It’s advanced and versatile enough to handle analytics for all websites, including ecommerce shops. No wonder it has two million active installations.

Why I like it:

  • Detailed reports about your audience and their behavior on your website
  • Helps ecommerce sites track KPIs like conversion rates and average order value
  • Identifies your best content and top performing landing pages

Cost: $99.50 for a basic website, $199.50 for ecommerce sites, and $499.50 for agencies and developers — all plans billed annually

Best Membership Plugin for WordPress — MemberPress

The whole concept behind a membership website is to drive recurring revenue with a subscription business model. You can offer premium features and content to your paid members. In order to set this up, you’ll need to install a plugin to manage memberships and payments on your WordPress site.


MemberPress is the best plugin for this category because it makes it easy for you to convert your existing website into a membership site, without having to start from scratch. All you have to do is add the details of your payment gateway and set up your products and content in a members only area.

Why I like it:

  • It supports payment gateways like PayPal and Stripe
  • Integrates with your email marketing software
  • Comes with pricing page templates for membership options

Cost: $129 per year for Basic, $249 per year for Plus, and $349 per year for Pro

Best WordPress Backup Plugin — VaultPress

In the event of a crash or malicious attack on your website, a backup plugin will be there to restore your content and minimize downtime. It will also act as a fail-safe against human error on your WordPress dashboard.


We’ve been using VaultPress here on Quick Sprout since 2011. So naturally, I think it’s the best WordPress backup plugin, or else I’d switch to something else. It’s so easy for you to set up and automatically back up your website content. You don’t need to be a tech wizard to use this plugin.

Why I like it:

  • Great for site migrations, restores, and file repairs
  • The calendar view allows you to locate and restore content from old backups
  • Built-in file scanning and spam defense helps reduce chances of malware, viruses, spam, or a malicious attack

Cost: Plans range from $39 to $299 per year

Best WordPress Cache Plugin — WP Rocket

Adding a cache plugin to your website will help you speed up your page loading times. Out of more than 900 cache plugins available, one stands out as the best.

WP Rocket

The WP Rocket WordPress plugin is extremely versatile. It’s simple enough for beginners to figure it out, but has advanced features that can meet the needs of developers with more technical experience.

Why I like it:

  • Quick setup and simple navigation
  • Image on request feature (images are only loaded when the scroll depth is reached)
  • Minifies JavaScript, CSS, and HTML files to speed up loading times

Cost: $49 per year for one website, $99 per year for three websites, and $249 per year for unlimited websites

Best WordPress Security Plugin — WordFence Security

Roughly 90,000 websites get hacked every day — 83% of those websites use WordPress. Clearly, security needs to be at the top of your priority list. You can install a WordPress plugin to help beef up your website security.

WordFence Security

More than two million WordPress websites are currently using the WordFence Security plugin as a security solution. The plugin fights against malware, spam, and other threats in real time. It’s a great option for those of you who don’t have a background in IT or cybersecurity. You’ll still be able to secure your website with WordFence Security.

Why I like it:

  • Block attacks from specific regions that are known for cybercrime
  • See trends and reports about any attempted hacks on your website
  • Firewall blocks and brute force attack protection comes standard

Cost: Free; premium version starts at $99 per year with other add-ons available for purchase

Best Form Plugin for WordPress — Ninja Forms

Website forms are crucial for collecting information. It’s the best way to get your website visitors to sign up for something, like your email subscription list.

Ninja Forms

Ninja Forms is great because of its seamless integration into your WordPress dashboard. Once you have this plugin installed, you can create your first form in just minutes. That’s why it’s no surprise that more than one million websites use Ninja Forms.

Why I like it:

  • Can integrate with your email marketing software
  • Collect payments with Stripe, PayPal Express, and Elavon
  • Export and analyze the data that’s submitted through forms

Cost: Free; $99 per year for Personal, $199 per year for Professional, $499 per year for Agency. Add-ons range from $29 to $129 per year.

Best WordPress Gallery Plugin — NextGEN Gallery

WordPress has a basic image gallery. However, I wouldn’t recommend using it because it’s so limited. For truly improving the visual appeal of your website, you’ll need something extra. A gallery plugin is ideal.

NextGEN Gallery

NextGEN Gallery is one of the best WordPress plugins because you’ll have so many different gallery options to choose from. Other plugins just give you a couple of basic templates for adding images. It’s a great option for photographers and artists.

Why I like it:

  • Customize slideshows with effects, transitions, and timing
  • Add watermarks and hotlink protection to your images
  • Ecommerce integration for selling images on your site

Cost: Free; paid versions available for $79, $99, and $139 per year

Best WordPress Slider Plugin — Smart Slider 3

Do you want to add a slider to your website? You can make sliders, carousels and blocks using a slider plugin. My favorite is Smart Slider 3, because it’s easy to use, reliable and super flexible.

Using Smart Slider 3, you’re able to create a slider on your WordPress website using powerful design tools, and pre-built templates.

There’s a free version and a pro version.

Why I like it:

  • Easy to build a slider with layers
    Several different slider types to choose from
    Prebuilt template and slider library

Cost: Free; aid versions available for $35-$250 depending on how many sites you want to implement the plugin on.

Best Social Media WordPress Plugin — Super Socializer

Your website needs to be integrated with your social media profiles. Otherwise, you’re not maximizing the potential of your social media. WordPress plugins can help you increase the exposure of your website content on social media.

Super Socializer

There are so many social media WordPress plugins designed for specific features. But Super Socializer is more of an all-in-one solution. So if you don’t want to install multiple social media plugins, I’d definitely recommend Super Socializer.

Why I like it:

  • Site visitors can use their social login information to create an account on your website
  • Add social sharing icons to your pages
  • You can get more blog comments by enabling social comments

Cost: Free

Best WordPress Calendar Plugin — EventON

Every business needs to stay organized. Calendar plugins can help you manage events, tasks, and bookings on your website. Some of these plugins are more advanced than others, but overall, there’s one that shines above the rest.


EventON allows you to create calendars that will “wow” your website visitors. We’ve all seen websites with boring calendars that look like they were designed a decade ago without any updates. That definitely isn’t be the case here. EventON has modern designs that are visually appealing and fully functional.

Why I like it:

  • It can manage events lasting for multiple days, weeks, or months at a time
  • Add images to your event listings and integrate them with Google Maps
  • Sell event tickets with Woocommerce support

Cost: $24; add-ons sold separately

Best WordPress Directory Plugin — Directories Pro

Directories are extremely versatile. Whether you want to add a directory to your site for internal purposes or create a global platform of business directories, the right WordPress plugin can help you meet those needs.

Directories Pro

No matter what type of directory you want to add to your website, the Directories Pro WordPress plugin will make it possible. This plugin is highly responsive and uses caching to boost your website’s performance. Make sure to enable reviews for your directory to enhance the content. You can even integrate listings with Google Maps.

Why I like it:

  • Drag-and-drop editor makes it easy for you to customize the directory without coding
  • Include an option for websites to claim their listing in your directory
  • Add paid listings to your directory

Cost: $39

Best WordPress Popup Plugin — Layered Popups

Do you want to add popups to your website? Popups can be great for getting email subscribers, driving downloads, generating sales, or enticing other actions on your website. Regardless of your intention, you’ll need a WordPress plugin to make it work.

Layered Popups

Layered Popups is great because you can create popups that are visually appealing, so you have a chance to get creative. These popups will clearly stand out to your website visitors. It’s a chance for you to make unique popups compared to what people are used to seeing on other websites.

Why I like it:

  • Integrates with 56 of the most popular email marketing platforms
  • Run A/B tests to fully optimize the performance of each popup
  • Multiple options for triggering popups (such as exit intent or scrolling depth)

Cost: $21

Best WordPress Booking Plugin — Bookly

Booking plugins are necessary for any website that takes appointments or reservations. Online booking systems will optimize your process on the back end while simultaneously improving the customer experience. If you’re not allowing online bookings, you’re ignoring the preferences of the majority of your customers — 70% of people prefer to book appointments online with service providers.


Bookly has a sleek and modern design on both the frontend and backend. Booking options are completely customizable and fully responsive. You’ll definitely want to install Bookly if you’d like to take your customers through a quick and easy booking process.

Why I like it:

  • Custom pricing and availability for different employees (such as trainers at a gym)
  • Option to process payments or collect deposits at the time of booking
  • Customers can set up recurring appointments or get added to a waiting list

Cost: $89; add-ons sold separately

Best Website Builder Plugins — ZeGuten

ZeGuten is a website builder plugin. Instead of building your site line-by-line with code, you’ll use “blocks” to put it altogether. It works with everything from an online store to a fitness blog. It’s also responsiveness right out of the box so your website will looks great on mobile.

ZeGuten Plugin Blocks

There are 17 easy-to-customize blocks that you’ll work with to build each page on your site. This is the perfect option if you want to customize your WordPress site beyond a basic theme but don’t want to code the whole thing yourself.

Why I like it:

  • No coding required, make your WordPress site look exactly the way you want
  • A bunch of extra design features like animation
  • SEO-friendly and requires no coding skills

Cost: $15

What exactly is a WordPress plugin?

It’s essentially an app for your website.

I love how WordPress is designed to be lean out of the box. This prevents code bloat — your website isn’t dragged down by bulky code for things you don’t need or use. The core of WordPress is simple. You can customize it with plugins.

The core of WordPress is designed to be lean and lightweight, to maximize flexibility and minimize code bloat. Plugins then offer custom functions and features so that each user can tailor their site to their specific needs.— WordPress Codex

Installing a plugin to your WordPress site provides you with advanced features that aren’t available with the bare bones version of WordPress.

Where can you get a plugin? There are a number of places, but the primary source is the Official WordPress Plugins Repository.

Conclusion: What’s the best WordPress plugin?

These are the best overall options for each of the essential categories. Keep in mind, I identified these as the best because they appeal to the widest possible audience. Some of you may want plugins that have more specific features and functionality within each category.

For example, you might want an SEO plugin that specifically helps you identify relevant keywords while you’re blogging. Or maybe you want a social media plugin that just adds your Instagram feed to your website.

Do you want a Google Analytics WordPress that’s made for tracking specific events on your website? There’s a plugin for that too.

There are caching plugins that are better for things like the cloning and migrating content between servers. The list goes on and on.

So I’d definitely recommend reviewing the individual guides for each category as well. That way you’ll know for sure that you’re installing a plugin that meets your specific needs.

More WordPress Plugin Guides