Introduction
Content Builders, Craft CMS + Tailwind, the 3.2 Beta, plugins and more
Welcome to another issue of Craft Link List. This issue is packed with great links about Craft thanks to the prolific Craft community.
We have two posts coming from Craft Meetups. Deploying Craft CMS with Deployer comes from the London Craft Meetup, and Creating Connected Content comes from Craft CMS Manchester. Do you have slides or videos from your Meetup? Have you written or found a Craft related link? If so, submit a link here.
This issue also has links on Tailwind+Craft, tips on building better content builders, smart Craft coding tips, and more.
Thanks to the sponsor of this issue, Solspace. They've just released Freeform 3 with an impressive list of updates. There's also an upgrade guide when you update from the previous version.
Let's hit the links.
-John Morton
Top Stories
Craft 3.1.30
The latest Craft 3.1.30 features improved query performance of up to 2x on some requests. Behind the scenes, the Craft team found a way to optimize a Yii2 function and submitted it to the Yii core. You can see details at the merge commit in Yii.
Also since the previous issue, 3.1.29 came out with a restore
command allowing you to easily restore a database file. Read the changelog for full details.
3.2 beta is released
Craft 3.2 has left it's alpha stage and has entered beta. As I write this, it's already at beta 2.
3.2 introduces a new testing framework for Craft & plugins powered by Codeception thanks to hard work from Giel Tettelaar and Bob Olde Hampsink.
Related to the new testing framework, there is now a testing channel in the Craft Discord community.
News
Generate new repositories with repository templates
A welcome addition to Github; you can now create reusable templates for your projects.
To get started, all you need to do is mark a repository as a template, and you’ll immediately be able to use it to generate new repositories with all of the template repository’s files and folders.
Featured Sponsor

Freeform 3 is now available!
Solspace is pleased to announce the release of Freeform 3! It's filled with a large number of exciting new features and improvements, as well as being available at a lower price now too! Please check out our announcement to learn more about Freeform 3, and what this means for existing Freeform 2 customers.
Tools, tips, and fundamentals
Using attr() function to render HTML attributes in Craft CMS ⭐️
Craft Snippets shows how to use the new Twig attr()
function to make your templates cleaner and easier to maintain.
How to do CSS/JS bundles/minifying in Craft 3?
Basic questions are valid questions. This one from Stack Exchange is a good example. How does Craft deal with CSS and JS?
Are you new to Craft? Join the Craft Discord group. There are fellow Craft developers to help you get started. It's a friendly group of people.
How to build a content builder in Craft CMS (video)
In just 7 minutes, Alex Carpenter demonstrates building a content builder using the Matrix fieldtype in Craft.
Craft CMS Content Builder: The Client Experience
Cosmic details how they "built a better blog using Craft’s Matrix Field."
Design Processes & Systems in Craft
This Dot All presentation by Courtney Bradford was mentioned recently in Discord regarding making content builders.
Setting up TailwindCSS in Craft 3, a gist by Andrea DeMers
Tailwind is a current hot topic. Andrea shares a gist on how to get it up and running via the link above.
Updates Craft/Vue/Tailwind templates
Chase Giunta released a major update to his craft-vue & craft-vue-tailwind templates.
Tip: save on your entries with some dynamic field data with Twig
Chase Giunta, needs just one more for a hat trick.
Perfecting your technique
What are Zero Downtime Deployments?
Ryan has written an article on CraftQuest on Zero-downtime deployments, aka atomic deployments. He touches on a variety of deployment services: Envoyer, Buddy, and DeployHQ.
Deploying Craft CMS with Deployer
Michael Walsh from Enovate hosted the recent London Craft CMS Meetup. His presentation on Deploying Craft CMS with Deployer starts on page 19 of the slides from that evening. Deployer is an open source solution, unlike the services mentioned in Ryan's post above.
Creating Connected Content Craft CMS
At a recent meeting of the Craft CMS Manchester, the focus was on content with guest Carrie Hane. The link above includes a transcript of her talk. Don't miss the Q&A, which lives at a separate link.
Extract critical CSS
Learn how to improve render times with the critical CSS technique. The article mentions several libraries: Critical, criticalCSS, and Penthouse.
Building dynamic, AJAX based pagination for Craft CMS
Piotr Pogorzelski, aka Craft Snippets, is back again. This time he shows how to create a dynamic, paginated list of entries that loads content using AJAX - without refreshing the page.
Getting around foreign key constraints when restoring a Craft CMS database
Are you getting foreign key constraint errors when trying to restore Craft CMS database backups? Here is one possible solution. The Twitter thread has some additional context on the topic.
WARNING: Do NOT even think of doing this in your production environment. Only development. You’ve been warned.
Craft Commerce Product Setup Walkthrough with Roger Glenn
We start by looking at the big picture and walk through the process and steps all the way down to the nitty-gritty details of how to plan and implement the site in a way that makes sense to the client as well as to shoppers.
Sponsor

Complete Guide for Upgrading from Freeform 2
With the exciting new release of Freeform 3, all existing Freeform 2 customers need to be aware of changes to their license(s) and what this means for when it comes time to upgrade to Freeform 3. This is primarily because of the new support for true Editions instead of 2 separate plugins, along with some other changes. Please check out the Updating from Freeform 2.x guide more info!
Plugged In
Syntax Highlighter
This plugin adds support to Craft for Prism, a popular syntax highlighter. It adds a Syntax Highlighter fieldtype which displays a block to add your code, select code type, add a caption and specify the lines to be highlighted.
Click and Collect
Click and Collect for Craft Commerce allows you to allow your customers to pick their orders up in store rather than their items being shipped to them.
Abandoned Carts for Craft Commerce
Myles Derham created Abandoned Carts, mentioned previously in issue 83, and provides some "behind the scenes" details in this post, specifically around the queue system that alerts your potential customers.
Social
Allow your visitors to social login and register to your Craft website using their favorite web service. (With great power comes great responsibility.)
Medium.com Meta Tag Parser for Feed Me
When Feed Me fetches a feed, it checks if it is a Medium.com feed. If it is from Medium, it visits all the articles in the feed for their metadata information and adds what it finds as additional nodes on the feed being imported.
Stretch
Hide the control panel’s right pane details on entry edit sections to free up more screen real estate.
The Craft Advantage
Craft CMS or Wordpress: which is better for our website?
User "brandonkelly212" on Reddit chimes in on Craft CMS.
Yii, Twig, PHP & More
Twig 2.11 brings arrow functions
When an arrow function is passed, this works identically to Twig’s core filter
filter.
This code example comes from the updated Craft docs.
{% set array = ['foo', 'bar', 'baz'] %}
{% set filteredArray = array|filter(v => v[0] == 'b') %}
{# Result: ['bar', 'baz'] #}
TwigFiddle / Craft CMS tip ⭐️
Andrew comes through with a great tip. (Jinx.)
TwigFiddle, a small development environment to develop, run, store and access Twig code online. It's similar to the popular jsfiddle for JavaScript testing and sharing.
Andrew shared a Craft code snippet to easily export a JSON object from your Craft database which you can paste it into TwigFiddle to easily test and share your Twig code.
It’s not Craft, but it’s interesting.
Speed at Scale: Web Performance Tips and Tricks from the Trenches
15 tips and tricks that real, production sites use to get great scores on Lighthouse and improve core business metrics, from Google I/O conference.
SCAR: 1-click static website deployment on AWS
SCAR is a deployment stack that makes it easy for you to deploy a static website with a custom domain, SSL, and a CDN. All you need is an AWS account to get started in three simple steps.
AWS console breach leads to demise of service with “proven” backup plan
Code Spaces closes shop after attackers destroy Amazon-hosted customer data.
What are the security risks of setting Access-Control-Allow-Origin?
An exchange about Access-Control-Allow-Origin: *
.
Vue.js And SEO: How To Optimize Reactive Websites For Search Engines And Bots
Basically... Google does index dynamically generated content, even if comes from an external web service, but it is not guaranteed that content will be indexed if it “arrives too late”.
Laravel Mix + Vuejs Hot Module Replacement (HMR)
Getting a working Laravel Mix with hot module reloading has been a hot topic in the Craft Discord recently. This post has been referenced a few times.
Digging Into The Display Property: Grids All The Way Down ⭐️
Rachel Andrew takes a look at what happens when you use "grid" as a value of display, with added information about how subgrid changes that behavior. Rachel's presentation on the topic is also available on video. It's good.
URL to PDF Microservice
Web page PDF/PNG rendering done right. Self-hosted service for rendering receipts, invoices, or any content.

Adam Wathan on optional HTML tags
The screenshot above is missing some common tags. No html
tag, no head
tag, no body
tag. What that what? The what comes from the Google HTML/CSS Style Guide.
Utility: Convert SVG path to all-relative or all-absolute commands
If you hand-edit SVG’s, this tool converts paths produced by an authoring tool like Illustrator, which mix absolute and relative paths, to all-absolute and all-relative versions.