PageSourceSearch

https://bartosz.io/profile/posts

html bartosz.io collected 2026-10-05 22:34:34 UTC 58,174 bytes, 379 lines download raw bytes

1<!DOCTYPE html><html lang="en" prefix="og:http://ogp.me/ns#"><head><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="https://cdn.kit.com/pages/css/shared-jp__Y8as.css"/><link rel="stylesheet" href="https://cdn.kit.com/pages/css/profile-Ck0j2eto.css"/>
1<script data-cfasync="false">window.__PAGE__ = "creator-profile-v2/profile"; window.__PROPS__ = {"pageTitle":"Posts","currentPageId":16947,"currentPageType":"posts","templateName":"flow","properties":{"cardColor":"#F4E8DD","customCss":"a[href*=\"poweredby\"] { display: none }","buttonText":"Subscribe","accentColor":"#9c8dec","headerColor":"#643aec","bodyTextColor":"#000000","backgroundColor":"#FBF3EB","bodyFontFamily":"Figtree, sans-serif","bodyFontWeight":400,"bodyLineHeight":1.65,"buttonTextColor":"#FBF3EB","headerTextColor":"#FBF3EB","headingTextColor":"#FBF3EB","headingFontFamily":"Rubik, sans-serif","headingFontWeight":700,"headingLineHeight":1,"backgroundTextColor":"#f3f6f9","defaultBackgroundUrl":"https://cdn.convertkit.com/assets/flow-bg.png","subscribeCallToAction":"Subscribe to get all my latest posts"},"data":{"bio":"Join +2,660 software developers getting weekly tips covering security, quality and system design.","name":"pills.dev 💊 weekly coding tips & tricks","byline":"Short and juicy 🧃, digestible knowledge pills 💊 for software developers.","imageUrl":"https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/ve2aWjDD5o8ZiUPGSWRkqe","seoImage":"https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/uNEah8oSDwsLeLm1pb8RdR","seoVersion":57,"navigationName":"Bartosz.io | Dev-Academy.com","seoDescription":"","favicon":"https://pages.convertkit.com/templates/favicon.ico","showCategories":false},"pages":[{"pageType":"posts","displayName":"Posts","url":"/profile/posts","id":16947,"data":{}},{"pageType":"external","displayName":"Web Security Starter Kit","url":"https://courses.dev-academy.com/p/kit","id":16989047,"data":{"link":{"id":"573c9237-937c-4860-9965-fbb00d60d1fd","url":"https://courses.dev-academy.com/p/kit","icon":"square-arrow-up-right","text":"Web Security Starter Kit"}}},{"pageType":"links","displayName":"Links","url":"/profile/links","id":16948,"data":{"links":[{"id":"de063356-c7fb-441d-9e19-9bbdd66ecbd5","url":"https://courses.dev-academy.com/p/kit?utm_source=pills_dev&utm_medium=web&utm_campaign=pills_dev_page_links","icon":"shopping-cart","text":"Web Security Starter Kit"},{"id":"13be5c43-2ecb-40cb-bdc2-ac293242c8ca","url":"https://dev-academy.com/web-security/join.html?utm_source=pills_dev&utm_medium=web&utm_campaign=pills_dev_page_links","icon":"shopping-cart","text":"Web Security Dev Academy"}]}}],"customFonts":[],"accountId":423003,"profileUrl":"https://pills.dev/profile","siteKey":"0x4AAAAAAAYy1pe6L_wKYCMp","canonicalUrl":"https://pills.dev","poweredByUrl":"https://kit.com/features/forms?utm_campaign=poweredby&utm_content=newsletter_feed&utm_medium=referral&utm_source=dynamic","recentPosts":[{"id":9483400,"title":"(#10) Code coverage == body temperature? 🤒","slug":"10","status":"published","readingTime":1,"campaignCompletedAt":null,"publishedAt":"2025-06-23T19:08:50.000Z","orderByDate":"2025-06-23T19:08:50.000Z","timeAgo":"over 1 year","thumbnailUrl":"https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/4Rzhv77syBQvA3Y3BTZVUB/email","thumbnailAlt":"","path":"posts/10","url":"https://pills.dev/posts/10","isPaid":null,"introContent":"Let's talk about code coverage. When writing tests for your project, it's good to know how much you test. This is where the code coverage metric comes in. It can tell you how many of: lines of code branches (conditional paths like if, switch) statements functions are tested. When your lines coverage is 50%, it means that half of all executable lines of your code is executed during the tests. It means nothing more, nothing less than that. 🛑 It can also be visualised like this below. Code...","campaignId":null,"publicationId":16528841,"metaDescription":"","categoryIds":[]},{"id":9483315,"title":"(#9) How to test Angular / React / Vue? 🙉 (60 seconds tip)","slug":"9","status":"published","readingTime":1,"campaignCompletedAt":null,"publishedAt":"2025-06-23T19:02:59.000Z","orderByDate":"2025-06-23T19:02:59.000Z","timeAgo":"over 1 year","thumbnailUrl":"https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/ru2wzDjvWkGvtMiDJBy7tU?w=800&fit=max","thumbnailAlt":"","path":"posts/9","url":"https://pills.dev/posts/9","isPaid":null,"introContent":"How can we unit test front-end Single-Page Applications? You can do it in three different ways: Isolated testing - no DOM rendering / just JavaScript the fastest ✅ the least reliable ❌ Shallow testing - (partial DOM rendering)the compromise between isolated and integrated 👍 Deep / integrated testing - (full DOM rendering) the slowest ❌ the most reliable ✅ Visually, it looks like that: Isolated unit test Shallow unit test Integrated unit test In Angular, you can control what gets rendered...","campaignId":null,"publicationId":16528693,"metaDescription":"","categoryIds":[]},{"id":9483095,"title":"(8#) Little-known 👾 website hack (you NEED to know)","slug":"8","status":"published","readingTime":1,"campaignCompletedAt":null,"publishedAt":"2025-06-23T18:47:27.000Z","orderByDate":"2025-06-23T18:47:27.000Z","timeAgo":"over 1 year","thumbnailUrl":null,"thumbnailAlt":"","path":"posts/8","url":"https://pills.dev/posts/8","isPaid":null,"introContent":"Think of a regular day at work.Fixing some bugs, adding some new features to your web application. Some changes may be very sophisticated, some pretty easy. You sip your morning coffee ☕ and your Client or Product Owner says: - \"Reader, can you open this link in a new tab?\". You say - \"Sure!\" and immediately add target=\"_blank\". <a href=\"someapp.com\" target=\"_blank\">GO</a> And here is where the problem begins. 💀 someapp.com can TAKE CONTROL over your application! 😈 - \"Bartosz? What are you...","campaignId":null,"publicationId":16528490,"metaDescription":"","categoryIds":[]},{"id":9483047,"title":"(#7) Make it salty 🧂 make it tasty 🍔 (password security)","slug":"7","status":"published","readingTime":2,"campaignCompletedAt":null,"publishedAt":"2025-06-23T18:43:29.000Z","orderByDate":"2025-06-23T18:43:29.000Z","timeAgo":"over 1 year","thumbnailUrl":null,"thumbnailAlt":"","path":"posts/7","url":"https://pills.dev/posts/7","isPaid":null,"introContent":"So let's think about storing the users' passwords in the backend database. You can store it: in plain text (a really bad idea...) hashed (better) salted and hashed (much better!) Let's think about these options... The plain text can be read by developers and admins 🥴, but in case of a database breach... that's a birthday gift 🎀 for hackers! If they get access to the users' records, they don't have to do anything more. GAME OVER for users. A much better (and usually used) option is to hash the...","campaignId":null,"publicationId":16528434,"metaDescription":"","categoryIds":[]},{"id":9483001,"title":"(#6) Integration tests 🧩 A bunch of puzzles to connect","slug":"6","status":"published","readingTime":1,"campaignCompletedAt":null,"publishedAt":"2025-06-23T18:39:23.000Z","orderByDate":"2025-06-23T18:39:23.000Z","timeAgo":"over 1 year","thumbnailUrl":"https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/vNkj7yaE4oh94ctsbULj4i/email","thumbnailAlt":"","path":"posts/6","url":"https://pills.dev/posts/6","isPaid":null,"introContent":"Do you remember the pill about test doubles? I hope you do because they are important not only in unit tests. Unit tests are cool. But integration tests are cooler 😎 (...well, not cooler, but more abstract). They help us to answer the questions about our system like: Can we establish a connection to an HTTP endpoint? Can we establish a connection to the database? Can serialize/deserialize objects for transport? Can we accept incoming requests? Can we handle the exceptions and errors properly?...","campaignId":null,"publicationId":16528398,"metaDescription":"","categoryIds":[]},{"id":9482958,"title":"(#5) Jack Sparrow or not? 👨‍🎤 Test Doubles in action!","slug":"5","status":"published","readingTime":1,"campaignCompletedAt":null,"publishedAt":"2025-06-23T18:35:43.000Z","orderByDate":"2025-06-23T18:35:43.000Z","timeAgo":"over 1 year","thumbnailUrl":"https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/3gtJX3brpMcJ9fwPVunXKA/email","thumbnailAlt":"","path":"posts/5","url":"https://pills.dev/posts/5","isPaid":null,"introContent":"Can you recognise which one is the real Jack Sparrow and which is a... double? 🤫 - \"Bartosz! You were supposed to teach me about coding! 😳\" - \"Reader, this IS about coding... Continue reading.\" Ok. So what does this have to do with testing? A lot When you want to write a unit test, you want to test a single unit of behavior of your application in an isolated manner. The key here is isolation, because you want your unit test to be fast and independent from other tests. The graphic below...","campaignId":null,"publicationId":16528324,"metaDescription":"","categoryIds":[]},{"id":9482905,"title":"(#4) One (simple) trick to write BETTER tests 🧪","slug":"4","status":"published","readingTime":1,"campaignCompletedAt":null,"publishedAt":"2025-06-23T18:31:31.000Z","orderByDate":"2025-06-23T18:31:31.000Z","timeAgo":"over 1 year","thumbnailUrl":"https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/hs
1QXBiwWMBoAf2Kktd9h2P/email","thumbnailAlt":"","path":"posts/4","url":"https://pills.dev/posts/4","isPaid":null,"introContent":"When we write software, it's extremely important to make it as easy to read as possible (by others or just us in the future). The same principle applies to writing (unit) tests. What can we do to makeunit tests more readable? 🔍 Follow the simple AAA pattern: Arrange - prepare the test and data Act - call the method under test Assert - verify results The useful convention to apply this in the code is to use comments given / when / then as in the example below. given / when / then This approach...","campaignId":null,"publicationId":16528246,"metaDescription":"","categoryIds":[]},{"id":9481250,"title":"(#3) JSON Web Token Attack 💥","slug":"3","status":"published","readingTime":1,"campaignCompletedAt":null,"publishedAt":"2025-06-23T16:30:01.000Z","orderByDate":"2025-06-23T16:30:01.000Z","timeAgo":"over 1 year","thumbnailUrl":"https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/ffaTbsxVSMr6c9cru7hoGX/email","thumbnailAlt":"","path":"posts/3","url":"https://pills.dev/posts/3","isPaid":null,"introContent":"So you think that JSON Web Tokens (JWT) are pure gold, and they are a better alternative to old good cookies? 🤔 I hear this all the time... The problem is that JWTs are NOT ANY BETTER than session cookies... they are just applicable in different scenarios (with their pros and cons). Today, let's look at one important risk that comes with using the JWT tokens 👉 Brute-force attack. 💣 Reminder: JSON Web Token is a stateless token for which authenticity and integrity may be verified by the server...","campaignId":null,"publicationId":16526291,"metaDescription":"","categoryIds":[]},{"id":9481199,"title":"(#2) Referrer-Policy may BETRAY you... ❌ Let's be smarter!","slug":"2","status":"published","readingTime":1,"campaignCompletedAt":null,"publishedAt":"2025-06-23T16:26:27.000Z","orderByDate":"2025-06-23T16:26:27.000Z","timeAgo":"over 1 year","thumbnailUrl":null,"thumbnailAlt":"","path":"posts/2","url":"https://pills.dev/posts/2","isPaid":null,"introContent":"Have you ever clicked \"Remind me the password\"? I bet you have! Did you know there is a serious security issue hidden behind it (that most developers are unaware of)? 🤔 Let me explain... Imagine you request a password reset. What usually happens next? You receive an email with a password reset link, which often looks like this: https://application.com/reset?code=123456 where code=123456 is unique to your password reset request. If the page contains some third-party code fetched from an...","campaignId":null,"publicationId":16526219,"metaDescription":"","categoryIds":[]},{"id":9480992,"title":"(#1) Clickjacking 🦊 And headers to the rescue","slug":"1","status":"published","readingTime":1,"campaignCompletedAt":null,"publishedAt":"2025-06-23T16:09:57.000Z","orderByDate":"2025-06-23T16:09:57.000Z","timeAgo":"over 1 year","thumbnailUrl":"https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/tW7TVy47J6x2hZy63iNcnY/email","thumbnailAlt":"1","path":"posts/1","url":"https://pills.dev/posts/1","isPaid":null,"introContent":"Imagine you are building your amazing website... it has all the great features that make the users happy. They are using it and believe they are fully safe to make the most of it. But someday... You discover that your system is vulnerable to CLICKJACKING! - \"Bartosz! What does it mean?!\" - \"Reader... Look below.\" Scary, right? The problem is that clickjacking is a real issue... Here is how it works: A user visits some other (evil) website that has some encouraging button to click (like \"You...","campaignId":null,"publicationId":16525493,"metaDescription":"","categoryIds":[]}],"hasMore":false,"featuredPost":{"id":9480992,"title":"(#1) Clickjacking 🦊 And headers to the rescue","slug":"1","status":"published","readingTime":1,"campaignCompletedAt":null,"publishedAt":"2025-06-23T16:09:57.000Z","orderByDate":"2025-06-23T16:09:57.000Z","timeAgo":"over 1 year","thumbnailUrl":"https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/tW7TVy47J6x2hZy63iNcnY/email","thumbnailAlt":"1","path":"posts/1","url":"https://pills.dev/posts/1","isPaid":null,"introContent":"Imagine you are building your amazing website... it has all the great features that make the users happy. They are using it and believe they are fully safe to make the most of it. But someday... You discover that your system is vulnerable to CLICKJACKING! 
1- \"Bartosz! What does it mean?!\" - \"Reader... Look below.\" Scary, right? The problem is that clickjacking is a real issue... Here is how it works: A user visits some other (evil) website that has some encouraging button to click (like \"You...","campaignId":null,"publicationId":16525493,"metaDescription":"","categoryIds":[]},"selectedCategorySlug":null,"categories":[],"originUrl":"https://bartosz.io/profile/posts","creatorProfileName":"pills.dev 💊 weekly coding tips & tricks","creatorProfileId":40210};</script>
1<script type="module" defer="" data-cfasync="false" src="https://cdn.kit.com/pages/js/entry-client-BnmavPbl.js"></script>
1<title>Posts | pills.dev 💊 weekly coding tips &amp; tricks</title><meta name="description" content="Join +2,660 software developers getting weekly tips covering security, quality and system design."/><meta property="og:title" content="pills.dev 💊 weekly coding tips &amp; tricks"/><meta property="og:description" content="Join +2,660 software developers getting weekly tips covering security, quality and system design."/><meta property="og:image:alt" content="pills.dev 💊 weekly coding tips &amp; tricks"/><meta property="og:type" content="website"/><meta property="og:image" content="https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/uNEah8oSDwsLeLm1pb8RdR"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="pills.dev 💊 weekly coding tips &amp; tricks"/><meta name="twitter:description" content="Join +2,660 software developers getting weekly tips covering security, quality and system design."/><meta name="twitter:image" content="https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/uNEah8oSDwsLeLm1pb8RdR"/><meta name="twitter:image:alt" content="pills.dev 💊 weekly coding tips &amp; tricks"/><link rel="shortcut icon" type="image/x-icon" href="https://pages.convertkit.com/templates/favicon.ico"/><link rel="canonical" href="https://pills.dev"/><link rel="preconnect" href="https://fonts.gstatic.com"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><link href="https://fonts.googleapis.com/css2?family=Rubik:wght@400;600;700&amp;
1family=Figtree:wght@400;600&amp;display=swap" rel="stylesheet"/></head><body><div id="root"><style>
2    .custom-page div h1,
3    .custom-page div h2,
4    .custom-page div h3,
5    .custom-page div h4,
6    .custom-page div h5,
7    .custom-page div h6 {
8      font-family: Rubik, sans-serif;
9      font-weight: 700;
10      color: #000000;
11    }
12
13    .font-heading {
14      font-family: Rubik, sans-serif;
15    }
16
17    .bg-header-image {
18      background-image:
19        url(https://cdn.convertkit.com/assets/flow-bg.png);
20      background-repeat: no-repeat;
21      background-size: cover;
22      background-position: center;
23      background-color: #643aec;
24      background-blend-mode: overlay;
25    }
26
27    .bg-header {
28      background-color: #643aec;
29    }
30
31    .color-card {
32      color: #F4E8DD;
33    }
34
35    .bg-background {
36      background-color: #FBF3EB;
37    }
38
39    .font-weight-heading {
40      font-weight: 700;
41    }
42
43    .font-body {
44      font-family: Figtree, sans-serif;
45    }
46
47    .font-weight-body {
48      font-weight: 400;
49    }
50
51    .color-heading {
52      color: #FBF3EB;
53    }
54
55    .color-body {
56      color: #000000;
57    }
58
59    .line-height-md-loose {
60      line-height: 120%;
61    }
62
63    .line-height-sm-loose {
64      line-height: 160%;
65    }
66
67    .bg-button {
68      background-color: #000000;
69    }
70
71    .bg-button-opacity {
72      background-color: #0000004d;
73    }
74
75    .bg-body {
76      background-color: #000000;
77    }
78
79    .hover\:bg-accent:hover {
80      background-color: #9c8dec;
81    }
82
83    .rounded-6 {
84      border-radius: 24px;
85    }
86
87    @media (min-width: 640px) {
88      .sm\:h-19 {
89        height: 4.75rem;
90      }
91      .sm\:rounded-card {
92        border-radius: 32px;
93      }
94      .sm\:rounded-fit {
95        border-radius: 200px;
96      }
97      .sm\:w-23 {
98        width: 23.5rem;
99      }
100      .sm\:clip-path {
101        clip-path: inset(0px round 9999px);
102      }
103
104      .sm\h-61 {
105        height: 15.25rem;
106      }
107
108      .recommendations-submit {
109        justify-content: center;
110      }
111
112      .sm\:px-30 {
113        padding-left: 120px;
114        padding-right: 120px;
115      }
116
117      .sm\:mx-30 {
118        margin-left: 120px;
119        margin-right: 120px;
120      }
121    }
122
123    @media (min-width: 768px) {
124      .product img {
125        width: 100%;
126      }
127      .product-single img {
128        width: 12rem;
129      }
130    }
131
132    .rounded-2xl {
133      border-radius: 20px;
134    }
135
136    .rounded-fit {
137      border-radius: 200px;
138    }
139
140    .rounded-xs {
141      border-radius: 10px;
142    }
143
144    .rounded-m {
145      border-radius: 16px;
146    }
147
148    .rounded-3xl {
149      border-radius: 24px;
150    }
151
152    .rounded-card {
153      border-radius: 32px;
154    }
155
156    .min-h-15 {
157      min-height: 3.75rem;
158    }
159
160    .h-56 {
161      height: 13.125rem;
162    }
163
164    .bg-card {
165      background-color: #F4E8DD;
166    }
167
168    .color-button-icon {
169      color: #FBF3EB;
170    }
171
172    .hover\:color-button-icon:hover {
173      color: #FBF3EB;
174    }
175
176    .color-badge {
177      fill: #FBF3EB;
178    }
179
180    html,
181    .bg-page {
182      background-color: #FBF3EB;
183    }
184
185    .max-w-page {
186      max-width: 1440px;
187    }
188
189    .bg-accent {
190      background-color: #9c8dec;
191    }
192
193    .border-accent {
194      border-color: #9c8dec;
195    }
196
197    .color-button-text {
198      color: #FBF3EB;
199    }
200
201    .recommendation-sponsored {
202      color: #000000;
203    }
204
205    .button:hover {
206      background-color: #9c8dec;
207    }
208
209    .button:disabled {
210      color: #00000099;
211      background-color: transparent;
212    }
213
214    .share-button {
215      background-color: #FBF3EB;
216    }
217
218    .max-h-lg {
219      max-height: 32.375rem;
220    }
221
222    .line-clamp-3 {
223      overflow: hidden;
224      display: -webkit-box;
225      -webkit-box-orient: vertical;
226      -webkit-line-clamp: 3;
227    }
228
229    .heading-line-height {
230      line-height: 1;
231    }
232
233    .body-line-height {
234      line-height: 1.65;
235    }
236
237    .product img {
238      aspect-ratio: 16 / 9;
239    }
240
241    .product-single button {
242      align-self: flex-start;
243      overflow: hidden;
244      text-overflow: ellipsis;
245      white-space: nowrap;
246    }
247
248    .product-name {
249      color: #000000;
250      font-size: 24px;
251      line-height: 130%;
252      overflow: hidden;
253      display: -webkit-box;
254      -webkit-box-orient: vertical;
255      -webkit-line-clamp: 3;
256    }
257
258    .product-price {
259      color: #9c8dec;
260      font-size: 18px;
261      line-height: 160%;
262    }
263
264    .product-content {
265      flex: 1;
266    }
267
268    .product button {
269      background-color: #000000;
270      color: #FBF3EB;
271      font-size: 16px;
272      padding: 8px 32px;
273      border-radius: 200px;
274      width: 100%;
275      margin-top: auto;
276    }
277
278    .product button:hover {
279      background-color: #9c8dec;
280      transition: 300ms;
281    }
282
283    @media (min-width: 768px) {
284      .product-single button {
285        width: auto;
286      }
287    }
288
289    .line-clamp-4 {
290      overflow: hidden;
291      display: -webkit-box;
292      -webkit-box-orient: vertical;
293      -webkit-line-clamp: 4;
294    }
295
296    .rounded-b-xl {
297      border-bottom-right-radius: 24px;
298      border-bottom-left-radius: 24px;
299    }
300
301    .rounded-t-2xl {
302      border-top-right-radius: 24px;
303      border-top-left-radius: 24px;
304    }
305
306    .group:hover .group-hover\:bg-accent {
307      background-color: #9c8dec;
308    }
309
310    .group:hover .group-hover\:color-bg {
311      color: #FBF3EB;
312    }
313
314    .group:hover .group-hover\:color-accent {
315      color: #9c8dec;
316    }
317
318    .w-5 {
319      width: 1.25rem;
320    }
321
322    .h-5 {
323      height: 1.25rem;
324    }
325
326    .header:hover .bg-image-picker {
327      opacity: 0.6;
328    }
329
330    .recommendation-creator img {
331      border-radius: 10px;
332    }
333
334    .recommendations-heading {
335      color: #000000;
336    }
337
338    .recommendation-byline {
339      color: #000000;
340    }
341
342    .recommendation-creator {
343      padding: 24px;
344      border-radius: 24px;
345      background-color: #F4E8DD;
346    }
347
348    .recommendation-name {
349      color: #000000;
350    }
351
352    .recommendation-creator[aria-checked="true"]{
353      outline: 2px solid #9c8dec;
354    }
355
356    .recommendations-form input[type="checkbox"] {
357      --active-checkbox: #9c8dec;
358      --background: transparent;
359      border-radius: 200px;
360      outline: 2px solid #000000 !important;
361    }
362
363    .recommendations-form input[type="checkbox"]:hover,
364    .recommendations-form input[type="checkbox"]:checked {
365      outline: 2px solid #9c8dec !important;
366    }
367
368    @media (max-width: 640px) {
369      .recommendations-form .recommendations-checkbox {
370        right: 16px;
371      }
372    }
373
374    @media (max-width: 768px) {
375      .recommendations-form .recommendations-submit {
376        flex-direction: column;
377      }
378    }
379  </style><style>a[href*="poweredby"] { display: none }</style><div class="bg-page page-posts"><div class="max-w-page flex flex-col w-full mx-auto"><div class="sm:m-6"><div class="header flex flex-col text-center items-stretch rounded-b-xl bg-header-image sm:px-24 sm:pt-16 sm:pb-32 pt-10 sm:rounded-card rounded-t-none"><div class="flex flex-col sm:justify-center justify-items-center mb-6">
379<div class="creator-avatar sm:w-24 sm:h-24 h-12 w-12 self-center"><img alt="profile" src="https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/ve2aWjDD5o8ZiUPGSWRkqe" class="h-full w-full rounded-full object-cover object-center"/></div><div class="grid"><h1 class="font-heading font-weight-heading flex flex-col color-heading text-2xl text-center block truncate"><a>Bartosz.io | Dev-Academy.com</a></h1></div></div><div class="px-6 sm:px-0"><div class="grid"><h1 class="creator-name font-heading font-weight-heading color-heading opacity-80 sm:text-6xl text-5xl text-center mb-8 sm:mb-6 heading-line-height overflow-hidden break-words whitespace-pre-wrap">pills.dev 💊 weekly coding tips &amp; tricks</h1></div><div class="grid"><p class="creator-byline font-body font-weight-body color-heading text-xl leading-5 text-center mb-6 body-line-height overflow-hidden break-words whitespace-pre-wrap">Short and juicy 🧃, digestible knowledge pills 💊 for software developers.</p></div><div class="grid"><p class="creator-bio font-body font-weight-body color-heading text-xl leading-5 text-center mb-6 body-line-height overflow-hidden break-words whitespace-pre-wrap">Join +2,660 software developers getting weekly tips covering security, quality and system design.</p></div><div class="flex justify-center mb-16"><form class="form subscribe-form leading-8 justify-between w-full self-center px-1 items-center" method="POST" action="/posts"><div class="flex leading-8 rounded-full bg-background m-auto  justify-between max-w-lg w-full self-center px-1 items-center sm:h-19 min-h-15"><input id="email" name="email_address" type="email" placeholder="Email address" class="color-body font-body text-xl py-2 outline-none px-4 w-full rounded-full bg-transparent email-input" required="" value=""/><button class="flex-none w-12 h-12 sm:w-16 sm:h-16 bg-button color-button-icon flex items-center justify-center rounded-full"><span class="inline-flex items-center justify-center w-6 h-6 color-button-icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="envelope" class="svg-inline--fa fa-envelope overflow-visible" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:75%;height:75%"><path fill="currentColor" d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM0 176L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-208L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z"></path></svg></span></button></div></form></div></div></div></div><div class="navigation sm:mx-30 bg-background sm:rounded-full px-6 sm:px-3 sm:-mt-16  overflow-x-auto overflow-y-hidden sm:clip-path py-10 sm:py-3"><div class="flex flex-row"><a href="/profile/posts" class="px-4 py-3 sm:px-12 sm:py-4 font-body font-semibold color-body outline-none focus:outline-none rounded-full group bg-card"><div class="flex justify-center items-center rounded-full"><div class="rounded-full bg-background group-hover:bg-accent mr-4 flex justify-center items-center w-8 h-8 delay-75 transition-colors"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="newspaper" class="svg-inline--fa fa-newspaper inline-block group-hover:color-bg color-body w-5 h-5 delay-75 transition-colors flex-shrink-0" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M96 96c0-35.3 28.7-64 64-64l288 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L80 480c-44.2 0-80-35.8-80-80L0 128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 272c0 8.8 7.2 16 16 16s16-7.2 16-16L96 96zm64 24l0 80c0 13.3 10.7 24 24 24l112 0c13.3 0 24-10.7 24-24l0-80c0-13.3-10.7-24-24-24L184 96c-13.3 0-24 10.7-24 24zm208-8c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0c-8.8 0-16 7.2-16 16zM160 304c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-256 0c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-256 0c-8.8 0-16 7.2-16 16z"></path></svg></div><span class="font-body font-semibold text-lg leading-6 truncate">Posts</span></div></a><a href="https://courses.dev-academy.com/p/kit" target="_blank" rel="noreferrer" class="px-4 py-3 sm:px-12 sm:py-4 font-body font-semibold color-body outline-none focus:outline-none rounded-full group"><div class="flex justify-center items-center rounded-full"><div class="rounded-full bg-background group-hover:bg-accent mr-4 flex justify-center items-center w-8 h-8 delay-75 transition-colors bg-card"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="square-arrow-up-right" class="svg-inline--fa fa-square-arrow-up-right inline-block group-hover:color-bg color-body w-5 h-5 delay-75 transition-colors flex-shrink-0" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
379<path fill="currentColor" d="M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM160 144c-13.3 0-24 10.7-24 24s10.7 24 24 24l94.1 0L119 327c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l135-135L288 328c0 13.3 10.7 24 24 24s24-10.7 24-24l0-160c0-13.3-10.7-24-24-24l-152 0z"></path></svg></div><span class="font-body font-semibold text-lg leading-6 truncate">Web Security Starter Kit</span></div></a><a href="/profile/links" class="px-4 py-3 sm:px-12 sm:py-4 font-body font-semibold color-body outline-none focus:outline-none rounded-full group"><div class="flex justify-center items-center rounded-full"><div class="rounded-full bg-background group-hover:bg-accent mr-4 flex justify-center items-center w-8 h-8 delay-75 transition-colors bg-card"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="link" class="svg-inline--fa fa-link inline-block group-hover:color-bg color-body w-5 h-5 delay-75 transition-colors flex-shrink-0" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z"></path></svg></div><span class="font-body font-semibold text-lg leading-6 truncate">Links</span></div></a></div></div><div class="sm:px-30 sm:py-20 px-6 pb-10"><div class="transition-opacity duration-300"><div class="rounded-3xl bg-card mb-8 sm:mb-16"><a href="https://pills.dev/posts/1" class="grid grid-cols-1 md:grid-cols-2 gap-6 sm:gap-16 p-6 sm:py-10 sm:pl-16 sm:pr-10 overflow-hidden break-words group"><div class="relative w-full sm:flex-1 pb-3/4 sm:order-1 rounded-2xl"><img src="https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/tW7TVy47J6x2hZy63iNcnY/email" class="absolute object-cover object-center h-full w-full rounded-xl" alt="1"/></div><article class="flex flex-col justify-between gap-4 sm:flex-1"><div class="flex gap-1 font-semibold color-body"><div class="flex justify-start gap-6 sm:flex-row flex-col items-center"><div class="inline-flex align-center font-semibold text-xs px-2 py-1 inline-block self-start color-button-icon bg-button rounded-full bg-button font-body group-hover:bg-accent transition-colors duration-300">MUST READ</div><span class="flex-1 flex text-sm font-body">OVER 1 YEAR AGO<!-- --> • <!-- -->1<!-- --> MIN READ</span></div></div><div class="flex flex-col gap-4"><h3 class="font-heading font-weight-heading color-body text-4xl leading-10 line-clamp-3 group-hover:color-accent transition-colors duration-300">(#1) Clickjacking 🦊 And headers to the rescue</h3><p class="post-intro font-body font-weight-body color-body text-lg leading-6 line-clamp-3">Imagine you are building your amazing website... it has all the great features that make the users happy. They are using it and believe they are fully safe to make the most of it. But someday... You discover that your system is vulnerable to CLICKJACKING! - &quot;Bartosz! What does it mean?!&quot; - &quot;Reader... Look below.&quot; Scary, right? The problem is that clickjacking is a real issue... Here is how it works: A user visits some other (evil) website that has some encouraging button to click (like &quot;You...</p><div class="flex gap-8"><div class="font-semibold color-body flex flex-row gap-4 items-center text-xs"><span class="read-now text-lg font-semibold py-2">Read Now</span><div class="flex group-hover:bg-accent rounded-full bg-button p-1 transition-colors duration-300"><span class="inline-flex items-center justify-center w-6 h-6 color-button-icon group-hover:color-bg transition-colors duration-300"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="arrow-right" class="svg-inline--fa fa-arrow-right overflow-visible" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width:75%;height:75%">
379<path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path></svg></span></div></div></div></div></article></a></div></div><div class="transition-opacity duration-300"><div class="flex flex-col gap-3"><div class="flex flex-col md:grid sm:grid-cols-3 gap-4"><a href="https://pills.dev/posts/10" class="flex flex-col gap-6 p-6 sm:p-8 group bg-card rounded-2xl w-full justify-between"><div class="relative pb-3/4 self-center w-full"><img src="https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/4Rzhv77syBQvA3Y3BTZVUB/email" class="absolute object-cover object-center w-full h-full rounded-xs" alt=""/></div><div class="flex flex-col gap-4 overflow-hidden h-full justify-between"><h3 class="post-title font-heading font-weight-heading color-body text-2xl leading-8 group-hover:color-accent line-clamp-3 sm:line-clamp-2 transition-colors duration-300">(#10) Code coverage == body temperature? 🤒</h3><div class="font-semibold color-body flex flex-row gap-4 items-center text-xs justify-between"><span class="text-xs font-body">OVER 1 YEAR AGO<!-- --> • <!-- -->1<!-- --> MIN READ</span><div class="flex group-hover:bg-accent rounded-full bg-button p-1 transition-colors duration-300"><span class="inline-flex items-center justify-center w-6 h-6 color-button-icon group-hover:color-bg transition-colors duration-300"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="arrow-right" class="svg-inline--fa fa-arrow-right overflow-visible" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width:75%;height:75%"><path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path></svg></span></div></div></div></a><a href="https://pills.dev/posts/9" class="flex flex-col gap-6 p-6 sm:p-8 group bg-card rounded-2xl w-full justify-between"><div class="relative pb-3/4 self-center w-full"><img src="https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/ru2wzDjvWkGvtMiDJBy7tU?w=800&amp;fit=max" class="absolute object-cover object-center w-full h-full rounded-xs" alt=""/></div><div class="flex flex-col gap-4 overflow-hidden h-full justify-between"><h3 class="post-title font-heading font-weight-heading color-body text-2xl leading-8 group-hover:color-accent line-clamp-3 sm:line-clamp-2 transition-colors duration-300">(#9) How to test Angular / React / Vue? 🙉 (60 seconds tip)</h3><div class="font-semibold color-body flex flex-row gap-4 items-center text-xs justify-between"><span class="text-xs font-body">OVER 1 YEAR AGO<!-- --> • <!-- -->1<!-- --> MIN READ</span><div class="flex group-hover:bg-accent rounded-full bg-button p-1 transition-colors duration-300"><span class="inline-flex items-center justify-center w-6 h-6 color-button-icon group-hover:color-bg transition-colors duration-300"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="arrow-right" class="svg-inline--fa fa-arrow-right overflow-visible" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width:75%;height:75%"><path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path></svg></span></div></div></div></a><a href="https://pills.dev/posts/8" class="flex flex-col gap-6 p-6 sm:p-8 group bg-card rounded-2xl w-full justify-between"><div class="flex flex-col gap-4 overflow-hidden h-full justify-between"><h3 class="post-title font-heading font-weight-heading color-body text-2xl leading-8 group-hover:color-accent line-clamp-3 sm:line-clamp-2 transition-colors duration-300">(8#) Little-known 👾 website hack (you NEED to know)</h3><div class="font-semibold color-body flex flex-row gap-4 items-center text-xs justify-between"><span class="text-xs font-body">OVER 1 YEAR AGO<!-- --> • <!-- -->1<!-- --> MIN READ</span><div class="flex group-hover:bg-accent rounded-full bg-button p-1 transition-colors duration-300"><span class="inline-flex items-center justify-center w-6 h-6 color-button-icon group-hover:color-bg transition-colors duration-300"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="arrow-right" class="svg-inline--fa fa-arrow-right overflow-visible" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width:75%;height:75%">
379<path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path></svg></span></div></div></div></a><a href="https://pills.dev/posts/7" class="flex flex-col gap-6 p-6 sm:p-8 group bg-card rounded-2xl w-full justify-between"><div class="flex flex-col gap-4 overflow-hidden h-full justify-between"><h3 class="post-title font-heading font-weight-heading color-body text-2xl leading-8 group-hover:color-accent line-clamp-3 sm:line-clamp-2 transition-colors duration-300">(#7) Make it salty 🧂 make it tasty 🍔 (password security)</h3><div class="font-semibold color-body flex flex-row gap-4 items-center text-xs justify-between"><span class="text-xs font-body">OVER 1 YEAR AGO<!-- --> • <!-- -->2<!-- --> MIN READ</span><div class="flex group-hover:bg-accent rounded-full bg-button p-1 transition-colors duration-300"><span class="inline-flex items-center justify-center w-6 h-6 color-button-icon group-hover:color-bg transition-colors duration-300"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="arrow-right" class="svg-inline--fa fa-arrow-right overflow-visible" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width:75%;height:75%"><path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path></svg></span></div></div></div></a><a href="https://pills.dev/posts/6" class="flex flex-col gap-6 p-6 sm:p-8 group bg-card rounded-2xl w-full justify-between"><div class="relative pb-3/4 self-center w-full"><img src="https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/vNkj7yaE4oh94ctsbULj4i/email" class="absolute object-cover object-center w-full h-full rounded-xs" alt=""/></div><div class="flex flex-col gap-4 overflow-hidden h-full justify-between"><h3 class="post-title font-heading font-weight-heading color-body text-2xl leading-8 group-hover:color-accent line-clamp-3 sm:line-clamp-2 transition-colors duration-300">(#6) Integration tests 🧩 A bunch of puzzles to connect</h3><div class="font-semibold color-body flex flex-row gap-4 items-center text-xs justify-between"><span class="text-xs font-body">OVER 1 YEAR AGO<!-- --> • <!-- -->1<!-- --> MIN READ</span><div class="flex group-hover:bg-accent rounded-full bg-button p-1 transition-colors duration-300"><span class="inline-flex items-center justify-center w-6 h-6 color-button-icon group-hover:color-bg transition-colors duration-300"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="arrow-right" class="svg-inline--fa fa-arrow-right overflow-visible" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width:75%;height:75%"><path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path></svg></span></div></div></div></a><a href="https://pills.dev/posts/5" class="flex flex-col gap-6 p-6 sm:p-8 group bg-card rounded-2xl w-full justify-between"><div class="relative pb-3/4 self-center w-full"><img src="https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/3gtJX3brpMcJ9fwPVunXKA/email" class="absolute object-cover object-center w-full h-full rounded-xs" alt=""/></div><div class="flex flex-col gap-4 overflow-hidden h-full justify-between"><h3 class="post-title font-heading font-weight-heading color-body text-2xl leading-8 group-hover:color-accent line-clamp-3 sm:line-clamp-2 transition-colors duration-300">(#5) Jack Sparrow or not? 👨‍🎤 Test Doubles in action!</h3><div class="font-semibold color-body flex flex-row gap-4 items-center text-xs justify-between"><span class="text-xs font-body">OVER 1 YEAR AGO<!-- --> • <!-- -->1<!-- --> MIN READ</span><div class="flex group-hover:bg-accent rounded-full bg-button p-1 transition-colors duration-300"><span class="inline-flex items-center justify-center w-6 h-6 color-button-icon group-hover:color-bg transition-colors duration-300"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="arrow-right" class="svg-inline--fa fa-arrow-right overflow-visible" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width:75%;height:75%">
379<path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path></svg></span></div></div></div></a><a href="https://pills.dev/posts/4" class="flex flex-col gap-6 p-6 sm:p-8 group bg-card rounded-2xl w-full justify-between"><div class="relative pb-3/4 self-center w-full"><img src="https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/hsQXBiwWMBoAf2Kktd9h2P/email" class="absolute object-cover object-center w-full h-full rounded-xs" alt=""/></div><div class="flex flex-col gap-4 overflow-hidden h-full justify-between"><h3 class="post-title font-heading font-weight-heading color-body text-2xl leading-8 group-hover:color-accent line-clamp-3 sm:line-clamp-2 transition-colors duration-300">(#4) One (simple) trick to write BETTER tests 🧪</h3><div class="font-semibold color-body flex flex-row gap-4 items-center text-xs justify-between"><span class="text-xs font-body">OVER 1 YEAR AGO<!-- --> • <!-- -->1<!-- --> MIN READ</span><div class="flex group-hover:bg-accent rounded-full bg-button p-1 transition-colors duration-300"><span class="inline-flex items-center justify-center w-6 h-6 color-button-icon group-hover:color-bg transition-colors duration-300"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="arrow-right" class="svg-inline--fa fa-arrow-right overflow-visible" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width:75%;height:75%"><path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path></svg></span></div></div></div></a><a href="https://pills.dev/posts/3" class="flex flex-col gap-6 p-6 sm:p-8 group bg-card rounded-2xl w-full justify-between"><div class="relative pb-3/4 self-center w-full"><img src="https://embed.filekitcdn.com/e/ayqPvqNFfZMPjYCXSoNYgT/ffaTbsxVSMr6c9cru7hoGX/email" class="absolute object-cover object-center w-full h-full rounded-xs" alt=""/></div><div class="flex flex-col gap-4 overflow-hidden h-full justify-between"><h3 class="post-title font-heading font-weight-heading color-body text-2xl leading-8 group-hover:color-accent line-clamp-3 sm:line-clamp-2 transition-colors duration-300">(#3) JSON Web Token Attack 💥</h3><div class="font-semibold color-body flex flex-row gap-4 items-center text-xs justify-between"><span class="text-xs font-body">OVER 1 YEAR AGO<!-- --> • <!-- -->1<!-- --> MIN READ</span><div class="flex group-hover:bg-accent rounded-full bg-button p-1 transition-colors duration-300"><span class="inline-flex items-center justify-center w-6 h-6 color-button-icon group-hover:color-bg transition-colors duration-300"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="arrow-right" class="svg-inline--fa fa-arrow-right overflow-visible" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width:75%;height:75%"><path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path></svg></span></div></div></div></a><a href="https://pills.dev/posts/2" class="flex flex-col gap-6 p-6 sm:p-8 group bg-card rounded-2xl w-full justify-between"><div class="flex flex-col gap-4 overflow-hidden h-full justify-between"><h3 class="post-title font-heading font-weight-heading color-body text-2xl leading-8 group-hover:color-accent line-clamp-3 sm:line-clamp-2 transition-colors duration-300">(#2) Referrer-Policy may BETRAY you... ❌ Let&#x27;s be smarter!</h3><div class="font-semibold color-body flex flex-row gap-4 items-center text-xs justify-between"><span class="text-xs font-body">OVER 1 YEAR AGO<!-- --> • <!-- -->1<!-- --> MIN READ</span><div class="flex group-hover:bg-accent rounded-full bg-button p-1 transition-colors duration-300"><span class="inline-flex items-center justify-center w-6 h-6 color-button-icon group-hover:color-bg transition-colors duration-300"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="arrow-right" class="svg-inline--fa fa-arrow-right overflow-visible" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width:75%;height:75%">
379<path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path></svg></span></div></div></div></a></div></div></div></div><div class="sm:p-6"><div class="footer flex flex-col sm:flex-row gap-4 items-center flex-wrap justify-center sm:justify-between sm:px-24 px-6 py-12 bg-body rounded-b-none rounded-t-2xl sm:rounded-card bg-body"><div class="sm:pb-0 pb-10 sm:mb-0"><div class="share-buttons flex items-center gap-4 flex-row"><span class="font-body font-bold text-xs color-button-icon">SHARE THIS PAGE</span><div class="flex gap-2"><a class="text-center text-base flex justify-center align-center button color-body w-10 h-10 rounded-full p-3 transition ease-in-out duration-200 share-button" href="https://x.com/intent/tweet/?text=&amp;url=https://bartosz.io/profile/posts"><span class="sr-only"></span><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="x-twitter" class="svg-inline--fa fa-x-twitter " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"></path></svg></a><a class="text-center text-base flex justify-center align-center button color-body w-10 h-10 rounded-full p-3 transition ease-in-out duration-200 share-button" href="https://facebook.com/sharer/sharer.php?u=https://bartosz.io/profile/posts"><span class="sr-only"></span><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="facebook" class="svg-inline--fa fa-facebook " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256C0 376 82.7 476.8 194.2 504.5V334.2H141.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H287V510.1C413.8 494.8 512 386.9 512 256h0z"></path></svg></a><a class="text-center text-base flex justify-center align-center button color-body w-10 h-10 rounded-full p-3 transition ease-in-out duration-200 share-button" href="mailto:?subject=&amp;body=Visit%20the%20link%20at%20https%3A%2F%2Fbartosz.io%2Fprofile%2Fposts"><span class="sr-only"></span><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="envelope" class="svg-inline--fa fa-envelope " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM0 176L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-208L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z"></path></svg></a></div></div></div><div><a href="https://kit.com/features/forms?utm_campaign=poweredby&amp;utm_content=newsletter_feed&amp;utm_medium=referral&amp;utm_source=dynamic" class="color-badge p-2 flex items-center justify-center transition-transform transform scale-100 hover:scale-105 duration-300" target="_blank" rel="noopener noreferrer"><svg width="172" height="40" viewBox="0 0 172 40" xmlns="http://www.w3.org/2000/svg"><path d="M102.919 17.9569C102.919 18.3602 103.376 18.4139 103.537 18.0645C104.128 16.6666 105.096 15.6182 106.978 15.6182C109.048 15.6182 109.989 17.043 109.989 19.301V29.4354C109.989 29.5967 109.881 29.7043 109.72 29.7043H105.983C105.822 29.7043 105.714 29.5967 105.714 29.4354V20.9139C105.714 19.7311 105.284 19.1666 104.397 19.1666C103.483 19.1666 102.919 19.7311 102.919 20.9139V29.4354C102.919 29.5967 102.811 29.7043 102.65 29.7043H98.9134C98.7521 29.7043 98.6445 29.5967 98.6445 29.4354V10.5645C98.6445 10.4032 98.7521 10.2957 98.9134 10.2957H102.65C102.811 10.2957 102.919 10.4032 102.919 10.5645V17.9569Z"></path><path d="M89.3315 15.9139C89.8423 15.9139 89.9767 15.672 90.0305 15.0537L90.2186 12.473C90.2186 12.3118 90.353 12.2042 90.5143 12.2042H93.767C93.9283 12.2042 94.0358 12.3118 94.0358 12.473V15.6451C94.0358 15.8064 94.1434 15.9139 94.3047 15.9139H96.8315C96.9928 15.9139 97.1004 16.0214 97.1004 16.1827V18.387C97.1004 18.5483 96.9928 18.6558 96.8315 18.6558H94.009V25.2956C94.009 26.344 94.6004 26.6128 95.2724 26.6128C95.81 26.6128 96.4014 26.4247 96.8853 26.129C97.0735 26.0214 97.2079 26.0752 97.2079 26.2902V28.844C97.2079 28.9784 97.
3791541 29.0859 97.0466 29.1666C96.267 29.6505 95.1649 29.973 93.9552 29.973C91.724 29.973 89.7348 28.9515 89.7348 25.8333V18.6558H88.6057C88.4444 18.6558 88.3369 18.5483 88.3369 18.387V16.1827C88.3369 16.0214 88.4444 15.9139 88.6057 15.9139H89.3315Z"></path><path d="M87.21 29.4355C87.21 29.5968 87.1025 29.7043 86.9412 29.7043H83.2047C83.0434 29.7043 82.9358 29.5968 82.9358 29.4355V16.1828C82.9358 16.0215 83.0434 15.914 83.2047 15.914H86.9412C87.1025 15.914 87.21 16.0215 87.21 16.1828V29.4355ZM85.0326 14.6505C83.6079 14.6505 82.6401 13.629 82.6401 12.3387C82.6401 11.0484 83.6079 10 85.0326 10C86.4305 10 87.3982 11.0484 87.3982 12.3387C87.3982 13.629 86.4305 14.6505 85.0326 14.6505Z"></path><path d="M74.694 15.9139C74.8553 15.9139 74.9628 15.9946 74.9897 16.1559L75.9843 22.4731L76.2262 24.1666C76.28 24.543 76.7101 24.543 76.737 24.1666C76.8176 23.5752 76.8714 23.0107 76.9789 22.4462L77.8929 16.1559C77.9198 15.9946 78.0273 15.9139 78.1886 15.9139H81.4682C81.6563 15.9139 81.737 16.0215 81.7101 16.2096L78.9144 29.4623C78.8875 29.6236 78.78 29.7043 78.6187 29.7043H74.6133C74.452 29.7043 74.3445 29.6236 74.3176 29.4623L73.0811 22.7688L72.7854 20.9139C72.7585 20.672 72.4897 20.672 72.4628 20.9139L72.1671 22.7957L71.0649 29.4623C71.0381 29.6236 70.9305 29.7043 70.7692 29.7043H66.7907C66.6295 29.7043 66.5219 29.6236 66.495 29.4623L63.7262 16.2096C63.6993 16.0215 63.78 15.9139 63.9682 15.9139H67.7585C67.9198 15.9139 68.0273 15.9946 68.0542 16.1559L68.995 22.4462C69.1026 23.0107 69.1832 23.629 69.2639 24.1935C69.3445 24.5967 69.694 24.6236 69.7746 24.1935L70.0434 22.5L71.1456 16.1559C71.1725 15.9946 71.28 15.9139 71.4413 15.9139H74.694Z"></path><path d="M50.4272 15.9139C50.938 15.9139 51.0724 15.672 51.1262 15.0537L51.3143 12.473C51.3143 12.3118 51.4487 12.2042 51.61 12.2042H54.8627C55.024 12.2042 55.1315 12.3118 55.1315 12.473V15.6451C55.1315 15.8064 55.2391 15.9139 55.4004 15.9139H57.9272C58.0885 15.9139 58.1961 16.0214 58.1961 16.1827V18.387C58.1961 18.5483 58.0885 18.6558 57.9272 18.6558H55.1047V25.2956C55.1047 26.344 55.6961 26.6128 56.3681 26.6128C56.9057 26.6128 57.4971 26.4247 57.981 26.129C58.1692 26.0214 58.3036 26.0752 58.3036 26.2902V28.844C58.3036 28.9784 58.2498 29.0859 58.1423 29.1666C57.3627 29.6505 56.2606 29.973 55.0509 29.973C52.8197 29.973 50.8305 28.9515 50.8305 25.8333V18.6558H49.7014C49.5401 18.6558 49.4326 18.5483 49.4326 18.387V16.1827C49.4326 16.0214 49.5401 15.9139 49.7014 15.9139H50.4272Z"></path><path d="M43.2139 10.5645C43.2139 10.4032 43.3214 10.2957 43.4827 10.2957H47.2192C47.3805 10.2957 47.4881 10.4032 47.4881 10.5645V25.2957C47.4881 26.1828 47.6493 26.6129 48.3752 26.6129C48.6171 26.6129 48.859 26.5591 49.0741 26.5053C49.2623 26.4516 49.3967 26.4516 49.3967 26.6666V29.1397C49.3967 29.2741 49.3429 29.4086 49.2354 29.4623C48.5633 29.7311 47.7031 29.9731 46.7891 29.9731C44.3967 29.9731 43.2139 28.6021 43.2139 25.8333V10.5645Z"></path><path d="M41.7105 29.4355C41.7105 29.5968 41.603 29.7043 41.4417 29.7043H37.7051C37.5439 29.7043 37.4363 29.5968 37.4363 29.4355V16.1828C37.4363 16.0215 37.5439 15.914 37.7051 15.914H41.4417C41.603 15.914 41.7105 16.0215 41.7105 16.1828V29.4355ZM39.5331 14.6505C38.1084 14.6505 37.1406 13.629 37.1406 12.3387C37.1406 11.0484 38.1084 10 39.5331 10C40.9309 10 41.8987 11.0484 41.8987 12.3387C41.8987 13.629 40.9309 14.6505 39.5331 14.6505Z"></path><path d="M31.9331 27.6344C31.9331 27.2311 31.5299 27.1505 31.3686 27.5268C30.7235 29.0053 29.6213 30 27.5514 30C25.4009 30 24.4062 28.3871 24.4062 26.129V16.1828C24.4062 16.0215 24.5138 15.9139 24.6751 15.9139H28.4116C28.5729 15.9139 28.6804 16.0215 28.6804 16.1828V24.7849C28.6804 25.9677 29.1106 26.5322 29.9976 26.5322C30.9116 26.5322 31.4761 25.9677 31.4761 24.7849V16.1828C31.4761 16.0215 31.5837 15.9139 31.745 15.9139H35.4815C35.6428 15.9139 35.7503 16.0215 35.7503 16.1828V29.4354C35.7503 29.5967 35.6428 29.7043 35.4815 29.7043H32.2019C32.0407 29.7043 31.9331 29.5967 31.9331 29.4354V27.6344Z"></path><path d="M10.0247 29.7043C9.86339 29.7043 9.75586 29.5967 9.75586 29.4354V10.5645C9.75586 10.4032 9.86339 10.2957 10.0247 10.2957H16.9602C20.5354 10.2957 22.5784 11.7204 22.5784 14.758C22.5784 17.3118 20.7236 18.7365 19.1645 19.1129C18.7881 19.1666 18.7881 19.6236 19.1913 19.7043C21.6107 20.2419 23.1161 21.5322 23.1161 24.3548C23.1161 27.4193 20.9924 29.7043 17.1483 29.7043H10.0247ZM15.8311 26.6129C17.6591 26.6129 18.5462 25.5107 18.5462 23.9516C18.5462 22.258 17.6591 21.3172 15.8311 21.3172H14.2989V26.6129H15.8311ZM15.7236 18.3333C17.2559 18.3333 18.1967 17.4731 18.1967 15.7526C18.1967 14.1935 17.2559 13.3871 15.643 13.3871H14.2989V18.3333H15.7236Z"></path><g clip-path="url(#clip0_838_7217)"><path d="M130.115 18.3222C135.563 19.3772 137.254 24.4236 137.298 29.4992C137.299 29.6134 137.207 29.7066 137.093 29.7066H130.235C130.122 29.7066 130.03 29.6152 130.029 29.5018C130.009 25.564 129.371 22.089 125.472 21.939C125.355 21.9346 125.259 22.0278 125.259 22.1444V29.5012C125.259 29.6146 125.167 29.7066 125.053 29.7066H118.194C118.081 29.7066 117.989 29.6146 117.989 29.5012V10.7558C117.989 10.6424 118.081 10.5504 118.194 10.5504H125.053C125.167 10.5504 125.259 10.6424 125.259 10.7558V17.7778C125.259 17.882 125.343 17.9664 125.447 17.9664C125.53 17.9664 125.603 17.9126 125.627 17.8334C127.394 12.043 130.694 10.587 136.052 10.5512C136.166 10.5504 136.259 10.6428 136.259 10.7566V17.7612C136.259 17.8746 136.167 17.9666 136.054 17.9
379666H130.149C130.05 17.9666 129.97 18.047 129.97 18.1462C129.97 18.2322 130.031 18.306 130.115 18.3224V18.3222ZM162.244 28.3556C162.244 28.5078 162.16 28.6478 162.025 28.7188C161.38 29.0584 159.385 30 157.103 30C152.41 30 148.961 28.055 148.895 22.7118H148.893V18.1718C148.893 18.0584 148.985 17.9664 149.098 17.9664H154.146C154.245 17.9664 154.326 17.8858 154.326 17.7864C154.326 17.7002 154.264 17.6264 154.18 17.6098C150.231 16.826 148.408 14.5512 148.345 10.756C148.343 10.6432 148.433 10.5504 148.546 10.5504H155.958C156.071 10.5504 156.163 10.6424 156.163 10.7558V14.3584C156.163 14.4718 156.255 14.5638 156.368 14.5638H161.218C161.331 14.5638 161.423 14.6558 161.423 14.7692V17.761C161.423 17.8744 161.331 17.9664 161.218 17.9664H156.368C156.255 17.9664 156.163 18.0584 156.163 18.1718V21.8338C156.163 23.1276 156.956 23.5542 158.01 23.5542C159.662 23.5542 161.291 22.8094 161.945 22.4718C162.082 22.4012 162.244 22.5006 162.244 22.6544V28.3552V28.3556ZM139.245 29.5012V18.1714C139.245 18.058 139.337 17.966 139.45 17.966H146.309C146.423 17.966 146.515 18.058 146.515 18.1714V29.5012C146.515 29.6146 146.423 29.7066 146.309 29.7066H139.45C139.337 29.7066 139.245 29.6146 139.245 29.5012ZM138.857 13.4918C138.857 15.4202 140.218 16.9836 142.832 16.9836C145.447 16.9836 146.808 15.4202 146.808 13.4918C146.808 11.5634 145.447 10 142.832 10C140.218 10 138.857 11.5634 138.857 13.4918Z"></path></g><defs><clipPath id="clip0_838_7217"><rect width="44.2553" height="20" transform="translate(117.989 10)"></rect></clipPath></defs></svg></a></div></div></div></div></div><div style="position:fixed;z-index:9999;top:16px;left:16px;right:16px;bottom:16px;pointer-events:none"></div></div></body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.