WordPress to Stick with Online-Only Meetups and WordCamps for Remainder of 2020

photo credit: Burst

The WordPress Community Team has officially updated its guidelines for WordCamps to be online-only events for the remainder of 2020. The six WordCamps on the schedule through the end of the year were already planning on using an online format but the guidelines also include local meetups.

“The team acknowledges that this is not easy for the community that has been heavily based on in-person events and encounters,” Timi Wahalahti said in the announcement. “Unfortunately, the global coronavirus situation does not seem to be slowing down to a level that would allow us organizing in-person events safely at this time.”

The guidelines will be re-evaluated in the first quarter of 2021, but some organizers are already planning for online events next year. WordCamp Europe 2021 is the first WordPress event to go virtual for the coming year, with the in-person event resuming in 2022.

Moving what was once a vibrant in-person gathering to a two-dimensional online format is a challenging endeavor, especially when the world is suddenly awash in online events competing for attention. Making virtual events stand out from the crowd is a new marketing challenge.

There is something about the magic of WordCamps that gives momentum to ideas and collaboration. While you cannot replicate the chance meetings in the hallway and the priceless conversations over long dinners, online events have the benefit of being more geographically inclusive. The constraints of the pandemic are also challenging our assumptions about how online gatherings are supposed to work.

WordPress Community Team to Explore New Event Formats, Redefine Relationships with Sponsors, Temporarily Cancel Swag Spending

The necessity for virtual events has inspired discussion around some new event formats, including a new proposal that decouples online events from geography. WordPress Community manager Hugh Lashbrooke described how events might explore combining synchronous discussions with previously recorded workshops:

What if we blended those two elements into a program that provides the flexibility of online content, with the value and sense of community that comes with learning together?

We could publish workshops in a central location (on wordpress.org, for better visibility and reach) and then invite learners to join live discussion groups that cater to different timezones. This “flipped classroom” model allows people to learn at their convenience, and then come together for additional development. 

Lashbrooke suggested the workshops could be designed by people who would otherwise be speaking WordCamps and could possibly source content from WordPress.tv or talks that have been given at online meetups.

“There is also potential for longer courses, composed of multiple workshops, and a group that meets repeatedly over time,” Lashbrooke said.

So far the suggestions in the comments include introductory workshops for WordPress. These would be timely for newcomers who have recently lost work and are looking to improve their online resumes or portfolios, or start up a new business. Beginner workshops have strong outreach potential if promoted outside of the WordPress community.

During the first half of the year, the Community Team began transitioning to facilitating the needs of online events and have continued to work tirelessly to find ways for people to connect. In a recent update, WordPress community organizer Andrea Middleton explained that changes are coming for future online events, which may adopt another name instead of using “WordCamp.”

Due to the financial position of WordPress Community Support PBC (WPCS), the community team is ending programmatic support for online AV vendor expenses. WordCamps that are not yet on the schedule will be encouraged to get sponsorships if they require the use of a professional AV vendor.

“Likewise, we have paused plans to spend money on sending swag, T-shirts, or other typical WordCamp collateral,” Middleton said. “It’s important to change our frame of reference for what’s necessary to make online events, away from the WordCamp model. Just because we did things a certain way for WordCamps, doesn’t mean it’s a high priority for online events.”

Sponsorships are also being re-examined, as online events haven’t quite been able to deliver the same value to sponsors that traditional events did.

“The value proposition of online sponsor booths is shaky, and we’ve always prided ourselves in partnering with our sponsors,” Middleton said. “Looking ahead, we must examine how much funding we need to create events that meet the goals of the team, and let that determine how to best coordinate with our community sponsors to deliver value and further our mission.”

The potential for in-person events for the coming year is still uncertain at this point, in the absence of a vaccine ready for commercial distribution. WordPress’ global sponsorship program has been temporarily suspended and the Community Team plans to work with global sponsors later this year to make a plan for 2021.

The GitHub Profile Trick

Monica Powell shared a really cool trick the other day:

The profile README is created by creating a new repository that’s the same name as your username. For example, my GitHub username is m0nica so I created a new repository with the name m0nica.

Now the README.md from that repo is essentially the homepage of her profile. Above the usual list of popular repos, you can see the rendered version of that README on her profile:

Lemme do a lame version for myself real quick just to try it out…

OK, I start like this:

Screenshot of the default profile page for Chris Coyier.

Then I’ll to go repo.new (hey, CodePen has one of those cool domains too!) and make a repo on my personal account that is exactly the same as my username:

Screenshot showing the create new repo screen on GitHub. The repository name is set to chriscoyier.

I chose to initialize the repo with a README file and nothing else. So immediately I get:

Screenshot of the code section of the chriscoyier repo, which only contains a read me file that says hi there.

I can edit this directly on the web, and if I do, I see more helpful stuff:

Screenshot of editing the read me file directly in GitHub.

Fortunately, my personal website has a Markdown bio ready to use!

Screenshot of Chris Coyier's personal website homepage. It has a dark background and a large picture of Chris wearing a red CodePen hat next to some text welcoming people to the site.

I’ll copy and paste that over.

Screenshot showing the Markdown code from the personal website in the GitHub editor.

After committing that change, my own profile shows it!

Screenshot of the updated GitHub profile page, showing the welcome text from the personal website homepage.

Maybe I’ll get around to doing something more fun with it someday. Monica’s post has a bunch of fun examples in it. My favorite is Kaya Thomas’ profile, which I saw Jina Anne share:

You can’t use CSS in there (because GitHub strips it out), so I love the ingenuity of using old school <img align="right"> to pull off the floating image look.


The post The GitHub Profile Trick appeared first on CSS-Tricks.

You can support CSS-Tricks by being an MVP Supporter.

Expert System Launches Natural Language API for Semantic Analysis

Expert System, a company that provides semantic intelligence products, has released a new natural language API that is intended to support data scientists, computational linguists, and knowledge engineers. The new expert.ai NL API is cloud-based and provides developers with natural language understanding/processing capabilities.

In the announcement of the product, Expert System noted that they created the new API by:

CSS Vocabulary

This is a neat interactive page by Ville V. Vanninen to reference the names of things in the CSS syntax. I feel like the easy ones to remember are “selector,” “property,” and “value,” but even as a person who writes about CSS a lot, I forget some of the others. Like the property and value together (with the colon) is called a declaration. And all the declarations together, including the curly brackets (but not the selector)? That’s a declaration block, which is slightly more specific than a block, because a block might be inside an at-rule and thus contain other complete rule-sets.

Direct Link to ArticlePermalink


The post CSS Vocabulary appeared first on CSS-Tricks.

You can support CSS-Tricks by being an MVP Supporter.

Are Plugin Authors to Blame for the Poor Admin Notices Experience?

Last Thursday, Vova Feldman published an article asking that we stop blaming plugin authors for the plethora of admin notices that users are bombarded with each day. The real culprit? The lack of a notifications mechanism in WordPress core.

Feldman’s post was prompted by a tweet in which Scott Bolinger called out plugin authors for letting admin notices get out of control:

Feldman argues that laying the blame on plugin authors is the wrong way to look at the issue. While I agree that the underlying problem lies with WordPress, plugin authors have played their part in creating an atmosphere where they have become the scapegoat for everything wrong with the system.

I have developed plugins since a fateful day in April 2007 in which I released a plugin that simply listed the current page’s subpages. I have worked on 100s of plugins for clients and public release since then. In that time, I have maybe added a custom admin notice two times and only when the plugin had a major change, such as a database update. I reserved such notices for the OMGBBQ-very-important-you-need-to-read-this type of stuff. I considered it my duty to create an experience in which the user did not have to dismiss a notice every time one of my plugins received an update.

This was not because I was cognizant of the growing issue of dozens of notices on some sites or how often users were being overwhelmed with them. For many years, I worked within a bubble where I simply focused on creating what I considered an ideal experience for my users. I always thought the admin notices system created an abysmal experience. It did not make sense to use it more than necessary.

On the other hand, there were likely a few times over the years where I should have added some sort of notices for changes. Instead, I avoided doing so altogether because WordPress lacked a notifications system. I missed some good opportunities for communication.

To a large extent, the issue stems from this lack of a proper notification system. However, plugin authors have perpetuated this broken system by continuing to use it when unnecessary. They have used it as a billboard to place their holiday ads. They have used it to upsell commercial versions of their products and services while prompting users for a five-star rating. There is plenty of blame to go around.

Instead of placing blame, we should start asking what tools would solve problems for developers.

The Need for a Better System

Technically, WordPress simply has a hook and a set of common classes that developers can use in their HTML to provide some different colors for notices. There is no API, and without an API, it is impossible for even third-party plugin developers to even try their hands at creating various solutions.

The closest thing WordPress has to an API is a little-known project from the Themes Team that provides a standardized method for theme authors to add notices. However, the project covers only one aspect of admin notices, which is to create a consistent UI.

The admin notice issue cannot be properly addressed without identifying the problems that plugin authors have tried to solve within the system, which at least includes the following:

  • User-oriented notifications, generally appearing after a user action.
  • Advertising commercial products and services.
  • Calls for plugin feedback or star ratings.

One of the primary issues with the current notification system is that it was created for the first item in that list. The other two items are not necessarily bad things. They are just poor usages of the system in place. However, there is no other standard method to handle those scenarios.

Advertising is something we all must deal with in some form or fashion. I am unsure if there could or even should be a standard API for advertising. An outright ban of ads in the admin notice area could create a beast of its own, forcing plugin authors to come up with more obtrusive forms of advertising in other areas of the admin. I want to support advertising but not when that advertising wiggles its way to the top of every admin screen.

WordPress provides no easy way for end-users to rate or review plugins from their admin interfaces. Having an easy way to provide direct feedback would be immensely helpful for both users and developers. While I am certain many people would argue against such integration with the WordPress.org site (there are arguments against any external integration out of the box), ratings and reviews would require an explicit opt-in from end-users because they would need an account on WordPress.org.

Advertising and plugin feedback should not be a part of a discussion on admin notices. However, reality dictates that they are integral to the conversation.

The first order of business must be to create a new notification system from the ground up. It should provide a standard API for plugin authors while handing over full management capabilities to the site owners. Users should be able to disable notices altogether or even enable/disable notices on a per-plugin basis. Notice that a particular plugin author provides useless notices? Well, just disable notices from that plugin. The author lost their privileges.

From that point, we can let the progress drive the discussion on what to do about advertising and calls for feedback. A new system may shift them to a new screen — out of sight out of mind — but not make those problems disappear.

More than anything, it is time for a champion. The project does not get done without someone who will pave the path forward and earn the green light for a new notifications system in WordPress.

12+ Best WooCommerce Checkout Plugins

10 Best WooCommerce Checkout PluginsWooCommerce is undeniably one of the best e-commerce platforms for WordPress websites. The plugin offers you a lot of features that help you to convert any WordPress install into a fully-fledged e-commerce store. On top of that, WooCommerce comes with plenty of official and third-party add-ons to supercharge your online store in unimaginable ways. In […]

The post 12+ Best WooCommerce Checkout Plugins appeared first on WPExplorer.

Cloudflare Introduces Cloudflare Workers Unbound

Cloudflare has announced Cloudflare Workers Unbound. Workers Unbound is a serverless platform for developers with a specific focus on flexibility, performance, security, ease of use, and pricing. With Workers Unbound, users can run complicated workloads across the Cloudflare network and pay only for what's used.

Extending Python’s Simple HTTP Server

Over the past few days, I started putting together some notes for an article about an upcoming WebAssembly feature in the Firefox browser. The trick with the feature is that, to enable it, the webserver needs to return certain headers.

Because the article I’m going to write will be a continuation of a topic from my book, “WebAssembly in Action”, I thought it would be best to continue to use Python as the local webserver.

As it turns out, running Python’s web server from the command line doesn’t give an option to include response headers. Fortunately, it’s not hard to extend the webserver which you’ll learn how to do in this article.

As a bonus, there’s another advantage of extending Python’s local web server. WebAssembly files (.wasm) need to be served with the ‘application/wasm’ Media Type but Python didn’t have that value specified in versions older than 3.7.5. By extending the web server, you can include the Media Type without needing to modify any of Python’s files which simplifies getting up and running with WebAssembly.

The Python code that you’ll need to write is slightly different between the 2.x and 3.x versions of Python so the first thing you need to do is determine which version you have on your machine.

Python’s Version

To check which version of Python you have installed, open a console window, and run the following command: python --version

You should see the version displayed similar to the following image:

How to Attach a Document to BPMN Process In jBPM 7

Multiple times we have to attach docuemnt to BPMN process which is part of process execution or if its required to perform HumanTask operation. Here are the steps for attaching Document to BPMN process in jBPM 7. 

  • In the kie-workbench, in project settings goto  deployment-descriptor file(kie-deployment-descriptor.xml)  and define the marshalling strategy for document
    • XML
       




      xxxxxxxxxx
      1


      1
      <marshalling-strategies>
      2
        <marshalling-strategy>
      3
        <resolver>mvel</resolver>
      4
        <identifier>new  org.jbpm.document.marshalling.DocumentCollectionImplMarshallingStrategy(new org.jbpm.document.marshalling.DocumentMarshallingStrategy())</identifier>
      5
         <parameters/>
      6
         </marshalling-strategy>
      7
      </marshalling-strategies>


  • Define process variable of type org.jbpm.document.DocumentCollection.

'DocumentCollectionImplMarshallingStrategy' and process variable of type 'org.jbpm.document.DocumentCollection'  support use of multiple documents in BPMN process, i.e at a time you can upload multiple documents while starting process/case execution or while performing task operation. For single document, we can use process variable of type 'org.jbpm.document.Document' with marshalling strategy 'org.jbpm.document.marshalling.DocumentMarshallingStrategy'.   

Optimizing a Simple Ray-Tracer Written in Go Part 2

This is the second part of my mini-series on how I used the go profiling and built-in benchmarking tools to optimize a naive ray-tracer written in Go. For part 1, click here.

  1. Sorting efficiently
  2. Slices vs Arrays
  3. Pointers or values?
  4. AVX2 using c2goasm
  5. A final word on threading
  6. Conclusion
(Note: Most of this blog post was written based on using Go 1.13)

This part takes off directly after part 1.

Avoid Groupthink and Herd Mentality At Work

When you are part of a group, do you speak up and voice your opinion or avoid criticism and choose a path of fewer conflicts. When popularity takes priority over individual responsibility, people develop a tendency to conform to ideas and beliefs that lead to conservative thinking, ignore potential signs of failure, and make decisions with incomplete and biased information leading to groupthink.

When such behavior becomes part of an organization's culture, it gives rise to collective blindness to unethical ways, regressive thinking that ignores the future demands of your business and a propensity to ignore truth especially if it requires taking a hard stance.

Without the environment that encourages fresh perspectives, constructive conflict with a desire to learn new information, and a clear process for making decisions, it's easy to succumb to groupthink where herd mentality drives decisions instead of utilizing the collective power of group intelligence.

Distributed SQL: An Evolution of the Database

As organizations transition to the cloud, they eventually find that the legacy relational databases that are behind some of their most critical applications simply do not take advantage of the promise of the cloud and are difficult to scale. It is the database that is limiting the speed and effectiveness of this transition. To address this, organizations want the reliability of a tested relational data store, such as Oracle, SQL Server, Postgres, and MySQL, but with the benefits of scale and global coverage that comes with the cloud

Some have turned to NoSQL stores to try to meet these requirements. These alternatives can typically meet the scale requirements but then fall short as a transactional database because they were not designed from the ground up to provide true consistency. Recently, some of the NoSQL solutions have offered “ACID transactions” but they’re full of caveats and fail at delivering isolation levels necessary for mission-critical workloads like a financial ledger, inventory control, and identity management.

How We Managed to Transition to Remote Work Seamlessly

In this article, we wanted to tell you about how we quickly and successfully adapted our workflows, communication, and other routines to the COVID-19 self-isolation measures. The pandemic has truly reshaped remote working. And even though there were numerous articles on the topic over the past few months, now that the work is finally done, we have the time to share with you our own experience.

If you’re used to office coffee, enjoying it while having a friendly chit-chat with your colleagues at work, then being transitioned to remote work from home out of a sudden and without any preliminary preparation can be a truly stressful undertaking. That’s why the first thing we did was making sure our employees are well-informed of the changes to come. 

Using Trello as a Super Simple CMS

Sometimes our sites need a little sprinkling of content management. Not always. Not a lot. But a bit. The CMS market is thriving with affordable, approachable products, so we’re not short of options. Thankfully, it is a very different world to the one that used to force companies to splash out a ga-jillionty-one dollars (not an exact cost: I rounded to the nearest bazillion) for an all-singing, all-dancing, all-integrating, all-personalizing, big-enterprise-certified™ CMS platform.

Sometimes, though, it’s nice to use a really simple tool that anyone updating content on the site is already familiar with, rather than getting to grips with a new CMS. 

I like Trello a lot for managing ideas and tasks. And it has an API. Why not use it as a content source for a web site? I mean, hey, if we can do it with Google Sheets, then what’s to stop us from trying other things?

Hello, Trello

Here’s a simple site to explore. It gets its content from this Trello board and that content is displayed in sections. Each section is populated by the title and description fields of a card in our Trello board.

Two webpages side-by-side. The left is a Trello board with a bright pink background. The right is a screenshot of the build website using Trello data.

Trello uses Markdown, which comes in handy here. Anyone editing content in a Trello card is able to apply basic text formatting and have the same Markdown flow into the site and transformed into HTML by a build process.

Building blocks

I’m a big fan of this model of running a build which pulls content from various feeds and sources, and then mashes them together with a template to generate the HTML of a website. It decouples the presentation from the management of the content (which is where the term “decoupled” comes from in popular modern CMS products). And it means that we are free to craft the website just the way we want with all of the wizzy tricks and techniques we’ve learned here on CSS-Tricks.

Diagram showing the flow of data, going from Trello as JSON to Build where the data and the template are coupled, then finally, to the front end.

Since we pull in the content at build time, we don’t need to worry about the usage quotas or the performance of our data sources if our sites get popular and bring in loads of traffic. And why wouldn’t they? Look how pretty we made them!

I wanna play!

Fine. You can grab a copy of this site’s code and tinker around to your heart’s content. This version includes information on how to create your own Trello board and use it as the source for content for the build.

If you want to walk through how this works first rather than diving right into it yourself, read on.

Discovering the API

Trello has a well-documented API and set of developer resources. There is also a handy Node module to simplify the task of authenticating and interacting with the API. But you can also explore the API by tinkering with the URLs when you are exploring your Trello boards. 

For example, the URL for the Trello board above is:

https://trello.com/b/Zzc0USwZ/hellotrello

If we add .json to that URL, Trello shows us the content represented as JSON. Take a look.

We can use this technique to inspect the underlying data throughout Trello. Here is the URL for one card in particular:

https://trello.com/c/YVxlSEzy/4-sections-from-cards

If we use this little trick and add .json to the URL we’ll see the data which describes that card

We’ll find interesting things — unique IDs for the board, the list, and the card. We can see the card’s content, and lots of metadata.

I love doing this! Look at all the lovely data! How shall we use it?

Deciding how to use a board

For this example, let’s assume that we have a site with just one page of manageable content. A list or column in our board would be ideal for controlling the sections on that page. An editor could give them titles and content, and drag them around into the order they want.

We’ll need the ID of the list so that we can access it via the API. Luckily, we’ve already seen how to discover that — take a look at the data for any of the cards in the list in question. Each one has an idBoard property. Bingo!

Generating the site

The plan is to fetch the data from Trello and apply it to some templates to populate our site. Most static site generators (SSG) would do the job. That’s what they are good at. I’ll use Eleventy because I think it has the simplest concepts to understand. Plus, it is very efficient at getting data and generating clean HTML with Nunjucks (a popular templating language).

We’ll want to be able to use an expression lin our template that outputs a section element for each item found in a JavaScript object called trello:

<!-- index.njk -->
{% for card in trello %}
<section>
  <h2>{{ card.name }}</h2>
  <div>
    {% markdown %}
      {{- card.desc | safe }}
    {% endmarkdown %}
  </div>
</section>
{% endfor %}

Fetching the data for the build

A popular technique with Jamstack sites like this is to run a build with Gulp, Grunt or [insert latest new build script hotness here] which goes and fetches data from various APIs and feeds, stashes the data in a suitable format for the SSG, and then runs the SSG to generate the HTML. This works rather nicely.

Eleventy simplifies things here by supporting the execution of JavaScript in its data files. In other words, rather than only leveraging data stored as JSON or YAML, it can use whatever gets returned by JavaScript, opening the door to making requests directly to APIs when the Eleventy build runs. We won’t need a separate build step to go off to fetch data first. Eleventy will do it for us.

Let’s use that to get the data for our trello object in the templates.

We could use the Trello Node client to query the API, but as it turns out all the data we want is right there in the JSON for the board. Everything! In one request! We can just fetch it in one go!

// trello.js
module.exports = () => {
  const TRELLO_JSON_URL='https://trello.com/b/Zzc0USwZ/hellotrello.json';

  // Use node-fetch to get the JSON data about this board
  const fetch = require('node-fetch');
  return fetch(TRELLO_JSON_URL)
    .then(res => res.json())
    .then(json => console.log(json));
};

However, we don’t want to show all the data from that board. It includes cards on other lists, cards which have been closed and deleted, and so on. But we can filter the cards to only include the ones of interest thanks to JavaScript’s filter method.

// trello.js
module.exports = () => {
   const TRELLO_JSON_URL='https://trello.com/b/Zzc0USwZ/hellotrello.json'
   const TRELLO_LIST_ID='5e98325d6d6bd120f2b7395f',
 
   // Use node-fetch to get the JSON data about this board
   const fetch = require('node-fetch');
   return fetch(TRELLO_JSON_URL)
   .then(res => res.json())
   .then(json => {
 
     // Just focus on the cards which are in the list we want
     // and do not have a closed status
     let contentCards = json.cards.filter(card => {
       return card.idList == TRELLO_LIST_ID && !card.closed;
     });
 
     return contentCards;
 });
};

That’ll do it! With this saved in a file called trello.js in Eleventy’s data directory, we’ll have this data ready to use in our templates in an object called trello

Done-zo! 🎉

But we can do better. Let’s also handle attached images, and also add a way to have content staged for review before it goes live.

Image attachments

It’s possible to attach files to cards in Trello. When you attach an image, it shows up right there in the card with the source URL of the asset described in the data. We can make use of that!

If a card has an image attachment, we’ll want to get its source URL, and add it as an image tag to what our template inserts into the page at build time. That means adding the Markdown for an image to the Markdown in the description property of our JSON (card.desc). 

Then we can let Eleventy turn that into HTML for us along with everything else. This code looks for cards in our JSON and massages the data into the shape that we’ll need.

// trello.js

// If a card has an attachment, add it as an image 
// in the description markdown
contentCards.forEach(card => {
  if(card.attachments.length) {
    card.desc = card.desc + `\n![${card.name}](${card.attachments[0].url} '${card.name}')`;
  }
});

Now we can move images around in our content too. Handy!

Staging content

Let’s add one more flourish to how we can use Trello to manage our site’s content.

There are a few ways that we might want to preview content before launching it to the world. Our Trello board could have one list for staging and one list for production content. But that would make it hard to visualize how new content lives alongside that which is already published.

A better idea would be to use Trello’s labels to signify which cards are published live, and which should only be included on a staged version of the site. This will give us a nice workflow. We can add more content by adding a new card in the right place. Label it with “stage” and filter it out from the cards appearing on our production branch. 

Screenshot of the Trello board with a bright pink background. It has cards in a column called Published.
Label hints in Trello showing what content is staged and what is live

A little more filtering of our JavaScript object is called for:

// trello.js

// only include cards labelled with "live" or with
// the name of the branch we are in
contentCards = contentCards.filter(card => {
  return card.labels.filter(label => (
    label.name.toLowerCase() == 'live' ||
    label.name.toLowerCase() == BRANCH
   )).length;
 });

We want the content labelled ‘live’ to show up on every version of the build, staging or not. In addition we’ll look to include cards which have a label matching a variable called “BRANCH”. 

How come? What’s that?

This is where we get crafty! I’ve chosen to host this site on Netlify (disclaimer: I work there). This means that I can run the build from Netlify’s CI/CD environment. This redeploys the site whenever I push changes to its git repository, and also gives access to a couple of other things which are really handy for this site. 

One is Branch deploys. If you want a new environment for a site, you can create one by making a new branch in the Git repository. The build will run in that context, and your site will be published on a subdomain which includes the branch name. Like this.

Take a look and you’ll see all the cards from our list, including the one which has the orange “stage” label. We included it in this build because its label matched the branch name for the build context. BRANCH was an environment variable which contained whichever branch the build ran in.

label.name.toLowerCase() == BRANCH

In theory, we could make as many branches and labels as we like, and have all sorts of staging and testing environments. Ready to promote something from “stage” to “live”? Swap the labels and you’re good to go!

But how does it update though?

The second perk we get from running the site build in a CI/CD such as Netlify’s is that we can trigger a build to run whenever we like. Netlify lets us create build hooks. These are webhooks which initiate a new deployment when you send an HTTP POST to them.

If Trello supports webhooks too, then we could stitch these services together and refresh the site automatically whenever the Trello board changes. And guess what… they do! Hoorah!

To create a Netlify build hook, you’ll need to visit your site’s admin panel. (You can bootstrap this demo site into a new Netlify site in a couple of clicks if you want to try it out.)

Screenshot of the netlify build hooks screen with options to add a build hook and generate a public deploy key.
Creating a Netlify Build hook

Now, armed with a new build hook URL, we’ll need to register a new Trello webhook which calls it when content changes. The method for creating webhooks in Trello is via Trello’s API

The repo for this site includes a little utility to call the Trello API and create the webhook for you. But you’ll need to have a Trello developer token and key. Thankfully, it is easy to create those for free by visiting the Trello Developer portal and following the instructions under “Authorizing a client.”

Got ‘em? Great! If you save them in a .env file in your project, you can run this command to set up the Trello webhook:

npm run hook --url https://api.netlify.com/build_hooks/XXXXX

And with that, we’ve created a nice little flow for managing content on a simple site. We can craft our frontend just the way we want it, and have updates to the content happen on a Trello board which automatically updates the site whenever changes are made.

Could I really use this though?

This is a simplistic example. That’s by design. I really wanted to demonstrate the concepts of decoupling, and of using the API of an external service to drive the content for a site.

This won’t replace a full-featured decoupled CMS for more involved projects. But the principles are totally applicable to more complex sites.

This model, however, could be a great match for the types of websites we see for businesses such as independent shops, bars and restaurants. Imagine a Trello board that has one list for managing a restaurant’s home page, and one for managing their menu items. Very approachable for the restaurant staff to manage, and far nicer than uploading a new PDF of the menu whenever it changes.

Ready to explore an example and experiment with your own board and content? Try this:


The post Using Trello as a Super Simple CMS appeared first on CSS-Tricks.

You can support CSS-Tricks by being an MVP Supporter.

What Do Web Design Clients Need From Designers?

Building a great website requires a team effort between web designers and their clients. That holds true whether you’re a solo freelancer or part of a larger agency. Web design clients who buy-in and provide us with guidance are crucial ingredients for success.

So often, those of us in the industry talk about what we need from our clients – and that makes sense. But, in order to really serve them, we must fulfill their needs as well. However, it seems like that subject tends to fall under the radar.

With that in mind, let’s explore some things that our web design clients need from us. Some of it may be common sense, while others are a little less obvious.

Freelance Designer Toolbox: Unlimited Downloads for $16.50/Month
Templates

Templates
74,000+ Templates

Graphic Assets

Graphic Assets
33,000+ Graphics

Icon Sets

Icon Sets
11,000+ Icon Sets

DOWNLOAD NOW
Envato Elements


An Open Mind

Being open to new ideas is a two-way street. Sometimes, clients may approach their website with ideas that are at odds with what we may think.

Just like everyone else, we web designers are susceptible to being set in our ways. Our experiences can lead us to what we believe is the perfect formula for a website. It may be certain design characteristics, or it could be development tools and techniques.

When a client suggests something outside of our comfort zone, it’s natural to become, well, uncomfortable. However, this doesn’t necessarily mean their ideas are unworkable. It may be a case of getting past those initial thoughts and gaining a better understanding of what’s being said.

Of course, not every idea a client has is a winner. But it’s still important to come into each project with an open mind. You could be missing out on something great.

Beyond that, the fact that you truly listened can help to create a solid client-designer relationship as well.

A sign that reads "Think Outside the Box".

Honest Advice

Listening is only part of the relationship-building process. Honesty is also a key factor.

That applies to client ideas and requests, but it also goes deeper. For instance, providing guidance as to the pros and cons of a feature or functionality. The same goes for pricing and the value received from a particular product or service.

Honesty builds trust and empowers our web design clients to make good decisions. Without that honest advice, project outcomes will likely suffer. Details can be overlooked and money might be spent in the wrong places.

Sometimes, the easiest thing to do is to simply go along with whatever a client says. It’s the path of least resistance, and the thinking goes that it’s also a way to finish off a project faster.

In reality, honesty pays off all the way around. When more informed decisions are made, projects are less likely to go awry. Theoretically, it also leads to faster and better results.

Two people having a conversation.

A Proactive Approach

Our clients are often experts in their own field. Whether they run a business or non-profit, they’re likely immersed in their jobs. That means they won’t have as much time to devote to their website.

Because of this, important items could slip through the cracks. WordPress core, themes and plugins may become outdated. Site errors may be wreaking havoc on performance and usability. In short, a website can fall into any number of bad situations without proper vigilance.

That’s where we can be of service. By staying on top of what’s happening in terms of software, security and industry trends, we can keep our clients’ sites running smoothly.

Be proactive by staying in touch with your clients. If you see an issue, or even the potential for an issue, reach out and let them know. They’ll appreciate the effort and any headaches you’ve saved them. In addition, this helps their organization maintain a good reputation with their audience as well.

A person using a phone.

A Helping Hand

Not everyone with a website is tech-savvy. For these folks, the learning curve for tasks like adding content can be relatively steep. But a helping hand from their web designer can make a big difference.

Using your knowledge to educate clients empowers them to take advantage of the amazing website you’ve built. That could mean anything from fresher content to fewer support requests coming your way.

Still, support requests go along with the territory – even if we hope they’ll be minimal. When they do come in, offering fast and friendly service is vital. It lets your clients know that you have their back and can be depended upon.

Overall, it’s about being there when clients need us (within reason, of course).

Two people looking at a computer screen.

Keeping Client Needs in Mind

Web design projects can be full of challenges. Sometimes, that can lead us to simply focus on the task at hand without much thought of those we are working for. It’s an easy trap to fall into.

But client needs do matter – for a lot of reasons. The most important being that it forms the basis of a partnership. We need each other in order to reach a successful outcome.

Even after the site launches, being there to provide guidance ensures a better relationship – not to mention a well-maintained website. As a bonus, it could lead to repeat business and referrals.

While web design is a highly-technical field, there’s a human element that can easily be missed. But if you can master this aspect of the job, both you and your clients will be better for it.

5 Crafts to Create in the Sunshine

There’s something about doing arts and crafts that transports us to the simpler times of our childhood. What’s even better is when we can do art projects outside while basking in the sun...

Visit The Site For More...