<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Zouhair Majzoub on Medium]]></title>
        <description><![CDATA[Stories by Zouhair Majzoub on Medium]]></description>
        <link>https://medium.com/@zou?source=rss-51a987cd3d7f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*EzYNBVytHKiwhsWQeKGI7A.png</url>
            <title>Stories by Zouhair Majzoub on Medium</title>
            <link>https://medium.com/@zou?source=rss-51a987cd3d7f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 03:04:58 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@zou/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[I asked AI agents to rewrite Supabase in Rust]]></title>
            <link>https://zou.medium.com/i-asked-ai-agents-to-rewrite-supabase-in-rust-be03d4fd0372?source=rss-51a987cd3d7f------2</link>
            <guid isPermaLink="false">https://medium.com/p/be03d4fd0372</guid>
            <category><![CDATA[supabase]]></category>
            <category><![CDATA[grok]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[ai-agent]]></category>
            <dc:creator><![CDATA[Zouhair Majzoub]]></dc:creator>
            <pubDate>Sat, 10 Oct 2026 10:29:19 GMT</pubDate>
            <atom:updated>2026-10-11T12:11:56.504Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oJuc7zedJeDfn_jXivTx3A.png" /></figure><p>Let me start with a confession: I don’t really know what I’m doing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*L3PJrRmdczPHllw_IQaeag.png" /></figure><p>I’m not a Rust developer. I’ve never written a database backend. I run a small SaaS and I’ve been watching AI coding agents get better every month. At some point I wanted to stop reading about them and actually push one to its limits.</p><p>So I gave a team of cloud agents a ridiculous mission:</p><blockquote><strong><em>Rewrite every component of Supabase in Rust, 1:1 compatible, as a single binary. By agents. In public.</em></strong></blockquote><p>The project is called <strong>Megabase</strong> (yes, a nod to both Supabase and Factorio’s self-running mega-factories).</p><p>This post is a snapshot after roughly the first 26 hours. It’s mostly for fun and for learning. Please don’t deploy this in production. 🙂</p><h3>The idea</h3><p>The inspiration came from a Hacker News post about a PS5 emulator project that publicly tracks the percentage of functions it implements, with a treemap. I loved how honest that was: no “it works!” claim, just a number that goes up.</p><p>Supabase felt like the perfect target for agents:</p><ul><li><strong>It’s open source.</strong> Agents can read the original code (Go, Haskell, Elixir, TypeScript…) and port its behavior.</li><li><strong>It runs locally.</strong> So “correct” isn’t a matter of opinion: you can send the same request to real Supabase and to Megabase, and compare.</li><li><strong>The result would actually be useful.</strong> Self-hosting Supabase means a dozen containers in several languages. One Rust binary next to Postgres would be nice.</li></ul><h3>The rules I wrote (the only things I wrote)</h3><p>I wrote two files by hand: a MANIFESTO.md and a GOAL.md. And to be honest, even those were heavily assisted by Claude. Everything else was supposed to be agent-written. The key rules:</p><ol><li><strong>Agents write everything.</strong> Code, CI, docs, README, devlog, even the website.</li><li><strong>Humans only write the mission and the guardrails.</strong></li><li><strong>Every human intervention is logged</strong> publicly in HUMAN_LOG.md. The number of times I had to step in is part of the result.</li><li><strong>The judge is external.</strong> Agents don’t grade themselves. A test harness runs the real, pinned Supabase stack side by side with Megabase and compares responses.</li><li><strong>Failures are loud.</strong> Anything not implemented returns an explicit HTTP 501 MEGABASE_NOT_IMPLEMENTED, never a silently wrong answer.</li></ol><h3>How progress is measured</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tMjTHpBo9OtPztgkat9aTA.png" /></figure><p>Two numbers, inspired by that emulator project:</p><ul><li><strong>Coverage</strong>: a tool extracts every “unit” from the upstream source (routes, PostgREST operators, auth grant types, storage endpoints…). The agents found <strong>1,024 units</strong>. Coverage = implemented ÷ units.</li><li><strong>Conformance</strong>: the percentage of judge test cases where Megabase answers exactly like real Supabase.</li></ul><p>Both are published as badges and a treemap, updated by CI.</p><h3>What happened in the first ~26 hours</h3><p>Here’s what the repo looks like after day one and a bit:</p><ul><li><strong>126 commits</strong> on main and around <strong>220 pull requests</strong></li><li><strong>7 releases</strong> (v0.1.0 → v0.1.7), with signed binaries on some of them</li><li><strong>~21,700 lines of Rust</strong> across 11 crates (auth, rest, realtime, storage, pooler, meta, functions…)</li><li><strong>35 architecture decisions</strong> written as separate files</li><li><strong>Coverage: 9.7%</strong> (99 of 1,024 units)</li><li>A full public devlog, written by the agents</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1qH-FKmGyTNxuT7_umyKew.png" /></figure><p>What’s actually working: parts of <strong>Auth</strong> (signup, login, password and refresh-token grants, user and admin routes, email verification flows) and a growing chunk of <strong>REST</strong> filters ( eq, in, like, match, full-text search...).</p><p>The agents also set up things I would never have done myself on day one: fuzzing targets, cargo-deny, OpenSSF Scorecard, release-please, signed releases, Codecov, benchmarks. The README now has about 18 badges. Agents <em>love</em> badges.</p><h3>What surprised me</h3><p><strong>1. Agents will happily approve their own work.</strong><br> The very first big pull request (the whole bootstrap, ~37k lines) was approved by the agent’s own account. The rule said I had to review it. I only caught it later. Lesson: rules written in a Markdown file are wishes; rules enforced by branch protection are rules.</p><p><strong>2. “Humans write nothing” is harder than it sounds.</strong><br> Look at HUMAN_LOG.md: I had to create tokens and secrets, set up a Docker Hub account because CI was getting rate-limited (HTTP 429), enable GitHub Pages, change permissions... Agents can&#39;t click buttons in GitHub settings. Every time I did, it got logged. I think that log is one of the most interesting parts of the experiment.</p><p><strong>3. The log isn’t always honest by default.</strong><br> At one point an external review found several of my interventions missing from the log, and most PRs showing up under my GitHub account instead of the agent account. Transparency needs to be checked, not assumed. Even with AI.</p><p><strong>4. Asking another AI to review the AI works surprisingly well.</strong><br> I had an external AI produce a review checklist for Phase 0, then had it fact-checked against the actual repo. Some points were wrong, most were right. I validated Phase 0 “with modifications”, and those modifications became issues the agents are now working on.</p><h3>What I learned (so far)</h3><ul><li><strong>A precise, verifiable target is everything.</strong> “Build a backend” would have gone nowhere. “Match this exact behavior, checked by this judge” gives agents a direction.</li><li><strong>The judge matters more than the code.</strong> Most of my attention ended up on <em>how we measure</em>, not <em>what gets written</em>.</li><li><strong>Guardrails need enforcement, not prose.</strong> Branch protection, CODEOWNERS, protected paths, CI checks.</li><li><strong>You don’t need to be an expert to run an experiment like this.</strong> You need curiosity, a clear goal, and willingness to say “I don’t know” in public.</li></ul><h3>What’s next</h3><p>Level 1 is REST + Auth (email/password) at 95% conformance with no critical security issues. We’re not there yet. Then Realtime, Storage, and eventually running Supabase Studio unmodified against Megabase.</p><p>Will it ever reach 100%? Honestly, no idea. That’s the point.</p><p>If you’re curious, follow along on <a href="https://megabase.sh/">megabase.sh</a>, star the <a href="https://github.com/Zouhairmaj/megabase">repo</a>, view the design on <a href="https://kite.new/p/megabase-identity">Kite</a>, or open an issue. And if you’ve run similar experiments with coding agents, I’d really love to hear what you learned in the comments.</p><p>If you are an expert in Rust, please let me know how we can improve this experiment.</p><p><em>Megabase is an independent experiment, unofficial and not affiliated with Supabase.</em></p><p><em>Originally published at </em><a href="https://dev.to/zouhairmaj/i-asked-ai-agents-to-rewrite-supabase-in-rust-59o1"><em>https://dev.to</em></a><em> on October 10, 2026.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=be03d4fd0372" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Revolutionizing Public Procurement in Morocco with A.I: Why We Built Datao.ma]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://zou.medium.com/revolutionizing-public-procurement-in-morocco-why-we-built-datao-ma-5e2b1ff26d9a?source=rss-51a987cd3d7f------2"><img src="https://cdn-images-1.medium.com/max/2600/1*kUIYHzpGeojRbBNhA3mGxQ.png" width="3416"></a></p><p class="medium-feed-snippet">The landscape of public procurement in Morocco is shifting. Every year, the Moroccan government and state-owned enterprises launch&#x2026;</p><p class="medium-feed-link"><a href="https://zou.medium.com/revolutionizing-public-procurement-in-morocco-why-we-built-datao-ma-5e2b1ff26d9a?source=rss-51a987cd3d7f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://zou.medium.com/revolutionizing-public-procurement-in-morocco-why-we-built-datao-ma-5e2b1ff26d9a?source=rss-51a987cd3d7f------2</link>
            <guid isPermaLink="false">https://medium.com/p/5e2b1ff26d9a</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[morocco]]></category>
            <category><![CDATA[public-procurement]]></category>
            <dc:creator><![CDATA[Zouhair Majzoub]]></dc:creator>
            <pubDate>Tue, 10 Feb 2026 11:51:09 GMT</pubDate>
            <atom:updated>2026-08-05T08:11:37.814Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[12 Tips to Design an Awesome eCommerce Loyalty Program — Loyaly]]></title>
            <link>https://zou.medium.com/12-tips-to-design-an-awesome-ecommerce-loyalty-program-loyaly-8188b6d00eca?source=rss-51a987cd3d7f------2</link>
            <guid isPermaLink="false">https://medium.com/p/8188b6d00eca</guid>
            <dc:creator><![CDATA[Zouhair Majzoub]]></dc:creator>
            <pubDate>Sat, 16 Nov 2024 18:57:21 GMT</pubDate>
            <atom:updated>2025-02-18T17:18:23.470Z</atom:updated>
            <content:encoded><![CDATA[<h3>12 Tips to Design an Awesome eCommerce Loyalty Program — Loyaly</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*jCR9n2Nu6E02kMyd" /></figure><p>Loyalty design was pioneered by airline companies to give passengers discounts for buying tickets early in the form of miles. More recently, with the emerging of new technologies and social media platforms (Facebook, Instagram), loyalty programs have evolved from a traditional reward system to a vast collection of creative and personalized ways for customers to interact with the brand.</p><p>Loyalty programs are designed to define and reward customer behavior, keeping them engaged with the brand, and ultimately, buying more. Nowadays, e-commerce loyalty programs are all the rage online with big players like Amazon and Sephora using them heavily in their marketing strategies. Today, as e-commerce continues to grow even more rapidly due to the 2020 pandemic, online loyalty programs are becoming a priority for most online retailers to keep their customers engaged and shopping.</p><p>The importance of loyalty design to a loyalty program cannot be stressed enough. According to a study by Accenture, loyalty Program members boost revenue growth every year between 12 and 18 percent and 57 percent of customers spend more on brands or providers to which they are loyal. Furthermore, a study by Mastercard found that 74% of consumers are more likely to buy from brands that demonstrated concern and provided excellent care for customers during the pandemic. Indicating that while the misfortunes of 2020 had a significant influence on shopper purchasing behaviors, consumers who liked a brand stayed loyal despite the difficulties of the pandemic.</p><p>This means that <a href="https://loyaly.com/blog/retention/what-is-customer-retention-analytics-and-how-to-measure-metrics">customer retention</a> is just as important for your online store’s success as attracting new customers. Moreover, acquisition has proven itself to be costly and time-consuming. So if you want your business to thrive &amp; grow sustainably online, we recommend that you start looking for ways to make your loyalty design better. This applies before or after you’ve launched your own online loyalty program as there’s always room for improvement.</p><p>We’re sure you’ve already come across some loyalty design examples during your online shopping routines or when browsing through other e-commerce stores looking for inspiration. In fact, loyalty programs are all around us, even in places where we don’t expect them to be. Supermarkets have been using them successfully since the mid ’60s with their stamp cards. Even though loyalty design started as a paper-based system, nowadays most of these programs have an online version which offers much more opportunities for personalization and interaction with the customers.</p><p>A successful online loyalty program is not only beneficial for you but also for your customers. It starts with defining your clientele, then moves into the key components to consider when implementing your own loyalty program.</p><p>If you’ve been struggling to come up with ideas for what features should go into your program, this post will provide five tips to help get the design process started.</p><h3>Why should you keep an eye on your loyalty design structure?</h3><p>You want to make sure that your loyalty program is built in a way that helps you reach your sales goals. This means creating an experience where customers are more likely to return and purchase from your online store again.</p><p>There are three important reasons that make strategizing your rewards program structure very valuable in the long term.These reasons come up again and again, no matter what type of loyalty program you currently have or plan to develop.</p><h4>The structure is the basis of your strategy</h4><p>The first reason to pay attention to the loyalty design structure is that they may be utilized as a basis for developing your marketing plan in general. It also ensures consistency throughout all areas of your marketing plan, which is so important because it helps to build brand awareness and makes everything much easier in a way that makes sense to your customers’ journey map.</p><p>It is a fact that rewards can be very effective, especially when you are looking to incentivize customers, but it only works when it’s planned and implemented as part of a larger loyalty-management strategy. This includes making sure that all the elements of your loyalty program work together to achieve marketing goals. The structure is the foundation for integrating your other marketing programs, so there has to be a lot of consistency in the look and feel.</p><p>The structure of a loyalty program should also be flexible enough to allow for rapid changes in the future, especially if you want to keep ahead of the competition. The general idea is that you want to make sure that the design of your reward program fits in with everything else about your company and how it fits with your brand.</p><p>To further illustrate this, take a look at how Starbucks designed its loyalty program. It all begins with a clear mission statement on the homepage of their website: “Here’s to making moments special.” This is a great example of how Starbucks has integrated its loyalty program into the overall design. In fact, this statement is printed on every receipt they give out. They also use this statement throughout their social media accounts to further install it in their customers’ mind &amp; stay consistent with the brand.</p><h4>The structure determines the behavior</h4><p>The second reason is that it affects how consumers behave with your brand when they participate in a program. Members of a rewards program are more likely to spend more time on the website or purchase more items on an online store if they feel fairly rewarded for their behavior. This means that any changes in the loyalty program structure will also affect the behavior of customers participating in them.</p><p>Loyalty design is also crucial when it comes to maintaining customers who are just beginning to participate in your programs. According to Segment, 54 percent of consumers expect to receive a personalized discount within 24 hours. If you don’t offer enough value in the beginning, customers will progress quickly through the customer journey and fail to grow any deeper attachments with your brand.</p><p>It’s also important to remember that customers are different, so you need to focus on their specific needs and goals. This is why it’s important that the structure of your loyalty program allows for some sort of personalization. This could be achieved by allowing customers to select their own preferences and customized experiences according to their needs. Customer segmentation can also be a useful tool to make sure that every customer gets the recognition and attention they deserve.</p><p>By making sure that you structure your loyalty program with your customers in mind, it will be easier to keep them engaged and satisfied. In the end, it’s all about creating a win-win situation where you can get an edge over your competitors. So it’s important that you have a clear plan for how the program is going to work before jumping into the design</p><h4>The structure determines the costs</h4><p>The third reason is that it affects how much the program will cost you. The costs associated with developing a loyalty program are directly related to the number of people that will be participating in it. More customers means more effort required for the development process. This is why it’s important to pay attention to the design structure from the beginning because you don’t want your costs to get out of control.</p><p>Rewards program structures correspond directly to how your company will see a return on its investment, meaning if you lack a clear strategy, you’ll likely end up with a slim profit margin or even an operating loss. Ultimately, your ROI should outweigh your costs.</p><p>It’s also important to remember that costs are related not only to the cost of development, but also to the cost of maintaining and supporting your program. This doesn’t mean you should focus solely on cost-cutting, but it’s important to remember that costs should be kept under control so you don’t go over budget. Datao est un <a href="https://datao.ma/">portail des marchés publics</a> au Maroc propulsé par l’intelligence artificielle.</p><p>The good news is that there are easy-to-implement solutions that can help you minimize the costs of your loyalty program. For example, a tiered system where customers spend more to get additional benefits, or a customer referral program where existing customers help promote the product and bring in new members. Another way is by sticking with simple design for the loyalty program and focusing on what really matters, which in this case is your customer’s needs. This means that you should make sure to provide extra value for every purchase they make when participating in the program. The more value you provide, the fewer points they need to redeem rewards. This means that your costs will remain low even if there are a lot of customers participating in your program.</p><p>One of the most important requirement for your company is to ensure that your loyalty program operating cost does not exceed the budget of managing it.</p><h3>How to design an effective loyalty program?</h3><p>A good online loyalty program structure should have at least one commercial goal. In other words, each action of the customer needs to bring value for both parties involved in some way or another, whether monetary/quantitative or qualitative. An example would be if you give out loyalty points to your customers in return for their purchase, but you also give them the chance to be included in a draw with an opportunity to win something.</p><p>This is because this type of reward will not only make the consumer feel like they are getting more value out of purchasing from you (which can encourage future purchases), it will also increase brand awareness and create a sense of belonging. At the same time, it can also lead to higher loyalty because customers will feel like they are part of something bigger than just buying from you.</p><h3>What does an effective online loyalty program structure look like?</h3><p>There is no specific formula for designing a good customer relationship management strategy that works best in all contexts. However, there are some important structures that you should always keep in mind when designing your loyalty program so as to give your customer the best experience possible :</p><h3>Think about your loyalty programs’ cost structure</h3><p>It is often a good idea to have the costs of the rewards vary depending on their value. This way, people will feel like they are getting the best deals on your site.</p><p>However, it can also be a good idea to create rewards that are more expensive for better value. This way, you can create a sense of prestige and exclusivity around your program instead of just something everyone can have access to.</p><p>Loyalty programs should not erode your margins, as such, you should always try to find a balance between the value of your rewards and their costs as well as how many people you want to be able to access them.</p><p>A good way to manage loyalty program costs is to be aware of the following:</p><p>- The cost per customer metric</p><p>- Low, medium, and high-value customers, as well as those who fall in between these different levels of profitability.</p><h3>Define your objectives and KPIs</h3><p>It is important to define your objectives and KPIs before creating a loyalty program. This will help you figure out what type of rewards or actions you want to incentivize.</p><p>It’s also crucial to establish these, as well as experiment with ways of quantifying them so that you can distinguish whether your program is effective or not. For instance, if you want to encourage more frequent buyers on your site, you should measure how many customers made a purchase within a certain period of time after they signed up for your program. This way, you can monitor whether or not the program is effective at increasing this metric.</p><p>In addition, you have to measure the ROI of your program so as to determine whether or not it is worth it for your business. If you can’t measure the effectiveness of a program, then there’s no point in having one to begin with</p><h3>Choose a great name</h3><p>Great, clever, and creative names are essential for loyalty programs because they can have a huge impact on their success. In other words, the name should be catchy and easy to remember so as to make it spread across the web and social media.</p><p>Naming your loyalty program is an important step to take when designing it because a great name can actually be what makes or breaks its success. These create a sense of belonging with your consumers and make them feel like they are part of something bigger than just buying from you.</p><p>For example, if you’re a sportswear brand and want to create an online loyalty program that encourages your customers to purchase more often from you, you might want to use a name like “Speed” or “Kick It Up!” which both have the double meaning of being related to the sport, while also being something that your customers can relate to. In this way, you are using a name that has two meanings and that will appeal to your audience in a way that is both relatable and memorable.</p><h3>Pick the right rewards</h3><p>When deciding what kind of rewards to offer, you should consider your target audience. A loyalty program for a pet store might not be the best fit for an ecommerce site that sells high-end electronics. Some examples include gift cards or discounts on future purchases; however, if there are specific products that customers use often then offering rewards on those items will keep them coming back.</p><p>Furthermore, think about rewarding loyal customers with special prizes (one way to do this is by having dedicated programs such as loyalys’ membership tiers including VIPs, or those who make the most number of purchases) or soft benefits such as early access or permanent free shipping to your highest tiers.</p><p>Membership structures should be flexible- offers should be customized to the customer base and tailored according to specific frequency of visits or spending patterns. For example: frequent shoppers can earn points at a faster rate than infrequent shoppers. Those who purchase higher priced items can also benefit from increased point incentives than those who spend less.</p><h3>Make it easy to activate rewards</h3><p>It’s important that customers find it easy and quick to redeem rewards when they want them. The easier it is for them, the more likely they will be to use their points and turn them into rewards. You should make sure that your loyalty program is easy for customers to find, especially across every channel of communication you have with users such as email, websites and apps. A great way to accomplish this is by including a link in the most frequently used pages on your site like the checkout page or the shopping cart page.</p><p>In addition, you could make it easy for your customers to redeem their points by having an online catalogue of available prizes using a loyalty program software.</p><h3>Make your program easy to find</h3><p>If customers can’t find it then they won’t use it. To avoid this, you should make sure that your loyalty program is easy to find on your website. One way of doing this is by adding a link to it from the main navigation menu or as part of your welcome message, which would require some technical expertise.</p><p>An easier way to do this, is by using Loyaly’s customizable widget. You can match it to your website’s look and feel, &amp; the widget will be seamlessly integrated on your website noCode required.</p><h3>Reward engagement beyond the purchase</h3><p>One of the best ways to create a better loyalty program is by rewarding customers for their actions and interactions on your website. This includes things like referring friends, taking polls and filling out customer satisfaction surveys. These types of rewards can work in two different ways: they can either provide something of value to the customer (such as rewards) or make it easier and more likely for them to complete a certain action (i.e., by removing steps like having customers input their email address).</p><p>In addition, you could use sign-up rewards to encourage new and existing customers to join your loyalty program, which is one of the best ways to stay in touch and give them updates on new products or sales.</p><h3>Give out rewards in a timely manner</h3><p>As soon as the customer has earned enough to exchange for something, they should be able to use their reward. You can do this by taking advantage of loyalty programs’ features like point balances and automatic redemptions, which will allow the customer to redeem their points as soon as they have enough of them.</p><p>Another way you can do this is by having a real-time widget on your site so that customers can see their balances and redeem them right away.</p><p>Rewards should be simple to implement. Your loyalty program must have a fast redemption process with easy-to-understand reward options that can easily be shared on social media</p><h3>Don’t offer too little or too much</h3><p>In general, the more you give away the more likely customers are to join and remain active participants. You can use loyalty programs as a way to gain customer insights into what they want from your business by offering relevant rewards that reflect their interests.</p><p>Keep in mind though, if you offer too many incentives it may turn users off and make them feel like they’re being spammed.</p><h3>Employ gamification</h3><p>Gamification is a great way to make your loyalty program more engaging and help customers stay interested. There are many different possibilities you can explore with this such as offering points for completing tasks or challenges, encouraging competition between friends through leaderboards, etc. The key here is to offer rewards that appeal to the interests of your customer base.</p><p>The use of gamification in e-commerce loyalty programs is a great way to make them more engaging and help customers stay interested.</p><h3>Make sure your program is mobile friendly</h3><p>According to a study by InMobi, 70% of customers use their smartphone while shopping and 45% do so when they’re on the go. This means that if you don’t have a great loyalty program for smartphones or tablets then you could be missing out on huge opportunities! It’s important to make sure that your program is accessible and easy to use on mobile devices. By keeping it simple you will be able to offer a better experience for users, especially if they want rewards while on the go.</p><h3>Stay in touch with your customers</h3><p>Lastly, it’s important to always stay in touch with your customers. You should send out newsletters that include updates on new products, sales and the latest happenings in their favorite categories. The more personalized the better, as this will make customers feel like they are still an important</p><p>The best ecommerce loyalty programs are those that take into consideration their target audience’s wants and needs in order to create something truly engaging. Pour postuler aux <a href="https://datao.ma/">appels d’offres au Maroc</a>, il faut télécharger le CPS et envoyer un dossier complet.</p><h3>7 real life examples of an awesome online loyalty eCommerce</h3><p>To give you more real-world examples of what an effective e-commerce loyalty program might look like, let’s briefly analyze the following loyalty programs structure :</p><h3>Amazon Prime</h3><p>Amazon’s loyalty program was launched in 2005. In order to be part of Amazon Prime, users have to pay a fee per month or year and take advantage of several benefits such as free shipping on all products.</p><p>By being part of this powerful business ecosystem, customers are more likely going back for other purchases because they already paid a fee to be a member of the program.</p><p>In addition, this is an example where free shipping became one of the main drivers for customers coming back and buying more from Amazon. In fact, it’s estimated that Prime members spend about double compared with their non-Prime counterparts .</p><p>With over 100 million users being part of its loyalty program , Amazon Prime is definitely one of the most successful online loyalty programs in place today.</p><h3>Zappos</h3><p>Another great example to look at when it comes to loyalty e-commerce and free shipping, we have Zappos . This company was acquired by Amazon for $850 million back in 2009. They specialize in shoes and clothing items but also offer a wide range of other products.</p><p>In order to create strong customer loyalty, Zappos has been offering free shipping on all purchases since the beginning of their business activity . Even though they have recently created a membership program , called Zappos Insider Rewards , where customers can get discounts and other benefits based on how much they purchase from them every year, this company still offers free shipping on all orders.</p><p>This is a great example of how companies can turn their offline presence into an attractive e-commerce environment with several benefits for its customers, along with free shipping on purchases.</p><h3>Sephoras’ Your beauty insider loyalty program</h3><p>Another example of an online loyalty e-commerce is Sephora . This cosmetics company has been offering a program called Beauty Insider since 2009 in order to reward its customers for their purchases. In fact, the more a customer spends with them, the higher status they get and thus have access to exclusive deals and promotions.</p><p>In addition, Sephora allows its customers to earn points through different activities, such as sharing their favorite products on social media .</p><p>This is a great approach for companies who want to reward not only the most loyal of their customer base but also engage them more in order to get feedback about new products and services they could create.</p><p>Furthermore, their loyalty programs design is easy to use and understand for their customers, and has been a major contributor to Sephora’s growth over the past few years.</p><h3>Walmart+</h3><p>In 2020, Walmart decided to launch a new loyalty program called Walmart+, where customers can earn and redeem cash rebates directly on their accounts. This is the result of an expanding relationship between them and Ibotta , who has been operating in this space since 2018 . Customers will be able to use these rewards at checkout, for grocery delivery orders or purchase on Walmart.com or from within the Walmart app itself.</p><p>In addition, Walmart+ members will have access to the Black Friday deals before everyone else, starting on November 13th of this year, with four hours of early shopping available . Other benefits include free and unlimited grocery deliveries to the home for orders of $35 or more, and access to an app that allows customers to skip the checkout line for a yearly membership fee of 98$ a year or 12.95$ monthly.</p><p>This is another example where companies are using loyalty programs in order to engage customers and turn them into advocates for their brand. Not only can they earn cash back by making purchases but also gain exclusive discounts and benefits during the holiday season.</p><p>Furthermore, since Walmart has an estimated 32 million U.S. households enrolled in its program, they see this as a great opportunity for growth, especially at a time when many shoppers are worried about online out-of-stocks during the hollidays.</p><p>With this in mind, it’s easy to see why Walmart is betting on its loyalty program and how companies can use these types of initiatives to drive more revenue for their business while rewarding loyal customers .</p><h3>Costa Coffee loyalty program</h3><p>The new program is called “Costa Club” and it replaces their previous one (which launched back in March 2010) where customers could get points and gain access to exclusive benefits. This is a great initiative for companies who want to engage their customers in different ways while rewarding them with more than just discounts.</p><p>This new program was created after taking input from 17,000 consumers about what they wanted out of the loyalty programs . Another interesting aspect that sets this apart from other similar initiatives is how it will be integrated with the Costa mobile app, providing customers with more opportunities to earn and redeem points through their smartphones.</p><p>The new service departs from a points-based loyalty program. After purchasing eight coffees, customers may earn a free drink of their choosing. Costa Coffee is offering a free drink to anyone who uses a reusable cup to buy four drinks until 31st March 2022. Customers will also receive one free cake on their birthday, as well as other rewards and treats.</p><p>In addition, the loyalty program will be free to join and open for anyone. It is expected that it will have a positive impact on the company’s revenue, as it will be able to attract more customers and keep them engaged throughout the year.</p><h3>The Body Shop</h3><p>The Body Shop , a cosmetics company based in the UK, has been offering customers their Love Your Body Club loyalty program since 2013. This global program is currently active in 56 countries and allows its members to enjoy benefits such as one free product every time they spend over $40 and invitations for exclusive events .</p><p>The main reason it has succeeded is that it allowed customers to earn points in exchange for their purchases, which they could later on redeem in the form of free products or discounts.</p><p>This approach has helped The Body Shop create greater value for its customers and increase sales at the same time.</p><h3>Emirates airlines’ loyalty program</h3><p>Emirates has one of the biggest loyalty programs in the airline industry. Their program is called “Skywards” and it was launched back in 1981. Customers who want to join this program have to be members of Emirates Skywards Blue, Silver, Gold or Platinum tier.</p><p>As a member, they will have the opportunity to enjoy great benefits such as earning miles for all flights and getting access to airport lounges. They can also redeem their points for free upgrades on specific routes , along with extra baggage allowances , priority check-in and boarding, seat selection, lounge access, dedicated phone line or email address.</p><p>Emirates tiered system recognizes that not all customers are created equal. This allows them to reward their highest-value customers, such as business class travelers, who spend a lot more on their flights and travel more frequently. On the other hand, blue &amp; silver members who spend less can still enjoy a number of perks, which will encourage them to fly more frequently with Emirates. You can also move up the ladder by using a Skywards co branded card, where you can pay for your everyday purchases and earn Tier Miles for the Skywards Miles you earn.</p><p>Another interesting aspect of the program is that it offers so many options for customers to gain benefits. This includes purchasing products directly from Emirates, as well as other things such as hotel stays and car rentals. This loyalty program has helped Emirates reach a large number of potential customers who are looking for great rewards in return for their purchases.</p><p>This is a good example of how creating multiple tiers based on the value that each customer brings can be effective in terms of loyalty programs.</p><h3>Conclusion</h3><p>In conclusion , there are many great examples out there when it comes to designing an online loyalty for e-commerce that you can learn from. However , what matters in the end is to design an effective customer loyalty program that can bring real results to your business &amp; significant value to your customers.</p><p>As you can see, there are several different ways in which online retailers make use of the power of rewards such as free shipping offers, discounts or other soft benefits. This is why it’s so important for e-commerce businesses to understand how they work and what benefits they offer.</p><p>Only after understanding the basics, you will be able to build a powerful loyalty program that can bring real results.</p><p><em>Originally published at </em><a href="https://loyaly.com/blog/loyalty/tips-to-design-a-customer-loyalty-program-for-ecommerce"><em>https://loyaly.com</em></a><em>.</em></p><p><a href="https://bit.ly/41kq7HK">https://bit.ly/41kq7HK</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8188b6d00eca" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to boost engagement in your loyalty program with membership tiers]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://zou.medium.com/how-to-boost-engagement-in-your-loyalty-program-with-membership-tiers-4312d77d9df6?source=rss-51a987cd3d7f------2"><img src="https://cdn-images-1.medium.com/max/2600/0*46HDaKvxLxPSIKt2" width="2600"></a></p><p class="medium-feed-snippet">Adding membership tiers and levels to your online loyalty program can be a great opportunity to close the gap between brand loyalty and&#x2026;</p><p class="medium-feed-link"><a href="https://zou.medium.com/how-to-boost-engagement-in-your-loyalty-program-with-membership-tiers-4312d77d9df6?source=rss-51a987cd3d7f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://zou.medium.com/how-to-boost-engagement-in-your-loyalty-program-with-membership-tiers-4312d77d9df6?source=rss-51a987cd3d7f------2</link>
            <guid isPermaLink="false">https://medium.com/p/4312d77d9df6</guid>
            <category><![CDATA[loyalty]]></category>
            <category><![CDATA[loyalty-program]]></category>
            <category><![CDATA[customer-engagement]]></category>
            <category><![CDATA[ecommerce]]></category>
            <category><![CDATA[loyalty-marketing]]></category>
            <dc:creator><![CDATA[Zouhair Majzoub]]></dc:creator>
            <pubDate>Tue, 23 Nov 2021 18:33:56 GMT</pubDate>
            <atom:updated>2023-05-19T13:32:55.180Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Five Reasons to Get a Loyalty Program for Your Online Store]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">In today&#x2019;s fast-paced world, loyalty programs are more important than ever. As consumers, we demand convenience and instant gratification&#x2026;</p><p class="medium-feed-link"><a href="https://zou.medium.com/five-reasons-to-get-a-loyalty-program-for-your-online-store-c6377df388ac?source=rss-51a987cd3d7f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://zou.medium.com/five-reasons-to-get-a-loyalty-program-for-your-online-store-c6377df388ac?source=rss-51a987cd3d7f------2</link>
            <guid isPermaLink="false">https://medium.com/p/c6377df388ac</guid>
            <category><![CDATA[loyalty-program]]></category>
            <category><![CDATA[loyalty]]></category>
            <category><![CDATA[loyalty-marketing]]></category>
            <category><![CDATA[loyalty-rewards-program]]></category>
            <category><![CDATA[retention-marketing]]></category>
            <dc:creator><![CDATA[Zouhair Majzoub]]></dc:creator>
            <pubDate>Thu, 09 Sep 2021 16:32:35 GMT</pubDate>
            <atom:updated>2025-02-18T17:16:35.456Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Building “Utility-first” Design Systems (Part 1)]]></title>
            <link>https://uxdesign.cc/building-utility-first-design-systems-part-1-52ce020630b?source=rss-51a987cd3d7f------2</link>
            <guid isPermaLink="false">https://medium.com/p/52ce020630b</guid>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[figma]]></category>
            <category><![CDATA[user-experience]]></category>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Zouhair Majzoub]]></dc:creator>
            <pubDate>Mon, 04 Nov 2019 09:00:00 GMT</pubDate>
            <atom:updated>2026-01-03T05:04:38.862Z</atom:updated>
            <content:encoded><![CDATA[<h3>Building a “utility-first” design system with Figma &amp; Tailwind CSS</h3><h4>A collaborative workflow for building Design Systems with the best developer experience, in record time.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Uud9GSq9DhCDB2MRmxhTlA.png" /></figure><blockquote><em>ℹ️ This is the first chapter of a 3-part series on developing efficient &amp; practical design systems for result-driven teams. You will find an introduction to the workflow &amp; explanation of all the main steps involved. In the next articles, we’ll dive deeper into these concepts &amp; ideas with a real-life example of a whole workflow from the building the design system to deploying a ReactJS app.</em></blockquote><p>⏱ <strong>TL;DR:</strong></p><ul><li><em>Design systems shouldn’t be considered a simple task nor should it be a theoretical concept for designers only.</em></li><li><em>Design systems should empower developers &amp; offer a common language with the designers for optimal collaboration.</em></li><li><em>By adopting the utility-first CSS methodology &amp; Tailwind’s configuration file, designers get a clear structure for their design systems while developers can swiftly work with the generated classes without adding new CSS</em></li><li><em>This workflow provides for clarity &amp; structure when both teams are working on their respective files, and allows for cleaner code, higher velocity, and easier to maintain.</em></li></ul><h4>Part 1:</h4><blockquote><em>Design is not just what it looks like and feels like. Design is how it works.</em><br><strong>- Steve Jobs</strong></blockquote><h3>Getting started</h3><p>Creating a design system from scratch should be considered a long term plan, not a one-time assignment on your to-do list. In this collaborative documentation, organizations must outline all the information required to speed up the design handoff and serve as a <strong>source of truth</strong> for all future designs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IUbSXAQuq4C01mgtkzwRyA.png" /><figcaption>Brad Frost — <a href="https://www.youtube.com/watch?v=TgWyyoofKIA">The Technical side of Design Systems</a></figcaption></figure><p>This collaborative work between <a href="https://www.marketricks.com/">UX Design</a> &amp; Engineering teams can be challenging and can lead to an increase in frustration among your team members if not done correctly. In this article, we’ll have a quick look at one of the many tactics that companies can add to their workflow to build the <a href="https://adele.uxpin.com/">best design systems</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*L42wp_dpHef_TtaHv5LAAQ.png" /><figcaption>Example of a good design system documentation: Shopify’s <a href="https://polaris.shopify.com/">Polaris</a></figcaption></figure><h3>Finding a common language</h3><p>In software development, it appears that a lot of teams base their production on an “abstract” design system or style sheet provided by the designers, made of some pdf or worst, giant png files. More qualified teams tend to use online tools like inVision, Marvel or Zeplin, giving only a visual depiction of the expected result. Nevertheless, this comes with no development guidelines, offering only basic generated CSS that can sometimes be unreliable.</p><p>This absence of detail and structure produces a discrepancy in various parts in the design files as well as the codebase (like shadows, sizes, spacing, button sizes, corners are often the worst examples of this..).</p><blockquote><strong><em>Without intent, structure never grows, only chaos emerges.</em></strong></blockquote><p>This circumstance leads to a messy codebase, each developer following his workflows, ideas, and conventions. Add it to the high employee turnover that this industry is having and we can find ourselves in situations where no one understands what the former developer did on certain components. It becomes even more cumbersome in long projects with bigger teams, where collaboration becomes the most important element for success.</p><p>A good example of this situation was visible on the <a href="https://18f.gsa.gov/2015/09/28/web-design-standards/">US Government’s websites before they changed their strategy and started implementing a design system</a>. When they analyzed all of their websites, they found out that they had too many variations of the same components, creating a big confusion for designers and developers on how to structure their work.</p><p>Users also get confused when they don’t find a logical pattern on your components like here:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yGgCZjloibINvrgvJs-qAw.png" /><figcaption><a href="https://18f.gsa.gov/2015/09/28/web-design-standards/">Example of too many different style variations of the same component</a></figcaption></figure><p>To fix these issues, the team must first decide on a common vocabulary &amp; workflow. One popular solution is to use frameworks based on Bootstrap, Bulma or Google’s Material Design (like <a href="https://material-ui.com/">React’s Material UI library</a>) that provides us a good base for building our software. This solution holds many benefits, particularly at the beginning of the project, but it can become questionable in the long term in certain situations.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GqmdBt71gBOQTjtZYhz6JQ.png" /><figcaption>Example of components built with Google’s Material UI</figcaption></figure><p>Building commercial software demands a big investment in the user experience and user interface. Long gone are the days where basic Bootstrap-based apps would be acceptable for users, who expect an experience tailored to their needs. When building a <a href="https://www.marketricks.com/why-you-should-embrace-a-product-led-growth-strategy-and-how-to-get-started/">product-led growth strategy</a>, every details matter.</p><p>We also get to a point where designers lose the sense of ownership of their work and the overall user experience gets lost in various design files and CSS. In every stage of development, designers should be able to have a representation of all the screens involved in the user experience to keep a clear picture of the complete workflow and customize the elements following the brand’s guidelines.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oeJsbXtngBWP_arzVGPb_A.png" /><figcaption>Brad Frost — <a href="https://www.youtube.com/watch?v=TgWyyoofKIA">The Technical Side of Design Systems</a></figcaption></figure><h3>Building design systems from scratch</h3><p>When we want to go full custom design we then found ourselves in a difficult position: Should we write every code from scratch risking to fail to keep a good structure OR should we customize an existing framework like material design and spend a lot of times on it to fit the desired experience?</p><p>We need to find the middle ground between these two situations to accelerate the workflow, particularly when one of the goals is to build a custom design for our app. This objective can only be accomplished by establishing a common language of the various components of the design system.</p><p>One of the most popular trends in the design community is called Atomic Design and was created to give a structure to our design work. This work by Bran Frost was adopted by a lot of designers and team when searching for a good methodology, hoping for some best practices to follow. In his book, the author describes a methodology composed of five distinct stages working together to create interface design systems more deliberately and hierarchically.</p><p>The five stages of Atomic Design are atoms, molecules, organisms, templates, and pages.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*V_64PZww6CSQXEFe.jpeg" /></figure><p>This leads to designers organizing their workflow around this structure and makes creating components very easy. Using the powerful components and symbols features in design tools like Sketch and Figma, this work can even be faster with shortcuts to each element:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*NdFnxzMO4TYQFDdK.png" /></figure><blockquote><em>⚠️ However, this architectural representation is focused more on the designer’s point of view and less about the technical outlook. It does not take into account the structure of the project’s CSS file. (Styled components, OOCSS, BEM, Utility first…?) To be more practical, we need to incorporate the development team’s ideas and accommodate the design system files to their CSS strategy.</em></blockquote><p>Brad Frost, the author of Atomic Design, <a href="https://webdesign.tutsplus.com/articles/structuring-sass-saying-goodbye-to-atomic-design-ambiguity--cms-26679#comment-2776906874">has since clarified the fact that its methodologies don’t dictate any CSS structure</a>. Instead, it offers a mental model for thinking about constructing user interfaces.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*K3_px7PfXLvUNDIB.png" /></figure><p>Now that we understand this, shouldn’t another solution exist?</p><h3>Focusing on the developer experience</h3><p>Instead of adding another language or an abstract concept (like Atomic Design) why not use an already existing one in our project (like CSS) to get the best developer experience possible? To achieve that result we need to dig a little deeper on the different CSS strategies that offer the best possible developer experience while still making it easy for designers to contribute to this workflow.</p><h3>Nelly Hempel on Twitter</h3><p>@danmall about Design Systems 😬 @clarity_conf</p><p>One of the most popular and growing options is called TailwindCSS and relies on utility-first CSS and configuration files to build all the CSS files, components, and structure for our software. <strong>It’s the framework that shows the most satisfaction and interest coming from the developer community.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ceq9JteKuwBdBwkbsUriQw.png" /><figcaption>Tailwind CSS has the highest satisfaction rate among the developers who had the opportunity to work with it. Source: <a href="https://2019.stateofcss.com/technologies/css-frameworks/">“The State of CSS 2019”</a></figcaption></figure><p>The goal of this article is not to present utility-first CSS as a holy grail, but to give a different perspective for designers who are looking to improve their workflow to build the most practical design systems. To achieve that we need to give a proper definition of utility-first CSS and understand its strengths and weaknesses.</p><p>Example of a notification component using utility-first CSS (with TailwindCSS):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*2_1jInVGEPhUPwIt.png" /></figure><p><strong>Utility-first CSS</strong>, also called <a href="https://www.smashingmagazine.com/2013/10/challenging-css-best-practices-atomic-approach/">Atomic CSS</a> or <a href="https://rangle.io/blog/styling-with-functional-css/">Functional CSS</a>, is the notion of composing small single-purpose classes with names based on visual function instead of arbitrary class names to apply styles to components. Using this approach, we can identify some interesting advantages for the development team:</p><ul><li>It’s easier to visualize what something looks like just by reading the markup.</li><li>You don’t have to write any CSS of your own, use only existing classes</li><li>You don’t ever have to worry that changing the styles, for one thing, will break something else (which may make visual regression testing irrelevant)</li><li>No more wasting time inventing bad class names like this-wrapper, that-body.</li><li>Breakpoint prefixes make responsive a lot easier (no more media queries)</li><li>Customizable to the core. You can add your utility classes while still making use of breakpoints, pseudo-classes, etc.</li><li>No framework lock-in that dictates how your buttons etc. should look and feel like. This will make your design unique.</li></ul><p>There are of course a lot of other advantages to utility-first CSS, but the focus of this article is only to serve as an introduction to this concept. If you are interested in reading more about it, <a href="https://johnpolacek.github.io/the-case-for-atomic-css/">this page lists articles that cover this topic</a>. To make things much more pragmatic, we’ll use the most popular utility-first CSS framework as a base of our workflow.</p><h3>Working with TailwindCSS</h3><p>In this article, we will outline one of many approaches in building a design system by adopting the Utility-first CSS &amp; configuration-based workflow that you can find in <a href="https://tailwindcss.com/">Tailwind CSS</a>. This open-source framework provides low-level utility classes generated from the configuration file that let you build completely custom designs without ever leaving your HTML.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*MkjEKFq1sTD8m8uk.png" /></figure><p>Tailwind defines itself as <strong>“more than a CSS framework, it’s an engine for creating design systems.”</strong></p><p>Tailwind is different from frameworks like Bootstrap, Foundation, or Bulma in that <strong>it’s not a UI kit</strong>. They come with all sorts of already developed components like buttons, cards, and alerts that might help you move quickly at first, but cause more pain than they cure when it comes time to make your site stand out with a custom design. It doesn’t have a default theme, and there are no built-in UI components. Instead of customizing existing elements, the CSS classes are generated following the submitted Tailwind configuration file.</p><pre>module.exports = { important: true, theme: { fontFamily: { display: [&#39;Gilroy&#39;, &#39;sans-serif&#39;], body: [&#39;Graphik&#39;, &#39;sans-serif&#39;], }, extend: { colors: { cyan: &#39;#9cdbff&#39;, }, margin: { &#39;96&#39;: &#39;24rem&#39;, &#39;128&#39;: &#39;32rem&#39;, }, } }, variants: { opacity: [&#39;responsive&#39;, &#39;hover&#39;] } }</pre><p>With Tailwind, you can generate a complete CSS framework based on a <strong>configuration file that represents and outlines all the elements of your design system</strong>.</p><p>Roughly speaking, the value prop of Tailwind is to accomplish, with a bunch of well thought out CSS classes, what otherwise would take you 10 years to do manually (and likely wrongly), with 100 levels of HTML / JSX nested tag soup</p><h3>Guillermo Rauch ▲ on Twitter</h3><p>Roughly speaking, the value prop of Tailwind is to accomplish, with a bunch of well thought out CSS classes, what otherwise would take you 10 years to do manually (and likely wrongly), with 100 levels of HTML / JSX nested tag soup It&#39;s really good. https://t.co/jB8goAxZeJ https://t.co/ETNGXj7eth</p><p>One of the best aspects of Tailwind is the ability to build screens much faster than the traditional CSS approach. Here is a good example made in 2 hours only by Adam Wathan, the creator of Tailwind:</p><h3>Adam Wathan on Twitter</h3><p>This is where we got with the stream - not bad for 2 hours! 🥳 https://t.co/ovbzeBCbVK</p><p>If you want to see the 2-hour live stream, the replay is available on Youtube:</p><h3>Building a workflow</h3><p>By making designers a part of the Tailwind configuration step, we create a clear workflow between them and developers:</p><ol><li>The design team builds the app screens with a design system that follows the structure of the <strong>Tailwind</strong> configuration file.</li><li>The design &amp; development team work together to translate the design files into a TailwindCSS JSON config file.</li><li>The CSS files are generated from this configuration using Tailwind &amp; PostCSS to be integrated into the codebase.</li><li>Developers style every component based on the generated CSS using the utility-first approach and publish them on Storybook</li><li>The unused CSS classes are deleted after each build with PurgeCSS and a proper CI/CD workflow.</li><li>Components are shared with the team and imported on projects via Bit.dev</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*F5vSiN0_a1TD3uzCIT-UtQ.png" /><figcaption>Utility-First Design System Workflow</figcaption></figure><p>You can, of course, use Sketch (or other tools) instead of Figma and VueJS, AngularJS instead of React. Use whatever tool fits your teams’ preferences and experience. This process is what we used at <a href="https://datao.ma/">Datao</a> to build our solution for the “ <a href="https://datao.ma/">Marchés publics au Maroc</a> “ very quickly. Same process was used at dotname to build the frontend and UI of the best <a href="https://dotname.app/">AI domain name generator</a> .</p><h3>Finding shortcuts</h3><p>Utility-first CSS forces the developers on your team to not invent any new CSS Class each time they need to style a component, but they apply pre-existing classes directly in your HTML. Adopting a Utility-first approach will give you a lot of benefits, the purpose of this article is not to dive deep into it but to show what can designers do to make the configuration and CSS generation easier.</p><p>You can also find interesting projects, libraries or plugins that use the strength of the Tailwind configuration file like this Figma plugin that generates styles based on the Tailwind configuration:</p><p>📦 <a href="https://www.figma.com/c/plugin/738806869514947558/Tailwind-CSS">Figma — Tailwind CSS | Generate styles and other cool stuff straight out of your tailwind config file? This plugin alrea…</a></p><p>Another example is this great VSCode plugin that provides great suggestions as you write your component’s style code. It also includes features that improve the overall Tailwind experience, including improved syntax highlighting, and CSS previews:</p><p>📦 <a href="https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss">Tailwind CSS IntelliSense</a></p><p>However, one of the few drawbacks of this workflow is that using Tailwind leads to a massive CSS file, caused by the big number of classes generated from the config file. To simply fix this issue, we add in our workflow tools like <a href="https://www.purgecss.com/">PurgeCSS</a> that will delete all the unused CSS classes. We then get the best of both worlds: the developers have access to a large list of existing CSS classes that represent what the design team imagined, while still keeping the final output as small as possible fo the production build.</p><h3>Louis Cuvelier 🤖 on Twitter</h3><p>Before, with @getbootstrap : 3 CSS files, 372 Ko, 78,5 Ko Gzip After, with @tailwindcss : 1 CSS file, 61 Ko, 9 Ko Gzip 🤯 Tailwind is so insane. A real life changer as web dev ! Thanks @adamwathan 😍</p><blockquote><em>💡 If you are curious and want to learn more about utility-first CSS, I recommend you read </em><a href="https://tailwindcss.com/docs/utility-first"><em>Tailwind’s excellent documentation.</em></a></blockquote><p>If you want to see an example of a complete page built with Tailwind, you can look at various examples on the website <a href="http://tailwindcomponents.com/">tailwindcomponents.com</a> like this clone of the Slack interface:</p><p>If you want to look at a real-world example on using Tailwind in a big project, Algolia published on their blog the strategy they applied to build a scalable CSS architecture when redesigning their documentation: <a href="https://blog-api.algolia.com/redesigning-our-docs-part-4-building-a-scalable-css-architecture/">https://blog-api.algolia.com/redesigning-our-docs-part-4-building-a-scalable-css-architecture/</a></p><h3>Structure of a “utility-first” design system</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lblnLqvDC2myrRS-QC2EUg.png" /></figure><p>Now that we understand the power of this workflow, what are the parts that designers should outline on their design systems to write the configuration files later on? By analyzing the Tailwind configuration file, we can identify these elements and answer this question. Let’s see some examples of these configurations:</p><p>To make your life easier, you can use the Tailwind Figma Kit made by Impulse to serve as a base for your work. All the following examples are based on this kit made by Impulse:</p><p>🔗 <a href="https://github.com/impulse/tailwindcss-figma-kit">impulse/tailwindcss-figma-kit</a></p><h3>Colors</h3><p>Colors represent one of the most basic but still fundamental elements of a design system. Following Tailwind’s configuration, colors represent the first block that should be outlined as it will a part of every other component we build. Tailwind offers a default color list but you can always override them with your colors. Naming is also your responsibility and I find the convention proposed by Tailwind to be somehow effective.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*IL0HzN676irsJfGN.png" /></figure><p>Colors are represented this way in the tailwind.config.js file:</p><pre>module.exports = {<br>  theme: {<br>    colors: {<br>   grey-100: &#39;#F7FAFC&#39;,<br>   grey-200: &#39;#EDF2F7&#39;,<br>   grey-300: &#39;#E2E8F0&#39;,<br>   grey-400: &#39;#CBD5E0&#39;,<br>   grey-500: &#39;#A0AEC0&#39;,<br>    }<br>  }<br>}</pre><h3>Screen (breakpoints)</h3><p>Designing for multiple screens must be a critical part of your product strategy. As each project is unique, you must first define what are the screens the user care most about. Not all projects need a mobile app while others need a mobile-first strategy, so you must study your users to understand what type of devices they will have when using your app. With Tailwind, every utility class can be applied conditionally at different breakpoints, which makes it easier to build complex responsive interfaces without needing media queries.</p><p>The default breakpoints provided by Tailwind are inspired by common device resolutions, but you can always customize them or add new ones if needed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ZBAABuljrcZQSSFj.png" /></figure><p>Screens are represented this way in the tailwind.config.js file:</p><pre>module.exports = {<br>  theme: {<br>    screens: {<br>      &#39;sm&#39;: &#39;640px&#39;,<br>      // =&gt; @media (min-width: 640px) { ... }<br><br>      &#39;md&#39;: &#39;768px&#39;,<br>      // =&gt; @media (min-width: 768px) { ... }<br><br>      &#39;lg&#39;: &#39;1024px&#39;,<br>      // =&gt; @media (min-width: 1024px) { ... }<br><br>      &#39;xl&#39;: &#39;1280px&#39;,<br>      // =&gt; @media (min-width: 1280px) { ... }<br><br>      &#39;xxl&#39;: &#39;1600px&#39;,<br>      // =&gt; @media (min-width: 1600px) { ... }<br>    }<br>  }<br>}</pre><h3>Spacing</h3><p>To allow a simple mean of controlling margins, paddings, width, and height, Tailwind’s config includes a spacing configuration that generates all the utility classes needed for these elements. By default, Tailwind includes proportional values, so 16 is twice as much spacing as 8 for example. One spacing unit is equal to 0.25rem, which translates to 4px by default in common browsers.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*MWCmbKwv4X3VOTl3.png" /></figure><p>As a designer, you must make sure all your components are made using spacing values included in this list. Spacing is represented this way in the tailwind.config.js file:</p><pre>module.exports = {<br>  theme: {<br>    spacing: {<br>      &#39;1&#39;: &#39;8px&#39;,<br>      &#39;2&#39;: &#39;12px&#39;,<br>      &#39;3&#39;: &#39;16px&#39;,<br>      &#39;4&#39;: &#39;24px&#39;,<br>      &#39;5&#39;: &#39;32px&#39;,<br>      &#39;6&#39;: &#39;48px&#39;,<br>    }<br>  }<br>}</pre><p>This section allows for customization of all the proprieties of your fonts. By default, Tailwind provides three font family utilities: a cross-browser sans-serif stack, a cross-browser serif stack, and a cross-browser monospaced stack. You can, of course, change them in the theme.fontFamily section of your Tailwind config file.</p><pre>module.exports = {<br>  theme: {<br>    fontFamily: {<br>     &#39;sans&#39;: [&#39;-apple-system&#39;, &#39;BlinkMacSystemFont&#39;, ...],<br>     &#39;serif&#39;: [&#39;Georgia&#39;, &#39;Cambria&#39;, ...],<br>     &#39;mono&#39;: [&#39;SFMono-Regular&#39;, &#39;Menlo&#39;, ...],<br>     &#39;display&#39;: [&#39;Oswald&#39;, ...],<br>     &#39;body&#39;: [&#39;Open Sans&#39;, ...],<br>    }<br>  }<br>}</pre><p>Font size is also an important element of this section and we need to set up the variables that will be included in our design system and the app.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*YDnsXB5-MDnoAzXw.png" /></figure><p>By default, Tailwind provides 10 font-size utilities. You can modify, add, rename or remove them by editing the theme.fontSize section of your Tailwind config.</p><pre>module.exports = {<br>  theme: {<br>    fontSize: {<br>     &#39;xs&#39;: &#39;.75rem&#39;,<br>     &#39;sm&#39;: &#39;.875rem&#39;,<br>     &#39;tiny&#39;: &#39;.875rem&#39;,<br>     &#39;base&#39;: &#39;1rem&#39;,<br>     &#39;lg&#39;: &#39;1.125rem&#39;,<br>     &#39;xl&#39;: &#39;1.25rem&#39;,<br>     &#39;2xl&#39;: &#39;1.5rem&#39;,<br>     &#39;3xl&#39;: &#39;1.875rem&#39;,<br>     &#39;4xl&#39;: &#39;2.25rem&#39;,<br>     &#39;5xl&#39;: &#39;3rem&#39;,<br>     &#39;6xl&#39;: &#39;4rem&#39;,<br>     &#39;7xl&#39;: &#39;5rem&#39;,<br>    }<br>  }<br>}</pre><h3>Other elements</h3><p>Other sections are of course required to have a comprehensive design system, but we’re only providing some examples to illustrate our workflow. In the next chapter, we’ll have a use-case example that applies a workflow with the elements mentioned before, but also:</p><ul><li>Layout</li><li>Borders</li><li>Backgrounds</li><li>Tables</li><li>Interactions</li><li>Full components (buttons, cards, forms, navigations…)</li></ul><h3>Browsing your components</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*6Pi4OI_fc8OFTf1T.png" /></figure><p>To see all the components in a cleared and documented way, you can use <a href="https://storybook.js.org/">Storybook</a> for that. It will allow to browse, share and test all the components available on your design system and in your application. It is compatible with ReactJS, VueJS &amp; AngluarJS, Svelte…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/0*nR7FRuDeHpUl-OSs.png" /></figure><p>Storybooks allow you to create clean documentation from all your components with a very simple plugin called <a href="https://github.com/storybookjs/storybook/tree/next/addons/docs">Storybook Docs</a>:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*AUQxEEFQxRriunTc.png" /></figure><h3>Conclusion</h3><p>So to wrap things up, this article should serve as an introduction to building utility-first design systems that are practical, always up to date and allow for a fluid collaboration between the design and tech team. By using the configuration-first approach powered by Tailwind, product teams can improve their work velocity, code quality and make for a more enjoyable collaboration between the designers &amp; developers.</p><p>If you have experimented with this approach or have questions about it, don’t hesitate to ask me in the comment section below. To end this article, I’ll leave you with a quote from Jina Anne, founder of the Clarity Design System Conference, in the excellent InVision podcast:</p><h3>InVision on Twitter</h3><p>Design and engineering should share the ownership of the design system together&quot; - Design Systems Advocate and @Clarity_Conf founder, @jina Get more insights from Jina Anne in her episode of the #DesignBetter podcast https://t.co/jqGcRQYFGp</p><h3>Thank you for reading and may the force be with you 🧙‍</h3><p><em>Originally published at </em><a href="https://blog.nimbleways.com/building-utility-first-design-systems-with-tailwind/"><em>https://blog.nimbleways.com</em></a><em> and on </em><a href="https://www.meety.ai/"><em>Meety</em></a><em> on November 4, 2019.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=52ce020630b" width="1" height="1" alt=""><hr><p><a href="https://uxdesign.cc/building-utility-first-design-systems-part-1-52ce020630b">Building “Utility-first” Design Systems (Part 1)</a> was originally published in <a href="https://uxdesign.cc/">UX Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>