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 & 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 & 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 & 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 & 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 & 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&
1family=Figtree:wght@400;600&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 & 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! - "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...</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&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'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=&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=&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&utm_content=newsletter_feed&utm_medium=referral&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.