Reactive Kafka With Streaming in Spring Boot

The AngularAndSpring project uses Kafka for the distributed sign-in of new users and the distributed token revocation for logged-out users.

System Architecture

The AngularAndSpring project needs to be able to be horizontally scaled each with its own database. To enable that, a sign-in needs to be propagated to all instances. Kafka serves as a central event streaming platform to send the sign-in events. Kafka is horizontally scalable to high event loads and can be set up to be highly available.

What Developers Need to Know About Table Partition Pruning

Table partitioning is a very handy feature supported by several databases, including PostgreSQL, MySQL, Oracle, and YugabyteDB. This feature is useful when you need to split a large table into smaller independent pieces called partitioned tables or partitions. If you’re not familiar with this feature yet, consider the following simple example.

Let’s pretend you develop an application that automates operations for a large pizza chain. Your database schema has a PizzaOrders table that tracks the order’s progress.

Wei: A Free Minimalist WordPress Theme from Rich Tabor

Rich Tabor’s new Wei theme is one of the most well-designed contributions to hit WordPress.org’s free themes directory this month. Wei is a minimalist block theme that keeps things simple while offering users a range of artfully selected accent color combinations. It also includes support for full-site editing and Global Styles for a wider range of site customizations.

Wei joins WordPress.org’s collection of 86 full-site editing themes. The number of FSE themes is growing but it is a far sight behind the goal of 500 for 2022, which WordPress Executive Director Josepha Haden Chomphosy set for the community. While the Themes Team discusses ideas for making block theming easier for theme authors, a few trailblazers like Tabor are pushing forward with contagious enthusiasm and creative works that show what is possible in the new era of block themes.

Wei is a follow-up to Tabor’s popular Wabi theme. The name was selected to highlight its simplicity as a supporting tool in the user’s publishing workflow.

“It’s derived from ‘Wu wei,’ which has a lot of meanings, but I lean towards the ‘effortless/actionless’ bit,” he said. “I wanted to build a theme that lets you effortlessly publish — and looks really creative/inspiring as well.”

Tabor said Wei took him less time to make than any traditional legacy theme he created in the past.

“I started, and nearly finished, Wei on the flight back from WordCamp Europe,” he said. “A couple years ago, this would have taken weeks — at least.”

Tabor’s expert curation of dynamic accent colors is the highlight of this theme. Since most people are not designers, Wei offers four different overall styles that users can browse inside the Site Editor and enable with one click.

Depending on what theme style you select in the Site Editor, the post editor will display a different set of accent colors. These options are unique to each style and all of them are aesthetically pleasing combinations that can be set based on the mood of each individual post.

Tabor’s Wei theme announcement post includes an image with all the style variations included. He selected colors that are AAA contrasting for all available styles.

One of the most magical things Wei does is seamlessly blend the background with the featured image on the single post template. The template includes a Cover block that fetches the post’s featured image and applies the duotone from the color scheme assigned to the post. This just works in the background and users don’t have to do anything to enable it.

Wei does not include any custom patterns, but everything in the theme is a block and can be easily manipulated. Users can change the headers, footers, change the layout on single post templates, add blocks to the homepage, edit template parts, and anything else supported by the latest full-site editing features.

Check out the demo to see the theme in action with different color schemes assigned to each post. Wei is available for free on WordPress.org and requires WordPress version 6.0 or later.

How to Easily Accept Credit Card Payments on Your WordPress Site

Do you want to easily accept credit card payments on your WordPress site?

By default, WordPress does not come with credit card payment options, but there are plenty of plugins and tools that can help solve that.

In this article, we will share 2 easy ways to accept credit card payments on your WordPress site.

How to easily accept credit card payments on your WordPress site

Why Accept Credit Card Payments in WordPress?

Credit and debit cards are the most common form of online payment in the world.

If you’re selling products or services on your WordPress website, it’s important to accept credit card payments.

Accepting credit card payments will improve your conversion rate and reduce cart abandonment.

Note: You will need to enable HTTPS/SSL on your website so that you can securely accept credit card payments. For more details, you can follow our guide on how to get a free SSL certificate for your WordPress site.

Often users don’t want to set up a full-fledged online store with a shopping cart to accept credit card payments. This makes a lot of sense, especially if you’re only selling a single product or accepting payments for consulting or services.

In this case, all you need is a simple online order form with a credit card payment option.

That being said, let’s look at how you can accept card payments on your website. Simply use the links below to jump to the method you prefer.

1. Accept Credit Card Payments in WordPress with WP Simple Pay

For this method, we’ll use WP Simple Pay, the best Stripe payment plugin on the market. With WP Simple Pay you can accept payments without having to set up and use a complicated eCommerce plugin.

WP Simple Pay integrates with the Stripe credit card processing platform. Like all payment processers, Stripe does charge a small fee per transaction. However, signing up for Stripe is free.

For this method, we’ll create a payment button that you can add to any page or post.

We’ll be using WP Simple Pay Lite because it’s 100% free. If you need more advanced features, there is also WP Simple Pay Pro. This version offers more customization options, a drag and drop form builder, and custom payment receipt emails.

First you’ll need to install and activate the WP Simple Pay plugin. If you need help, then see our guide on how to install a WordPress plugin.

Upon activation, the plugin will automatically launch the WP Simple Pay setup wizard. To start accepting credit card payments, click on the ‘Let’s Get Started’ button.

The WP Simple Pay setup wizard

The first step is connecting WP Simple Pay to your Stripe account.

If you don’t already have a Stripe account, don’t worry. The setup wizard will walk you through the process of creating a new account, step by step.

First, click on the ‘Connect with Stripe’ button.

Connecting WP Simple Pay to Stripe

On the next screen, WP Simple Pay will ask for an email address.

If you’re already registered with Stripe, make sure you type the address that’s linked to your Stripe account.

Connecting WP Simple Pay to Stripe

Don’t have a Stripe account? Then type the email address that you want to use for your new Stripe account.

Then simply click on the Continue button.

WP Simple Pay will now check whether there’s a Stripe account linked to your email address. If it finds an account, then WP Simple Pay will ask for your Stripe password.

If it doesn’t find an account, then WP Simple Pay will guide you through the process of registering with Stripe. Simply follow the onscreen instructions to create an account, and connect it to WP Simple Pay.

Creating a free Stripe account

After connecting WP Simple Pay and Stripe, you’re ready to create your payment button.

Just click on ‘Create a Payment Form.’

Creating a credit card payment form

You can also create a payment button by heading over to WP Simple Pay » Add New.

Creating a new WP Simple Pay form

Now just hover your mouse over the ‘Payment Button’ template.

Then, click on ‘Create Payment Button’.

Creating a credit card payment button

Now type a name for your payment button into the ‘Title’ field.

Your site visitors won’t see this name since it’s for your own reference only.

Creating a title for your payment button

You can also add more details into the Description field. Again, WordPress won’t show this to your site’s visitors but it can be useful for your own reference.

Now just click on the Payment tab.

Setting your Stripe payment mode

From here you can decide how much money to charge with your payment button.

Go ahead and type this number into the ‘One-Time Amount’ field.

Setting a one time payment

WP Simple Pay uses the dollar currency by default.

If you want to accept payments in any other currency, head over to WP Simple Pay » Settings. You can then select the General » Currency tab. Here you’ll find everything you need to change the default currency.

Next, scroll to the Button Text section.

This is the text that WordPress will show on your button. By default WP Simple Pay uses ‘Pay Now’ as its button label.

To change this, simply type some new text into the Button Text field.

Creating a button label

In this section you can also change the ​​Button Processing Text.

This is the text that WP Simple Pay will show to visitors while it’s processing their payment information.

Setting your 'button processing' text

WP Simple Pay uses your WordPress theme’s button styling for the ‘Default’ button style.

Another option is to use the ‘Stripe blue’ style, which uses a gradient and rounded corners.

The Stripe blue button style

As you’re making these changes, you may want to check how your payment button will look to your visitors.

To preview the finished product, click on the Preview button.

Previewing your WP Simple Pay button

Once you’re happy with what you’re seeing in the preview, it’s time to add the button to your WordPress website.

To do that, click on the Publish button.

Publishing your credit card payment button

You can now add your button to any page or post to accept credit card payments on your WordPress site, including your product pages and landing pages. You can also add the button to any widget-ready area of your site.

All you need is a piece of shortcode that WP Simple Pay creates automatically.

To grab this code simply find the ‘Form Shortcode’ field. Then click on its ‘Copy’ button.

Copying the credit card payment shortcode

You can now paste this shortcode into any page, post, or widget area. For more details on how to place the shortcode, you can see our guide on how to add a shortcode in WordPress.

After pasting this shortcode, your payment button will appear on your WordPress website.

Before you start accepting payments, it’s a good idea to test your button.

WP Simple Pay creates your new payment button in test mode by default. Your website won’t process any credit card payments while it’s in test mode.

To confirm that WP Simple Pay is currently in this mode, take a look at the toolbar at the very top of your WordPress dashboard. You should it say ‘Test Mode’.

WP Simple Pay's testing mode

If you head over to the page or post where you added this button, you should also see ‘Test Mode’ directly beneath your button.

How to easily accept credit card payments in WordPress

When it comes to testing your button, there is one problem.

Stripe doesn’t show test payments by default! Fortunately there is an easy fix.

To see your test data simply log in to your Stripe dashboard in a new tab. Then click on the Payments tab.

The Stripe payment dashboard

Next just click on the ‘Developers’ slider in the upper right corner.

The Stripe dashboard will now update to show a ‘Test Data’ banner. Any test payments will now show up in your Stripe dashboard.

Testing credit card payments with Stripe and WordPress

You’re now ready to put your button to the test.

The easiest way to do this is by switching back to your WordPress website. Then head to the page where you added your button to accept credit card payments.

You can now give this button a click. Then just follow the onscreen instructions to submit a test payment. After sending the test payment, switch to your Stripe dashboard. You will now see your test payment in the dashboard.

Now you’ve checked that everything is running smoothly, it’s time to bring your button out of test mode.

Simply go to WP Simple Pay » Payment Forms. You can then hover your mouse over your payment button, and click on the Edit link.

How to easily accept credit card payments in WordPress

Find the Payment tab in the left-hand menu, and give it a click.

Finally, check the ‘Live Mode’ box in the ‘Payment Mode’ area.

Taking the WordPress credit card payment button out of test mode

Don’t forget to click on the ‘Update’ button at the top of your screen to save your changes.

Now, you can visit your website to see your payment button live.

2. Accept Credit Card Payments in WordPress with WPForms

If you want to create a straightforward payment button, then the WP Simple Pay method shown above is a great choice.

However, sometimes you may need to collect more information from your visitors by creating a payment form.

This means you’ll need a flexible and powerful form builder plugin.

WPForms is the best WordPress contact form plugin. You can use it to quickly add any kind of form, including payment forms, to your WordPress website.

WPForms even has a ton of payment and credit card templates that can help you get started quickly.

WPForms' payment templates

For this tutorial we’ll be using the WPForms Pro version because it gives you access to the Stripe Payments addon. This powerful addon lets you accept credit card payments in WordPress using the popular Stripe payment gateway.

However it’s important to remember that you can also use WPForms to accept credit card payments using Square, Authorize.net, and PayPal. We recommend Stripe because that’s who we use as our payment processor.

First, you’ll need to install and activate WPForms Pro. If you need help, then please see our guide on how to install a WordPress plugin.

After activating WPForms, head over to WPForms » Settings in your WordPress dashboard.

WPForms' pro settings

You can now enter your license key into the ‘License Key’ field. You’ll find this key in your WPForms Account.

After activating the core plugin, it’s time to install the Stripe addon.

In your WordPress dashboard, go to WPForms » Addons.

WPForms' Stripe addon

Simply scroll until you find the Stripe Addon.

Then click on its ‘Install Addon’ button.

Installing the Stripe addon

Next head over to WPForms » Settings.

Then, click on the Payments tab.

WPForms' payment settings

By default, WPForms will collect payments in American dollars.

If you prefer to accept payments in a different currency, just open the Currency dropdown and choose from the list.

Changing WPForms' currency settings

The next step is connecting WP Simple Pay to your Stripe account.

To make this connection, scroll to the Connection Status section. Then just click on the ‘Connect with Stripe’ button.

Connecting WordPress to Stripe payments

This opens a new tab. You can now follow the onscreen instructions to either create a new Stripe account, or connect WPForms to your existing Stripe account.

Once you’re successfully connected to Stripe, it’s time to create your payment form. To do this, head over to WPForms » Add New.

Creating a new WordPress form

You can now type a name for your form into the ‘Name Your Form’ field.

Your site visitors won’t see the name, so it’s just for your reference.

Giving your credit card payment form a title

WPForms has different templates so you can quickly get started and build all kinds of forms. Since we’re creating a payment form, you may want to type either ‘payment’ or ‘credit card’ into the ‘Search Templates’ field.

This will display all the templates that have the word ‘payment’ or ‘credit card’ in the title.

Selecting a credit card payment form for WordPress

To take a closer look at a template, simply hover your mouse over that template.

Then click on the View Demo button.

Previewing a credit card payment template

WPForms will now show this template in a new tab.

When you find a design you want to use, click on the Use Template button. For this tutorial, we’ll be using the Credit Card Payment Form template.

A Credit Card Payment form

Your chosen WPForms template will now open in a new tab, ready for you to customize.

The Credit Card Payment Form has fields where customers can type their name and email address. It also has a ‘Choose your item’ section where visitors can select the item they want to buy.

Customizing the WPForms credit card payment template

You can use this section to offer visitors a choice of products or services.

Another option is letting visitors customize a single product. For example, you might offer the same T-shirt in different sizes or colors.

To customize this section, simply give it a click. The WPForms sidebar will now update to show all the settings for this section.

To change any piece of text, simply delete the default text and then type the word or phrase that you want to use instead. For example, you might delete ‘Choose your item’ and replace it with ‘Choose your T-shirt size.’

Creating a credit card payment form for WordPress

You can also change the price of each item.

To do this, simply delete the placeholder number for this item. You can now type the new amount into this field.

Adding prices to your WPForms credit card template

You can also change the text that WordPress uses for its placeholder items following the same process above.

By default, this template lets visitors choose between three items. If you want to add some more options, simply click on the + icon.

This adds a new ‘Item,’ ready for you to customize.

Adding more products to your credit card payment form

To remove an item from this section, click on its ‘-’ icon.

This option will now disappear from your credit card payment form.

Removing products from your credit card payment form

Next this template offers visitors a choice of ‘Ground’ or ‘Express’ shipping methods.

To edit this section, simply give it a click. The WPForms sidebar will update to show all the settings for this section.

Adding shipping options to WordPress

You can change the placeholder text, and add and remove shipping options by following the process described above.

You can also change the price for each shipping method. If you want to offer free shipping, then you can simply set this price to $0.

Another option is to delete this section completely.

To remove any section from your template, just hover your mouse over that section. Then click on the trash icon.

Deleting WPForm fields

Next you need to add the Stripe Credit Card field to your form. This field will collect the customer’s payment information.

To add this field simply click on the ‘Add Fields’ tab.

Adding fields to your credit card payment form

Then scroll to the Payment Field section.

You can now go ahead and drag the Stripe Credit Card field into place on your payment form.

The Stripe credit card field

You might want to add some more fields to the template to collect more information from your visitors, such as their shipping address or phone number. Simply repeat the process above to add new fields to your form.

You can also change the order these fields appear in using drag and drop.

Now that your form is set up, let’s enable payments for this form. To do that, you simply need to click on the ‘Payments’ tab in the left-hand menu and then select ‘Stripe.’

How to credit a card card payment form with WPForms

After that, just check the box next to the ‘Enable Stripe payments’ option.

You can now type a description into the Payment Description field. This text will appear on the customer’s credit card statement.

You also have the option to send an email receipt to your customers. To create an email receipt, open the Stripe Payment Receipt dropdown. You can then choose ‘Email.’

Creating a payment receipt email

WPForms also allows you to set up smart conditional logic for your forms. This is where you choose to show or hide the payment form field based on the options your customer selects.

On this screen you can also enable recurring subscription payments and select the recurring time period. This can be useful for creating subscriptions and selling memberships.

Creating a recurring credit card payment

Next, you will need to enable AJAX form submissions to use the Stripe Credit Card field. AJAX form submissions allow customers to submit forms without reloading the entire page. This can improve the customer experience.

To enable AJAX submissions, simply go to Settings » General.

AJAX form submission settings

Then click to expand the Advanced section.

Finally, check the ‘Enable AJAX form submission’ box.

Enabling AJAX submissions

When you’re happy with how your credit card payment form looks, it’s time to save your changes.

To do this, just click on the Save button at the top of the screen.

Saving your credit card payment form

The next step is configuring your form’s notifications.

Every time a customer completes the payment form, WPForms will send an email to your WordPress admin by default.

Sometimes you may need to send these emails to a different address. You might even want to notify multiple people.

This is easy to do using WPForms. To customize your email notifications, click on the Settings tab. Then select Notifications.

Creating credit card payment notifications

On this screen, find the ‘Send To Email Address’ field. By default this is set to {admin_email}. This is a dynamic value that tells WordPress to use the WordPress admin email.

You can delete this dynamic text and replace it with any other email address. Simply type the new address into the ‘Send To Email Address’ field.

If you want to email multiple people, just separate each address with a comma.

Creating email notifications

You can also edit the email message. For example, you’ll probably want to change its copy and email subject.

After creating these emails, you’ll want to make sure they’re sent to the recipient’s email inbox and not to the spam folder.

The best way to do this is by using an SMTP service provider to improve email deliverability. For more details, see our guide on how to fix WordPress not sending email issue.

You may also want to send a separate notification to your customers. For example, you might confirm their purchase or send them a ‘Thank You’ message. WPForms will send this email automatically whenever a customer submits the payment form.

To email your customers, click on the ‘Add New Notification’ button.

Creating a new WPForms notification

WPForms will ask you to provide a name for this notification. Let’s call it ‘Customer Notification.’

After that, WPForms will show all of the notification fields that you can customize.

How to easily accept credit card payments in WordPress

To make sure WPForms sends this notification to the right address, click on the ‘Show Smart Tags’ link next to the ‘Send To Email Address’ option.

Then simply select the ‘Email’ field. This allows WPForms to use the email address the customer provided when submitting their payment.

Adding smart tags to your credit card payment emails

You can now customize the rest of the notification email. For example, you might want to change the subject line or add more text to the email message.

You can also personalize the email using smart tags. For example, you might add the customer’s name or some information about the product they just bought.

After that you can head over to the ‘Confirmations’ tab.

WPForms uses ‘Message’ as the default option. This means your site will show a thank you message every time a customer submits the payment form.

Creating a payment confirmation message

Instead of showing a message, you might prefer to show a specific page or redirect customers to another URL.

To make this change, simply open the ‘Confirmation Type’ dropdown. You can now choose from the available options.

Changing the payment confirmation settings

The final step is adding this form to your WordPress website.

To add it to a post, simply open up the blog post you want to edit.

Then click on the plus (+) icon.

The WPForms WordPress block

In the popup that appears, type ‘WPForms’ to find the right block.

Once you click on the WPForms block, it will add the block to your page.

The WPForms WordPress block

In your new block, click to open the dropdown menu.

You will now see a list of all the forms you’ve created using WPForms. Simply click to select your payment form.

Choosing your credit card payment form

If you’re happy with how the form looks, then you can publish or update the page.

Now you can visit your website to see your form live. You’re ready to start accepting credit card payments on your WordPress website.

Adding a credit card payment to WordPress

Method 3. Bonus Ways to Accept Credit Card Payments in WordPress

While both WP Simple Pay and WPForms are the most straightforward ways to accept credit card payments in WordPress, some users may have different needs.

For example, you may want to start an online store to sell physical products, sell ebooks, sell online courses, or even accept donations.

In those cases, you may need a full-featured solution for your specific use-case:

  • MemberPress – this is a great solution for when you want to sell online courses or memberships. It has ways to accept credit card payments using Stripe and Authorize.net
  • Easy Digital Downloads – this is perfect for selling digital downloads like eBooks, music, software, and more. EDD lets you accept credit card as well as have multiple payment options on cart.
  • WooCommerce – this is a popular WordPress eCommerce plugin that lets you sell physical products online. WooCommerce lets you accept credit card payments as well.

We hope this article helped you learn how to easily accept credit card payments on your WordPress website. You may also want to see our list of the must have WordPress plugins for business websites, or check out our guide on how to create an email newsletter the right way.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

The post How to Easily Accept Credit Card Payments on Your WordPress Site first appeared on WPBeginner.

Supabase and Angular Quickstart Guide

This example provides the steps to build a simple user management app (from scratch!) using Supabase and Angular. It includes:

  • Supabase Database: a Postgres database for storing your user data.
  • Supabase Auth: users can sign in with magic links (no passwords, only email).
  • Supabase Storage: users can upload a photo.
  • Row Level Security: data is protected so that individuals can only access their own data.
  • Instant APIs: APIs will be automatically generated when you create your database tables.

By the end of this guide you'll have an app that allows users to log in and update some basic profile details:

Help Shape the Future of CSS-Tricks!

Hey, so it’s been a minute since we announced that CSS-Tricks is now part of the DigitalOcean family. Things are pretty much business as usual and hopefully it feels that way to you, too. Now that we’re getting settled, we’re eager to start poking at the future of this site.

What sort of things are we poking at? Well, that’s where you come in. You see, there’s no shortage of ideas for CSS-Tricks, but we only want to work on things that continue to make CSS-Tricks one of the spots you come to time and again for all things front-end (including actual CSS tricks).

So, we put together a short little survey for you. Nothing crazy, just a few questions to help us vet those ideas and ultimately shape the future of CSS-Tricks.

Thanks so much for your help! And while I have you, thanks for continuing to hang with us. In the seven years I’ve been working here at CSS-Tricks, I know this site wouldn’t even be here today without y’all. Here’s to the future of CSS-Tricks and learning together!

CSS-Tricks Newsletter

Oh, and one more update for all of you who miss the newsletter: it will be back! But we had to drop a ton of you off the list (seriously, like 80% of all subscribers) to be compliant with legal stuff that’s over my head. No worries, though, because you can re-subscribe right down here with your email address.


Help Shape the Future of CSS-Tricks! originally published on CSS-Tricks. You should get the newsletter.

To Shift Right, You Need Observability

In a world of shifting left, there is a growing movement: to shift right.  I recently attended a panel discussion where the panelists (from tech companies in this space) debated and even insisted – that shifting right will actually allow you to deliver more value to your customers.  Then, as they laid out their arguments, one thing became clear:  In order to shift right without significant risk, you need extensive observability of your entire application stack.

Shifting Left vs. Shifting Right

First, what does it mean to shift left or right?  Well, the shift-left movement came out of something we've known for many years: if you find a problem earlier, it costs less to fix it. The idea is to encourage your developers to do extensive testing, verify functionality in multiple levels of pre-production environments, and catch every issue you possibly can before it goes out to production.

Develop With Oracle Transactional Event Queues

This article provides a quick tour of Oracle's Transactional Event Queues (TEQ) and so attempts to cover as much as possible at a high-level while giving quick, low-level, and code examples at the same time. There is quite a bit of material, and there are multiple workshops related to TEQ and its use in modern application development and microservices that can be found at the end of this piece.

This article corresponds to a 12-minute video that can be found here...

Oracle Transactional Event Queues (previously known as Advanced Queueing) has been around and widely used for decades (long before Kafka) and is well-harden technology. Here is a timeline to give an idea.

Timeline of Oracle AQ and transactional event queues.

How to Operationalize a Cloud Security Solution


Smooth and incremental operationalization of your cloud security platform ensures that your implemented solution will be fast to provide measurable value. But when it comes to operationalization, not all cloud security solutions are created equal. In this blog post, we discuss the obstacles and provide four actionable steps for successful operationalization.

What Is Operationalization in Cloud Security?

Cloud security operationalization is the process of turning the abstract concept of “cloud security” into an implemented solution that drives measurable value. When operationalizing a solution, Security teams seek to ensure it is tightly integrated into organizational processes and actively contributes to the organization’s security posture. A successfully operationalized cloud security solution helps reduce risk, save time, cover its own expense (and more), and be fast to value – all in a measurable way.

My Dumbest CSS Mistakes

We all make mistakes in our code. It happens! I know if I had one of those “Days Since Last Mistake” signs hanging over my desk, a big ol’ goose egg would be hovering above me all the time. It doesn’t have to be big mistakes, either. My clumsy self has committed small errors to repos ranging from typos all the way to complete npm module directories.

Whooooooops.

That’s one of the things I really love about CSS: it’s forgiving as heck. If it doesn’t understand a typo, it keeps looking up the cascade in search of a match. None of that stuff where one out of place characters breaks a site and takes no prisoners. But it’s still embarrassing when CSS mistakes pop up!

Like this one I find myself making way more times than I’d like to admit:

.element {
  display: flexbox; /* 🤦‍♂️ */
}

Or when I try setting a gradient without a background property:

.gradient {
  linear-gradient(45deg, rgb(50% 100% 90%), rgb(62% 85% 93%));
}

I hate how close X and C are on a keyboard because I can’t count how many times I’m blazing through something and mistake px for pc units.

.element {
  font-size: 16pc; /* I meant pixels! */
}

Another CSS mistake I catch every so often is one I know many other folks make because I spot it too often in blog posts with code snippets:

// This is not a CSS comment.
.element {
  /* This is a CSS comment. */
}

Have you ever forgotten to use var() around a CSS variable? I sure have.

.element {
  color: --primary-color;
}

Speaking of CSS variables, naming them is hard (like everything else) and I often use some incorrect version of a variable that I named!

:root {
  --color-primary: #FF5722;
  --color-secondary: #3E2723;
}

/* Much later on... */

.element {
  color: var(--primary-color); /* 🙃 */
}

Yes, I have indeed copied a snippet of CSS before only to have fancy quotes get in the way of making it work:

.element::before {
  content: “”; /* Should be "" */
}

And, yes, I have spent way too long figuring out those quotes were the culprit.

Looking at that last one reminds me that I sometimes forget to set the content property when I’m working with ::before or ::after. Which reminds me of how I’ve forgotten to set an element’s position before trying to offset it or change its z-index. Seriously, these things happen!

It’s hard talking about mistakes

Have you ever finished reading some blog post sharing some amazing trick and felt some sort of Imposter Syndrome? I think that’s largely because blog posts often mask the real work — and failures — that go into amazing tricks. As someone who reads posts like that for a living, I can tell you that many, if not the vast majority, go through many rounds of editing where potentially embarrassing mistakes are weeded out and smoothed over.

Even those ridiculously awesome articles have to fail before they get all those ooooos and ahhhhhs.

The same is true of any app, website, demo, or whatever you happen to come across. The chances any of them came out perfect the first time is next to nothin’.

But if I’m being totally honest with you, I’m often more amazed (and interested) in the journey it takes to accomplish something, warts and all. The journey is a glimpse into what it’s like to think like a front-end developer. That’s where real (and most valuable) learning happens.

And all of this is merely building up to what I really want to ask…

What are your dumbest CSS mistakes?

C’mon, we all know you’ve made some! Let us learn from them!


My Dumbest CSS Mistakes originally published on CSS-Tricks. You should get the newsletter.

Machine Learning in Cybersecurity

What Is Machine Learning?

Machine learning (ML) is a domain of computer science that allows computers to learn without having to be programmed directly. Machine learning is one of the most intriguing technologies ever discovered.

Machine Learning in Security

Thanks to machine learning (ML), computers may learn without being explicitly programmed. Machine learning works with computers to learn as humans do: by trial and error. The topic of artificial intelligence encompasses machine learning as a subset.

Smashing Podcast Episode 48 With Stephanie Eckles: Is Sass Still Relevant?

In this episode, we ask if Sass is still relevant in 2022 and if it adds any value modern CSS workflows. Vitaly talks to expert Stephanie Eckles to find out.

Show Notes

Weekly Update

Transcript

Vitaly Friedman: She’s a software engineer focused on front-end and she creates front-end learning and development resources with an emphasis on CSS, accessibility, and 11ty. She’s a writer, teacher, and consultant. And she also hosts the podcast Word Wrap, where she and Claire Lipskey talk about a bunch of stuff related to what it even means to be a developer in 21st century. She’s also an advocate for accessibility, scalable CSS and Jamstack. And offline, she’s a mom to two girls and a Cava-corgi, and she enjoys baking. So we know she’s an expert in CSS and accessibility, but did you know that she absolutely loves hip-hop and dancing, occasionally, of course. My Smashing friends, please welcome Stephanie Eckles. Hello, Stephanie, how are you today?

Stephanie: I am smashing.

Vitaly: Oh, that’s wonderful to hear. It’s wonderful to see you as well because you’re writing so many articles. You’re writing so many tutorials and courses and tools. Everything is out there. Just really incredible to actually have an opportunity to just talk to you every now and again, this is wonderful. But I always have to ask, I’m just really, really curious at this point. Stephanie, you create so many tools for people out there to use. And I always think about HTML Recipes and Button Buddy and 11ty Rocks, and so many articles in CSS and trainings and workshops, and you have your own podcast and you’re also a mom. Where do you find time for it? Are you super organized? How does it work?

Stephanie: So I’m not super organized, but if anything about becoming a mom, becoming a parent, or any sort of caregiver, is the time that you do have is more precious and also you are sort of forced to be more efficient. So, when you have different goals, it’s just something that’s important to me to include in my day or make time for.

Vitaly: Yeah, that makes sense. It’s actually quite interesting because the less time you have, the better you get around to your time, the more you optimize your time and all. So, that’s incredible to hear that.

Vitaly: Well, Stephanie, today’s an important day. It’s a very important day, isn’t it? Well, do you know what I’m hinting at, by any chance?

Stephanie: I believe there’s a certain milestone for web developers that we’ve been excited about.

Vitaly: Yes. Isn’t it very exciting? Dear listeners, as we’re recording this interview today, it’s June 15th and this is going to be going in the history for calendars designed and created for web developers for, I don’t know, centuries, maybe? Do you think we’ll still be developing websites in a century? Stephanie?

Stephanie: I do believe that actually.

Vitaly: Okay. So then we will probably be celebrating this day because it’s a day when Microsoft officially ends support for the Internet Explorer desktop application. Are we feeling a little bit nostalgic today, Stephanie? Do you remember any quirks and bugs from IE?

Stephanie: Yes. You know, over my all 15 plus year career history, definitely it’s something I’ve had fondness and other feelings about throughout that history. So yeah, it’s a big day. It’s one we’ve, like you said, marked on the calendars, but yeah, I remember particularly staying up late at an advertising agency I worked at. At the time we were on IE 7 and I could not get a border to show up, of all things. I will always remember that day.

Vitaly: Yes, of course. It’s interesting actually thinking back about, let’s say 15 years, you said, maybe you could just share a bit of light. How did you actually fall in love with the web? I hope you didn’t fall in love with Internet Explorer because then it would be very sad day today. But how did you actually even get to the web? Tell us a little bit of your backstory, if you can.

Stephanie: Absolutely. So I started with Flash, Macromedia Flash, not Adobe Flash. Got that at a summer camp that I had gone to as a teenager. And it was sort of my gateway. I wanted to put my "art", as it were, on the web, very big quotes around art. So I fell in love with the keyframe animation at that time. And that led to figuring out how to get it on the web, that led to learning a little, tiny, tiny bit about HTML. I remember visiting a forum to get all of my HTML and Flash questions answered. And then I found WordPress and WordPress was just getting out the gate. It was a couple years old when I learned about it as a tool. And spent a decade of my career with WordPress, actually. My degree is in advertising, so, huge part of my career was working as a developer in marketing and advertising. And, that’s kind of the base evolution of how I got into it and throughout that time, front-end development has always been my specialty.

Vitaly: Right, right. That’s exciting. That’s incredible. I’m also thinking about all this times back when I was really playing with all this quirks around Internet Explorer and just in general. And it’s one thing that really excites me, I think, about all of this or excited me back then is that you could actually just go ahead and present something to the entire world and the entire world would come and see it. This is how I ended up creating my own football club website for a club that didn’t exist, which was kind of fun, I guess. And I had maybe 44 visitors over a year. That was very exciting for me at the time.

Vitaly: And I think about this now and I feel like sometimes it’s becoming just incredibly difficult for people to be able to do that. And it feels like you need to learn so much to even be able to publish "hello world" on a page. Do you think this is just how things turned out, we just have become more mature? Or do you think it actually has become a bit more easy, maybe, over the last years because we have browser inconsistencies gone. Tooling has never been better. What’s your take on this?

Stephanie: Yeah. So, in my early days, and I’m sure you experienced this plenty of times as well, you did have to worry about the server. You did have to worry about FTP, which might be a lost acronym for some folks these days. Very early, we didn’t have version control or at least it wasn’t something I certainly knew about not having grown up in a highly technological area. And I think that’s an important point here is it really depends how you’re introduced to the web. If you come in straight from a bootcamp, you’re going to have a very different lens and a very different idea of how to get things on the web than maybe if you’re casually looking around having an interest, trying to find whatever resources.

Stephanie: And I think even then it depends what your goals are. So I think it can be very easy and approachable, but it can also seem extremely complicated and definitely more complicated in a lot of ways because of the tooling. The tooling can either help or hinder that process, for sure. That’s kind of why I’m fond of Jamstack. I think that is a lower level, easier way to get introduced and get your first things on the web, if that’s the goal.

Vitaly: Right. And that’s also wonderful because you’ve been publishing so many tutorials around Jamstack and 11ty, and maybe you could tell us where do you see 11ty, for example, being extremely useful? What kind of projects would it be a default, let’s say, where you would say, "Yeah, that’s probably going to be working best with Jamstack and 11ty." And where would be its boundaries.

Stephanie: Yeah. Great question. So 11ty is a static site generator and the difference about it versus some other ones is there’s no client-side JavaScript required. You can build from truly flat files, HTML as well as several templating languages, the common ones being Markdown or Nunjucks or Liquid, as well as JavaScript as a templating language. And so it’s very approachable again for different mindsets, so that makes it a great tool, I think, to introduce to teams with different backgrounds, different interests in building a website.

Stephanie: But to your question about when would you choose it or where are the boundaries? So it is great for any time that you, as a starting point, when you don’t have any need for dynamic content. Which isn’t to say that you can’t bring it in, you absolutely can. And in fact, that is something they’re actively working on, is stepping into the idea of Islands architecture and things of that nature.

Stephanie: There’s other tools that are built on top of it, where you can easily bring in a framework that you’re comfortable with like Vue. So there are absolutely ways to expand it. That’s actually why I love it is because you can start at a real simple baseline and just build up as you go. I haven’t found a lot of boundaries. In fact, I’m even doing a project that I am sort of working on secretly dealing with user authentication, and that doesn’t sound like something you could do with static. But with the combination of edge functions and serverless functions, which are super easy to incorporate in, I think that the boundaries are being pushed farther and farther out at this point.

Vitaly: Yeah. That’s very exciting to hear just because when were moving from WordPress to Jamstack back in the day, it feels like it was a century ago now, although it was just five years ago, I believe. It was kind of a, "Wow, how do we do this?" Because we have the shop, the membership and well authentication then of course then as well. And so many other moving parts and the comments, all search and so on. And yeah, in fact, I think that, in many ways, Jamstack has been this really good compromise. I remember vividly this excitement that everybody had with fully client-side rendered applications. And that was the time when it felt at least like a revolution, really. And then it was pushed back. Would you say that Jamstack is kind of that push back somewhere to the server? Not too far away from the client. How do you feel about Jamstack? Is it the golden center for the universe of web development?

Stephanie: Yeah. You know, I’m definitely biased at this point. I’ve been working with it for a little over two years now, and so I’ve seen some of that evolution happening. And, again, having that history with WordPress, it’s one of the reasons I really enjoyed 11ty in particular, having that templating ability, but having that static rendered, you don’t have to worry about SSR, it’s just simply static. Your homepage likely is always static. Your marketing website, largely is static.

Stephanie: But, being that center, I really do think it is because you also have... You’re not prevented from incorporating a CMS, for example. You can bring that in. You can still of course add whatever other, as I mentioned, flavor of JavaScript that you need. It doesn’t have to be truly 100% static, but that’s your baseline. And we all know that’s where we put an emphasis on semantics, accessibility, progressive enhancement. And I think that’s another thing you’ll find in the community if you haven’t quite yet gotten into Jamstack and 11ty, in particular, is a focus on returning to that way of building. And I think that’s the part I see a quote unquote "return" to, is caring about those things.

Vitaly: Absolutely. Absolutely. It all fits in nicely then, somehow, with like you mentioned accessibility, of course, and CSS is just something that we both have in common. That we just have an incredible admiration and love and passion for. And every time I read an article that you’re writing, I feel like, "oh, you can do that with CSS now. That’s wonderful to see."

Vitaly: So maybe you could shed some light on how do you work with CSS? Do you have a particular methodology that you tend to rely on now? Or the way of structuring things? The way of naming things? Of course naming is the hardest part of it all. What seems to be working best for you, for your work, for your projects in terms of building things, in terms of, maybe just to simplify, how do you even start working on a project when it comes to CSS? The folders, the naming, the methodology and stuff like that?

Stephanie: Yeah, absolutely. So I still use Sass. I will continue to use Sass strictly because it allows that organization and I think that’s really critical. I think that’s where a lot of folks begin to have a less than pleasant relationship with CSS, is trying to figure out how to organize. And so Sass for me is that bridge, it’s very critical in my tool belt.

Stephanie: Alongside that, I do tend to use BEM. I’m not always completely strict on it. I don’t always completely rely on even having classes. I think it’s very powerful to focus on the semantics. And I also, I think it’s important to know where I’m coming from. So part of my history involves working on design systems. And so, through that, I’ve become a big proponent of creating components, whether that’s a formal design system or just the way that you’re approaching and organizing and architecting your styles.

Stephanie: I find that to be helpful for me to think of my system as components and to think of my system as having, some folks might know as design tokens, but having like a series of colors and these other, primitive variables, would be another common term, where those are leading into the system. I’m definitely using custom properties. That’s been a huge game changer in how I approach writing styles, both from... Folks might be used to opening up a site, looking at the HTML element and seeing just a whole laundry list of custom properties. I keep mine a little more focused, like I said, colors and really high up global tokens. But an important way that I write my styles and my components is really leaning on custom properties to allow very easy variations of those, very scalable variations of those.

Stephanie: And so, you mentioned my workshop earlier, that’s something we really go into because when you are starting to incorporate those things, you start to... I think it was kind of a light bulb moment for me, learning about these things where my styles became so much more simple, so much more efficient, so much less repetitive, being able to use things like custom properties. So Sass, custom properties, a little sprinkle of BEM, and also, in some cases, relying on particular element selectors that directly hook into accessibility features. So it’s kind of a combination of those things, but it all starts for me at the HTML level. And then I go to my CSS. So, that’s also an important part of my process.

Vitaly: Sure. Of course. Yeah. I also remember vividly that moment when we actually ended up getting custom properties in all the browsers, and I was like, "Wow, you can now do custom kind of variables?" CSS variables, dynamic variables now in the browser. That was incredible.

Vitaly: That also brings me to this notion of... This is a conversation that I keep having with some folks, just thinking about what is the role of Sass today and how is it going to evolve? Just to bring it a little bit more in the context, we now have custom properties for years now. But we also have these proposals for scoping and for nesting, which might be coming up soon. But then on top of that... I’m really excited about that, by the way, just because right now, every time you’re using Sass, we have to produce this humongous chain of classes, if you do nesting, nesting, nesting, nesting.

Vitaly: But if it is actually just written in CSS and just clean and beautiful on how it should be. Plus on top of that, of course, cascade layers, which are already well supported. So I’m wondering at this point, of course, not to mention... I mean, so many things coming up, it’s incredible in CSS, the color mix, color contrast, lighten, darken, all those things that are also coming to native CSS. So I’m wondering just about your take, where do you see now, Sass moving? Is it going to be more for literally processing for things like Mixins, functions, those kind of things? And where would you say this should be in CSS?, and that should be probably staying Sass?

Stephanie: Yeah. So all of those are super valid comparisons to how features and tools such as Sass has informed or helped inform the evolution of CSS as a language. And for sure, I’m excited for those things to come and be native. As I mentioned, organizations is still a huge reason I’ll continue to use Sass to compile my style sheets and still have that separation, like I said, of my components or whatever other parts that are coming together.

Stephanie: Also in a design systems context, or other contexts where you are creating a reusable system and you want to have a little bit better management of your, again, whether you call them tokens or whatever you call those sort of baseline configuration, of how the different customizations enter that style sheet is, I believe still where Sass is going to shine.

Stephanie: And like you said, functions, Mixins. I’m finding myself using less Mixins these days, because, like I said, custom properties gap fills what I was using Mixins for, in some cases. But I still use Sass for functions. Absolutely. So, whether that’s looping through my tokens to spit out automatically different utility styles. To me, that’s still plenty useful enough that I’ll continue to use Sass and that’s functionality that we don’t see in the horizon for CSS.

Stephanie: But yeah, I definitely have changed some of the ways I’ve used Sass. Using :is() and :where(), sometimes those help simplify my selectors in a way that maybe was using Sass for before. So yeah, I’m absolutely a fan of switching over the functionality that should belong in the browser to the browser, but still finding the organization and functions, in particular, to be useful in Sass for me.

Vitaly: Yeah, absolutely. It’s interesting because you mentioned BEM previously and I just recently had a conversation with a few JavaScript developers and the conversation went in a very unusual way for me, because usually I would be comfortable using BEM. I mean, just like you, not the dogmatic traditional the big BEM, but the small BEM. And I do like my hyphens and I do like my underscores, so don’t judge me on that.

Vitaly: But I heard this notion of, BEM, is it still a thing?Isn’t it like from 2017 or ’18 something? Why would you use BEM today, if you have Tailwind and you have CSS and JS if needed? Why do you work so hard to have the naming and have this relationship, which could be potentially just, create user using atomic classes or just writing some CSS and JS.

Vitaly: And I had my arguments about why I would still prefer BEM, but I see that many people feel like, isn’t BEM outdated? And, isn’t Tailwind the thing now? So what are your thoughts on that? And maybe specifically on Tailwind that would be probably quite relevant.

Stephanie: So for me, it’s not the right tool and that has to do with the way that I work, but also the team conventions that I have. And that’s usually what I tell folks, is it depends what kind of project you’re working on. It depends on the makeup of your team, your skillset, your project architecture, just like anytime you choose a tool, all of these things play a part.

Stephanie: As I mentioned, I’m a proponent of components. And so an important thing to remember is that not everybody is using a JavaScript framework. In fact, if we look at global stats, that’s actually a pretty minor part of the web. I know it feels like everybody is using React or whatever other tool, but it’s actually not true in practice. And especially if you’re coming into an established team that is not the latest. A new startup or something. You may not find Tailwind.

Stephanie: And so that’s fine. But the point is that some of these methodologies aren’t as transferable across projects either. So if you’re solely producing one type of project, one application, one product, it’s easier to make a decision towards something like Tailwind, rather than if you’re working on a project that’s intended to be used across multiple outcomes. Maybe I’m using it on my 11ty static site where I’m writing in Nunjucks. But I also need to share it to a back-end application that’s built in React. So my style sheet is going to be a lot more portable if doesn’t rely on CSS and JS, or if it’s not completely wrapped up already in React components. And, teams have found ways to overcome that. And again, your experience is going to heavily weigh into what choice you make here.

Stephanie: Another big one that comes up for folks is the issue of documentation and I absolutely respect that. Where it’s easier sometimes to pick up a tool that has ready-made documentation. So, that’s absolutely consideration in making that decision. I wouldn’t say that BEM is outdated. It’s just a naming convention where I think, as I said, it lends to being a little more portable. The intent of it is to be able to identify what set of styles go together. So we can apply that in multiple locations and have a good idea. I think perhaps in some instances it might be a little more memorable if you don’t have a system where you are able to create and template out components, because again, that’s not every environment that folks are practically working in.

Vitaly: Absolutely. Yeah, of course. It’s also fun to be just talking, thinking about all the things you could do with CSS and moving back to what we talked about briefly before, so many powerful things coming up, it seems like. Just a recent announcement of all the features coming to Safari 16. This is just unbelievable. It’s like Christmas coming in before Christmas. And then of course we have all the wonderful things coming up in Chrome 103 and it’s just all wonderful. Incredible. What are you most excited about of all of those things? Is there anything where you say, "okay, this is life changing for me, this is changing everything that I’m doing with CSS."

Stephanie: For me, it’s the one, two punch of container queries and :has(). I am excited for both of those to be stable. And again, coming from the design system context in particular, I just think we’re going to be able to create the most robust and scalable components we literally haven’t been able to achieve before. So I’m very excited about that as my top two picks coming up here.

Vitaly: Okay, well maybe we should be expecting some articles from you on them, although maybe you have written them already, who knows? I think you might have. Do you find yourself writing as much as you used to be or do you have a lot of writing coming up in the months to come?

Stephanie: Yeah. So writing’s taken a tiny bit of a backseat just because I’ve been working on a project a little more longer term, that’s a build out of a new side project here. So yeah, it makes it tough because I have a backlog definitely of writing ideas, so, hope to get back to that soon.

Vitaly: I hope we’ll get there as well. Well maybe, quickly a few questions to also slowly wrap up. Do you think you have a dream feature that you would love to CSS to have? Frankly, I don’t know, to be honest, if I had to answer that question, I’d be probably out of ideas because I always wanted the parent selector, well, :has() is much more than that, but we have that. And I always wanted container queries. Well, we have that and I always wanted subgroup, well, we kind of have it coming. What else should I wish for? I don’t know. Do you have any dream features that CSS desperately needs?

Stephanie: I think I’m similar as you, at this point, it’s waiting for certain things to land. A year or two ago. I probably would’ve said color contrast in the browser, but that’s even coming. So yeah, the list is definitely shortening of what, we still are waiting for. Another one for me, would’ve been a more native way to do fluid typography and we are also getting that once container queries hits because of container units, we’ll be able to do that.

Stephanie: So yeah, I think the last thing for me is, we have media queries related to Viewport. We’re going to get the container ones. The last thing for me would be expanding that a bit to a few more contexts, like a user browser zoom context would be useful to me. And I’m sure there’s some other device features, and things in that area might be the remaining area to grow a little bit. Sometimes there’s privacy concerns, hardware limitations, these things that prevent those particular features. But yeah, that’s what I kind of have my eye on.

Vitaly: Excellent. Sounds good. Sounds exciting. I’m just really excited to see what is coming up next. It just always keeps me busy. Sometimes I would find myself just going to something like Chromestatus.com just to see, is there anything new on the horizon? Just because I’m curious. Usually it takes a little bit longer than just a couple of days to see something new showing up though. But yeah, this is how excited I am.

Vitaly: Well, so we’ve been learning a little bit about CSS in this episode today. So what have you been learning about lately, Stephanie? Maybe any podcasts that you can recommend? Any books, any, I don’t know, TV shows, anything that’s really got your interest or attracted your interest over the last few months or so?

Stephanie: Yeah, so an area I unexpectedly found myself enjoying is watching developers on Twitch. So I’ve been learning all kinds of stuff from some fabulous streamers. Folks might already know, but White Panther whose Salma Alam-Naylor is excellent. And also I’ve really enjoyed Alex Trost who runs the Frontend Horse community. So if you’re looking to learn maybe some unexpected things in a little different format, that’s what I encourage folks to do. Kind of shake up where you’re getting your inspiration.

Vitaly: Excellent. Well, if you’d like to learn a bit more from Stephanie, we have an upcoming Smashing workshop, which is going to look into all kind of things CSS. probably also Sass, probably also BEM, and probably also 11ty, if I’m not mistaken. This is taking place on July 11-25th. And of course there are a few tickets left, so please do take a look and join in. And if you, dear listener, would like to hear more from Stephanie altogether in general, you can also find her on Twitter where she’s @5tp3h or Steph and on her website at https, of course, thingdobecreate.com.

Vitaly: Well, thanks for joining us today, Stephanie. Do you have any parting words with the wonderful community? Things that will remain in somebody’s memories centuries after they hear it here today?

Stephanie: Big responsibility. Experiment, play and share what you know.

Top Salesforce Deployment Challenges and Tips

As Salesforce organizations strive to improve IT delivery, making it faster, more quality-focused, and secure, they continue to face deployment challenges. Increased customer demands and high velocity releases every now and then are creating bottlenecks for Salesforce enterprises. This is where you need to recognize the Salesforce deployment challenges your team is facing and find ways to address them.

In this article, we will dive into Salesforce deployment challenges, how to orchestrate Salesforce DevOps tools, and techniques to enhance efficiency and speed while maintaining the quality and security of your applications.