<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title> Thomas Michael Semmler - helloyes.dev</title>
	<subtitle>Personal Blog of Thomas Michael Semmler: Web Development, Design, and Website Making.</subtitle>
    
	<link href="https://helloyes.dev/feeds/blog/feed.xml" rel="self"/>
	<link href="https://helloyes.dev"/>
	<updated>2024-05-30T18:39:56Z</updated>
	<id>https://helloyes.dev</id>
	<author>
		<name>Thomas Michael Semmler</name>
		<email>contact@thomassemmler.com</email>
	</author>
	
	<entry>
		<title>Craft vs Industry: Separating Concerns</title>
		<link href="https://helloyes.dev/blog/2023/craft-vs-industry/"/>
		<updated>2023-03-09T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2023/craft-vs-industry/</id>
		<content type="html">&lt;p&gt;This post is probably too long, but I need someplace that I can refer to. As is often the case, I am writing this to sort my thoughts, primarily. But I am hoping to give voice to what I am observing in other people in our field but is rarely spoken about. I am not attempting to postulate a solution to a complex problem; instead, I am trying to provide words in the hopes that they resonate with what other people are experiencing, if nothing else just to let them know that they are not alone with it.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Every good post starts with a quote, right?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[Industry means] something that is produced or is available in large quantities and makes a lot of money.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;small&gt;(Quote from the &lt;a href=&quot;https://dictionary.cambridge.org/dictionary/english/industry&quot; target=&quot;_blank&quot; rel=&quot;noreferer noopener&quot;&gt;Cambridge Dictonary&lt;/a&gt;)&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;We have long referred to our niche on the web as the &amp;quot;web industry,&amp;quot; but never has the term been more congruent than it is right now. I believe this throws us into some conflicts that we are left to deal with alone. Because what we&#39;ve learned in the decades before, what mattered to the craft of making websites, seems to sometimes not be compatible with what is asked of us from our jobs. This throws us into significant conflict, and resolution seems to be left to our own devices. In this post, I am trying to tackle this conflict that has been on my mind for so long.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;welcome-to-the-age-of-industrialisation&quot;&gt;Welcome to the Age of Industrialisation&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#welcome-to-the-age-of-industrialisation&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Welcome to the Age of Industrialisation&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I think it is very clear for most of us to see that our little corner of the world has reached the age of industrialization. With this &amp;quot;little corner&amp;quot;, I am referring to the community of people who make websites. Designers, developers, and everything in between and beyond alike&lt;/p&gt;
&lt;p&gt;There are many signs that we have irreversibly entered a new era, one that is determined by industrial practices. We constantly hear that we&#39;re not supposed to reinvent the wheel; websites are now being derogatorily called MPAs (multi-page apps), and we&#39;re generally referring to websites as software. UI is now coming in the form of self-contained, composable pieces of single sources of truth, &amp;quot;components&amp;quot;, and the question &amp;quot;Will it scale?&amp;quot; is the number one differentiator for &amp;quot;maturity&amp;quot; in the tooling surrounding our craft.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;scalability-as-leitdifferenz&quot;&gt;Scalability as Leitdifferenz&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#scalability-as-leitdifferenz&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Scalability as Leitdifferenz&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;A single difference that allows us to sort something into a dichotomy—that is what a &amp;quot;Leitdifferenz&amp;quot; refers to (I am using the German word directly here to refer to &lt;a href=&quot;https://en.wikipedia.org/wiki/Niklas_Luhmann&quot;&gt;Niklas Luhmann&#39;s&lt;/a&gt; concept, because I cannot find a semantically fitting translation). We have been obsessed with this scalability as the single differentiating factor that will tell us how well something will adapt to the changing requirements of an organization and increasing, diverse technical demand. But for businesses, scaling means that output remains the same or only slightly degrades while production costs lower.&lt;/p&gt;
&lt;p&gt;Scalability has become the leading differentiator, the Leitdifferenz, of almost everything in our industry. From the tech we develop with, for, and on to what, how, and who we design for It&#39;s almost like a trance that we keep repeating to ourselves.&amp;quot;But will it scale?&amp;quot; is first and foremost a matter of business. But in development and design, it also refers to other factors. Yet when it comes to matters of industrialization, these factors remain secondary.&lt;/p&gt;
&lt;p&gt;For example, a course is a scaling product. Because you are investing time into its production, and then all you have to do is maybe every now and then generate a promotional advertisement for it, but the price remains the same while your initial expense disappears entirely. Your margin has increased; your product value has scaled. The purpose of industry in general is to achieve scale by reducing production costs. Create a &amp;quot;streamlined&amp;quot; (another term that we have become very familiar with) manufacturing process and automate it as much as possible to generate a product that will sell to as many consumers as possible.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;configured%2C-consumed-%26-composed%3A-components-and-design-systems&quot;&gt;Configured, Consumed &amp;amp; Composed: Components and Design Systems&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#configured%2C-consumed-%26-composed%3A-components-and-design-systems&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Configured, Consumed &amp; Composed: Components and Design Systems&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;We can consider design systems themselves as an &lt;a href=&quot;https://www.invisionapp.com/inside-design/scale-design-systems/&quot;&gt;answer to the question of scalability for design&lt;/a&gt;. And even here, scaling is still the leitdifferenz by which we categorize. Design work is being compartmentalized into &amp;quot;components&amp;quot;, small, self-contained deliverables that can then be composed together by someone who is not a designer. The idea is that this will allow for a more efficient and scalable design process. But obviously, design is more than just that. And design is still happening by the person who puts components together, just without the skills necessary. So the reaction is to create an even more restrictive set of rules, so that instead of applying systemic principles to design work in order to enable design work, it is being reduced to a set of consumable components and rules.&lt;/p&gt;
&lt;p&gt;That is not the premise of design systems as a way of working, but it is what some designers are postulating because that is what sells them to industry. The way that industry incorporates design systems is basically a misappropriation, or abuse at worst. It is not just me who is seeing the problem with ongoing industrialization in design. Even Brad Frost, the inventor of atomic design, is expressing &lt;a href=&quot;https://bradfrost.com/blog/post/design-systems-agile-and-industrialization/&quot;&gt;similar concerns&lt;/a&gt;. In the words of &lt;a href=&quot;https://adactio.com/journal/16369&quot;&gt;Jeremy Keith&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[...] Design systems take their place in a long history of dehumanising approaches to manufacturing like Taylorism. The priorities of “scientific management” are the same as those of design systems—increasing efficiency and enforcing consistency.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So no. It is not just you. We all feel it. This quote is from 2020, by the way. What was then a prediction has since become a reality. And it is also reflected in the way that people are entering the industry. Lately, we&#39;ve seen a lot of &lt;a href=&quot;https://medium.com/swlh/the-good-bad-and-the-ugly-of-web-dev-coding-bootcamps-e82d2715eabf&quot;&gt;bootcamps&lt;/a&gt; popping up that, for the most part, educate people just enough so that they can &lt;a href=&quot;https://cult.honeypot.io/reads/the-ugly-truth-about-coding-bootcamps/&quot;&gt;get a job&lt;/a&gt;, at least that is the premise. But they rarely know the principles, values, and philosophies that constitute the web platform. But they can create a fully functioning &amp;quot;web app&amp;quot; with Next. JS in React! Of course, they don&#39;t learn how to manage CSS for this type of site; instead, they just use Tailwind. But at least they know how to specify TypeScript interfaces!&lt;/p&gt;
&lt;p&gt;And of course, they learn that design comes from UI libraries. Gone are the days where we used to tell people that bootstrapping was just for prototyping and otherwise would quickly turn into technical debt! Nowadays, designers are sometimes even told to start with one of these libraries. Just, they&#39;re not called bootstraps. Instead, they&#39;re called Material UI, Headless UI,&amp;quot; or Chakra UI. But they bear every necessary resemblance. But it&#39;s fine, because it&#39;s just the components, right?&lt;/p&gt;
&lt;p&gt;What could have become Design Systemics, in which we applied systems theory, cybernetics, and constructivism to the process and practice of design, is now instead being reduced to component libraries. As a designer, I find this utter nonsense. Everyone who has even just witnessed a design process in action knows that the deliverable is merely a documenting artifact of the process and does not constitute it at all. But for companies, the &amp;quot;output&amp;quot; is all that matters, because it can be measured; it appeals to the industrialized process because it scales. Once a component is designed, it can be reused, configured, and composed to produce &amp;quot;free&amp;quot; iterations without having to consult a designer. The cost was reduced while the output was maximized. Goal achieved!&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;seats-at-the-capitalists-table&quot;&gt;Seats at the Capitalists Table&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#seats-at-the-capitalists-table&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Seats at the Capitalists Table&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The larger premise of design has degraded over the years, in my opinion. As it got more embraced into the industrial process, it did so by devaluing the perspective of the people for whom the discipline used to design and replacing it with the perspective of companies. This is the price that design continues to pay for its seat at the capitalist table. In my opinion, the cost is too high to be worth it. This was also one of the reasons why &lt;a href=&quot;https://helloyes.dev/blog/2022/leaving-design#what-it-is&quot;&gt;I decided to not pursue it as a career any longer, in 2022&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When we referred to ourselves as Web designers, we were constantly struggling to find companies that took our profession seriously enough to integrate us into their processes. But design was not considered valuable. So we started to call ourselves UX designers because we were designing experiences, not websites. And slowly but surely, we got our oh-so-desired seat at the table. But only if we demonstrated our worth by demonstrating a number-go-up linear-causal relationship to our work, which would necessitate extensive monitoring of our users.And thus, companies have successfully forced us to degrade the merit of our work to quantifiable markers of increased conversions and clicks and the firing of whatever other random KPI we could somehow pull off our asses—all to appeal to the growth-at-any-cost mindset.&lt;/p&gt;
&lt;p&gt;This often happens with important values in our craft. The recent increase in attention on accessibility is already taking a similar path. Accessibility advocates and experts are often forced to &amp;quot;sell&amp;quot; (see what I did there?) accessibility work to companies by showing them how much more revenue, conversions, or users they could be having by making their sites accessible. But our craft, on the other hand, clearly dictates this as a primary focus—a Leitdifferenz to judge the merit of our work. If what we do isn&#39;t accessible, it&#39;s to a certain degree broken or incomplete at best.&lt;/p&gt;
&lt;p&gt;The problem with this angle is that, inevitably, industry will respond industriously. And now we&#39;re having to explain to companies why they cannot just install an overlay and see it done. But that is the price of putting a number on marginalized groups. Unfortunately, that is the language that businesses speak, so experts and advocates are not to blame. They are doing the best that they can because they know that, in the end, the removal of barriers for people who rely on them is what matters. They are, in their own way, navigating ambivalence and finding their way through the conflict of craft vs. industry.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;when-places-become-products&quot;&gt;When Places become Products&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#when-places-become-products&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled When Places become Products&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;UX Design used to stand for &amp;quot;User Experience&amp;quot;, but in order to get our seat at the table, we had to degrade it so much that it has long since shifted its meaning to &amp;quot;User Exploitation&amp;quot;, as &lt;a href=&quot;https://creativegood.com/blog/21/losing-faith-in-ux.html&quot;&gt;Mark Hurst writes&lt;/a&gt;. The practice of UX, removed so far from its subject that it now considers the company itself the subject of their work, is now being used for bad-faith manipulation to increase capitalist numbers.&lt;/p&gt;
&lt;p&gt;This is reflected in another marker in language. Just as we were once web designers and then UX designers, we now call ourselves &amp;quot;product designers.&amp;quot; As designers, our relationship to what we design and for whom we design it has changed. We used to design websites for people, then experiences for users, and now we are designing products for companies.&lt;/p&gt;
&lt;p&gt;This coincides with the fact that we are now broadly regarding websites as software, but we&#39;re not calling them websites. We&#39;re calling them &amp;quot;Apps&amp;quot;. And it makes sense—we have entirely normalized the practice of having our websites controlled by JavaScript from server to client because JavaScript is mature now and thus appealing to traditional programmers, who used to shun it fiercely.&lt;/p&gt;
&lt;p&gt;This change in the demographics of those who write code has made it easier to hire for these positions. A website entirely rendered in JavaScript can be worked on by someone with a University Degree, in which they are rarely taught about the special relationship between HTML, CSS, and JavaScript, but are instead told that CSS and HTML are not real programming languages. And with these capital-P programmers, their language is long, as are their world view and their heuristics.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;the-craftsperson-vs-the-factory-worker&quot;&gt;The Craftsperson vs The Factory Worker&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#the-craftsperson-vs-the-factory-worker&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled The Craftsperson vs The Factory Worker&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;People who make websites and are also working in what we refer to as &amp;quot;the web industry&amp;quot; are often forced into a difficult conflict. In their position as an employee or freelancer, they sometimes have to work on technology that they know isn&#39;t compatible with the values that they learned to hold dear in their craft. Designers are asked to implement &lt;a href=&quot;https://www.deceptive.design/&quot;&gt;dark patterns&lt;/a&gt;, even though they know that it is unethical. Developers are asked to work with React, even though they are aware that it is maintained by Facebook, a company &lt;a href=&quot;https://www.amnesty.org/en/latest/news/2022/09/myanmar-facebooks-systems-promoted-violence-against-rohingya-meta-owes-reparations-new-report/&quot;&gt;profiting and and enabling genocide&lt;/a&gt;. And the list goes on.&lt;/p&gt;
&lt;p&gt;It is also expressed in what I think is best summarized as &amp;quot;Industry Fomo&amp;quot;. Developers know full well that using next.js to create a relatively simple website is overkill, inappropriate at best, but they see themselves required to use industry-grade technology because job requirements are not listing skills anymore, instead they are listing tools and frameworks.&lt;/p&gt;
&lt;p&gt;I consider this a conflict between two identities: the craftsperson and the factory worker. The craftsperson wants to do what honors the values of the craft, but the factory worker needs to do what will keep them employed or employable. A conflict that we are being left alone with, often lacking the words to conceptualize what is really happening here.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;separating-concerns&quot;&gt;Separating Concerns&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#separating-concerns&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Separating Concerns&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Postulating to know a solution to what I consider would be hubris on so many levels. But what I can do is access a little trick from my work as a &lt;a href=&quot;https://sonstnichts.com/&quot;&gt;systemic counsellor&lt;/a&gt;. Systemic counseling operates on many different principles, one of them being &lt;a href=&quot;https://en.wikipedia.org/wiki/Second-order_cybernetics&quot;&gt;second-order cybernetics&lt;/a&gt;, in which cybernetic principles are applied to cybernetics itself—recursive cybernetics. We know a thing or two about recursion, right? We can apply some of the principles that we usually use as a guide in our craft to our own situation: &lt;a href=&quot;https://www.w3.org/TR/html-design-principles/#separation-of-concerns&quot;&gt;Separation of Concerns&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While this integer design principle of HTML is usually referred to in order to justify the separation of concerns for content (markup, HTML), presentation (styles, CSS), and behavior (scripting, JavaScript), it is also a &lt;a href=&quot;https://en.wikipedia.org/wiki/Separation_of_concerns&quot;&gt;general design principle in computer science&lt;/a&gt;, and we can also use it to separate the concerns of the craftsperson and the factory worker.&lt;/p&gt;
&lt;p&gt;If we separate the demand into independent concerns, made by independent parties, we get the chance, instead of having to decide, to hold the ambivalence and complexity of the situation. Industry of course would force us to reduce complexity, another religious mantra of programming. But complexity means possibility, and with possibility comes the ability to decide. Do we go with what the industry demands, or do we go with what the craft demands? The conflict is the oscillation between both possible decisions. Not only can we not decide, but we are also uneasy with the fact that we cannot decide. Fritz B. Simon calls this a &amp;quot;double negation,&amp;quot;, and it becomes the constitutive marker of conflict, described systemically.&lt;/p&gt;
&lt;p&gt;But what if, instead of oscillating between both positions in an attempt to make a decision, we just stay in this ambiguity for a while?A room emerges that we are holding. In this room, both positions aren&#39;t changed, but it may allow us to not experience them in conflict with each other. If we understand them as a conflict of concerns and not a conflict of identity, we may even see where both concerns align. Or we can give voices to both parts.&lt;/p&gt;
&lt;p&gt;At the very least, it may help us to not experience this as a personal conflict but instead leave it to the job, which has to find a way to utilize craft in a way that makes it compatible enough with industrial processes—another different concern reveals itself here, the concern of the business, not the concern of the employee.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;failing-to-reconcile-competing-identities&quot;&gt;Failing to reconcile competing Identities&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#failing-to-reconcile-competing-identities&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Failing to reconcile competing Identities&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;This isn&#39;t always possible, though. And sometimes, people may decide to leave not only the industry but also the craft all together to protect themselves from this conflict. Not because they couldn&#39;t hold the ambivalence of the craftsperson and the factory worker as is, but because they don&#39;t want to degrade themselves or their view of the craft—or maybe because they weren&#39;t able to see two separate concerns but instead saw a personal conflict that they were left to deal with on their own.&lt;/p&gt;
&lt;p&gt;But if we somehow manage to conciliate those two competing identities, we may find some personal relief from trying to find a common ground between two competing sides within ourselves. I have to work with technology that I find deeply offensive and politically abhorrent all day. But at some point, I found great relief in understanding myself as an employer who works with this technology, not as a craftsperson working on the web. I understand that it is not people who want to create SPAs; it&#39;s an industry—businesses.&lt;/p&gt;
&lt;p&gt;Many people are not differentiating here, and so they just repeat the capitalist programmers mantras. But that says much more about how they relate to others and how they define themselves. Do they even consider themselves craftspeople? Do they even see the craft that is there?&lt;/p&gt;
&lt;p&gt;Ultimately, the fact that we see a conflict here can be considered a good sign. As I said before, systemically, we can understand a conflict as an oscillation between possibilities. That means that in order to experience conflict, we first need to see possibilities. So if you are currently battling this conflict, you may find some relief in knowing that you are experiencing it because you see possibilities and are not submerged in the trance of the factory worker, induced by industry.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;ai%3A-the-penultimate-of-dehumanisation&quot;&gt;AI: The Penultimate of Dehumanisation&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#ai%3A-the-penultimate-of-dehumanisation&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled AI: The Penultimate of Dehumanisation&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;We do need to talk about AI because it is an inevitable part of industrialization and there is no escape for any of us. The desire to reduce manual labor by automation and reduction of complexity is the seed that gave birth to programming in the first place, and AI is a tangible premise of endless scaling. I think it would be incredibly unwise and hubristic to assume that the broad majority of us who are employed at this time will remain employed in the next years.&lt;/p&gt;
&lt;p&gt;Apologists often claim that &amp;quot;we will move on to other things&amp;quot;, but that is not true. Some of us will divorce further from craft and appeal to business desires in managing or other administrative jobs, but these jobs are given, not earned. The value of our work will inevitably reduce massively, and few of us will be able to do what we do now and get paid for it.&lt;/p&gt;
&lt;p&gt;The groundwork for this has already been laid. Take a look at dribbble, and you&#39;ll find one interchangeable site after another. And this is the dataset that AI is being trained on because it can&#39;t look at an actual website; it only looks at pixels for the most part. But even if it were looking at real websites, they have long since started to look so similar that they are often only differentiated by their themes.&lt;/p&gt;
&lt;p&gt;In order to protect ourselves from this inevitable reality (again, programming was invented to make human labor in weaving redundant; this is the leitdifferenz of the entire profession), we can learn to understand employability does not make us craftspeople.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;the-craft-remains&quot;&gt;The Craft remains&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#the-craft-remains&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled The Craft remains&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Because the craft will remain even after most of it is automated. You can order mugs online, yet there are still potters out there. We can go into C&amp;amp;A and buy a dress, but there are still seamstresses making bespoke garments. This is the craft&#39;s unavoidable final destination - where it all began.&lt;/p&gt;
&lt;p&gt;Handcrafted websites are made by humans for humans. This is what differentiates our craftsperson from the factory worker—what the craftsperson does is valuable to people, not businesses.&lt;/p&gt;
&lt;p&gt;And until that time comes, we can be both at the same time. We can hold both perspectives as important voices with different concerns. We can switch between them, look for common ground, or side with one or the other in a given situation.&lt;/p&gt;
&lt;p&gt;So the next time you are approaching a website, ask yourself, &amp;quot;What would the craftsperson do?&amp;quot; And also ask yourself, &amp;quot;What would the factory worker do?&amp;quot; See what answers you come up with!&lt;/p&gt;
&lt;hr /&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;post-credits&quot;&gt;Post Credits&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#post-credits&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Post Credits&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Thank you to &lt;a href=&quot;https://hidde.blog/&quot;&gt;Hidde de Vries&lt;/a&gt;, who in a conversation we&#39;ve had, helped me to see the potential value, that a post about this topic could have.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;proof-readers-%26-feeback-givers&quot;&gt;Proof Readers &amp;amp; Feeback-Givers&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/craft-vs-industry/#proof-readers-%26-feeback-givers&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Proof Readers &amp; Feeback-Givers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I feel especially grateful for these individuals, who not only took the time to read through this post, but also came up with fantastic and extensive feedback, which I&#39;ve incorporated into this post. Thank you so much!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nshki.com/&quot;&gt;Nishiki Liu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mnmlst.design/&quot;&gt;Ken Kubiak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://darthmall.net/&quot;&gt;W. Evan Sheehan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sarajoy.dev/&quot;&gt;Sara Joy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://minutestomidnight.co.uk/&quot;&gt;Simone Silvestroni&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.itscrisdiaz.com/&quot;&gt;Cristian Díaz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sebastianlaube.de/&quot;&gt;Sebastian Laube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Hello 2023!</title>
		<link href="https://helloyes.dev/blog/2023/hello-2023/"/>
		<updated>2023-01-08T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2023/hello-2023/</id>
		<content type="html">&lt;p&gt;Yes. I have also written one of those annual-conclusion posts (thank you for reading &amp;lt;3). As is the case with everything I write here, it serves primarily a documenting function, with the optional bonus of maybe even adding some value to whoever reads it.&lt;/p&gt;
&lt;p&gt;Recapping 2022 and projecting the near future feels extra appropriate — even necessary — this time, because 2022 has been a very big year for me personally.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;lean-coders&quot;&gt;Lean Coders&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/hello-2023/#lean-coders&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Lean Coders&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;In 2022, I started a new position as a UI Engineer and Product Designer at &lt;a href=&quot;https://lean-coders.at/&quot;&gt;Lean Coders&lt;/a&gt;. This was a somewhat radical shift in many ways for me. I went from continuous development on a single product in a set team to working on a variety of different projects and clients, sometimes in a team, sometimes on my own. Lean Coders is also a remote-first company. We have offices, but I&#39;ve now adopted a fully remote work-life balance that I am very happy with. I am enjoying the benefits of working from home, which I never thought would happen, but then again, life had different plans.&lt;/p&gt;
&lt;p&gt;It was at that time that I also decided to &lt;a href=&quot;https://helloyes.dev/blog/2022/i&#39;m-not-pursuing-design-any-longer/&quot;&gt;leave behind any aspirations for achievement in design&lt;/a&gt;. While I am still a designer, I am not pursuing any goals in that discipline any longer. This specific part of the industry has changed too much for me to feel aligned with any longer, and so have I. Focusing more on development has brought a sense of play and freedom into my professional life that I once felt with design. I am still very, very happy with that decision!&lt;/p&gt;
&lt;p&gt;In November, I also assumed a new position at Lean Coders as a technology evangelist. We&#39;re still figuring out exactly what that will mean for the company and for myself, but it will inevitably mean that I&#39;ll be focusing my efforts on producing content and on becoming more accessible as a public figure. Or, well, becoming a public persona to start with!&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;beyond-tellerrand-d%C3%BCsseldorf&quot;&gt;Beyond Tellerrand Düsseldorf&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/hello-2023/#beyond-tellerrand-d%C3%BCsseldorf&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Beyond Tellerrand Düsseldorf&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I attended BTConf in Düsseldorf! While this conference is always well organized and filled with fantastic speakers, it was especially special to me because I got to meet the fantastic &lt;a href=&quot;https://thinkdobecreate.com/&quot;&gt;Stephanie Eckles&lt;/a&gt; in person. We were both co-organizers of the &lt;a href=&quot;https://11tymeetup.dev/&quot;&gt;Eleventy Meetup&lt;/a&gt; at the time and had had some contact over the previous year.So meeting in person for the first time was a great opportunity that I didn&#39;t want to miss.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;project-congruence&quot;&gt;Project Congruence&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/hello-2023/#project-congruence&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Project Congruence&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I had some major breakthroughs in my personal life this year. This marked a major paradigm shift in my life. Without going into too much detail, I finally understood all the strange connections between my eating disorder, attachment trauma, and my childhood and how they manifested in my daily life. For the first time in a long time, I felt that a window had opened, that if I were just courageous, I could take advantage of it and manifest some long-awaited changes—and I did, and it worked!&lt;/p&gt;
&lt;p&gt;As a psychosocial counsellor (in training, under supervision), I am obviously a big proponent of psychotherapy as a vehicle for personal growth. And for these processes, therapy was an invaluable instrument—a tool that accelerated them. As part of this, my relationship to food changed severely, which had always been a big topic as I had been living with an eating disorder since I was 11. This year, I am happy to report that not only haven&#39;t I had any eating disorder-related adverse events, but I also have been able to let go of its compensatory function in my life. As a result, I started to lose weight, and I found great joy in exploring hiking and eventually running.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;i&#39;m-a-runner-now.&quot;&gt;I&#39;m a runner now.&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/hello-2023/#i&#39;m-a-runner-now.&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled I&#39;m a runner now.&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Yes! This has been a life-changing experience. Not only because I was able to test some of the tools I am using in my work as a psychosocial counsellor but also because it supported me in my weight loss journey, which is truly a journey toward more congruence.&lt;/p&gt;
&lt;p&gt;My very first run was on the 7th of August, 2022. It lasted for 18 minutes and 46 seconds. I took many walking breaks, and I lasted for 800 meters. I weighed 145  kg, and I had a resting heart rate of 90 bpm. Since then, I missed a run once because I was having a cold. Ever since, I&#39;ve been running at least three times a week, slowly increasing volume and intensity.&lt;/p&gt;
&lt;p&gt;As of writing this, my longest run is 18,93 km, which happened on the &lt;a href=&quot;https://www.strava.com/activities/8358794484&quot;&gt;9th of January, 2023&lt;/a&gt;. I ran for 2 hours, 41 minutes, and 32 seconds with no walking breaks needed. I am 117.4 kg heavy now. Meaning that I have lost 27.6 kg in 5 months. My resting heart rate averages around 54 bpm now.&lt;/p&gt;
&lt;p&gt;Strava reports that I have run 425 kilometers since I started. I am slow, but that doesn&#39;t matter to me yet. I have taken a very, very slow approach to building up my running habit, which I&#39;m going to go into detail in a separate post. My top priority was to run safely and injury-free. So after six weeks of running, I hired a professional trainer, &lt;a href=&quot;https://purebody.at/about-me/&quot;&gt;Verena Ullmann&lt;/a&gt;. I needed to make sure that as I am learning this sport, I am doing it the right way. I got valuable insights and adjustments for my training plan from her. Just having a professional that you can run your questions by is so valuable. It gives me so much confidence and makes me feel like I am not alone on this fitness journey and that someone has my back.&lt;/p&gt;
&lt;p&gt;Next year, I have an interim goal of running a half marathon. But I don&#39;t want to stop there. In total, if I just keep my current running volume, it should be easy for me to log 1400 km of running next year. But I&#39;d rather keep it small and achievable. So I am setting a goal of 750 km next year, in total. in hopes of exceeding it! I also want to improve my time for the 5K distance. I attended the Vienna Night Run with Lean Coders in 2022, and it took me 43 minutes and 56 seconds. This year, I would like to run that distance in that race under 40 minutes, again in hopes of exceeding it.&lt;/p&gt;
&lt;p&gt;I am also looking to keep losing weight. Though I gotta rephrase that because to me, it&#39;s not about reducing something; it&#39;s about increasing something—the feeling of congruence between my body and myself. I am planning to get to 95 kg, also here, with the hopes of exceeding it. But even if I get just near that, I&#39;ll be very happy.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;speaking...%3F&quot;&gt;Speaking...?&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/hello-2023/#speaking...%3F&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Speaking...?&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;As part of my new role as technology evangelist, I am going to start speaking at events. I have a lot of stuff to share. I already had the opportunity to speak at the &lt;a href=&quot;https://www.meetup.com/web-zurich/&quot;&gt;Web Zürich Meetup&lt;/a&gt;, which was a lot of fun! But it was my first real public speaking gig, meaning I have lots of potential to improve. And next year, I am planning to do so!&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;counselling&quot;&gt;Counselling&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/hello-2023/#counselling&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Counselling&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;In just a few weeks, I am also having my final exam for my psychosocial counselling studies. It has been two and a half years, and I am really excited to finish it. This has significantly impacted the way that I live my life. And as I am now an aspiring &amp;quot;Systemic&amp;quot;—as in, someone who practices systemic counselling or therapy—that&#39;s how they call themselves, I found some really unexpected ways to combine my somewhat superficial but still interesting studies of epistemological systems theory, constructivism, and cybernetics with my experience in design. I&#39;ve just recently alluded to this specific connection in a [toot])(https://indieweb.social/@nachtfunke/109592074735526394).&lt;/p&gt;
&lt;p&gt;This topic has been circling in my mind since 2020, ever since I started diving into systemic counselling. And I want to make 2023 the year that I finally tackle it. And in the end, hopefully, I will have made something to share that maybe someone else gets some value out of.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;other-goals-for-2023&quot;&gt;Other Goals for 2023&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2023/hello-2023/#other-goals-for-2023&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Other Goals for 2023&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;There is so much else I want to do in 2023. I am looking to redesign helloyes.dev. I&#39;ve gotten a lot of compliments since the website went live, but I have started to dislike it a lot, though I will keep the branding! There are also some issues that some visitors have luckily made me aware of, but I never got around to fixing them because I never set aside dedicated time to work on this website. I want to change that in 2023.&lt;/p&gt;
&lt;p&gt;The most important thing for next year will be to finally write down some of the articles I&#39;ve been procrastinating on. I am hoping they&#39;ll get some traction in the community because all of them are topics that are not often talked about.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;So really, that&#39;s it! I didn&#39;t include some of my personal goals, as they are, well, personal. I&#39;m excitedly tackling 2023!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Mourning my obsolete Skillset</title>
		<link href="https://helloyes.dev/blog/2022/mourning-my-obsolete-skillset/"/>
		<updated>2022-11-05T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2022/mourning-my-obsolete-skillset/</id>
		<content type="html">&lt;p&gt;&lt;small&gt;Heads up - these specific words were important &lt;em&gt;for me&lt;/em&gt; to write down and to share with people who might feel similar, more than a year ago. You might feel criticized or even attacked by some of the positions taken in this text. For that I can&#39;t apologize, yet at the same time I am asking you to realize that they aren&#39;t intending to attack. It&#39;s an observation based on subjective experiences, nothing more. And ultimately, this text is very emotional. And this is obviously not fully rational. There was no desire to rationaly sublimate my feelings, instead, the opposite was the plan. I am mourning, after all. I kept this in my drafts for over a year, but recent events led me to believe that maybe someone else could also profit from this sharing.&lt;/small&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;With this post, I am trying to mark a transition in my identity as a person making websites. I feel like this is necessary and a human thing to do. As humans, we create markers as we go through life, which also guide us through transitioning from one phase to the next. Often these are rituals, for birthdays, for the unification of partners, but also for separation and for loss, for death.&lt;/p&gt;
&lt;p&gt;The industry has changed. It has become what is now worth being described as an &amp;quot;industry&amp;quot;. And it is affecting a lot of people. Some in good ways, some in not so good ways. In a way, that is a self-fulfilling prophecy, because we always aspired to become what we now are but we still have to talk about the losses, the hidden costs. We, as those who make websites have not learned to endure critical discourse. Instead, it is met with toxic positivity, ultimately dividing the people into segments. A classic way to prevent conflict: splitting.&lt;/p&gt;
&lt;p&gt;So I am trying to broadcast my inner processes about the web &lt;em&gt;industry&lt;/em&gt; and my place in it. Not in the hopes of creating more division, &amp;quot;tribalism&amp;quot; as they say, but to hopefully normalize ambivalence just a bit. All conflict has also the potential for realignment, discovery and reconstruction - in other words: conflict is a function of bifurcation, of possibility.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;javascript-eats-the-world&quot;&gt;JavaScript eats the world&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/mourning-my-obsolete-skillset/#javascript-eats-the-world&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled JavaScript eats the world&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The most easily distinguishable artefact that speaks to the changes in the industry, the markers that define the outer and the inner, that which we positively define (as in, it &lt;em&gt;is&lt;/em&gt; here) to the now and negatively define (as in, it &lt;em&gt;is not&lt;/em&gt; there) in the before, is the role of JavaScript on the web platform. JavaScript had a moment, a transitional phase, in which it forever changed its position and thus how those who work on the platform relate to it. I believe it is safe to say that this transition can be marked with ES6.&lt;/p&gt;
&lt;p&gt;ES6 was highly celebrated. It brought many things to developers that they deemed missing (in comparison to other realms of programming) and their adoption in the browsers didn&#39;t matter, because transpilers made sure that developers didn&#39;t have to think about this part of the ecosystem. Instead, they could focus exclusively on the DX. I believe that this is the turning point, this is where everything changes forever, because it brought the SPA mindset into the general tooling ecosystem and thus affected even those that didn&#39;t develop SPA&#39;s.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;bower%2C-gulp%2C-webpack...&quot;&gt;Bower, Gulp, Webpack...&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/mourning-my-obsolete-skillset/#bower%2C-gulp%2C-webpack...&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Bower, Gulp, Webpack...&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;During that time, it was still somewhat common to write code for other people that was intended to land &lt;em&gt;on&lt;/em&gt; the website itself. This might sound a bit weird, but what I mean by that is that when we downloaded jquery, we just linked that downloaded JavaScript file with a script tag in the head or somewhere in the body. There was even a tool that made this much easier, called &amp;quot;bower&amp;quot;. I used bower to include whatever I needed. But pretty soon, bower started prompting me a passive-aggressive message, asking me to use webpack instead.&lt;/p&gt;
&lt;p&gt;To me, this was incredibly odd, because webpack did something entirely different. Bower downloaded files from github into my project in a folder, and I then linked those files. Drop-in dependencies with no further processing required. Yet Webpack did something entirely different. And it did it in a way that was entirely foreign to me. It wanted me to point it all towards a JavaScript file. Which, in many cases, I didn&#39;t even need. Sometimes I just downloaded icons, fontAwesome, or some svg stuff.&lt;/p&gt;
&lt;p&gt;I started to realize that the game was changing but I wasn&#39;t aware of what was actually going on. Because while I was happily writing HTML, CSS and the occasional jQuery Code to build the frontend of dynamic websites (that means there is a server language involved, such as PHP), other developers were ditching PHP and the short but highly celebrated Ruby left and right to render as much as possible in the client, the SPA was slowly starting to become the major way of doing things.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;the-website-%2F-webapp-dichotomy&quot;&gt;The Website / Webapp Dichotomy&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/mourning-my-obsolete-skillset/#the-website-%2F-webapp-dichotomy&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled The Website / Webapp Dichotomy&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Even before that, people kept justifying their technological choices by referring to their websites as &amp;quot;webapps&amp;quot;, postulating that their needs are inherently different and need different solutions. There is no point in fighting this dichotomy, because the people involved have by now clearly adopted this way of hierarchically sorting website. But let&#39;s be very clear - a web app is also always a website. This dichotomy does not exist on the platform, it exists as an epistemological device, with the function of determining which tools (approaches, methodologies &amp;amp; technologies) are appropriate and which are not. Maybe there is an exception to be made for electron apps, which use web technology but don&#39;t run on the web platform. But web apps are always also websites, yet not all websites are also web apps. What is the difference?&lt;/p&gt;
&lt;p&gt;The difference lies &lt;em&gt;exclusively&lt;/em&gt; in how people and companies relate to it. This blurry term often encapsulates varying degrees of properties and attributes that they see positively defined in webapps that they then see negatively defined in websites, such as interactivity, processing of API&#39;s and, as of lately, how the code gets shipped. Epistemological devices in language are essential and important. They mark a commonly shared understanding of how something is &lt;em&gt;described&lt;/em&gt;, &lt;em&gt;explained&lt;/em&gt; and &lt;em&gt;evaluated&lt;/em&gt; (Simon, Fritz B.) - in other words, how we make sense of something. It prevents conflict. If a &lt;em&gt;decision&lt;/em&gt; is made about what term perfectly encapsulates the meaning of something, we can move with our cognitive processes and live with the consequences of that decision. This is a natural process, yet it comes with a big cost, once this very fluid, very organic process gets manifested from the world of language into the physical world (as in, code).&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;single-page-applications-(spa)&quot;&gt;Single Page Applications (SPA)&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/mourning-my-obsolete-skillset/#single-page-applications-(spa)&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Single Page Applications (SPA)&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;As this understanding of differentiating between website and webapp started to be accepted as an ontic gospel, tools adopted and built upon its consequences. Why would you need multiple entry points in a packaging tool, if your webapp is rendered in a single document anyway? You only want a single JavaScript file, right? And this has obvious positive consequences. If a tool can assume all types of scenarios, it can optimize for it. And where gulp reflected a developer&#39;s need to have a generic tool in place that could do &lt;em&gt;everything&lt;/em&gt; they told it to, webpack only did that one thing, and you better not stray from that path!&lt;/p&gt;
&lt;p&gt;Even current generation of tools still mostly postulate &amp;quot;less configuration&amp;quot; or even &amp;quot;zero configuration&amp;quot;. All of this onl works if they can safely assume all kinds of things about how you are gonna make your Website, err, I mean, webapp, &lt;em&gt;of course&lt;/em&gt;. For example, Vite assumes that there is an index.html file that it will take full control over. Now what if you just want fast javascript compilation but you still work in a nicely maintained dynamic website environment, where there &lt;em&gt;is&lt;/em&gt; no index.html before the server answers with a document? Sucks to be you I guess, better be ashamed for using WordPress anyway. You should have gotten &lt;em&gt;headless&lt;/em&gt; instead! The SPA perspective rules &lt;em&gt;everything&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This is not a hate on tools. The tools &lt;em&gt;react&lt;/em&gt; (ha, get it?) to the changing developer needs. People in our industry are very much aware that being the person or the organisation behind a useful tool &lt;em&gt;will&lt;/em&gt; inevitably translate to money. Either via security, attention, donations or purchases - in other words, it will translate to freedom and/or power. And yet these tools may be made with pure-hearted altruism in mind, but their much needed opinionatedness persists epistemological processes that were volatile and ambivalent (and thus subject to conflict, meaning possibility) in technology and recursively confirm their meaning. They &lt;em&gt;end&lt;/em&gt; their possibilities. Developers love this, it reduces complexity - &lt;em&gt;don&#39;t make me think&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The &amp;quot;happy path&amp;quot; lies before the developer, consequences obfuscated and alternatives out of reach, soon shrouded in mockery. Quickly are the tools and the ways that were once considered &lt;em&gt;good&lt;/em&gt; becoming now &lt;em&gt;bad&lt;/em&gt;, irrelevant and a new decision was made; What was once positively defined here and negatively defined there, has now flipped. The theory of complex dynamic systems coins a term for this called &amp;quot;attractor&amp;quot;. In the systems-theory that is used for counselling, this is often called a &amp;quot;completion logic&amp;quot;. In social systems, a complexity reducing term exists like a pole and linear-temporarily, individual units in those systems (these are &amp;quot;communications&amp;quot;, not people, according to Luhmann) move towards this pole. This behaviour is called &amp;quot;emergence&amp;quot; and this movement over time is called a &amp;quot;structure&amp;quot;. This is what systemic counsellors call &amp;quot;circularity&amp;quot;. The results of the behaviour are recursively being confirmed and reinforced &lt;em&gt;back&lt;/em&gt; into the system.&lt;/p&gt;
&lt;p&gt;Much of this is very invisible. And even more so invisible to people entering the industry. Because they are seeking starting points and the obvious starting point nowadays is JavaScript. Everyone is making SPA&#39;s and those that don&#39;t are being shamed into doing so, even though there is no technical or business reason for it, they are very soon gonna have to because the developers residing in these companies are starting to realize that their experiences&#39; worth is starting to diminish. So they are turning their site into an SPA, just because they &lt;em&gt;need&lt;/em&gt; to hold the developers with them. Because even though developers are &lt;em&gt;flooding&lt;/em&gt; the market, they are still being &lt;em&gt;desperately needed&lt;/em&gt; everywhere. Because we are making SPA, after SPA, after SPA, after SPA...&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;how-do-i-react-to-this%3F&quot;&gt;How do I &lt;em&gt;React&lt;/em&gt; to this?&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/mourning-my-obsolete-skillset/#how-do-i-react-to-this%3F&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled How do I &lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Much of this trend towards SPA&#39;s was spearheaded by Facebook&#39;s React. The illusive &amp;quot;is it a framework or is it a library&amp;quot; &lt;em&gt;way&lt;/em&gt; to render your UI entirely in the client. It was neither the first nor was it the &amp;quot;best&amp;quot; or the only one. I think its safe to say that chronologically the first wave of shifts towards SPA&#39;s was angular. Nowadays angular is not very popular with developers. But even next to angular, there where other ways of approaching client-side rendering in various degrees. Yet React became much more popular, because it had facebook behind it.&lt;/p&gt;
&lt;p&gt;And soon tooling started to focus on it. So much, that nowadays nobody uses &lt;em&gt;just&lt;/em&gt; react anymore. Nobody wants to. They are using &amp;quot;React &amp;amp; Friends&lt;sup&gt;TM&lt;/sup&gt;&amp;quot; (thank you Chris Coyier for that term!). Yet who has time to set all of this up? Developers don&#39;t have time for this, they are not &lt;em&gt;given&lt;/em&gt; time for this, so there are now even tools for setting up your tools. And all of a sudden, people who previously entered the industry by downloading a website onto their computer, changing some stuff in HTMl and opening it up in their browser, are now not only learning javascript before anything else, are not only learning react before they are learning javascript, they are learning Create React App.&lt;/p&gt;
&lt;p&gt;Yet in the end, they are &lt;em&gt;still shipping a website&lt;/em&gt;. What they think of as webapp and what we keep postulating as a webapp is an epistemological construct that exists exclusively in DX. Obviously, I don&#39;t find this good. Because the complexity is not reduced, it is obfuscated. But these are the new markers that determine the viewpoints of the next generation of tools. They have a recursive effect. CSS was such an outlier in the world of making webapps, in SPA-Land where JavaScript is the reigning Entity, beheading or ignoring everything it doesn&#39;t know or can&#39;t control, that we made tools that first allowed us to write CSS inside of JavaScript, and now even obfuscate the writing of it at all. But just as it was before, if you don&#39;t see something, it isn&#39;t there. I tweeted about clamp() a while ago and someone literally answered with &amp;quot;because tailwind makes CSS so easy I will never use this&amp;quot;. It&#39;s pointless to blame someone for this, because it&#39;s just a development. CSS is being eaten by JavaScript.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;demographic-changes&quot;&gt;Demographic Changes&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/mourning-my-obsolete-skillset/#demographic-changes&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Demographic Changes&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;This changes the demographics. Because whereas writing software for the web previously meant dealing with the dreaded uniqueness of the web platform - writing HTML or the goddess forbid even writing every so awful &lt;em&gt;CSS&lt;/em&gt;, now you can just write JavaScript and not think about anything else. And with better tooling, the unwanted complexity hidden and a single language providing the DX that developers want, everything is prepared for people who didn&#39;t used to sail these waters: Traditional Software Developers. Universities never bothered with properly teaching people HTML, CSS or even JavaScript. Because HTML and CSS are &lt;em&gt;not programming languages&lt;/em&gt;. But with ES6+ closing the gaps to other languages, programmers can transition easier than ever.&lt;/p&gt;
&lt;p&gt;This also means that the people that used to do certain jobs have either moved on to other things, left their domain behind and succumbed to the need for JavaScript/SPA-flavour developers or they are now sitting in management, architect, or lead positions - positions where domain-specific knowledge and experience is important, but being responsible for people is the main purpose. And now that we&#39;re finally coming to the conclusion that HTML and CSS are programming languages too, I am afraid we&#39;ll soon trade even the term &amp;quot;Author&amp;quot; in HTML/CSS Specs for &amp;quot;Programmer&amp;quot;. Yet it made a difference. I never considered myself a programmer. Because that term represents something that I didn&#39;t see in myself. I didn&#39;t make apps, I made websites.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;inevitable-obsolescence&quot;&gt;Inevitable Obsolescence&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/mourning-my-obsolete-skillset/#inevitable-obsolescence&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Inevitable Obsolescence&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Yet the industry is caught in its circularity. JavaScript is eating everything up. CSS&#39;s much needed specs to concede to the capabilities of CSS-in-JS and Utility-CSS approaches are coming 10 years too late. Former work colleagues are probably still annoyed by me claiming that all we need is scoping (which we already had!) and that the vanilla solution is just around the corner. Now that we have it coming up, those that care are on the margins of the web platform, not at the center any longer. Soon it will not make sense any longer to cater to these people.&lt;/p&gt;
&lt;p&gt;To a certain degree, this obsolescence is inevitable. Where e-commerce was a dedicated, separate field not too long ago, it is now everywhere. And what is considered a possible next iteration of the web, web3, is making the transaction the loop that powers absolutely everything. The web has lost to capitalism. And web3 will not change this - instead it will make it its core. I was always laughed at, when I somewhat pessimistically claimed that my skillset will not be wanted any longer. Yet I am now in this position. What I bring to the table is worthless. Because it is not speaking the language of the industry any longer. As a developer I am worthless, because I am not a &amp;quot;programmer&amp;quot; that builds SPA&#39;s. As a designer I am worthless, because gone are the times where understanding the rules of gestalt psychology, aesthetics and beauty, paired with unconditional positive regard, congruence and empathy (person-centeredness) are enough to get you a job - the only thing that counts is numbers, because it is the language of business. This is the industrialized web.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;the-price-of-industrialisation&quot;&gt;The Price of Industrialisation&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/mourning-my-obsolete-skillset/#the-price-of-industrialisation&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled The Price of Industrialisation&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Processes and tools are being unified, persisted in the process. With reduced complexity, those that were unable to navigate this previously volatile domain are now able to walk the paths that were walked before so often that not only the grass that once grew there is long gone, but that the ground is now sealed forever under asphalt. The web that was once populated by those that didn&#39;t find a place anywhere else is now populated by those that pushed them into the margin before. And I find myself in the margin once again. This is the price of industrialisation.&lt;/p&gt;
&lt;p&gt;When the outcome matters the most, the process needs to be identical or adjusted to produce the same results. Furniture that was once only made by millions of human hands, making it unique in the process and thus made to last for as long as possible, is now being designed by a handful of people and created by machines. Today we are still needing designers and people who write frontend code. But even these people will become obsolete sooner or later. As is the price of industrialisation - because the &lt;em&gt;reality&lt;/em&gt; of having to make money will inevitably overrule everything and everyone. And humans are still the most unreliable and expensive part of the industrial equation. Developers are already happily training code-writing algorithms for github. The habituation phase for invasive technology has long begun and new developers are not unaware of it, they just &lt;em&gt;don&#39;t care&lt;/em&gt; about it. Empathy has been long irrelevant for designers, though it was once postulated as the &lt;em&gt;most important skill to have&lt;/em&gt;. Why be empathic, when you can quantify behaviour into numbers and then make a decision based on this? Empathy requires a person, A/B testing does not.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;where-i-am-going-from-here&quot;&gt;Where I am going from here&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/mourning-my-obsolete-skillset/#where-i-am-going-from-here&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Where I am going from here&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I am a Designer &amp;amp; Developer on the Web. I know how to make beautiful websites that people will like to use. I know how to make them in a way that will support and hopefully even empower the people who interact with it. I have done this for 11 years and I will continue to do so. But I will not be able to make a living from it any longer. It will become a hobby eventually. Something that I look at with nostalgia, reminiscing about that odd time when I was actually paid to improve someone&#39;s experience, paid to make something not only beautiful, but useful - and useful because it was beautiful, and vice versa. Where I was asked to empathically understand someone in order to adapt something to be more congruent with their world view. Making websites always felt useful to me. And at the same time, I always felt the ability to venture, to explore new possibilities and to be creative. These things were not allways effective or lasted, but they were valuable non the less. They made a difference to &lt;em&gt;someone&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I&#39;ve made the decision to leave the industry a few years ago. I&#39;ve seen the signs of obsolescence very early. For now, I am changing direction and I am giving up my bastion, because it is not getting anyone anywhere. I&#39;ve tried finding a job with my skillset, and it is very clear to me that is 11 years in this industry of making more than 40 websites, Expertise in HTML, CSS are absolutely worthless if I am not also an expert in JavaScript, or if I am not at least experienced in React, Vue or Svelte.&lt;/p&gt;
&lt;p&gt;So with this post I am mourning my obsolete skillset, which I cultivated to carefully, so intentionally for 11 years. And as it goes with mourning, it hurts and I am getting angry and sad. I learned HTML &amp;amp; CSS when I was suicidal and very addicted to online gaming, mourning my first love (and unknowingly mourning a childhood I never had). Because of it, I was able to make a living, sustain myself, be autonomous, which ultimately lead me to extraordinary individuals and communities. Not only that, but some of those individuals that I got to admire from afar even know that I exist and have shared messages with me. That is just wonderful.&lt;/p&gt;
&lt;p&gt;Luckily, I can carry over these positives into a new time, which &lt;em&gt;also&lt;/em&gt; inevitably comes with every loss. And, I have a very perverted love of being wrong about my pessimistic predictions. Maybe all of this is different. But for now, I am looking at what I am gaining. I am looking forward to learning new things, new possibilities and new capabilities. I&#39;m excited to see where these new things are gonna carry me.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Things I wish I&#39;d known earlier in my career</title>
		<link href="https://helloyes.dev/blog/2022/career-wish-id-known-earlier/"/>
		<updated>2022-07-28T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2022/career-wish-id-known-earlier/</id>
		<content type="html">&lt;p&gt;I saw &lt;a href=&quot;https://www.smashingmagazine.com/2022/06/things-to-know-earlier-in-your-career/&quot;&gt;this post&lt;/a&gt; from Vitaly Friedman on smashingmagazine.com and it resonated well with lots of realisations I&#39;ve had recently about my own career. So I wanted to compile my own list of things I really would have wanted to know earlier.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;It is important to me to mention, that I don&#39;t write this with regret or resentment for me or my career nor to I wish to undo my decisions. At the same time, as a more mature person and experienced tech worker, I would like to share my own insights with other people on similar trajectories, not so that they do it differently, but so that they have another perspective to potentially consider, and ultimately become more empowered and self- and pro-effective.&lt;/p&gt;
&lt;p&gt;I&#39;ve done a lot of waiting and observing, and while it sharpened some skills, it didn&#39;t necessarily lead to progress in my career. It did the opposite, it reduced my momentum. And you can do &lt;em&gt;a lot&lt;/em&gt; with momentum.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Vitaly elaborated on these points beautifully:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Never tell your salary expectations first&lt;/li&gt;
&lt;li&gt;Switching companies is how you make more money&lt;/li&gt;
&lt;li&gt;Pay attention to your job title&lt;/li&gt;
&lt;li&gt;Keep Record of your Achievements&lt;/li&gt;
&lt;li&gt;You can&#39;t have it all&lt;/li&gt;
&lt;li&gt;Pay attention to your estimates&lt;/li&gt;
&lt;li&gt;Test the company during your probation period&lt;/li&gt;
&lt;li&gt;Think about passive income early&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&#39;ve come to similar or identical conclusions, in varying degrees. The points I am adding on my own may or may not apply to you in varying degree.&lt;/p&gt;
&lt;p&gt;This is more a list to myself, a record of a dialog I&#39;ve been having with myself, made accessible to whom it may concern.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;separate-the-craft-from-the-industry&quot;&gt;Separate the craft from the industry&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/career-wish-id-known-earlier/#separate-the-craft-from-the-industry&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Separate the craft from the industry&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I saw the actual practice of making websites, designing or developing directly intertwined with the larger industry. The ideals of the craft must be the ideals of the industry as well. This led me into many conflicts, in which the needs of the business clearly outweighed the requirements for good craftswomanship.&lt;/p&gt;
&lt;p&gt;This classic conflict would not subside in me, until I eventually had to accept both realities, with their value systems and their goals, as existing in parallel. All conflict is resolved by decision. By deciding that the ambivalence between craft and industry are something I am indeed well-equipped to hold, the conflict had turned into possibility.&lt;/p&gt;
&lt;p&gt;Rarely do the interest of automated business align with the interest of craft, not just on the web. Craft itself is always concerned with creating the best result possible. The result of our craft is served and offered to people to interact with, meaning that much of its quality is determined by the receiver. Consequentially, craftswomen align their craft around those peoples needs.&lt;/p&gt;
&lt;p&gt;Industry on the other hand, does not care about the needs of the people - unless they can directly tie it to monetary gain. That is the point of a business. Industry is the larger application of this intention.&lt;/p&gt;
&lt;p&gt;There is great freedom in accepting both as independent value systems, that are not fighting for objective evaluation and rigid hierarchical alignment, instead, they can ambivalently live together, in symmetrical relationship to us.&lt;/p&gt;
&lt;p&gt;What I mean by that, is that we allow ourselves to compartmentalise and confine the needs of the industry and the craft respectively to their own contexts. If a client asks us to make the logo bigger, even though we &lt;em&gt;knew&lt;/em&gt; it would be a mistake, we may speak up and advice against it, but if we accept this request as an expression of seeing a business need fulfilled, we can approach it respectively and allow ourselves to not see it as a devaluation of us as craftswomen, if we go along with it. Because in this interaction, we are not only paid as craftswomen, but also as employees, contractors or suppliers - or experts of process, not result. And in these contexts, the need of the craft are not primary.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;learn-to-ask-questions%2C-then-ask-questions&quot;&gt;Learn to ask questions, then ask questions&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/career-wish-id-known-earlier/#learn-to-ask-questions%2C-then-ask-questions&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Learn to ask questions, then ask questions&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;This is the one thing that I am sure would have improved my movement in this career, had I learned it earlier. Learning to ask questions as a discipline has become integer to me as a systemic counsellor (in training under supervision). In systemics, we accept all reality as constructed, meaning that all external descriptions of reality are merely offers that can be accepted or not. Instead of &amp;quot;educating&amp;quot; my clients about how to think about things, I ask questions that may allow them to construct alternatively themselves.&lt;/p&gt;
&lt;p&gt;This same principle can apply to the way we interact with stakeholders and other people in our industry. If instead of assuming to be experts in our fields, and thus experts in what our clients and stakeholders need, we assume to be experts of helping our clients and stakeholders express their needs themselves, we become experts of process. And as experts of process, we become focused with &lt;em&gt;how&lt;/em&gt; we do things, not &lt;em&gt;what&lt;/em&gt; it will lead to. Because if stakeholders and clients have the ultimate say in what gets accepted or not, then they &lt;em&gt;are&lt;/em&gt; the experts after all.&lt;/p&gt;
&lt;p&gt;But what we can do, is ask questions - questions, not intended to add information to &lt;em&gt;us&lt;/em&gt;, but to &lt;em&gt;them&lt;/em&gt;. This is a bit of an art form, but for the sake of this little post, I&#39;d like to give you a few examples of solution-focusing and circular questions, that I have borrowed from my counselling practice and that have proven to be helpful in my design &amp;amp; dev career too:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How will you know, that our work together will have been successful?&lt;/li&gt;
&lt;li&gt;On a scale from 1 - 10, how close to what you are imagining do you think we are? What would have to change in this draft, to nudge us up or down a number?&lt;/li&gt;
&lt;li&gt;If I showed this draft to your CEO, what do you think his feedback would be?&lt;/li&gt;
&lt;li&gt;If I asked your users about what to improve on your website, what would they tell me?&lt;/li&gt;
&lt;li&gt;From your previous work with designers / developers, what would you say would need to happen, to make this relationship fail completely? [In order to avoid it]&lt;/li&gt;
&lt;li&gt;Until today, what have you tried already to improve the UX of your website? What has worked already, what hasn&#39;t?&lt;/li&gt;
&lt;li&gt;How will you know, that the changes that you are suggesting will get you towards your goal?&lt;/li&gt;
&lt;li&gt;So in this current redesign, you said you want it to be less [adjective], right? What should it be &lt;em&gt;instead&lt;/em&gt;?&lt;/li&gt;
&lt;li&gt;Now that we are gonna change your website, in your opinion, what should definitely remain intact / what works really well?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of these questions are intended to give the person asking the question information. Instead, they are intended to &lt;em&gt;create&lt;/em&gt; new information within the client itself. I&#39;ve asked these questions to clients directly and if they have a hard time answering, then that is usually a good sign. It means, that before asking that question, they haven&#39;t thought of it before. Yet, asking what to leave intact on a website redesign is not only a really valuable information to have for the process, but it also important for the clients to get a better feeling of what they want and need.&lt;/p&gt;
&lt;p&gt;Same goes for asking circular questions. Circular questions are asked in order to gain information about relationship dynamics, without having to have all the people in the system present. For our context, there is a system and a dynamic present between our client and their users / customers. We can never gain objective information, instead we ask the client about how they are experiencing this dynamic: &amp;quot;What would your users tell me, if I asked them right now...&amp;quot; - This question invites clients into a meta-position, in which they are observing themselves / their business / their website from a user&#39;s perspective. You&#39;d be surprised about how specific and accurate these answers can become, or how shocked they are, if they realise that they actually do not have an accurate enough picture to answer that question. In the latter case, this is what you need to focus on.&lt;/p&gt;
&lt;p&gt;This is just a small excerpt about how I am approaching questions nowadays. I believe that as experts of process we need to become masterful questioners.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;avoid-%22why%22.&quot;&gt;Avoid &lt;em&gt;&amp;quot;why&amp;quot;&lt;/em&gt;.&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/career-wish-id-known-earlier/#avoid-%22why%22.&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Avoid &lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I would like to focus Why-Questions for a short moment. I picked up the idea of the 5-why&#39;s very early on and started using it. It made a lot of sense to me. Nowadays, I avoid &amp;quot;why&amp;quot; as much as possible. The idea of the question is to find out about how someone else sees something, what their logic is, what their reasoning is.&lt;/p&gt;
&lt;p&gt;But why as a question can be a spearhead, a weapon that stings. Instead of inviting people to reveal their thoughts, it may force them to justify themselves. And to that, we have no right to ask stakeholders to justify their choices. Not only does it danger the complementary (hierarchical) relationship we are in, it may create a power dynamic with us at the losing end on it.&lt;/p&gt;
&lt;p&gt;Instead of asking &amp;quot;why&amp;quot;, we can ask &amp;quot;what for&amp;quot; - as in, &amp;quot;what will this be good for / achieve?&amp;quot; - not from a place of disbelieve, but from a place of respect for the desire behind the request, with the intention to understand said desire. Another way of getting to the same place, is to frame it a bit differently, like: &amp;quot;At the moment I don&#39;t yet understand what you are improving with this change - can you explain it to me so I can support you better?&amp;quot;.&lt;/p&gt;
&lt;p&gt;The gist of it is that the question &amp;quot;why&amp;quot; is often an attack - try to avoid it.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;don&#39;t-stay-for-the-%22potential%22&quot;&gt;Don&#39;t stay for the &amp;quot;potential&amp;quot;&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/career-wish-id-known-earlier/#don&#39;t-stay-for-the-%22potential%22&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Don&#39;t stay for the &quot;potential&quot;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I have spent years in companies, &lt;em&gt;waiting&lt;/em&gt; for an either promised or imagined reality, that never came to be. I joined and I saw potential of how good things could be, and I saw myself thriving in this potential reality. And while I poured my heart and twenties into these companies, the potential went unfulfilled until it eventually rotted away and I was forced to start anew.&lt;/p&gt;
&lt;p&gt;I did not see this pattern until very recently. Now I know, that staying with a company for how things &lt;em&gt;could&lt;/em&gt; be, is a draining and dooming attitude towards yourself. If we allow ourselves to remain in unsatisfying and lacking situations and circumstances, despite having the choice to go another way, we are treating our own needs and also our time with disrespect.&lt;/p&gt;
&lt;p&gt;We see all this potential, and we believe that if we just stay for long enough, and if we just fight hard enough and pour enough of ourselves into the company, it &lt;em&gt;must&lt;/em&gt; eventually lead to the fulfilment of said potential, with us thriving in it. And it may happen, but if we stay for the potential, we are just gambling with our time. Time, that could instead be poured into a position that is giving us what we need.&lt;/p&gt;
&lt;p&gt;I don&#39;t regret my time that I spent waiting, suspended and having to understand that things just can&#39;t be different &lt;em&gt;right now&lt;/em&gt;, but that the company after all is growing - but looking back I can pinpoint exactly the time when a part of me already knew that it would be doomed, and yet I stayed, leaving only me to blame for it in the end.&lt;/p&gt;
&lt;p&gt;If we want to achieve certain things in our career, we are left alone with it. Especially as a queer person, even though I am still much less discriminated against, I am still over mentored and under sponsored. The only way forward, is to be self-sufficient and pro-active when it comes to my career choice, because nobody else will lift me where I want to go. I need to go there myself, and so do you.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;always-be-looking-at-open-positions&quot;&gt;Always be looking at open positions&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/career-wish-id-known-earlier/#always-be-looking-at-open-positions&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Always be looking at open positions&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;In order to have movement, you need to be able to have possibilities. Without options, there is no movement. This applies to your career. &lt;em&gt;Always&lt;/em&gt; be aware of other potential positions for you to apply to. In our industry, increasing your salary is only really possible by hopping from one company to the other, as &lt;a href=&quot;https://www.smashingmagazine.com/2022/06/things-to-know-earlier-in-your-career/#2-switching-companies-is-how-you-make-more-money&quot;&gt;Vitaly has already pointed out&lt;/a&gt; in his article. I didn&#39;t know that. I had to turn 31 to come to this realisation.&lt;/p&gt;
&lt;p&gt;If you are like me, you might have grown up in a time, where older generations proudly talked about how long they had been with a firm and you may have sensed a feeling of pride and respect. This is a generational artefact that most of us will never experience. This thinking is so old, that nowadays, if you are not changing companies every 1-2 years, people will assume something was &lt;em&gt;wrong&lt;/em&gt; for you staying this long. This has happened to me before, in which I was asked to justify myself for staying with a company for so long, despite not getting into higher positions.&lt;/p&gt;
&lt;p&gt;Even if you are not intending to step up the career ladder, keep looking and maybe even applying to other positions, in order to know what the market expects you to be capable of. Your job may not offer you the possibility to learn and master tech that maybe other companies will require you to be experienced in, should you lose your job suddenly.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;be-loyal-to-the-people%2C-not-the-business&quot;&gt;Be loyal to the people, not the business&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/career-wish-id-known-earlier/#be-loyal-to-the-people%2C-not-the-business&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Be loyal to the people, not the business&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;As is true for separating craft from industry, it is valuable to differentiate business from people. I never separated these two, because I&#39;ve never worked &lt;em&gt;inside&lt;/em&gt; huge corporate environments. So asking for raises, different hours, or saying no to the business automatically meant asking for things or saying &lt;em&gt;no&lt;/em&gt; to that person that I was on a first-name basis with. But it is very different to ask for a raise from a friend, or to ask it from a company.&lt;/p&gt;
&lt;p&gt;As you build relationships to the people over time, try to separate them from the interest of the business. We can be accepting, loving and tolerant with the people, while at the same time remain firm, confident and in-control with the business.&lt;/p&gt;
&lt;p&gt;When we ask for a career plan, the people answering, are representing the business, not themselves. And as we ask, we are not asking as people, we are asking as employees. Same principle applies to interacting with clients, even as freelancers. As people, two individuals working together on a project, being welcoming, understanding and empathic is required to a positive relationship, but as a one-woman business, I may have interests to protect that are directly tied to my existence as a person in this world.&lt;/p&gt;
&lt;p&gt;Ultimately, it is practicing separation of concerns. As humans in friendly relationship with each other, we have different concerns than the business who are dancing through a carefully orchestrated transaction.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;consider-an-exit-strategy&quot;&gt;Consider an exit strategy&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/career-wish-id-known-earlier/#consider-an-exit-strategy&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Consider an exit strategy&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I believe that we are reaching a point in tech, where we are automating more positions than new positions are opening. It certainly is the goal of tech to make people redundant. And in an ideal world, all of these people would move on to other jobs. But that is not the reality. Some people will move up and move on, but many people won&#39;t.&lt;/p&gt;
&lt;p&gt;If I were to join tech at this time, I would make sure that I had a backup plan. I believe in diversity and I &lt;em&gt;personally&lt;/em&gt; learned that I have to not focus too hard on one thing, but instead learn to balance many things simultaneously.&lt;/p&gt;
&lt;p&gt;In a way, this sentiment is also expressed by Vitaly&#39;s point of thinking early about passive income. But the truth is that most people working in tech are not present on social media or even have the desire to invest even more time in addition to their already cognitively and socially demanding day job. It certainly is an attitude that we are seeing as a result of generational change and I believe it is rather healthy.&lt;/p&gt;
&lt;p&gt;Your job may just be a job and that is fine. But tech is only a &lt;em&gt;secure&lt;/em&gt; job if you are willing to switch gears at any given point in time and if you are willing to do the industry&#39;s bidding, maybe even forcing to ignore your own morality in the process of it. There is no denying the volatility of even the smallest aspects of tech.&lt;/p&gt;
&lt;p&gt;And let&#39;s not forget the fact that sitting for hours on end, no matter how much you are stretching in between, will either force you to counter-balance it (inadvertently sacrificing even more time on the job, because you are trying to undo damage) or deal with the consequences later on.&lt;/p&gt;
&lt;p&gt;Chances are, that you are working in a company that is held &amp;quot;exit ready&amp;quot; at all times. That means, that they are making sure that if push comes to shove, the few people invested in the company can sell it and &lt;em&gt;exit&lt;/em&gt; the business, leaving with a profit in the process. And I think as tech workers we need to do the same. This doesn&#39;t mean that we should prepare for a doomsday scenario, but it may be wise to widen our options, consider an alternative or maybe complementary path. Keep your options open and diversify. Companies do it too.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;don&#39;t-take-career-advice-from-anyone&quot;&gt;Don&#39;t take career advice from anyone&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/career-wish-id-known-earlier/#don&#39;t-take-career-advice-from-anyone&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Don&#39;t take career advice from anyone&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;As a systemic counsellor, I am aware that no reality is constructed from the outside. Via communication, messages are decoded, sent, received and decoded. A famously lossy process in which meaning is given to what was decoded, not found in it. All interventions are offers, invitations of alternative constructions, but the construction is done by the client, not the counsellor.&lt;/p&gt;
&lt;p&gt;For that reason, I think it is in general not a bad idea, to think of all career advice with an asterisk that reads: &amp;quot;May not apply to you&amp;quot;.&lt;/p&gt;
&lt;p&gt;Come to your own conclusions and where as well intentioned people can become powerful allies, mentors, sponsors and friends - but making their interpretation of our career a requirement for us to pivot is not a good idea.&lt;/p&gt;
&lt;p&gt;Aim to be as self-sufficient as possible - while at the same time not thinking that all success will always ever only come from you. All success has a component of luck or at the very least privilege playing its part. But I&#39;ve come to understand that if I want to be autonomous with my career, I need to to be sure that I am able to move on my own. And for that I need options, the ability to discern and a little bit of momentum.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;don&#39;t-take-it-too-seriously&quot;&gt;Don&#39;t take it too seriously&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/career-wish-id-known-earlier/#don&#39;t-take-it-too-seriously&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Don&#39;t take it too seriously&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;My last piece of advice I would give to myself would be to not take it &lt;em&gt;so seriously&lt;/em&gt;. If a feature wouldn&#39;t end up how I designed it, if an animation wouldn&#39;t turn out how I envisioned or prototyped it or if a stakeholder just needed to take a dump on my work in the very last moment, it would feel like someone had eradicated all my time and effort. My ego was &lt;em&gt;so hurt&lt;/em&gt; that it would keep me up at night, forging plans to save myself from yet another loss. Working became a game of counting wins and losses, hoping that eventually, it would turn out in my favour.&lt;/p&gt;
&lt;p&gt;Yet at the same time it prevented me from seeing the possibilities that these situations also had offered me - including the compliments about how I had approached my work. If the end result can only be a win or a loss, nuance gets lost and instead of seeing lots of small wins and a few small losses, it turns into one general loss that overshadows everything else, eradicating all the things that went well.&lt;/p&gt;
&lt;p&gt;So nowadays I approach most of my work with an explorative mindset, with the knowledge that if things don&#39;t turn out well, that other things will have gone very well and if push comes to shove, I&#39;ll be able to deal with the situation as it happens, and with its consequences as well.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;So that&#39;s it. That&#39;s what I would tell myself retroactively. I wonder what advice I&#39;ll give myself in 10 years, if I still work in this industry that. Though don&#39;t mistake, I&#39;ll still be writing HTML &amp;amp; CSS, I just don&#39;t know if I&#39;ll get paid for it! :P&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>RE: CSS Breakpoints every Developer needs to know</title>
		<link href="https://helloyes.dev/blog/2022/css-breakpoints/"/>
		<updated>2022-07-21T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2022/css-breakpoints/</id>
		<content type="html">&lt;p&gt;There was this tweet. You know which one. Well, this post is an attempt to bring structure to what went through my mind when I saw it. First I&#39;d like to dissect a bit more what irks me about the original premise of the tweet, and I&#39;m ending with a suggestion for an alternative mindset - but in the same frame of the original tweet.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Obviously this is not meant to insult. But I do believe that we need to talk about things that are not working. I believe that this is one of those things where the phrasing infers that parts of the community is already relying on a mindset that is incongruent with the underlying concepts of the platform they develop with and on. And I think that is a problem that we need to address. So this is what I am attempting here.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;there-are-no-%22css-breakpoints%22&quot;&gt;There are no &amp;quot;CSS Breakpoints&amp;quot;&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#there-are-no-%22css-breakpoints%22&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled There are no &quot;CSS Breakpoints&quot;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;What this idiom refers to is media queries, usually querying the size of the screen. Most people where annoyed by the nowadays really antiquated, to a degree even inappropriate idea of treating media queries for specific sizes (such as 320px, 480px, etc.) as substitutes for specific devices. But that is not what made me upset, instead it is the usage of the term &amp;quot;CSS Breakpoint&amp;quot; itself.&lt;/p&gt;
&lt;p&gt;It demonstrates the severe lack of basic understanding of the web platform and how the languages that allow us to build on it interact with it. There are no &amp;quot;CSS Breakpoints&amp;quot;, because not only is it not CSS that is &lt;em&gt;breaking&lt;/em&gt;, but they are also not exclusive to CSS.&lt;/p&gt;
&lt;p&gt;Even in the earliest drafts of the media query spec, querying media properties from the &lt;code&gt;media=&amp;quot;&amp;quot;&lt;/code&gt; attribute in a &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; element was possible. Though that argument is a bit of a stretch, I get that. So let&#39;s focus on the other one:&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;what-is-breaking&quot;&gt;What is breaking&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#what-is-breaking&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled What is breaking&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;We write our styles and develop our sites and as we test it by subjecting it to all sorts of environmental hazards, such as making the screen smaller and wider, we may encounter moments from which on our styles seem to not work any longer, they seem to &lt;em&gt;break&lt;/em&gt;. We&#39;re testing a bit further and pretty soon, we may be able to pinpoint the exact threshold, from which on we need to adjust our styles. This point is called a &amp;quot;breakpoint&amp;quot;, because at this &lt;strong&gt;point&lt;/strong&gt;, the styles our code results in, &lt;strong&gt;break&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It is important to understand that it&#39;s not CSS that is breaking, or its properties. In fact, it all does exactly what we programmed it to do. But we&#39;ve decided that what we&#39;ve programmed should only apply to a certain point. And from that point on, we want different code to run so that the styling adjusts to be more appropriate for the given screen estate.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;It is interesting to point out, that I just couldn&#39;t find the origin of the term &amp;quot;breakpoint&amp;quot;. In my mind, it was part of Ethan Marcotte&#39;s Article / Book &amp;quot;Responsive Webdesign&amp;quot;. But it isn&#39;t! I unintentionally nerd-sniped Ethan with a tweet and he himself couldn&#39;t pinpoint its origins. But he did some valuable research in this little &lt;a href=&quot;https://ethanmarcotte.com/wrote/points-break/&quot;&gt;journal entry&lt;/a&gt;. Read that too! And thank you for the mention :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;the-breakpoints-you-need-to-know&quot;&gt;The breakpoints you need to know&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#the-breakpoints-you-need-to-know&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled The breakpoints you need to know&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Your CSS is not breaking. It&#39;s the style that stops working under certain conditions.&lt;/p&gt;
&lt;p&gt;Don&#39;t name your SASS variables &amp;quot;phone&amp;quot; or &amp;quot;tablet&amp;quot;. Yes we did that for a while, because the ideas of responsive Webdesign where almost a remedy for dedicated device-focused sites, which were often a sad excuse of their desktop-mother-site.&lt;/p&gt;
&lt;p&gt;But we&#39;ve since long moved on. The truth is that there is no set of salvatory collection of pixels that you need to memorise. You need to write your styles, test it and see at which point it breaks. There. That is a a breakpoint in your layout from now on.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;holding-complexity&quot;&gt;Holding Complexity&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#holding-complexity&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Holding Complexity&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The argument against this is that &lt;em&gt;when you work in a team&lt;/em&gt; you&#39;ll want a shared set of predefined points that you can refer to. A valid concern, but it has little to do with the nature of the web platform or the reality of device sizes. The only reason we find this effective is because we are trained to spot potentials for reducing complexity in programming. And sure we should do it - but we better remember that we ourselves &lt;em&gt;constructed&lt;/em&gt; these breakpoints and that they have little connection to the reality of the platform or our users. We do it for the business.&lt;/p&gt;
&lt;p&gt;The Web as a platform is as flexible as a programmable environment will get. It mirrors many qualities of social systems and so it is capable of holding ambivalence and an extraordinary amount of complexity &lt;em&gt;with ease&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Not everyone makes websites for a business. If you are working on a website on your own, ask yourself if the doctrine you are following in order to please the desires of the industrial exploitation of the web platform is still serving you and the people you are making the site for.&lt;/p&gt;
&lt;hr /&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;layout-is-a-fading-concern---meet-your-new-breakpoints&quot;&gt;Layout is a fading concern - meet your new breakpoints&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#layout-is-a-fading-concern---meet-your-new-breakpoints&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Layout is a fading concern - meet your new breakpoints&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/&quot;&gt;Stephanie Eckles&lt;/a&gt; has &lt;a href=&quot;https://moderncss.dev/3-popular-website-heroes-created-with-css-grid-layout/&quot;&gt;countlessly&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=8slZJrTK3nE&quot;&gt;beautifully&lt;/a&gt; &lt;a href=&quot;https://smolcss.dev/&quot;&gt;demonstrated&lt;/a&gt; that &lt;a href=&quot;https://smolcss.dev/#smol-container&quot;&gt;modern&lt;/a&gt; CSS that you can safely use &lt;em&gt;right now&lt;/em&gt; in your projects often reduces the need for screen estate based interventions in form of media queries. Meaning, that the CSS we write becomes more and more resilient to its environment and truly &lt;em&gt;responsive&lt;/em&gt; to it.&lt;/p&gt;
&lt;p&gt;This is mainly experienced in the way we are programming layout, but not exclusively. But as we are more inclusively approaching the way we design and develop our sites, and as we write less media queries to adapt our layout-based styles, we realise that nowadays, there is a whole new dimension of circumstances, that can make our styles break. These are our new breakpoints, which actually, &lt;em&gt;every Developer needs to know&lt;/em&gt;:&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;motion-preferences&quot;&gt;Motion Preferences&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#motion-preferences&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Motion Preferences&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;If your site heavily relies on motion then it will break for some people. They will have a very bad experience or may even be unable to use your site at all.&lt;/p&gt;
&lt;p&gt;Luckily we have the tools to adapt to it, with the &lt;code&gt;prefers-reduced-motion&lt;/code&gt; media feature.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h4 id=&quot;more-about-this&quot;&gt;More about this&lt;/h4&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#more-about-this&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled More about this&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;MDN - https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion&lt;/li&gt;
&lt;li&gt;Una Cravats, for web.dev - https://www.youtube.com/watch?v=_ZdZh-ESOHY&lt;/li&gt;
&lt;li&gt;Michelle Barker, for smashingmagazine.com - https://www.smashingmagazine.com/2021/10/respecting-users-motion-preferences/&lt;/li&gt;
&lt;li&gt;Thomas Steiner, for web.dev - https://web.dev/prefers-reduced-motion/&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;pointer-variety&quot;&gt;Pointer Variety&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#pointer-variety&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Pointer Variety&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;People using your site may not click, like, ever. Because they may not traverse it with a pointer device at all. Maybe they are using their finger, or they are using a keyboard, or something entirely different. If your site relies on exact pointing, or if it relies on clicking at all, it will break for some people. And some people may not be able to use it at all.&lt;/p&gt;
&lt;p&gt;This is another feature, we can query, with: &lt;code&gt;pointer&lt;/code&gt;, and we also have the &lt;code&gt;hover&lt;/code&gt; media feature, to specifically query conditions in which &lt;code&gt;:hover&lt;/code&gt; is possible. Besides just CSS, making sure that your site is keyboard accessible will make sure that people relying on a keyboard are included.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h4 id=&quot;more-about-this-1&quot;&gt;More about this&lt;/h4&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#more-about-this-1&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled More about this&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Christian Diaz, for smashingmagazine.com - https://www.smashingmagazine.com/2022/03/guide-hover-pointer-media-queries/&lt;/li&gt;
&lt;li&gt;David Walsh - https://davidwalsh.name/pointer-media-query&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;color-scheme-preferences&quot;&gt;Color Scheme Preferences&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#color-scheme-preferences&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Color Scheme Preferences&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Often trivialised as &amp;quot;Dark Mode&amp;quot;, for a variety of reasons, people visiting your website may require your site to be either on the brighter or on the darker side.&lt;/p&gt;
&lt;p&gt;We can respect this preference with &lt;code&gt;prefers-color-scheme&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;contrast-preferences&quot;&gt;Contrast Preferences&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#contrast-preferences&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Contrast Preferences&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Not only may people in general prefer and rely on websites that are high in contrast to &lt;em&gt;see&lt;/em&gt; what is on it, but they may even bring their own colors with them, by way of forced colors.&lt;/p&gt;
&lt;p&gt;The media features &lt;code&gt;prefers-contrast&lt;/code&gt;, &lt;code&gt;forced-colors&lt;/code&gt; and &lt;code&gt;inverted-colors&lt;/code&gt; allow us to consider this context.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h4 id=&quot;more-about-this-2&quot;&gt;More about this&lt;/h4&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#more-about-this-2&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled More about this&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Ben Myers - https://benmyers.dev/blog/fix-low-contrast-text/&lt;/li&gt;
&lt;li&gt;Eric Bailey for smashingmagazine.com - https://www.smashingmagazine.com/2022/03/windows-high-contrast-colors-mode-css-custom-properties/&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;reading-direction-variety&quot;&gt;Reading Direction Variety&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/css-breakpoints/#reading-direction-variety&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Reading Direction Variety&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;People visiting your website may have very different understandings text flow.&lt;/p&gt;
&lt;p&gt;In order to be inclusive with this context, we can rely on plenty of things. One of the most important paradigm shifts is the switch to logical properties, which are relative to reading directions of the settings of the people browsing the website. The other one is making use of pseudo-elements such as the &lt;code&gt;:lang&lt;/code&gt; and &lt;code&gt;:dir&lt;/code&gt; selectors, to intervene, when something is breaking.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Una Kravets postulates the new responsive to be respecting user preferences. Maybe that is not just a result of increasing capabilities of the platform, but also of our increasing capacity to accept the complexities of the human realities it has to respond to in order to serve the people on.&lt;/p&gt;
&lt;p&gt;As the platform becomes even more capable of holding complexity, the contexts in which our programming will result in something &lt;em&gt;breaking&lt;/em&gt; for someone will just increase. And so will our capacity to adapt to it.&lt;/p&gt;
&lt;p&gt;Unfollow people that give you listicles of arbitrary pixel values to satisfy your desire to have it &lt;em&gt;easy&lt;/em&gt;. The web is easy. But it is also very complex. You better get into it!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>I&#39;m not pursuing design any longer</title>
		<link href="https://helloyes.dev/blog/2022/leaving-design/"/>
		<updated>2022-06-04T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2022/leaving-design/</id>
		<content type="html">&lt;p&gt;&amp;quot;Do you wanna focus on design or development?&amp;quot;, people I worked with used to say all the time &amp;quot;It&#39;d be good for us to know so we know where your career is going&amp;quot;. For a while I thought I had to decide but I eventually &lt;em&gt;decided&lt;/em&gt; to pursue right what is in between, the middle between Design &amp;amp; Development.&lt;/p&gt;
&lt;p&gt;I still think that my sweet spot of talent and experience is right there, but after a few months of deliberation, I have come to decision to not pursue design as a career path any longer.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;what-it-was&quot;&gt;What it was&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/leaving-design/#what-it-was&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled What it was&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I found my way to the web platform via Graphic Design. I made wallpapers, avatars, signatures, etc. But I did fall in love with HTML and CSS when someone asked me to design a website and told me that would need to learn HTML &amp;amp; CSS in order to delivery.&lt;/p&gt;
&lt;p&gt;That website never came to be, but I had gotten hooked on the platform. I devoured books and blogs like crazy about everything HTML and CSS - but always as a designer, in which Code allowed me to manifest what I had envisioned.&lt;/p&gt;
&lt;p&gt;I eventually ended up never having &lt;em&gt;only&lt;/em&gt; a design job. Design was always part of it, but I was always a Designer &amp;amp; Developer Hybrid. When I got my first job, &amp;quot;Web Designers&amp;quot; were expected to be proficient in HTML &amp;amp; CSS as well. But I quickly learned that design was judged &lt;em&gt;very&lt;/em&gt; differently from code.&lt;/p&gt;
&lt;p&gt;Nobody cared about what the code looked like. They wanted results. But design was different. Not only did they only care about what it looked like and didn&#39;t care about results at all (or more like, they didn&#39;t correlate visual design with success or failure on the business side) but instead they saw it as an extension of themselves.&lt;/p&gt;
&lt;p&gt;Whereas with Code, I was explicitly given Expertise, as in, the trusted power to decide, in Design, the Expertise was always conditioned on how much I was able to bring forth what the client was not able to express without me.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;what-it-is&quot;&gt;What it is&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2022/leaving-design/#what-it-is&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled What it is&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Design as a Profession and a Value Proposition has changed since. Nowadays, understanding of design as a meta-discipline is omnipresent and visual design is happening everywhere and with more frequency than ever. That has good effects too, but more than that, it has turned Design into a demand that needs to be present in an industrial pipeline.&lt;/p&gt;
&lt;p&gt;Thus, design is now being approached with industrial tools and industrial mindsets - and industrial demands. Never have I ever felt more disconnected from the energy that drove me there in the first place.&lt;/p&gt;
&lt;p&gt;To me, Design was always a process formed around the desire to create something specific to the unique context of a given problem. And I don&#39;t think this has changed, but I think the problems have changed.&lt;/p&gt;
&lt;p&gt;New Designers in Bootcamps rarely learn basal skills that are required by the craft. Instead they learn industry tools that will make them hireable. &amp;quot;Design Systems&amp;quot; are not being used to facilitate design, they are being used in order to &lt;em&gt;not&lt;/em&gt; having to dedicate time and money.&lt;/p&gt;
&lt;p&gt;I heard in a podcast a while ago, that &amp;quot;you shouldn&#39;t make your own design system anymore, always start with an existing system&amp;quot;. Another Design Influencer on twitter postulated that there should be a global design system and that designs should just use themes.&lt;/p&gt;
&lt;p&gt;This couldn&#39;t be more incongruent with the spirit that I channel in my work. I wanna sit down with a project and think about what could be done for that project. I don&#39;t wanna take an existing design decision and adjust some values. I am not saying, that configuring design tokens is not also an act of design, but I am saying that it is not enough for me. It bores me to tears.&lt;/p&gt;
&lt;p&gt;And that&#39;s why I am no longer pursuing design as a career path. The truth is that there is much more of that creative spirit in development, and more so than there ever was. I still JavaScript is nasty and needs to be avoided at all costs (except where it includes people), but I&#39;d rather become a JavaScript Developer than keep constantly fighting for basic validity.&lt;/p&gt;
&lt;p&gt;Obviously my years of experience and my inclination for good design follows me wherever I go. But for the time being, I will not look for jobs and opportunities in design any longer. That dream has died long before the pandemic, and a part held on until now. But now I am tired of waiting and I am moving on.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Recapping the last 6 Months</title>
		<link href="https://helloyes.dev/blog/2021/6-months-recap/"/>
		<updated>2021-11-13T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2021/6-months-recap/</id>
		<content type="html">&lt;p&gt;This time of the year usually means introspection, readjustment and realignment for me on a personal level. This time, it&#39;s really special, as I reflect upon the last 6 months, since leaving my previous job. I &lt;em&gt;decided&lt;/em&gt; to leave.&lt;/p&gt;
&lt;p&gt;I left a lot behind, because the individuals that made up my team and the greater company in general, where and still are exceptional to me in so many ways. Leaving easyname was very difficult for me and I didn&#39;t yet know how difficult it would be, in the months coming.&lt;/p&gt;
&lt;p&gt;While I also reflect on this - privately - I wanna take this time to &lt;em&gt;publicly&lt;/em&gt; take an inventory of the constructive things that I was able to do in this time. In narrative therapy, we call this &amp;quot;internalising&amp;quot;, in which we bring a narrative &lt;em&gt;closer&lt;/em&gt; to us. This usually takes out the volatility of a narrative and instead solidifies it.&lt;/p&gt;
&lt;p&gt;Usually I write myself a letter, by hand. This time, I wanna see if maybe there is value in making some of that process public and share it with other people.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;i-made-a-tiny-personal-brand&quot;&gt;I made a tiny personal brand&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/6-months-recap/#i-made-a-tiny-personal-brand&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled I made a tiny personal brand&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I created the &amp;quot;hello, yes.&amp;quot; brand! It is something that I used to say in our internal team chats whenever I started a new conversation. It has a certain quality of &lt;em&gt;derp&lt;/em&gt; that just speaks to me. And where I took it visually, it quickly started to feel like an iteration on what little there was before, when my personal website was just &amp;quot;thomassemmler.com&amp;quot;:&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://helloyes.dev/blog/2021/6-months-recap/thomassemmler-com.jpg&quot; alt=&quot;Screenshot showing an older version of my website, with hardly any content on it&quot; /&gt;
    &lt;figcaption&gt;The old thomassemmler.com. I never invested too much time into it, and it ran on jekyll. So I decided to redo it entirely.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I recycled &amp;quot;Work Sans&amp;quot; as the main headline font, and I added &amp;quot;Poppins&amp;quot; as the paragraph font. As I started working on it, I realized that maybe a new domain would not be too bad of an idea. I had the domain &amp;quot;fantastic.horse&amp;quot; for a year, just because I found the domain &amp;quot;pudding.cool&amp;quot; so dumb that to this day it makes me giggle that someone came up with this idea. That is how the idea to re-brand myself not just with my name but with &amp;quot;hello, yes.&amp;quot; came about in the first place, and it inspired me, so I went for it.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://helloyes.dev/blog/2021/6-months-recap/hello-yes-first-draft.jpg&quot; alt=&quot;Screenshot showing the first draft of the helloyes.com design&quot; /&gt;
    &lt;figcaption&gt;The first draft of the desktop version of the website.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I have this weird desire to use graphical elements to fill up space. Just because I don&#39;t wanna throw some meaningless words at the canvas but I also don&#39;t wanna show photos, so graphical elements it is. Yet I am not an illustrator, so I often end up making simple compositions with basic shapes or textures. This is how these shape-composition illustrations started as well.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://helloyes.dev/blog/2021/6-months-recap/hello-yes-mobile-first-draft.jpg&quot; alt=&quot;Screenshot of the first draft of the mobile first helloyes.com design, showing the shape-composition illustration&quot; /&gt;
    &lt;figcaption&gt;The illustrations are composed of really simple shapes.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I had fun finding a rule set for these compositions. Analog generative art maybe? I am actually planning to do some generative experimentation with them. They actually also lead me to experiment with inline SVG patterns! I even blogged about this:&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://helloyes.dev/blog/2021/very-simple-patterns-with-svg&quot;&gt;
           Very simple Patterns with SVG
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;from my blog&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;I originally started out with a different layout, inspired by &lt;a href=&quot;https://stuffandnonsense.co.uk/blog/using-a-4-5-compound-grid&quot;&gt;Andy Clarke&#39;s article on compound grids&lt;/a&gt;. But I eventually had to write 4x the media queries, because of how the main-column on the website was defined. So in the next iteration, I rid myself from that pain and returned to a plain old single column. It&#39;s still a compound grid, but it&#39;s centered now. For the most part. A perfect use case for container queries, btw. If you haven&#39;t noticed, &lt;a href=&quot;https://www.miriamsuzanne.com/speaking/responsive-components/&quot;&gt;they are coming&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;i-connected-with-exceptional-people&quot;&gt;I connected with exceptional people&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/6-months-recap/#i-connected-with-exceptional-people&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled I connected with exceptional people&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;On the development side of things, I decided to reach for eleventy. I always knew that I wanted the site to be statically generated. I&#39;ve worked with jekyll before, so moving to eleventy seemed logical and that journey was mostly very smooth, but I did run into some things that I needed help with. That&#39;s when I discovered that there was actually an eleventy community discord, with quite a few very active people in it!&lt;/p&gt;
&lt;p&gt;And while I asked questions and received useful answers (usually very quickly), I also started helping other people with their small problems, as I had already encountered and fixed some of them myself before.&lt;/p&gt;
&lt;p&gt;I also noticed that they even had an official Meetup! I attended the very first one meetup and was just amazed by how close some of these people all of a sudden felt to me. This was a big deal, because even at my previous work, only my colleague and now friend &lt;a href=&quot;https://twitter.com/cezarneaga/&quot;&gt;Cezar Neaga&lt;/a&gt; was actively participating in community activity surrounding frontend web dev. But to have so many people close to the domain that I am also continuously falling in love with? That was quite a formative experience for me. It allowed me to see that I can actually connect with people, not just by reading articles and sending an occasional tweet, but more meaningfully.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;the-elventy-meetup&quot;&gt;THE Elventy Meetup&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/6-months-recap/#the-elventy-meetup&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled THE Elventy Meetup&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;They announced that one of their co organizers had to step down and that they were looking for a new member. I did not hesitate &lt;em&gt;a single second&lt;/em&gt; and asked to join immediately. This was important to me, because I saw a chance to contribute to a community that I quickly started to identify with. I didn&#39;t wanna mess this up, so I tried to keep my steamrolling as low as possible. The coolest part is that I get to collaborate with &lt;a href=&quot;https://sia.codes/&quot;&gt;Sia Karamalegos&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://thinkdobecreate.com/&quot;&gt;Stephanie Eckles&lt;/a&gt; on a thing that is intended to create community. I just love that. And we even &lt;a href=&quot;https://jamstackconf.com/jammies/&quot;&gt;won an award&lt;/a&gt; for &amp;quot;Outstanding Community Meetup&amp;quot; during the Jamstack Conf 2021!&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://11tymeetup.dev/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
           THE Eleventy Meetup
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;11tymeetup.dev&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;frontend-horse&quot;&gt;Frontend Horse&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/6-months-recap/#frontend-horse&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Frontend Horse&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;During that same time, I also stumbled upon Frontend Horse stream on twitch, by accident. And they just happened to also have a discord community, which I quickly joined and discovered lots and &lt;em&gt;lots&lt;/em&gt; of really fantastic people there! It was then that I realized how much I had craved to feel connected to community and that even during my previous employments over the years I never felt this.&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://frontend.horse/shows&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
           Frontend Horse Twitch Schedule
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;frontend.horse&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;These two  communities specifically made a big impact on me and changed how I now relate to myself as a developer/designer and how I related to the industry at large through the lense of my craft. This was really important to me. Leaving easyname was necessary but difficult, emotionally and socially. These communities filled a very real need for connection and social interaction which helped me get through his transitional period in my life and career.&lt;/p&gt;
&lt;p&gt;It allowed me to connect with many amazing people, beyond just the discord channels and streams: Stephanie Eckles, Ben Myers, Ben Holmes, Alex Trost, David Aerne, Manni Ikomi, Anatole Ayadi and so many more. Some of these people offered their ear to me and offered their professional expertise and their personal advice when I really needed it. Having these connections made a big difference, professionally and personally. The sad part is that I will probably never meet many of these people in person - but I have learned to not assume too much about these things, one never knows!&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;i-blogged&quot;&gt;I blogged&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/6-months-recap/#i-blogged&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled I blogged&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Also, after 10 years of wanting to do so, &lt;a href=&quot;https://helloyes.dev/blog&quot;&gt;I started blogging&lt;/a&gt;. I&#39;ve written 6 posts - plus one post that remains private. I didn&#39;t find it too difficult to come up with topics to write about, though I do find it sometimes a bit challenging to not just &lt;em&gt;rant&lt;/em&gt; about stuff. Also my habit of just word-vomiting out stuff gets just a bit more held in check by people actually &lt;em&gt;reading&lt;/em&gt; it and then telling me about my spelling mistakes.&lt;/p&gt;
&lt;p&gt;I&#39;m still refining my approach how I write. I am maintaining a somewhat &lt;em&gt;decentralized&lt;/em&gt; backlog of topics I want to talk about. As in, some of it lives in my phone, some lives in an obscure trello board (I think) and there is actually an A5 yellow postIt flying around my flat somewhere, that I cannot find. Oh well. One could call it an &lt;em&gt;organic&lt;/em&gt;, maybe even a self-organizing process.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;i-tweeted&quot;&gt;I tweeted&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/6-months-recap/#i-tweeted&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled I tweeted&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I am in my personal life not invest in social media. I have accounts everywhere except tiktok, but I only really use twitter, where I have developed a habit of &lt;em&gt;ranting&lt;/em&gt; about the industry. I took notice those few followers that I have tend to not really care bout this at all, as they are usually not reacting. But it still feels cathartic to me. There is a lot of stupidity happening on tech twitter that I don&#39;t really like. I do not want to be seen as part of the grifter section on twitter, so I&#39;d rather be seen as critical, a devil&#39;s advocate even.&lt;/p&gt;
&lt;p&gt;Also, I am really happy with the velocity of growth of my following, because it keeps my bubble quite far away from much of the nonsense that I notice people with larger followings seem to be subjected to. I would still like to grow my following though - but this speed seems to be pleasant to me. I grew from ~100 followers to ~250. Maybe I can aim for 300 or 400 followers in the next 6 months. I&#39;d be super, super happy with that!&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;i-did-code-things&quot;&gt;I did code things&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/6-months-recap/#i-did-code-things&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled I did code things&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The irony behind my my professional journey is that whenever I stray more into design or development, I always get somehow pulled back into the other side. I have accepted the fact that I am wandering the space in between. So I shouldn&#39;t have been surprised that I experimented so much with code, and yet I still was. But to be fair, all of these things started as design and they needed to be solved in code.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://helloyes.dev/blog/2021/6-months-recap/basic-pattern-repository.jpg&quot; alt=&quot;the basic pattern repository logo&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The biggest thing was the &lt;a href=&quot;https://patterns.helloyes.dev/&quot;&gt;basic pattern repository&lt;/a&gt;. During this process, I needed to do something that I&#39;ve been wanting to do for a while: learn how to hand-code SVG. Or in this case, understand the svg&#39;s path command syntax. It took a bit but eventually I started to understand why some people actually prefer writing it by hand instead of using the pen tool.&lt;/p&gt;
&lt;p&gt;Due to some key people actually picking up on it and finding it worth mentioning in social spaces, it got a bit of visibility in blogs, listings, etc. All of this lead to 190 stars on &lt;a href=&quot;https://github.com/nachtfunke/basic-pattern-repository&quot;&gt;github&lt;/a&gt;. Which I am told is a good number. I was really surprised about this, because what value it brought felt niche to me. It made me really happy to feel that apparently it &lt;em&gt;is&lt;/em&gt; valuable to other people!&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;creative-code-stuff&quot;&gt;Creative Code Stuff&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/6-months-recap/#creative-code-stuff&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Creative Code Stuff&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I also started playing with Houdini, with paintWorklets to be exact. I&#39;ve known about them for quite a while, but recently (in my bubble at least) attention on this topic seemed to increase. Inspired to look at it more closely, I quickly identified a design for a website I was working on, that actually would benefit from this approach and started playing. After investing a few hours into it I am now 100% convinced that writing paintWorklets is a great introduction to writing canvas JavaScript code and maybe even generative coding in general to a certain degree. The power a simple &lt;code&gt;Math.random()&lt;/code&gt; can have is amazing!&lt;/p&gt;
&lt;figure class=&quot;embed&quot;&gt;
        &lt;p class=&quot;codepen&quot; data-height=&quot;350&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;result&quot; data-user=&quot;thomassemmler&quot; data-slug-hash=&quot;vYZogLx&quot; style=&quot;height: 350px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-pen-title=&quot;vYZogLx&quot;&gt;
        &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/thomassemmler/pen/vYZogLx&quot;&gt;
        vYZogLx&lt;/a&gt; by Thomas Michael Semmler (&lt;a href=&quot;https://codepen.io/thomassemmler&quot;&gt;@thomassemmler&lt;/a&gt;)
        on &lt;a href=&quot;https://codepen.io/&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
        &lt;/p&gt;
        &lt;script async=&quot;&quot; src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
    &lt;/figure&gt;
&lt;p&gt;One of the first experiments I did was trying to render a box with rough edges at the top. I needed to understand quite a few unfamiliar things in order to achieve this. And I think I got about ~85% of the way there, but then got stuck trying to smoothen out the generated bezier curves.&lt;/p&gt;
&lt;p&gt;I have no mathematical skills what so ever, so the equation needed to position the bezier curve handles in relation to each other was graciously provided by &lt;a href=&quot;https://leifs.website/&quot;&gt;Leif Niemczik&lt;/a&gt;! He also endured all of my stupid questions regarding the math behind it and my increasing frustration not being able to cognitively grasp it. Because obviously it isn&#39;t enough to just get the result, I also need to understand how it all works. It eventually evolved into this:&lt;/p&gt;
&lt;p&gt;And then I didn&#39;t stop there. I reused some of the things that I learned while playing with this and I made a tiny little houdini template that allows for drawing of horizontal lines that have a hand-drawn look to them. And it&#39;s even &lt;a href=&quot;https://github.com/nachtfunke/drawn-line-paint-worklet&quot;&gt;available on NPM&lt;/a&gt;!&lt;/p&gt;
&lt;figure class=&quot;embed&quot;&gt;
        &lt;p class=&quot;codepen&quot; data-height=&quot;350&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;result&quot; data-user=&quot;thomassemmler&quot; data-slug-hash=&quot;JjyErxw&quot; style=&quot;height: 350px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-pen-title=&quot;JjyErxw&quot;&gt;
        &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/thomassemmler/pen/JjyErxw&quot;&gt;
        JjyErxw&lt;/a&gt; by Thomas Michael Semmler (&lt;a href=&quot;https://codepen.io/thomassemmler&quot;&gt;@thomassemmler&lt;/a&gt;)
        on &lt;a href=&quot;https://codepen.io/&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
        &lt;/p&gt;
        &lt;script async=&quot;&quot; src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
    &lt;/figure&gt;
&lt;p&gt;I also collaborated on another really small code sketch with &lt;a href=&quot;https://elastiq.ch/&quot;&gt;David Aerne&lt;/a&gt;. I actually started out with this code to do something &lt;em&gt;entirely&lt;/em&gt; different, but it wasn&#39;t too much work to make it look really pretty. So with some of David&#39;s help, this was the output:&lt;/p&gt;
&lt;figure class=&quot;embed&quot;&gt;
        &lt;p class=&quot;codepen&quot; data-height=&quot;350&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;result&quot; data-user=&quot;thomassemmler&quot; data-slug-hash=&quot;ExvwMPy&quot; style=&quot;height: 350px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-pen-title=&quot;ExvwMPy&quot;&gt;
        &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/thomassemmler/pen/ExvwMPy&quot;&gt;
        ExvwMPy&lt;/a&gt; by Thomas Michael Semmler (&lt;a href=&quot;https://codepen.io/thomassemmler&quot;&gt;@thomassemmler&lt;/a&gt;)
        on &lt;a href=&quot;https://codepen.io/&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
        &lt;/p&gt;
        &lt;script async=&quot;&quot; src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
    &lt;/figure&gt;
&lt;p&gt;I find the end result really satisfying! :D&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;i-talked-(kinda)&quot;&gt;I talked (kinda)&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/6-months-recap/#i-talked-(kinda)&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled I talked (kinda)&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I also got the chance, twice, to do something that I always wanted to do: giving talks. I firstly talked at the eleventy meetup, in where I did a &lt;a href=&quot;https://www.youtube.com/watch?v=JZSg3M5WczY&quot;&gt;walk-through the basic pattern repository&lt;/a&gt;, from an eleventy point of view. And then I also went on the Frontend Horse Halloween special, where I talked about the &lt;a href=&quot;https://www.youtube.com/watch?v=Re6MU3N6GSw&quot;&gt;BIOS CSS approach to organizing large scale CSS&lt;/a&gt;!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;That&#39;s it. Thats my 6 month assessment of the positive things, maybe even achievements, since May. I&#39;m excited to see what other stuff awaits in the future! I wanna write more content. I wanna collaborate with even more people. This is what I really enjoy the most - working together with people. It does not matter if it is design or development. I just like to feel intellectually and creatively in synch with people. It feels just right.&lt;/p&gt;
&lt;p&gt;And this is what I am gonna emphasize on in the coming months. Depending on how it feels to have this post out in public, I might do another post in 6 months, so in May, 2022. Or maybe not. We&#39;ll see :)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Make Eleventy the next thing you learn</title>
		<link href="https://helloyes.dev/blog/2021/elventy-should-be-next/"/>
		<updated>2021-09-22T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2021/elventy-should-be-next/</id>
		<content type="html">&lt;p&gt;This post is specifically for you - the person who has just started to learn how to turn your designs into code. Or you have heard from someone that you need to learn HTML and CSS in order to make websites and now you know just enough but you also want to make an &lt;em&gt;actual&lt;/em&gt; website. Not that we wanna gate-keep terms here. The web community would &lt;em&gt;never&lt;/em&gt; do that... But what I mean, is that maybe you want to add an imprint to your website, a contact page, a page dedicated to your work.&lt;/p&gt;
&lt;p&gt;These multiple HTML documents will most likely share elements, such as the contents of your &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, or visible Elements such as the Header or the Footer. It&#39;s rather easy to share your CSS or JS, because multiple documents can just point to the same file. But you can&#39;t &lt;em&gt;extract&lt;/em&gt; parts of your document and point several documents to them. Well, at least not &lt;em&gt;from&lt;/em&gt; the browser.&lt;/p&gt;
&lt;p&gt;Turns out, this is a problem that we already know how to solve, with something called &amp;quot;Hypertext Preprocessing&amp;quot;, in where the hypertext, which our Documents consists of, is getting processed &lt;em&gt;before&lt;/em&gt; it actually turns into a fully fledged HTML document. What a great idea!&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;hypertext-preprocessing...-i&#39;ve-heard-that-before.&quot;&gt;Hypertext Preprocessing... I&#39;ve heard that before.&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/elventy-should-be-next/#hypertext-preprocessing...-i&#39;ve-heard-that-before.&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Hypertext Preprocessing... I&#39;ve heard that before.&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Well, that is kinda the &lt;em&gt;reason d&#39;être&lt;/em&gt; for PHP. Obviously PHP has since evolved, but the acronym still means &amp;quot;Hypertext Preprocessing&amp;quot; because that was its initial purpose. Most websites will not converge all of their content on one page, they&#39;ll have multiple HTML Documents and dedicate a shared collection of links to conveniently access those documents. We call them &amp;quot;Pages&amp;quot;, because the correspond to pages, just like in a book or in a newspaper, in where we also don&#39;t have all content on one sheet of paper.&lt;/p&gt;
&lt;p&gt;Of course you could style every document individually. But this has some drawbacks. Obviously visitors might not understand that one document is connected with the other one. Or they might not be reachable at all via links, because they are not shown. So naturally, you are gonna have some elements that are shared across those pages. But if a link changes, you are gonna have to change it everywhere. With the number of pages naturally increasing, this becomes quickly an insurmountable task. So naturally, the need to extract and repeat markup arose. And that was one of the many things, that PHP solved.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;dynamic-websites&quot;&gt;Dynamic Websites&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/elventy-should-be-next/#dynamic-websites&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Dynamic Websites&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;When a HTML document gets built on the server, dynamically, based on certain requests sent to it, we speak of &amp;quot;dynamic websites&amp;quot;. A term that is often thrown into conversations to mean a variety of things. But historically, and in the context of how websites are sent from the server to the client, this is what this term means.&lt;/p&gt;
&lt;p&gt;But a webserver needs to support this! And we need (mostly) a programming language, that runs on the webserver. There are more programming languages that support this type of website making, not just PHP. And the numbers game still will present this way of website making as the dominant way. And there is nothing wrong with it! But there are drawbacks.&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://css-tricks.com/static-or-not/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
           When to go static, and when not
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;from Chris Coyier at css-tricks.com&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;servers-%26-programming&quot;&gt;Servers &amp;amp; Programming&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/elventy-should-be-next/#servers-%26-programming&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Servers &amp; Programming&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Making dynamic websites will need you to understand much more than just the writing of HTML. There is an entire realm of computing involved that will feel extremely foreign to you, if all your experience in programming is HTML &amp;amp; CSS. And yes, HTML &amp;amp; CSS are programming languages. I don&#39;t wanna hear any arguments against this. We have settled this debate.&lt;/p&gt;
&lt;p&gt;The point is - this is an almost radical shift. But it was necessary, until not too long ago. But now we have more opportunities. Now instead of of rendering documents dynamically on the server, we are able to shift this work to the place where we are making our websites: our very own computers that we design and develop our websites on!&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;enter-ssg&#39;ing&quot;&gt;Enter SSG&#39;ing&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/elventy-should-be-next/#enter-ssg&#39;ing&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Enter SSG&#39;ing&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;This is called &amp;quot;Static Site Generation&amp;quot;. It&#39;s called that because we are &lt;em&gt;generating&lt;/em&gt; our entire &lt;em&gt;site&lt;/em&gt; as a &lt;em&gt;static website&lt;/em&gt;. Static websites are the opposite of dynamic websites, in a way. Because the server will not take a request and &lt;em&gt;build&lt;/em&gt; a document that then gets sent back to the client, instead it sends whole html documents to the client.&lt;/p&gt;
&lt;p&gt;Tools that do this for us are called often just abbreviated as SSG, for &amp;quot;Static Site Generator&amp;quot; and there are &lt;a href=&quot;https://staticsitegenerators.net/&quot;&gt;many different ones&lt;/a&gt; out there. We won&#39;t dive into the history of SSG&#39;s. But let&#39;s just say that there is a great variety out there. And thus also many different approaches. They all usually help with certain things that we need when making websites, especially around reusing and recycling markup as well as creating markup based on some type of data.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;eleventy-to-bridge-the-gap&quot;&gt;Eleventy to bridge the gap&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/elventy-should-be-next/#eleventy-to-bridge-the-gap&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Eleventy to bridge the gap&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;If you know HTML and CSS and maybe a bit of JavaScript, entering the world of SSG&#39;s is a wise move. It will empower you to make websites that are much more complex, without requiring you to adopt a mindset that is &lt;em&gt;radically&lt;/em&gt; different. In fact, for the most part you might be able to do exactly what you have already been doing but you&#39;ll also be able opt into concepts that will carry over to more complex ways of making websites, without overwhelming you.&lt;/p&gt;
&lt;p&gt;I believe that for this task, Eleventy is the right tool especially if you are entering this craft. It is very fast, easy to install and &lt;em&gt;unopinionatedly opinionated&lt;/em&gt;, with the ability to become the backbone of more complex projects.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;good-at...-static-site-generation.&quot;&gt;Good at... static site generation.&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/elventy-should-be-next/#good-at...-static-site-generation.&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Good at... static site generation.&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;It feels odd to say this, but Eleventy is really good at static site generation. This deserves a specific mention because competing projects are not focused too much on. Projects like gatsby do much more than that and are much closer to a framework or a &amp;quot;developer experience&amp;quot;. This comes at an expense that is either specifically monetary or in most cases it is opinionated abstraction. Meaning, that in order to provide a certain experience, it will take control over certain aspects of the development process without giving you much control over it, limiting your choice, for effectivity. This is obviously fine, but it requires you to be congruent with its opinions, or understand them in the first place. For someone entering the craft of website making, this is probably not the case.&lt;/p&gt;
&lt;p&gt;Eleventy&#39;s opinion seems to be that it &lt;em&gt;shouldn&#39;t&lt;/em&gt; have opinions on your DX. Instead it focuses primarily on the &lt;em&gt;generation&lt;/em&gt; part. And it leaves you with much freedom!&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;opt-in-to-a-html-templating-language---or-don&#39;t!&quot;&gt;Opt in to a HTML Templating language - or don&#39;t!&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/elventy-should-be-next/#opt-in-to-a-html-templating-language---or-don&#39;t!&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Opt in to a HTML Templating language - or don&#39;t!&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Eleventy will allow you to not just stay with HTML, but you can also &lt;em&gt;decide&lt;/em&gt; to use and slowly learn to use HTML templating languages. One of the USP&#39;s of Eleventy is that &lt;a href=&quot;https://www.11ty.dev/docs/languages/&quot;&gt;it comes with many different languages&lt;/a&gt; that could be used alongside of each other. Nunjucks, Pug, Markdown, Liquid, Handlebars, Mustache, HAML, Pug, etc. And they can even be used simultaneously! At the very first official &lt;a href=&quot;https://11tymeetup.dev/&quot;&gt;Eleventy Meetup&lt;/a&gt; (Of which I am one of the coorganizers!) Mike Aparicio highlighted this unique feature of Eleventy. &lt;a href=&quot;https://www.youtube.com/watch?v=rZyNBd1WgVM&quot;&gt;Check it out here&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;This is a &lt;em&gt;crucial&lt;/em&gt; point, because this allows you to move at your own pace. You can use Eleventy to just extract and include your &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; or to make a navigation. That is up to you, at your own pace. And when you do that, there won&#39;t be one way that you will have to go in order to make it work nicely for you. That freedom is something valuable to retain when you are just starting to engage with the craft of making websites.&lt;/p&gt;
&lt;p&gt;Many tools and SSG&#39;s out there nowadays cater not to individuals but to big organizations. This is fine of course but the challenges that an individual faces are not the same that a small team or a big corporation faces. Many current gen SSG&#39;s are mostly designed to make you productive. They do that by making working with it as &lt;a href=&quot;https://www.youtube.com/watch?v=4qw3eAa1Hpk&amp;amp;t=14s&quot;&gt;frictionless&lt;/a&gt; as possible. As organizations trying to sell a product, this is an important factor to consider. But as an individual learning how to make websites, friction in learning is a good thing. The result is important, but will fade. The process is sustainable and will reap many results. The more productive the process, the better the sustainable outcome.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;not-a-javascript-framework&quot;&gt;Not a JavaScript Framework&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/elventy-should-be-next/#not-a-javascript-framework&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Not a JavaScript Framework&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;People starting to learn this craft nowadays are often redirected to learning not just JavaScript but go directly to a Framework that employs a very specific idea, the SPA. And there are good reasons for why that is happening. You&#39;ll be &lt;em&gt;productive&lt;/em&gt; quickly. Setup is minimal, boilerplate code is reduced, &lt;em&gt;economy&lt;/em&gt; exists (as in, supporting plugins and people working with it to engage with), etc. These are valid arguments when it comes to finding a job in this industry. But not all people learn to make websites just in order to get a job. The heavy focus on tools surrounding the SPA flavoured outcome easily obfuscate access to knowledge of the subject, in this case the fabric of websites: HTML, CSS and a bit of JavaScript.&lt;/p&gt;
&lt;p&gt;I am arguing that this focus on outcome allows people to rarely engage with the edges of the technology, in short, to make less breaking changes. Yet it is so important to engage these edges and to make mistakes, because it allows people to build a more meaningful and complete relationship with it. This is not about deliberately frustrating people. In fact I am arguing that this way will actually decrease moments of frustration. Because Eleventy in essence is concerned with one important outcome, to generate a static website, mistakes that lead to actual failure will be much easier to solve. This is a very different experience for errors in SSG&#39;s that are providing a more complete Developer Experience, because even simple errors might trigger something in several layers. Debugging this might require deep understanding of these layers.&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://www.zachleat.com/web/introducing-eleventy/#eleventy-is-not-a-javascript-framework&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
           The creator of Eleventy on why Eleventy is not a JavaScript Framework
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;from Zach Leatherman at zachleat.com&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;you-don&#39;t-need-a-dedicated-build-tool&quot;&gt;You don&#39;t need a dedicated build tool&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/elventy-should-be-next/#you-don&#39;t-need-a-dedicated-build-tool&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled You don&#39;t need a dedicated build tool&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;SSG&#39;s that extend into the SPA world might need you to run and understand a dedicated build tool such as Vite, Snowpack or Webpack. These tools are &lt;em&gt;very&lt;/em&gt; complex because they are doing complex things. In order to make it still easy to use, they abstract away certain things. Which will force you into a way of working that might not be suited for you. There is nothing wrong with this in general - but it, again, will restrict your freedom.&lt;/p&gt;
&lt;p&gt;In Eleventy, you &lt;em&gt;can&lt;/em&gt; of course use these tools if you want to. But they are not coming with Eleventy, because it is not something that Eleventy does. If you decide to include it in your process, it will be on your own terms.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;benefiting-from-the-industrialized-jamstack-economy&quot;&gt;Benefiting from the industrialized Jamstack economy&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/elventy-should-be-next/#benefiting-from-the-industrialized-jamstack-economy&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Benefiting from the industrialized Jamstack economy&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Another Reason for why Eleventy is a great next step when coming from learning HTML &amp;amp; CSS and maybe a bit of JavaScript, is that it profits from the current state of the Jamstack economy. SSG&#39;s fit nicely into this mindset of the Jamstack (JavaScript, API&#39;s &amp;amp; Markup). Often an SSG is powering much of Jamstack sites so tool surrounding it where developed (undoubtedly to profit from it) and we can use these tools.&lt;/p&gt;
&lt;p&gt;Previously, one of the reasons for why it might not have been a viable idea to work with an SSG is because it might be difficult to bring it from the local machine to the server in an automated way. Nowadays web-hosting services often will build your site &lt;em&gt;for you&lt;/em&gt; on their infrastructure. In some cases like netlify, it will even do that for free up to a certain degree. In a sector where traditional web-hosting companies argument their pricing with services like php, mysql, etc., having very fast free web-hosting is a game changer for many.&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://www.mikestreety.co.uk/blog/get-eleventy-up-and-running-on-netlify-or-cloudflare-pages/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
           Comparing several hosting options for eleventy projects
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;from Mike Street at mikestreety.co.uk&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;This is a relevant argument for Eleventy, because it is really &lt;em&gt;fast&lt;/em&gt;. And whether or not you may require a paid tier of a web-hosting service like Netlify often will depend on how &lt;em&gt;long&lt;/em&gt; your build is running, meaning how long it takes the generator to generate your site. Eleventy is really fast and is very likely to cost you less &lt;em&gt;build minutes&lt;/em&gt; than another SSG.&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://docs.netlify.com/configure-builds/common-configurations/eleventy/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
           Eleventy Sites on Netlify
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;from the netlify docs, docs.netlify.com&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;conclusion-%26-getting-started&quot;&gt;Conclusion &amp;amp; Getting Started&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/elventy-should-be-next/#conclusion-%26-getting-started&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Conclusion &amp; Getting Started&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;If Eleventy had existed when I was starting out, things would have been very different in terms of my professional career. I was dependent on someone being good at writing PHP - there was just no way around it. I learned it a bit, but it soon would have required me to go into databases, etc. This is a very different world, when all I wanted to do was make websites.&lt;/p&gt;
&lt;p&gt;I believe that Eleventy specifically closes this gap that lies between just tinkering around with HTML, CSS &amp;amp; JS and launching full on projects. This is the right tool for you, if you are at this stage. Now, to get started - luckily, I am not the only person who is in love with this. So here is the perfect tutorial for getting started:&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://www.cassey.dev/posts/2021-10-23-converting-an-html-file-to-eleventy/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
           Converting a simple HTML site to use Eleventy
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;by Cassey Lottman at cassey.dev&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;But it doesn&#39;t end here. The community is vivid and there are tons of great entry points to Eleventy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stephanie Eckles shares in this wonderful tiny video, &lt;a href=&quot;https://www.youtube.com/watch?v=BKdQEXqfFA0&amp;amp;ab_channel=11tyRocks%21&quot;&gt;how to get started with eleventy in just 3 Minutes&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;She also made a &lt;a href=&quot;https://egghead.io/courses/build-an-eleventy-11ty-site-from-scratch-bfd3&quot;&gt;course on egghead.io&lt;/a&gt; that is entirely free!&lt;/li&gt;
&lt;li&gt;Sia Karamalegos made the &amp;quot;&lt;a href=&quot;https://sia.codes/posts/itsiest-bitsiest-eleventy-tutorial/&quot;&gt;Itsiest, Bitsiest Eleventy Tutorial&lt;/a&gt;&amp;quot;, featuring the best header image that in the world.&lt;/li&gt;
&lt;li&gt;Tatiana Mac has a multi-parted &lt;a href=&quot;https://tatianamac.com/posts/beginner-eleventy-tutorial-parti/&quot;&gt;Beginner&#39;s Guide to Eleventy&lt;/a&gt;, in which she also introduces the economic landscape of SSG&#39;s &amp;amp; the Jamstack.&lt;/li&gt;
&lt;li&gt;Now if you wanna get an in-depth understanding of &lt;em&gt;many&lt;/em&gt; aspects of Eleventy, treat yourself to Andy Bell&#39;s &amp;quot;&lt;a href=&quot;https://piccalil.li/course/learn-eleventy-from-scratch/&quot;&gt;Learn Eleventy From Scratch&lt;/a&gt;&amp;quot;.&lt;/li&gt;
&lt;li&gt;Watch Ben Myers (Some Antics Web) teach Alex Trost (Frontend Horse) Eleventy in this &lt;a href=&quot;https://www.youtube.com/watch?v=PPZGdolA_ns&amp;amp;ab_channel=AlexTrost&quot;&gt;vod of a live stream&lt;/a&gt;. This is great because questions are asked and answered!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, join the &lt;a href=&quot;https://discord.gg/VN2r3f6p&quot;&gt;Eleventy Discord&lt;/a&gt;! The people there come to learn and help each other with eleventy. I promise, it is &lt;em&gt;not&lt;/em&gt; stack overflow-esque! People join everyday and it has quickly turned into the focal point of the eleventy community.&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://discord.gg/VjgX29bV8v&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
           Join the Eleventy Discord
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;we are really super nice!&lt;/figcaption&gt;&lt;/figure&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;small&gt;Edited on the 30th Sept. to fix some typos&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Using parameters in your eleventy includes with nunjucks macros</title>
		<link href="https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/"/>
		<updated>2021-08-10T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/</id>
		<content type="html">&lt;p&gt;&lt;small&gt;Heads up: I know this is much longer than it needs to be. Sorry. It&#39;s just how I am with text. But you can easily navigate to the parts that interest you by using the outline - just click on the headline!&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;One of the reasons I ever felt the desire (and &lt;em&gt;needed&lt;/em&gt;) to learn PHP was because I wanted to not repeat myself. I wanted to be able to use complex markup structures without having to copy &amp;amp; paste it, increasing the risk of making mistakes &lt;em&gt;and&lt;/em&gt; most of all not being able to update the structure without significant expense. The current zeitgeist very much pulls us into handling all of this with javascript, because it is currently the only way to give us the &lt;em&gt;feeling&lt;/em&gt; of working with encapsulated, self-contained pieces of code. Markup, Style and even a bit of self-contained functionality make up components that allow us to have a lego-like experience. What&#39;s not to love?&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;it&#39;s-about-dx.&quot;&gt;It&#39;s about DX.&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#it&#39;s-about-dx.&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled It&#39;s about DX.&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;But not everybody wants to (or is &lt;em&gt;able&lt;/em&gt; to, for that matter) hand over all of the control needed to create this DX to JavaScript. To me, SSG&#39;s always brought much of the value to &lt;em&gt;my&lt;/em&gt; table that I originally got from working with PHP (which is ironically also the purpose it was intended to serve originally, as the Hypertext Preprocessor). Now obviously PHP does much more than that and it exceeded its original intentions and capabilities &lt;em&gt;by far&lt;/em&gt; - but needs of developers can vary greatly. I mainly just wanted to be able to reuse markup.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;why-markup-reusability-is-important&quot;&gt;Why markup reusability is important&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#why-markup-reusability-is-important&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Why markup reusability is important&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I believe most people reading this just wanna get to code examples - but bare with me, because I have a &lt;em&gt;hot take&lt;/em&gt; on encapsulation and reusability. Many of the challenges that utility CSS approaches and to a certain degree even css-in-js solutions partly want to solve is a DX where you feel more in control over how the styling of your markup looks. As a CSS developer, this is not a challenge I face.&lt;/p&gt;
&lt;p&gt;I very much follow the BIOS approach: BEM, ITCSS, OOCSS &amp;amp; SMACSS. I combine parts of all of these methodologies together because I believe they all go together really well. But what this does is create long and verbose classnames. This is not an issue that I face on the CSS part of things, or on the JS part of things for that matter (data-attributes ftw) but instead I need to tackle it on the Markup side.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h4 id=&quot;an-example&quot;&gt;An example&lt;/h4&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#an-example&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled An example&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Look at this monster:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__events-item&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;article&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__entry vers--major is-expanded&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-timeline-event&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__entry-type vers--job&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-hidden&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;svg&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;28&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;use&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;xlink:&lt;/span&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#icon-event-type-job&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;svg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__entry-text&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;small&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__entry-meta&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;time&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;2016 - 2021&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;time&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;small&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__entry-title&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Sr. Frontend Dev. &lt;span class=&quot;token entity named-entity&quot; title=&quot;&amp;amp;&quot;&gt;&amp;amp;amp;&lt;/span&gt; UI/UX Designer&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;small&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__entry-meta&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;svg&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;13&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;12&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-hidden&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;               &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;use&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;xlink:&lt;/span&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#icon-organisation-marker&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;svg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            easyname GmbH&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;small&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;small&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__entry-meta&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;svg&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;13&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;12&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-hidden&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;               &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;use&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;xlink:&lt;/span&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#icon-location-marker&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;svg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            Vienna, Austria&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;small&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__entry-tags&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;HTML&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;(S)CSS&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Brand&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;JavaScript&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Performance&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;React&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__entry-action&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-expanded&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-controls&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;timeline-event-2-details&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-timeline-event-expand-button&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button__text&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-timeline-event-expand-button-open&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token special-attr&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token value css language-css&quot;&gt;&lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Show more&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button__text&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-timeline-event-expand-button-close&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token special-attr&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token value css language-css&quot;&gt;&lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; flex&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Show less&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__entry-details&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;timeline-event-2-details&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-timeline-event-details&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token special-attr&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token value css language-css&quot;&gt;&lt;span class=&quot;token property&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 299px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;opacity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-height-wrapper&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;               &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Working with the people at easyname was pivotal for me. I entered the company at a time where neither frontend development, nor design was considered an integral part. I was brought in also with the intention to improve on this. I had the great privilege of joining a diverse team handpicked by Stephanie Anderson. The team kept growing and kept being expanded by extraordinary individuals.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;               &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;I had the great privilege of joining a diverse team handpicked by Stephanie Anderson. The team kept growing and kept being expanded by extraordinary individuals.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;               &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;main__heading-wrapper&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h3&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;some-highlights&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Some Highlights&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;main__heading-link&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#some-highlights&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-hidden&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;#&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;sr-only&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Section titled Some Highlights&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;               &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;               &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;list--horizontal&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;list__item&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                     &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag theme--dark vers--large&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;svg&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-hidden&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                           &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;use&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;xlink:&lt;/span&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#icon-shine-marker&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;svg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                        Created VPS Product Landingage&lt;br /&gt;                     &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;list__item&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                     &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag theme--dark vers--large&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;svg&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-hidden&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                           &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;use&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;xlink:&lt;/span&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#icon-shine-marker&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;svg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                        Engineered the UX of new Products &lt;span class=&quot;token entity named-entity&quot; title=&quot;&amp;amp;&quot;&gt;&amp;amp;amp;&lt;/span&gt; Features&lt;br /&gt;                     &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;               &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;article&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There is a lot going on. This is not such an abnormal thing. It contains all sorts of stuff: Nested BEM components, state-classes and versioning-classes, Code intended for Screenreaders only, SVG and &lt;code&gt;data-&lt;/code&gt;-Attributes to allow interfacing with JavaScript. Things are getting pretty wild and complex. I cannot tell you without looking at the CSS what elements and modifier this block is accounting for. Making just the HTML readable enough so that it is easily reusable with some classes would negatively affect other parts of the DX.&lt;/p&gt;
&lt;p&gt;I believe that markup is the most important driver in the need for encapsulation. Because CSS already is able to do it - if not with classes, then with Methodologies. That doesn&#39;t mean that we don&#39;t need scoped styles, we do. But I personally believe that the highest level of complexity ultimately comes from the markup and this is also where abstraction can serve as a valuable reducer of said complexity.&lt;/p&gt;
&lt;p&gt;Now let&#39;s get to the actual stuff.&lt;/p&gt;
&lt;hr /&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;what-are-nunjucks-macros%3F&quot;&gt;What are Nunjucks macros?&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#what-are-nunjucks-macros%3F&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled What are Nunjucks macros?&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Why great question. Here&#39;s what the &lt;a href=&quot;https://mozilla.github.io/nunjucks/templating.html#macro&quot;&gt;docs&lt;/a&gt; have to say:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;macro&lt;/code&gt; allows you to define reusable chunks of content. It is similar to a function in a programming language.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now I love nunjucks but I do feel like the docs are a big reason for why it hasn&#39;t risen to the popularity it could rise to. The example in the docs for macros looks like this:&lt;/p&gt;
&lt;pre class=&quot;language-twig&quot;&gt;&lt;code class=&quot;language-twig&quot;&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;macro&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;field&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; type &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; name &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; value &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; escape &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;endmacro&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;user&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; field&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;pass&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; type&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;password&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Alright, this does give us parameters. But it looks kinda weird. That is because you also need to take a look at nunjucks &lt;code&gt;import&lt;/code&gt;, if you wanna get the full experience. What does it say about &lt;a href=&quot;https://mozilla.github.io/nunjucks/templating.html#import&quot;&gt;imports&lt;/a&gt;?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;import&lt;/code&gt; loads a different template and allows you to access its exported values. &lt;strong&gt;Macros&lt;/strong&gt; and top-level assignments (done with &lt;code&gt;set&lt;/code&gt;) are exported from templates, allowing you to access them in a different template.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What this means, is that we can extract and edit chunks of nunjucks code, markup in our case, in separate files and then import them wherever we want to use it!&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;making-a-simple-macro-in-eleventy&quot;&gt;Making a simple macro in eleventy&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#making-a-simple-macro-in-eleventy&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Making a simple macro in eleventy&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I have these tags everywhere on my page. But I designed them to be available in two sizes and in a dark variety. For this I proved my &lt;code&gt;.tag&lt;/code&gt; class with two theme/state classes (however you&#39;d like to think about it).&lt;/p&gt;
&lt;p&gt;I often use prefixes to indicate what the additional class is doing to the class, so &lt;code&gt;.ctx--&lt;/code&gt; for marking a context and &lt;code&gt;.vers--&lt;/code&gt; to indicate that this is supposed to be a different version of the same thing, often implying that maybe even the markup structure is slightly different. And of course &lt;code&gt;.theme--&lt;/code&gt; to signal that this will just have a different visual variety but be the same in all other ways.&lt;/p&gt;
&lt;p&gt;In the case of my tag, the two classes that I need to be able to add to the &lt;code&gt;.tag&lt;/code&gt; are &lt;code&gt;.theme--dark&lt;/code&gt; and &lt;code&gt;.vers--large&lt;/code&gt;. In my &lt;code&gt;_includes&lt;/code&gt; (depending on your configuration) I added a new file called &lt;code&gt;tag.macro.njk&lt;/code&gt;. I personally like making sure somehow that I immediately understand that something is a macro, so I add this to the filename. But you could of course put them in a subfolder or go about it however you like, this is just how I like to do it. This is what the markup looks like:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Tag&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Great. Now, let&#39;s turn this into a fully featured component that I can reuse however I want. First of all, I need to make sure that I can change the text here, the most basal usecase. In order to do this, need the &lt;code&gt;macro&lt;/code&gt; tag from nunjucks:&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;defining-a-macro&quot;&gt;Defining a macro&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#defining-a-macro&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Defining a macro&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre class=&quot;language-twig&quot;&gt;&lt;code class=&quot;language-twig&quot;&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;macro&lt;/span&gt; tag&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;params&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Tag&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;endmacro&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note the safe syntax here. The little minus strips the leading and trailing whitespace. When working with eleventy and when mixing markdown and nunjucks, this is sometimes just needed to produce any output at all. I have run into some strange issues with stray &lt;code&gt;&amp;lt;/p&amp;gt;&lt;/code&gt; tags. But these issues can often be resolved with the minus.&lt;/p&gt;
&lt;p&gt;As soon as we have this, we can import it anywhere we want and pass something to it, like this:&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h4 id=&quot;importing-and-using-a-macro&quot;&gt;Importing and using a macro&lt;/h4&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#importing-and-using-a-macro&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Importing and using a macro&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre class=&quot;language-twig&quot;&gt;&lt;code class=&quot;language-twig&quot;&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;tag.macro.njk&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;&lt;/span&gt; import tag &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; tag&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; text&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Banana&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Yes, imports are also relative to your configured includes folder in eleventy, which makes this extra super nice to use, even in extra-super-deep nested collection items.&lt;/p&gt;
&lt;p&gt;Whatever you pass into the parameter is gonna be available inside the macro. I personally like this way of doing it but you can do it differently too. This just feels rather clean to me. Your content becomes available in your macro and you can use it like this:&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h4 id=&quot;using-the-passed-content&quot;&gt;using the passed content&lt;/h4&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#using-the-passed-content&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled using the passed content&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre class=&quot;language-twig&quot;&gt;&lt;code class=&quot;language-twig&quot;&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;macro&lt;/span&gt; tag&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;params&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;text &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;endmacro&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With this as our starting point, let&#39;s add all the other stuff there too. In my case, sometimes the tags need to be able to show an SVG icon (all of which I have included on the page and are available to be &lt;code&gt;&amp;lt;use&amp;gt;&lt;/code&gt;&#39;d.) and I also need to be able to set the classes I need. This is how my final macro looks like:&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;the-final-result&quot;&gt;the final result&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#the-final-result&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled the final result&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre class=&quot;language-twig&quot;&gt;&lt;code class=&quot;language-twig&quot;&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;macro&lt;/span&gt; tag&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;params&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;tag &lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;theme--dark&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dark &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;vers--large&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;large &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;if&lt;/span&gt; params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;icon &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;svg&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-hidden&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;use&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;xlink:&lt;/span&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;icon &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;svg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;endif&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; params&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;text &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;endmacro&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I can use the full power of nunjucks within macros, including ifs, loops, etc. Macros can do much more, for example you could encapsulate variable values and import them as well.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;a-different-approach!&quot;&gt;A different approach!&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#a-different-approach!&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled A different approach!&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Stephanie Eckles uses a different approach with which you can achieve the same thing, by setting variables before the include. This is taken from her example:&lt;/p&gt;
&lt;pre class=&quot;language-twig&quot;&gt;&lt;code class=&quot;language-twig&quot;&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;set&lt;/span&gt; html &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;centering&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Feeling Centered&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;endset&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;demo.njk&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This doesn&#39;t &lt;em&gt;pass&lt;/em&gt; the &lt;code&gt;html&lt;/code&gt; variable to the include, but because it was defined before, it is still available at the time when the code of the include gets evaluated, so working with it inside this code is still available. This is a fantastic approach - it depends on what you want!&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;this-is-a-big-deal.&quot;&gt;This is a big deal.&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#this-is-a-big-deal.&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled This is a big deal.&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The moment I realized that this was possible, I felt like a big block was finally lifted. A big reason for why, even as someone who just writes presentational, vanilla JavaScript, frameworks like React or Vue look appealing to me is the idea of the Encapsulated piece of Markup that can be abstracted and reused. Nunjucks macros in eleventy are giving me this experience. And there even are examples of libraries using this technique to provide their authors with encapsulated, reusable chunks of markups, like for example the &lt;a href=&quot;https://design-system.service.gov.uk/components/&quot;&gt;gov.uk Design System&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#footnotes&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;a-more-complex%2C-eleventy-ish-example&quot;&gt;A more complex, eleventy-ish example&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#a-more-complex%2C-eleventy-ish-example&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled A more complex, eleventy-ish example&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;On my work-experience page I list all sorts of entries. Every single entry is just a singular nujucks macro. In eleventy, I have set up each entry to be a collection item with no permalink. This allows me to edit them individually. Their contents eventually get passed to the macro that renders them accordingly. Here&#39;s how that code looks:&lt;/p&gt;
&lt;pre class=&quot;language-twig&quot;&gt;&lt;code class=&quot;language-twig&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ol&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wrap-as--full-column  experience-timeline&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;for&lt;/span&gt; era&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; events &lt;span class=&quot;token operator&quot;&gt;in&lt;/span&gt; collections&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;orderedTimelineEvents &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; groupby&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;data.era&lt;span class=&quot;token punctuation&quot;&gt;&#39;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__era&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;time&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__date&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; era &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;time&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ol&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__events&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;for&lt;/span&gt; event &lt;span class=&quot;token operator&quot;&gt;in&lt;/span&gt; events &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;experience-timeline__events-item&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                        &lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; experienceTimelineEntry&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;                            class&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;class&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;                            id&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;order&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;                            major&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;major&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;                            type&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;type&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;                            title&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;                            organisation&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;organisation&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;                            time&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;time&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;                            location&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;                            tags&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;eventTags&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;                            details&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; event&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;templateContent &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; markdown&lt;br /&gt;                        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;endfor&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ol&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token twig language-twig&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token tag-name keyword&quot;&gt;endfor&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ol&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This feels great to look at lol. I am not sure why but this feels really satisfying to me. Some things noteworthy here is nunjucks &lt;code&gt;groupby(&#39;data.era&#39;)&lt;/code&gt; which sorts my collection based on this front-matter value and the &lt;code&gt;| markdown&lt;/code&gt; filter.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;be-a-bit-cautious&quot;&gt;Be a bit cautious&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#be-a-bit-cautious&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Be a bit cautious&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;If you are like me, then you are are in love with eleventy&#39;s capability to mix markdown with templating languages. This just makes all the difference to me. And with macros, even more complex situations are easily solvable. But there is a bit of a caveat - I believe because of the order of how the rendering is handled, nunjucks renders first and then markdown renders. This can make for some weird things, like your code being escaped because it treats it as four spaces code syntax. If that happens to you, you can disable it in your &lt;code&gt;.eleventy.js&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; markdownConfigured &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;markdownIt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;disable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;code&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setLibrary&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;md&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; markdownConfigured&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will fix that issue. But, I still encountered some other strange behaviour that I couldn&#39;t fully debug: Stray &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;/p&amp;gt;&lt;/code&gt;&#39;s. In the DOM inspector this looks just like additional paragraph tags, but looking into the source code reveals that there were actual stray paragraphs opening and closing tags flying around. At that time, I was using this complex nunjucks component in a &lt;code&gt;.md&lt;/code&gt; file with &lt;code&gt;templateEngineOverride: njk,md&lt;/code&gt;. I could fix it by turning the file into a &lt;code&gt;.njk&lt;/code&gt; file and applied a &lt;code&gt;| markdown&lt;/code&gt; filter to its contents. This might not work for all situations, but it worked in this one.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/parameters-in-includes-with-nunjucks-macros/#conclusion&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Conclusion&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Write macros. Lol.&lt;/p&gt;
&lt;footer class=&quot;main__footnotes&quot; id=&quot;footnotes&quot;&gt;
&lt;p&gt;A big thanks to &lt;a href=&quot;https://shivjm.blog/&quot;&gt;Shiv&lt;/a&gt; for helping me debug this issue and eventually supplying me with the idea of using the &lt;code&gt;| markdown&lt;/code&gt; filter on the eleventy discord! And a big thanks for &lt;a href=&quot;https://thinkdobecreate.com/&quot;&gt;Stephanie Eckles&lt;/a&gt; for inspiring me to write this article.&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;) This was pointed out to me by &lt;a href=&quot;https://twitter.com/elechaudel&quot;&gt;Edgar Lechaudel&lt;/a&gt; on the &lt;a href=&quot;https://frontend.horse/chat&quot;&gt;Frontend Horse Discord&lt;/a&gt;, thank you!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;/footer&gt;</content>
	</entry>
	
	<entry>
		<title>Minimal SASS &amp; eleventy Setup</title>
		<link href="https://helloyes.dev/blog/2021/minimal-sass-and-eleventy-setup/"/>
		<updated>2021-06-21T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2021/minimal-sass-and-eleventy-setup/</id>
		<content type="html">&lt;p&gt;I&#39;m a big fan of sass and until native nesting is available to us I will keep using it. Now sass offers &lt;em&gt;much&lt;/em&gt; more than just nesting. I also use it to manage media queries and settings. So naturally for this site I also wanted to use it.&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://drafts.csswg.org/css-nesting-1&quot;&gt;
           CSS Nesting Module
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;fresh from the w3c&amp;#39;s CSS Working Group&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;In this small little article I want to share how I set up my SASS compiling. Now this follows an established way of using CSS, which is via &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;. There are more options of course but here, everything will be setup to end up with actual CSS files.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;gulp-is-awesome.&quot;&gt;Gulp is awesome.&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/minimal-sass-and-eleventy-setup/#gulp-is-awesome.&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Gulp is awesome.&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Usually I go for something like Gulp to do this type of job for me. I am a big fan of Gulp and unless your development flow involves around JavaScript Files and you do need something, &lt;em&gt;whatever it is&lt;/em&gt; done, Gulp is probably the right thing for you. But for this project, I wanted to find out how far I could go before I needed to expand my toolchain beyond what was already available to me with eleventy and npm.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;I once opened an issue in the gulp repo on github and I phrased it &lt;em&gt;horribly&lt;/em&gt;. I love gulp. Pls don&#39;t come for me, gulp people.&lt;/small&gt;&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;the-sass-compiler&quot;&gt;The SASS Compiler&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/minimal-sass-and-eleventy-setup/#the-sass-compiler&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled The SASS Compiler&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Sass has come a very long way since it gained popularity. From my own subjective timeline I would deduct that it probably gained the majority of its popularity in 2013, but it got actually started in 2006 already. As a preprocessor, it compiles &lt;code&gt;.sass&lt;/code&gt;/&lt;code&gt;.scss&lt;/code&gt; files into CSS files. This means that we&#39;ll still write regular CSS, plus some additional awesomeness.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;There are many compilers available nowadays, but it&#39;s recommended to use the Dart Compiler, as both the Ruby and the Node Compiler are deprecated. Here, we&#39;ll be using the dart-sass compiler as well.&lt;/p&gt;
&lt;p&gt;I don&#39;t want to spend too much time on how to install sass and what watching/compiling exactly does. There is plenty of information on the sass website available.&lt;/p&gt;
&lt;hr /&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;compiling-your-stylesheet&quot;&gt;Compiling your stylesheet&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/minimal-sass-and-eleventy-setup/#compiling-your-stylesheet&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Compiling your stylesheet&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;With the sass compiler installed, running commands in your terminal will allow you to compile your files into css files. For continuous work we&#39;ll probably want the files to recompile whenever you change them:&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://sass-lang.com/documentation/cli/dart-sass&quot;&gt;
           More about the Dart Sass CLI
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;sass-lang.com&lt;/figcaption&gt;&lt;/figure&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;sass &lt;span class=&quot;token parameter variable&quot;&gt;--watch&lt;/span&gt; src/_scss/style.scss src/css/styles.css&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This does exactly what you think it might. All the sass lives inside &lt;code&gt;_sass&lt;/code&gt; and it will all go to &lt;code&gt;css&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The prefixing of the sass folder with the &lt;code&gt;_&lt;/code&gt; underscore is for my personal sake only. That way I can easily identify folders that won&#39;t exist in the final output. Also, my &lt;code&gt;input&lt;/code&gt; directory is &lt;code&gt;src&lt;/code&gt; and my &lt;code&gt;output&lt;/code&gt; directory is &lt;code&gt;dist&lt;/code&gt;. Replace with your own settings accordingly, or set it to eleventy&#39;s defaults, if you haven&#39;t overwritten them in &lt;code&gt;.eleventy.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now with the compiled file we just need to make sure that we include it in the final output.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;include-the-compiled-css-with-.addpassthroughcopy&quot;&gt;Include the compiled CSS with .addPassthroughCopy&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/minimal-sass-and-eleventy-setup/#include-the-compiled-css-with-.addpassthroughcopy&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Include the compiled CSS with .addPassthroughCopy&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The eleventy approach is very simple and gets the job done:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addPassthroughCopy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;src/css&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now eleventy will include this folder and its contents in its final output. Everytime something changes in this location, eleventy will rebuild.&lt;/p&gt;
&lt;p&gt;But this can lead up to some undesired side-effects. You may see a message like: &lt;code&gt;You saved while Eleventy was running, let&#39;s run again. (1 remain)&lt;/code&gt;. So I opted for something else.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;include-the-compiled-css-manually&quot;&gt;Include the compiled CSS manually&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/minimal-sass-and-eleventy-setup/#include-the-compiled-css-manually&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Include the compiled CSS manually&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Instead of going for gulp immediately, I wondered if I could achieve what I wanted to achieve with npm scripts alone. So I made two scripts (is that the correct terminology?) in my &lt;code&gt;package.json&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;sass:watch&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;sass src/_scss:dist/css --watch --update --color&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;sass:build&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;sass src/_scss:dist/css --no-source-map --style=compressed&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The sass compiler now saves the compiled files directly into into the output folder (again, in my case that folder is &lt;code&gt;dist&lt;/code&gt; - your might be &lt;code&gt;site&lt;/code&gt; or whatever you have specified), plus some flags that are appropriate for watch and build tasks respectively.&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://jkc.codes/blog/using-sass-with-eleventy/&quot;&gt;
           Another article on how to use Sass with eleventy
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;jkc.codes&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;tell-browsersync-to-inject-your-changes&quot;&gt;Tell browsersync to inject your changes&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/minimal-sass-and-eleventy-setup/#tell-browsersync-to-inject-your-changes&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Tell browsersync to inject your changes&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Before we get to the actual automation, which will tie everything together nicely, one thing needs to be said about your dev experience. If you keep it like this, any changes in your css/scss will not trigger a rebuild, when your site is running. You&#39;d have to manually reload your page every time. But luckily Browsersync (which eleventy uses for this) options are easily accessible from within &lt;code&gt;.eleventy.js&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setBrowserSyncConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;./dist/css/**/*.css&#39;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This &lt;a href=&quot;https://browsersync.io/docs/options#option-files&quot;&gt;tells Browsersync&lt;/a&gt; to watch for changes to be injected (or to cause a full reload) - great, this is exactly what we want. That way, browsersync will inject changes from your compiled css files.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;add-some-automation&quot;&gt;Add some Automation&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/minimal-sass-and-eleventy-setup/#add-some-automation&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Add some Automation&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Now to tie it all together, we need some additional help. Here is how all my scripts (again, is that the real term? It feels wrong.) look like in my &lt;code&gt;package.json&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;eleventy:serve&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;eleventy --serve&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;eleventy:build&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;eleventy&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;sass:watch&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;sass src/_scss:dist/css --watch --update --color&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;sass:build&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;sass src/_scss:dist/css --no-source-map --style=compressed&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;clean&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;del dist&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;start&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;run-p -l clean sass:build sass:watch eleventy:serve&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;build&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;run-s -l eleventy:build sass:build&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that I have also added a clean task. For this I use the npm package &lt;code&gt;del&lt;/code&gt;, which... deletes stuff 🥁.&lt;/p&gt;
&lt;p&gt;I use the package &lt;code&gt;npm-run-all&lt;/code&gt; all here, after some help I got from &lt;a href=&quot;https://twitter.com/Snugug&quot;&gt;Sam Richard&lt;/a&gt; on the eleventy discord. You can run things sequentially (one after another) without it. For example, for the &lt;code&gt;build&lt;/code&gt;, you could instead write &lt;code&gt;npm run eleventy:build &amp;amp;&amp;amp; npm run sass:build&lt;/code&gt;. But the repetition of the &lt;code&gt;npm run&lt;/code&gt; felt so super counter-intuitive to me that I went for &lt;code&gt;npm-run-all&lt;/code&gt; instead.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;run-p&lt;/code&gt; will run your scripts in parallel, where as &lt;code&gt;run-s&lt;/code&gt; will run them sequentially.&lt;/p&gt;
&lt;p&gt;Now when I want to work on my site, I just run &lt;code&gt;npm run start&lt;/code&gt; from the terminal and it all works as expected!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I am not an automation wizard. I got to this point with some help from people at the eleventy discord. But I thought that the final result and the lessons learned to get there were worth sharing.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Very simple Patterns with SVG</title>
		<link href="https://helloyes.dev/blog/2021/2-simple-svg-patterns/"/>
		<updated>2021-06-20T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2021/2-simple-svg-patterns/</id>
		<content type="html">&lt;p&gt;On this website you can see these simple shape compositions everywhere. I do like using very simple graphical elements to create some form of... let&#39;s just say &lt;em&gt;illustration&lt;/em&gt;. I rarely make things like these without encoding some form of meaning into its units.&lt;/p&gt;
&lt;p&gt;In Figma, I created these little &amp;quot;diagrams&amp;quot; where these shape compositions are filled with some patterns. They would serve the purpose of visually communicating what types of tasks I was doing at a given employment on my work-experience timeline:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://helloyes.dev/blog/2021/2-simple-svg-patterns/figma-illustrations.png&quot; alt=&quot;screenshot of figma with Geometrical shapes filled with colorful patterns&quot; /&gt;&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;early-attempts&quot;&gt;Early Attempts&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/2-simple-svg-patterns/#early-attempts&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Early Attempts&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I had some idea of implementation in my head when I was putting them together in Figma, but I didn&#39;t think it all the way through. I knew I just needed to somehow set background-images for individual elements. I soon came to realize that this was in fact not as easy as I thought it would be.&lt;/p&gt;
&lt;p&gt;Firstly, Figma couldn&#39;t export them properly as svg. Or I did something wrong - in any case, exporting them did only work if I would export them in a non-svg format, like PNG. So for the time being, I kept them in PNG. But obviously that didn&#39;t look nice. Plus, the diagrams themselves featured a little caption. I knew that I didn&#39;t want to make a picture of text that would just as well live as &lt;em&gt;real&lt;/em&gt; text, so I started looking for alternative ways.&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://css-tricks.com/almanac/properties/f/fill/#values&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
           the CSS property fill
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;css-tricks.com&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;I first followed the idea of setting the background with just CSS. There are some great pattern creators that use the versatility of gradients as background-images. But it&#39;s not possible to define a &lt;code&gt;background-image&lt;/code&gt; in the &lt;code&gt;fill&lt;/code&gt; property. It can only accept color-values &lt;em&gt;but&lt;/em&gt; it can also accept links to &lt;code&gt;&amp;lt;pattern&amp;gt;&lt;/code&gt;, with &lt;code&gt;url(#id-of-the-pattern-element)&lt;/code&gt;, as I found out from css-tricks.com.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;hello-yes%2C-this-is-pattern&quot;&gt;Hello yes, this is pattern&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/2-simple-svg-patterns/#hello-yes%2C-this-is-pattern&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Hello yes, this is pattern&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I have tinkered with really small things in SVG, but it mostly involved masks or background-images set with CSS. So the &lt;code&gt;&amp;lt;pattern&amp;gt;&lt;/code&gt; element was entirely new to me! In my opinion, it works rather intuitively.&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Patterns&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
           MDN SVG Patterns Tutorial
        &lt;/a&gt;&lt;figcaption class=&quot;pull-link__caption&quot;&gt;developers.mozilla.com&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;pattern&amp;gt;&lt;/code&gt; elements should go into &lt;code&gt;&amp;lt;defs&amp;gt;&lt;/code&gt;, according to MDN. It does make sense, they are defined to be referred to. The element itself needs dimensions, set with &lt;code&gt;width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt; and an &lt;code&gt;id&lt;/code&gt; so that it can be referenced with &lt;code&gt;url(#)&lt;/code&gt; in &lt;code&gt;fill&lt;/code&gt;. Now you can also intervene how the defined elements relate to its available geometry, with &lt;code&gt;patternUnits&lt;/code&gt; and &lt;code&gt;patternContentUnits&lt;/code&gt; (in other words, this will affect how the pattern fills its element, when being used). In my example, setting &lt;code&gt;patternUnits=&amp;quot;userSpaceOnUse&amp;quot;&lt;/code&gt; had exactly the effect that I wanted.&lt;/p&gt;
&lt;figure class=&quot;pull-link&quot;&gt;
        &lt;a class=&quot;pull-link__link&quot; href=&quot;https://riptutorial.com/svg/example/19858/pattern-coverage-with-combinations-of-patternunits-and-patterncontentunits#example&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
           Example on patternUnits and patternContentUnits
        &lt;/a&gt;&lt;/figure&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;using-an-image-file-as-svg-pattern&quot;&gt;Using an image file as SVG pattern&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/2-simple-svg-patterns/#using-an-image-file-as-svg-pattern&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Using an image file as SVG pattern&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;This is what I did first; I exported all of my patterns from Figma (which is a little story for itself) and set an &lt;code&gt;&amp;lt;image href=&amp;quot;&amp;quot; /&amp;gt;&lt;/code&gt; within my &lt;code&gt;&amp;lt;pattern&amp;gt;&lt;/code&gt;. Here&#39;s an example of how that works:&lt;/p&gt;
&lt;figure class=&quot;embed&quot;&gt;
        &lt;p class=&quot;codepen&quot; data-height=&quot;350&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;html&quot; data-user=&quot;thomassemmler&quot; data-slug-hash=&quot;MWpRerQ&quot; style=&quot;height: 350px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-pen-title=&quot;MWpRerQ&quot;&gt;
        &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/thomassemmler/pen/MWpRerQ&quot;&gt;
        MWpRerQ&lt;/a&gt; by Thomas Michael Semmler (&lt;a href=&quot;https://codepen.io/thomassemmler&quot;&gt;@thomassemmler&lt;/a&gt;)
        on &lt;a href=&quot;https://codepen.io/&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
        &lt;/p&gt;
        &lt;script async=&quot;&quot; src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
    &lt;/figure&gt;
&lt;p&gt;This worked great! But, on helloyes.dev, users can change the accent color. And the patterns have the pink &lt;em&gt;hardcoded&lt;/em&gt; into them. Now I could have exported the patterns with different accent colors from figma and then change the &lt;code&gt;href&lt;/code&gt;&#39;s in the &lt;code&gt;&amp;lt;pattern&amp;gt;&lt;/code&gt;&#39;s, but that would have been quite a lot of work and it felt... &lt;em&gt;wrong&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Another solution might have been to overlay the images with maybe a pseudo-element with the accent-color as background and then maybe work with a filter - but that felt even &lt;em&gt;more wrong&lt;/em&gt;. So I decided to just try to recreate the patterns with regular SVG.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h3 id=&quot;using-svg-shapes-as-svg-pattern&quot;&gt;Using SVG shapes as SVG Pattern&lt;/h3&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/2-simple-svg-patterns/#using-svg-shapes-as-svg-pattern&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Using SVG shapes as SVG Pattern&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;This works exactly like you probably expect it to work: Instead of putting using &lt;code&gt;&amp;lt;image&amp;gt;&lt;/code&gt; you just put any other SVG in there! Check out this example:&lt;/p&gt;
&lt;figure class=&quot;embed&quot;&gt;
        &lt;p class=&quot;codepen&quot; data-height=&quot;350&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;html&quot; data-user=&quot;thomassemmler&quot; data-slug-hash=&quot;ExWJyqz&quot; style=&quot;height: 350px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-pen-title=&quot;ExWJyqz&quot;&gt;
        &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/thomassemmler/pen/ExWJyqz&quot;&gt;
        ExWJyqz&lt;/a&gt; by Thomas Michael Semmler (&lt;a href=&quot;https://codepen.io/thomassemmler&quot;&gt;@thomassemmler&lt;/a&gt;)
        on &lt;a href=&quot;https://codepen.io/&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
        &lt;/p&gt;
        &lt;script async=&quot;&quot; src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
    &lt;/figure&gt;
&lt;p&gt;The pattern itself is a rectangle that is being tiled along wherever it is being used. By setting its dimensions you define a coordinate system on which you can relatively place your shapes. Now I can also use the custom property that contains the potential override as the fill with inline style. You can see more examples on this website. You can either just look into the sourcecode or look at it &lt;a href=&quot;https://github.com/nachtfunke/helloyes/commit/bd79e2df4d56db5b3a6cf706196807b2751dc8f9#diff-7b965053508f6747b67aa042aa360f45e6f873fa0252e0f5f88aa2074bf68cac&quot;&gt;on github&lt;/a&gt;. If you change the color of this website, the patterns as used on the work page for example will change accordingly.&lt;/p&gt;
&lt;p&gt;Here&#39;s one weird thing that &lt;em&gt;might&lt;/em&gt; happen to you to - I am used to writing self-closing elements without a slash, as I&#39;m used to in HTML5. But in SVG, &lt;code&gt;&amp;lt;rect /&amp;gt;&lt;/code&gt; is the correct syntax, because XML (I am assuming!). I even posted a stack overflow lol, because I just couldn&#39;t think of what was going on here. But I eventually found out.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;what-about-more-complex-patterns%3F&quot;&gt;What about more complex patterns?&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/2-simple-svg-patterns/#what-about-more-complex-patterns%3F&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled What about more complex patterns?&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;For the more complex patterns that, even if they don&#39;t look that complex would be rather difficult to hand-code (at least for me), I used figma. Especially when there are diagonal lines that go from corner to corner, a visual interface will be very handy. For this case I prepared my pattern in an artboard and then copied the SVG from Figma and then proceeded to take out everything that I didn&#39;t need.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Honestly, I was rather surprised how intuitive and easy this was. I &lt;em&gt;love&lt;/em&gt; the result. I think its amazing that this is possible. I hope someone finds this helpful somehow. Also, all of this started with these patterns that I &lt;a href=&quot;https://github.com/skumando/figma-patterns&quot;&gt;found on github&lt;/a&gt; (for figma). I made them available as a public figma library and &lt;a href=&quot;https://www.figma.com/community/file/978689698060140147&quot;&gt;you can play with it&lt;/a&gt;. Maybe I&#39;ll also make them available as SVG patterns on github, because maybe that&#39;d help someone even more?&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Is it too late to start blogging?</title>
		<link href="https://helloyes.dev/blog/2021/1-too-late-to-start-blogging/"/>
		<updated>2021-06-09T00:00:00Z</updated>
		<id>https://helloyes.dev/blog/2021/1-too-late-to-start-blogging/</id>
		<content type="html">&lt;p&gt;I&#39;ve read blogs, consumed podcasts and read articles on the web industry since 2010. Now I decided that I wanna take part in all of it.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;betterridge&#39;s-law&quot;&gt;Betterridge&#39;s Law&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/1-too-late-to-start-blogging/#betterridge&#39;s-law&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Betterridge&#39;s Law&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I don&#39;t think it is really too late. It took me rather long to get here, because I ultimately always thought that I had &lt;em&gt;nothing of value to share&lt;/em&gt;. And as the community iterated and evolved, what was being shared was often not what I could relate to. I was concerned with other things - things that I &lt;em&gt;decided&lt;/em&gt; were not interesting for the broader community.&lt;/p&gt;
&lt;p&gt;Plus, and I am sure that I am not the only one observing this, as a person grows in their profession / in their craft, what they deem helpful and valuable changes in relation too. What was once useful to me has long since become part of me. In that way I forgot entirely, that not only is the industry specializing more and more but there are people entering to face challenges that I faced long ago. And I might be able to be of a little bit of help here. Plus, when I taught Beginner Courses in HTML &amp;amp; CSS at SAE Vienna I realized how powerful it can be to reintroduce yourself to the basal elements that make up the platform of your craft.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;blogging-as-a-portfolio&quot;&gt;Blogging as a Portfolio&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/1-too-late-to-start-blogging/#blogging-as-a-portfolio&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Blogging as a Portfolio&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Now that I&#39;ve talked a lot about the &lt;em&gt;why&lt;/em&gt;, I&#39;d also like to take some time to talk about what I had planned to put on here. I&#39;ve only recently started tweeting rather frequently. It&#39;s all just opinions. But I mostly only put those out there as a marker. Often what I wanted to express is done in a few tweets but more than often it feels like I wasn&#39;t able to convey what I wanted to convey. This is where I do crave some long form writing.&lt;/p&gt;
&lt;p&gt;In Addition to more fully formed opinions I also intend to use the blog as a documentation of code-patterns, as well as specific solutions to specific problems that I encounter while I work. I also do this for myself - I would like to be able to revisit the learnings and my thought processes. But it might also be helpful to other people!&lt;/p&gt;
&lt;p&gt;When it comes to design, I truly to believe that the pixels don&#39;t matter, so I won&#39;t be making tutorials or &lt;em&gt;dos &amp;amp; don&#39;ts&lt;/em&gt;. Design is pretty much covered in my &lt;em&gt;opinions&lt;/em&gt; part. In a way my writing is intended not to &lt;em&gt;serve&lt;/em&gt; as a portfolio as well. I&#39;ve come to understand that portfolios don&#39;t show much besides pretty images. As designers it is beyond trivial to make something pretty. These are not the challenges that we face and this is also not where we work. If a portfolio is intended to demonstrate how someone works then it cannot be a portfolio of pretty pictures. Instead I am gonna probably put on some case studies of previous projects - a Format where I hope to better be able to convey what &lt;em&gt;actually&lt;/em&gt; goes on.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;me-and-the-keyboard&quot;&gt;Me and the keyboard&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/1-too-late-to-start-blogging/#me-and-the-keyboard&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Me and the keyboard&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;When I was 12, I spent one entire summer just writing. Poems and short and long-form stories. My head was always filled with processes of world-building. German was always my favorite subject and writing essays was one of the few homeworks I actually did do. Nowadays when I am unleashed on a comment section, a chat or just a &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt; I &lt;em&gt;will&lt;/em&gt; go wild. No, not to misunderstand - I am not a &lt;a href=&quot;https://www.urbandictionary.com/define.php?term=Keyboard%20hero&quot;&gt;keyboard hero&lt;/a&gt;, but rarely take the time to compress my thoughts, when it comes to text.&lt;/p&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;future-features&quot;&gt;Future Features&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/1-too-late-to-start-blogging/#future-features&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Future Features&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Editing of text is definitely a weakness of mine. Some students shiver at the thought of structured writing of essays I &lt;em&gt;love&lt;/em&gt; it. The blog goes live with barely anything out of the ordinary - dare I say it goes live without some features that you might expect. But developing all of what I &lt;em&gt;want&lt;/em&gt; and what I have &lt;em&gt;planned&lt;/em&gt; for the blog (or for helloyes.dev in general that is) would have required me probably a month (or more) of time to work on it. So in the spirit of small, sustainable steps I instead decided to get things out as they are done, instead of waiting for an ominous &amp;quot;everything is done&amp;quot;-feeling. The blog is intended to evolve and grow over time.&lt;/p&gt;
&lt;p&gt;Some of the planned features are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RSS-Feed&lt;/li&gt;
&lt;li&gt;Web-Mention Integration&lt;/li&gt;
&lt;li&gt;Varying Post-Types (comments, reposts, replies, etc.)&lt;/li&gt;
&lt;li&gt;code-highlighting&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;main__heading-wrapper&quot;&gt;&lt;h2 id=&quot;yay.&quot;&gt;Yay.&lt;/h2&gt;
&lt;a class=&quot;main__heading-link&quot; href=&quot;https://helloyes.dev/blog/2021/1-too-late-to-start-blogging/#yay.&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Section titled Yay.&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I&#39;m excited! I am curious to see where all of this will go. If you find an issue, I would really appreciated it if you took the time &lt;a href=&quot;https://github.com/nachtfunke/helloyes/issues&quot;&gt;to let me know&lt;/a&gt;. Thank you for reading!&lt;/p&gt;
</content>
	</entry>
</feed>