cloudflare
tcp/443 tcp/80 tcp/8443
Open service 2606:4700:3033::ac43:99ef:8443 · angulion.dev
2026-01-11 07:11
HTTP/1.1 522 <none> Date: Sun, 11 Jan 2026 07:11:44 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Expires: Thu, 01 Jan 1970 00:00:01 GMT Referrer-Policy: same-origin X-Frame-Options: SAMEORIGIN Server: cloudflare CF-RAY: 9bc299919e8bdcc5-FRA alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 2606:4700:3033::ac43:99ef:80 · angulion.dev
2026-01-11 07:11
HTTP/1.1 301 Moved Permanently
Date: Sun, 11 Jan 2026 07:11:23 GMT
Content-Length: 0
Connection: close
Location: https://angulion.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=CLeuFnFNP%2B0zMSoT4JG%2BmJ3PnoKlNPFDfu8LzudpHVjiYwwHS7oFxCOPXrMGStbN3xJG0z753idjqW76tgrIO5ZZJrjIn5e1QIt6pMfgBGcc7TBrfO8rWw%3D%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9bc2998b7b51377b-FRA
alt-svc: h3=":443"; ma=86400
Open service 2606:4700:3031::6815:cf0:443 · angulion.dev
2026-01-11 07:11
HTTP/1.1 200 OK
Date: Sun, 11 Jan 2026 07:11:24 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Age: 9397
Cache-Control: public,max-age=0,must-revalidate
cache-status: "Netlify Edge"; hit
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=YtN1M8cGPoXbROb9igLcbKzTDhzdItyqFXOYCaFKbfqiq7noEU7xroBWo6STXFbc9llqfqh9J29VYcQPKMRSaIPyt0VL25etz67itPswSjVjHIrAPK3YNQ%3D%3D"}]}
Server: cloudflare
strict-transport-security: max-age=31536000
vary: Accept-Encoding
x-nf-request-id: 01KENYADREEEFTA8ZCM5VGRDK7
cf-cache-status: DYNAMIC
CF-RAY: 9bc29991afdd9142-FRA
alt-svc: h3=":443"; ma=86400
Page title: Angulion Szkolenia
<!doctype html><html lang="pl"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta name="keywords" content="szkolenia, frontend, html, css, javascript, łódź, angular, angulion"/><meta name="author" content="Bartosz Wasilew"/><meta name="theme-color" content="#9A1663"><meta property="og:title" content="Angulion Szkolenia"><meta property="og:description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta property="og:type" content="website"><meta property="og:url" content="https://angulion.dev"><meta property="og:image" content="https://cdn.angulion.dev/images/live-courses-shot-cartoon-x800.webp"><meta property="og:image:alt" content="A tak sobie pracujemy..."><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://angulion.dev/"><meta property="twitter:title" content="Angulion Szkolenia"><meta property="twitter:description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta property="twitter:image" content="https://cdn.angulion.dev/images/live-courses-shot-cartoon-x800.webp"><title>Angulion Szkolenia</title><link rel="stylesheet" href="css/styles.base.css"><link rel="stylesheet" href="css/landing/landing.large.css"><link rel="stylesheet" href="css/landing/landing.mid.css" media="screen and (width > 768px) and (width <= 1024px)"><link rel="stylesheet" href="css/landing/landing.small.css" media="screen and (width <= 768px)"><link rel="icon" href="https://cdn.angulion.dev/images/favicon.ico" type="image/svg+xml"><link rel="apple-touch-icon" href="https://cdn.angulion.dev/images/favicon.ico"><link href="https://angulion.dev/" rel="canonical"><link rel="preconnect" href="https://cdn.angulion.dev" crossorigin><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Outfit:wght@100..900&display=swap" rel="stylesheet"><link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css"/><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "EducationalOrganization",
"name": "Angulion Szkolenia",
"url": "https://angulion.dev",
"logo": "https://cdn.angulion.dev/images/angulion-courses-logo.svg",
"description": "Szkolimy z Frontend i Angular w Łodzi. Bez spiny, z humorem.",
"sameAs": [
"https://instagram.com/angulion_szkolenia"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "Ul. Narutowicza 40/1",
"addressLocality": "Łódź",
"postalCode": "90-135",
"addressCountry": "PL"
},
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+48 781 027 850",
"contactType": "customer service",
"email": "office@angulion.dev",
"areaServed": "PL",
"availableLanguage": [
"Polish",
"English"
]
},
"offers": {
"@type": "OfferCatalog",
"name": "Co dla Ciebie mamy?",
"itemListElement": [
{
"@type": "Course",
"name": "Wszechstronny Frontend",
"description": "Naucz się, jak tworzyć nowoczesne strony, które wyglądają świetnie, są dostępne dla każdego i pozycjonują się w wynikach wyszukiwania.",
"url": "https://angulion.dev/wszechstronny-frontend",
"provider": {
"@type": "EducationalOrganization",
"name": "Angulion Szkolenia",
"url": "https://angulion.dev"
}
Open service 2606:4700:3031::6815:cf0:8443 · angulion.dev
2026-01-11 07:11
HTTP/1.1 522 <none> Date: Sun, 11 Jan 2026 07:11:43 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Expires: Thu, 01 Jan 1970 00:00:01 GMT Referrer-Policy: same-origin X-Frame-Options: SAMEORIGIN Server: cloudflare CF-RAY: 9bc299919e1ad288-FRA alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 2606:4700:3031::6815:cf0:80 · angulion.dev
2026-01-11 07:11
HTTP/1.1 301 Moved Permanently
Date: Sun, 11 Jan 2026 07:11:23 GMT
Content-Length: 0
Connection: close
Location: https://angulion.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=EDlw%2FVY9UFTZE5M2y0sqwouifF8LRNwIT21pFbFmapkyJnzAv9WZwSwGtfyz92Ltp%2Bck52Iq7ISov5cvdfFBTvnT1s6djF7Tm9baRcn9BSkNVvI1cnWNxA%3D%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9bc2998b6b371917-FRA
alt-svc: h3=":443"; ma=86400
Open service 2606:4700:3033::ac43:99ef:443 · angulion.dev
2026-01-11 07:11
HTTP/1.1 200 OK
Date: Sun, 11 Jan 2026 07:11:24 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Age: 9396
Cache-Control: public,max-age=0,must-revalidate
cache-status: "Netlify Edge"; hit
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=GV1MUbmTWP2mXKyAMw4RNV9xnK5DJ5jV64AK1QJtDBHEY9R8zm3W5UzGXGGw87LNfAXX2lDghyn9OK0H3yixt94f3peC8U0FHDjo4oDBh2wXJz7rlPXVHQ%3D%3D"}]}
Server: cloudflare
strict-transport-security: max-age=31536000
vary: Accept-Encoding
x-nf-request-id: 01KENYADCPM2HJSX55YM3V0TH3
cf-cache-status: DYNAMIC
CF-RAY: 9bc2998e7ec8d365-FRA
alt-svc: h3=":443"; ma=86400
Page title: Angulion Szkolenia
<!doctype html><html lang="pl"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta name="keywords" content="szkolenia, frontend, html, css, javascript, łódź, angular, angulion"/><meta name="author" content="Bartosz Wasilew"/><meta name="theme-color" content="#9A1663"><meta property="og:title" content="Angulion Szkolenia"><meta property="og:description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta property="og:type" content="website"><meta property="og:url" content="https://angulion.dev"><meta property="og:image" content="https://cdn.angulion.dev/images/live-courses-shot-cartoon-x800.webp"><meta property="og:image:alt" content="A tak sobie pracujemy..."><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://angulion.dev/"><meta property="twitter:title" content="Angulion Szkolenia"><meta property="twitter:description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta property="twitter:image" content="https://cdn.angulion.dev/images/live-courses-shot-cartoon-x800.webp"><title>Angulion Szkolenia</title><link rel="stylesheet" href="css/styles.base.css"><link rel="stylesheet" href="css/landing/landing.large.css"><link rel="stylesheet" href="css/landing/landing.mid.css" media="screen and (width > 768px) and (width <= 1024px)"><link rel="stylesheet" href="css/landing/landing.small.css" media="screen and (width <= 768px)"><link rel="icon" href="https://cdn.angulion.dev/images/favicon.ico" type="image/svg+xml"><link rel="apple-touch-icon" href="https://cdn.angulion.dev/images/favicon.ico"><link href="https://angulion.dev/" rel="canonical"><link rel="preconnect" href="https://cdn.angulion.dev" crossorigin><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Outfit:wght@100..900&display=swap" rel="stylesheet"><link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css"/><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "EducationalOrganization",
"name": "Angulion Szkolenia",
"url": "https://angulion.dev",
"logo": "https://cdn.angulion.dev/images/angulion-courses-logo.svg",
"description": "Szkolimy z Frontend i Angular w Łodzi. Bez spiny, z humorem.",
"sameAs": [
"https://instagram.com/angulion_szkolenia"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "Ul. Narutowicza 40/1",
"addressLocality": "Łódź",
"postalCode": "90-135",
"addressCountry": "PL"
},
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+48 781 027 850",
"contactType": "customer service",
"email": "office@angulion.dev",
"areaServed": "PL",
"availableLanguage": [
"Polish",
"English"
]
},
"offers": {
"@type": "OfferCatalog",
"name": "Co dla Ciebie mamy?",
"itemListElement": [
{
"@type": "Course",
"name": "Wszechstronny Frontend",
"description": "Naucz się, jak tworzyć nowoczesne strony, które wyglądają świetnie, są dostępne dla każdego i pozycjonują się w wynikach wyszukiwania.",
"url": "https://angulion.dev/wszechstronny-frontend",
"provider": {
"@type": "EducationalOrganization",
"name": "Angulion Szkolenia",
"url": "https://angulion.dev"
}
Open service 172.67.153.239:80 · angulion.dev
2026-01-11 07:11
HTTP/1.1 301 Moved Permanently
Date: Sun, 11 Jan 2026 07:11:22 GMT
Content-Length: 0
Connection: close
Location: https://angulion.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=fsCQXOW1G2mjkGnxGeEwVbpAnSW0gzQ9cgsG%2Bbdemck%2FrnFn72RNEc19lMh1nivI5Od3thCIMdWszeQBh9Bl6D7V6fguCf7pzRqa2w%3D%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9bc299871f0bd346-FRA
alt-svc: h3=":443"; ma=86400
Open service 104.21.12.240:80 · angulion.dev
2026-01-11 07:11
HTTP/1.1 301 Moved Permanently
Date: Sun, 11 Jan 2026 07:11:22 GMT
Content-Length: 0
Connection: close
Location: https://angulion.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=P9t%2Bz7PVdqD0Ksa4V8U2627uknddMc8sa1fltaFAD7rb1uBv5ukGDSJv64IztXQuPpGVX4FVkE%2FHy%2B9RnvLseQVN1GxLVFjaFhF%2FYg%3D%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9bc29987193fdbb5-FRA
alt-svc: h3=":443"; ma=86400
Open service 172.67.153.239:443 · angulion.dev
2026-01-11 07:11
HTTP/1.1 200 OK
Date: Sun, 11 Jan 2026 07:11:23 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Age: 0
Cache-Control: public,max-age=0,must-revalidate
cache-status: "Netlify Edge"; fwd=miss
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=iZ%2Fmmvh9gWa4a%2B9Sf450Gf%2BbYbSen7wViSXGTAcwWxA58D6M%2BlFiaETVsbU3xwoAPuLX04j7zTE9Z7XAWL%2FAqoxL3hcPU%2FWd%2F1oLKw%3D%3D"}]}
Server: cloudflare
strict-transport-security: max-age=31536000
vary: Accept-Encoding
x-nf-request-id: 01KENYAD05QNJK5S3NGWH4B7BC
cf-cache-status: DYNAMIC
CF-RAY: 9bc2998ccd8adbda-FRA
alt-svc: h3=":443"; ma=86400
Page title: Angulion Szkolenia
<!doctype html><html lang="pl"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta name="keywords" content="szkolenia, frontend, html, css, javascript, łódź, angular, angulion"/><meta name="author" content="Bartosz Wasilew"/><meta name="theme-color" content="#9A1663"><meta property="og:title" content="Angulion Szkolenia"><meta property="og:description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta property="og:type" content="website"><meta property="og:url" content="https://angulion.dev"><meta property="og:image" content="https://cdn.angulion.dev/images/live-courses-shot-cartoon-x800.webp"><meta property="og:image:alt" content="A tak sobie pracujemy..."><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://angulion.dev/"><meta property="twitter:title" content="Angulion Szkolenia"><meta property="twitter:description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta property="twitter:image" content="https://cdn.angulion.dev/images/live-courses-shot-cartoon-x800.webp"><title>Angulion Szkolenia</title><link rel="stylesheet" href="css/styles.base.css"><link rel="stylesheet" href="css/landing/landing.large.css"><link rel="stylesheet" href="css/landing/landing.mid.css" media="screen and (width > 768px) and (width <= 1024px)"><link rel="stylesheet" href="css/landing/landing.small.css" media="screen and (width <= 768px)"><link rel="icon" href="https://cdn.angulion.dev/images/favicon.ico" type="image/svg+xml"><link rel="apple-touch-icon" href="https://cdn.angulion.dev/images/favicon.ico"><link href="https://angulion.dev/" rel="canonical"><link rel="preconnect" href="https://cdn.angulion.dev" crossorigin><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Outfit:wght@100..900&display=swap" rel="stylesheet"><link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css"/><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "EducationalOrganization",
"name": "Angulion Szkolenia",
"url": "https://angulion.dev",
"logo": "https://cdn.angulion.dev/images/angulion-courses-logo.svg",
"description": "Szkolimy z Frontend i Angular w Łodzi. Bez spiny, z humorem.",
"sameAs": [
"https://instagram.com/angulion_szkolenia"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "Ul. Narutowicza 40/1",
"addressLocality": "Łódź",
"postalCode": "90-135",
"addressCountry": "PL"
},
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+48 781 027 850",
"contactType": "customer service",
"email": "office@angulion.dev",
"areaServed": "PL",
"availableLanguage": [
"Polish",
"English"
]
},
"offers": {
"@type": "OfferCatalog",
"name": "Co dla Ciebie mamy?",
"itemListElement": [
{
"@type": "Course",
"name": "Wszechstronny Frontend",
"description": "Naucz się, jak tworzyć nowoczesne strony, które wyglądają świetnie, są dostępne dla każdego i pozycjonują się w wynikach wyszukiwania.",
"url": "https://angulion.dev/wszechstronny-frontend",
"provider": {
"@type": "EducationalOrganization",
"name": "Angulion Szkolenia",
"url": "https://angulion.dev"
}
Open service 104.21.12.240:443 · angulion.dev
2026-01-11 07:11
HTTP/1.1 200 OK
Date: Sun, 11 Jan 2026 07:11:23 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Age: 0
Cache-Control: public,max-age=0,must-revalidate
cache-status: "Netlify Edge"; fwd=miss
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=Zc2%2BaPMkHgO7JjwjTB2FjOrUf%2FBHCkRoQj%2Fx%2BxK8qv%2B2rW1Fp1QwAgKOit%2B7oxNedY45z9Y2q18B3M9yskqCLAFMx%2BAoKhhmjKq37g%3D%3D"}]}
Server: cloudflare
strict-transport-security: max-age=31536000
vary: Accept-Encoding
x-nf-request-id: 01KENYAD49R2WMHVHQJAZ0S5E3
cf-cache-status: DYNAMIC
CF-RAY: 9bc2998ccaee30c4-FRA
alt-svc: h3=":443"; ma=86400
Page title: Angulion Szkolenia
<!doctype html><html lang="pl"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta name="keywords" content="szkolenia, frontend, html, css, javascript, łódź, angular, angulion"/><meta name="author" content="Bartosz Wasilew"/><meta name="theme-color" content="#9A1663"><meta property="og:title" content="Angulion Szkolenia"><meta property="og:description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta property="og:type" content="website"><meta property="og:url" content="https://angulion.dev"><meta property="og:image" content="https://cdn.angulion.dev/images/live-courses-shot-cartoon-x800.webp"><meta property="og:image:alt" content="A tak sobie pracujemy..."><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://angulion.dev/"><meta property="twitter:title" content="Angulion Szkolenia"><meta property="twitter:description" content="Najbardziej autentyczne szkolenia Frontend i Angular w Łodzi. Ostatnio wydaliśmy Wszechstronny Frontend - serdecznie zapraszamy."><meta property="twitter:image" content="https://cdn.angulion.dev/images/live-courses-shot-cartoon-x800.webp"><title>Angulion Szkolenia</title><link rel="stylesheet" href="css/styles.base.css"><link rel="stylesheet" href="css/landing/landing.large.css"><link rel="stylesheet" href="css/landing/landing.mid.css" media="screen and (width > 768px) and (width <= 1024px)"><link rel="stylesheet" href="css/landing/landing.small.css" media="screen and (width <= 768px)"><link rel="icon" href="https://cdn.angulion.dev/images/favicon.ico" type="image/svg+xml"><link rel="apple-touch-icon" href="https://cdn.angulion.dev/images/favicon.ico"><link href="https://angulion.dev/" rel="canonical"><link rel="preconnect" href="https://cdn.angulion.dev" crossorigin><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Outfit:wght@100..900&display=swap" rel="stylesheet"><link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css"/><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "EducationalOrganization",
"name": "Angulion Szkolenia",
"url": "https://angulion.dev",
"logo": "https://cdn.angulion.dev/images/angulion-courses-logo.svg",
"description": "Szkolimy z Frontend i Angular w Łodzi. Bez spiny, z humorem.",
"sameAs": [
"https://instagram.com/angulion_szkolenia"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "Ul. Narutowicza 40/1",
"addressLocality": "Łódź",
"postalCode": "90-135",
"addressCountry": "PL"
},
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+48 781 027 850",
"contactType": "customer service",
"email": "office@angulion.dev",
"areaServed": "PL",
"availableLanguage": [
"Polish",
"English"
]
},
"offers": {
"@type": "OfferCatalog",
"name": "Co dla Ciebie mamy?",
"itemListElement": [
{
"@type": "Course",
"name": "Wszechstronny Frontend",
"description": "Naucz się, jak tworzyć nowoczesne strony, które wyglądają świetnie, są dostępne dla każdego i pozycjonują się w wynikach wyszukiwania.",
"url": "https://angulion.dev/wszechstronny-frontend",
"provider": {
"@type": "EducationalOrganization",
"name": "Angulion Szkolenia",
"url": "https://angulion.dev"
}
Open service 172.67.153.239:8443 · angulion.dev
2026-01-11 07:11
HTTP/1.1 522 <none> Date: Sun, 11 Jan 2026 07:11:42 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Expires: Thu, 01 Jan 1970 00:00:01 GMT Referrer-Policy: same-origin X-Frame-Options: SAMEORIGIN Server: cloudflare CF-RAY: 9bc2998cbc72e459-AMS alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 104.21.12.240:8443 · angulion.dev
2026-01-11 07:11
HTTP/1.1 522 <none> Date: Sun, 11 Jan 2026 07:11:42 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Expires: Thu, 01 Jan 1970 00:00:01 GMT Referrer-Policy: same-origin X-Frame-Options: SAMEORIGIN Server: cloudflare CF-RAY: 9bc2998bdaf3d2be-FRA alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 2606:4700:3033::ac43:99ef:80 · blog.angulion.dev
2026-01-10 19:53
HTTP/1.1 301 Moved Permanently
Date: Sat, 10 Jan 2026 19:53:28 GMT
Content-Length: 0
Connection: close
Location: https://blog.angulion.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=GAFJy%2BZ3p2NOVZMm9Z%2FhiMnPpYyTDsrUWkPdIkLQJ2cX4f724kUS15rjvitk0IlUePf7yMW4ZSLflghXhwDx4j7UZGvwWsW395M4VjhEwajSWW2cIIcqfWfxavMf"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server-Timing: cfEdge;dur=9,cfOrigin;dur=0
Server: cloudflare
CF-RAY: 9bbeb881cacd11fc-YYZ
alt-svc: h3=":443"; ma=86400
Open service 2606:4700:3031::6815:cf0:8443 · blog.angulion.dev
2026-01-10 19:53
Open service 2606:4700:3033::ac43:99ef:443 · blog.angulion.dev
2026-01-10 19:53
HTTP/1.1 200 OK
Date: Sat, 10 Jan 2026 19:53:29 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Age: 0
Cache-Control: public,max-age=0,must-revalidate
cache-status: "Netlify Edge"; fwd=miss
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=ds9WuvtEvw6gp9XK98Iuc8tZzq2ZwQqK%2BzOEOYfxDRSYD0JoxaQ69ul04Z79URJi%2BUmGIWsmz9XZO2xLOwLBXLkEsxFlfk83Iup69ncdTS02hypmJH5dgb%2FHV07K"}]}
Server: cloudflare
strict-transport-security: max-age=31536000
vary: Accept-Encoding
x-nf-request-id: 01KEMQH3TRHTRPS2NSB931H6SV
cf-cache-status: DYNAMIC
CF-RAY: 9bbeb8847da830cf-FRA
alt-svc: h3=":443"; ma=86400
Page title: Angulion Blog
<!DOCTYPE html><html data-astro-cid-j7pv25f6 lang=en><head><meta charset=utf-8><meta content="width=device-width,initial-scale=1" name=viewport><link href=/favicon.png rel=icon type=image/png><link href=/sitemap-index.xml rel=sitemap><meta content="Astro v4.4.9" name=generator><link href=https://blog.angulion.dev/ rel=canonical><title>Angulion Blog</title><meta content="Angulion Blog" name=title><meta content="The most natural Angular & Frontend Blog" name=description><meta content="angulion, angulion blog, angular, frontend, typescript, javascript, blog" name=keywords><meta content="Bartosz Wasilew" name=author><meta content=website property=og:type><meta content=https://blog.angulion.dev/ property=og:url><meta content="Angulion Blog" property=og:title><meta content="The most natural Angular & Frontend Blog" property=og:description><meta content=https://blog.angulion.dev/ property=og:image><meta content=summary_large_image property=twitter:card><meta content=https://blog.angulion.dev/ property=twitter:url><meta content="Angulion Blog" property=twitter:title><meta content="The most natural Angular & Frontend Blog" property=twitter:description><meta content=https://blog.angulion.dev/ property=twitter:image><script id=Cookiebot src=https://consent.cookiebot.com/uc.js data-blockingmode=auto data-cbid=74122c05-6be4-4efb-b555-0e7f0dd8d0b2></script><script id=CookieDeclaration src=https://consent.cookiebot.com/74122c05-6be4-4efb-b555-0e7f0dd8d0b2/cd.js async></script><script type=text/partytown>!(function (t, e) {
var o, n, p, r;
e.__SV ||
((window.posthog = e),
(e._i = []),
(e.init = function (i, s, a) {
function g(t, e) {
var o = e.split(".");
2 == o.length && ((t = t[o[0]]), (e = o[1])),
(t[e] = function () {
t.push([e].concat(Array.prototype.slice.call(arguments, 0)));
});
}
((p = t.createElement("script")).type = "text/javascript"),
(p.async = !0),
(p.src = s.api_host + "/static/array.js"),
(r = t.getElementsByTagName("script")[0]).parentNode.insertBefore(
p,
r
);
var u = e;
for (
void 0 !== a ? (u = e[a] = []) : (a = "posthog"),
u.people = u.people || [],
u.toString = function (t) {
var e = "posthog";
return (
"posthog" !== a && (e += "." + a), t || (e += " (stub)"), e
);
},
u.people.toString = function () {
return u.toString(1) + ".people (stub)";
},
o =
"capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags".split(
" "
),
n = 0;
n < o.length;
n++
)
g(u, o[n]);
e._i.push([i, s, a]);
}),
(e.__SV = 1));
})(document, window.posthog || []);
posthog.init("phc_mhkFeVpp5lxOsefr2qaJVPXQlpXkfgPgG5RTHTRKy4M", {
api_host: "https://eu.posthog.com",
});</script><link href=/_astro/index.Cemx-AD-.css rel=stylesheet /><style>a[data-astro-cid-eimmu3lg]{display:inline-block;text-decoration:none}a[data-astro-cid-eimmu3lg].active{font-weight:bolder;background:#f0fff0;border-radius:.3em;color:#9a1663;padding:.3em;text-decoration:none}.post[data-astro-cid-rmwam725]{background:linear-gradient(90deg,#e0144c,#9a1663 35%)}.intro[data-astro-cid-j7pv25f6]{background:linear-gradient(90deg,#32144c 5%,#9a1663 35%);-webkit-clip-path:polygon(0 0,100% 0,100% 85%,0% 100%);clip-path:polygon(0 0,100% 0,100% 85%,0% 100%)}</style><script>!function(t,e,n,r){(window.crossOriginIsolated||navigator.serviceWorker)&&((r=t[e]=Object.assign(t[e]||{},{lib:"/~partytown/",debug:!1}))[n]=(r[n]||[]).concat(["dataLayer.push"]))}(window,"partytown","forward"),function(t,e,n,r,i,o,a,s,d,c,l,p){function u(){p||(p=1,"/"==(a=(o.lib||"/~partytown/")+(o.debug?"debug/":""))[0
Open service 104.21.12.240:80 · blog.angulion.dev
2026-01-10 19:53
HTTP/1.1 301 Moved Permanently
Date: Sat, 10 Jan 2026 19:53:28 GMT
Content-Length: 0
Connection: close
Location: https://blog.angulion.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=vHl0dAs%2BrSIamjXpJvih0%2FaAugBdLgNtMfFCGu5ts%2BpaZEkbs%2Fs%2BH5g7Ar%2B813kcTii1iDyNXOopVX4AKzW42Xn4GvIopzgOK1J%2FYZEWXlkF"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9bbeb8810bdcfe50-FRA
alt-svc: h3=":443"; ma=86400
Open service 2606:4700:3033::ac43:99ef:8443 · blog.angulion.dev
2026-01-10 19:53
Open service 2606:4700:3031::6815:cf0:443 · blog.angulion.dev
2026-01-10 19:53
HTTP/1.1 200 OK
Date: Sat, 10 Jan 2026 19:53:29 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Age: 0
Cache-Control: public,max-age=0,must-revalidate
cache-status: "Netlify Edge"; fwd=miss
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=VrdFc%2B%2BPmtdx%2Bjlv9ae22gi%2FQoxelNmLMDsGmE83LcwenKV8WEiQgK6tfKEvPPqlWR4nL0sE83sYuReIolpiCa6kpNrCX0GeuqPf2opofZfX5kysZT%2FkMk%2F2m%2FVW"}]}
Server: cloudflare
strict-transport-security: max-age=31536000
vary: Accept-Encoding
x-nf-request-id: 01KEMQH3WQNMWMJEX3ME2G9DRD
cf-cache-status: DYNAMIC
CF-RAY: 9bbeb8849c338895-LHR
alt-svc: h3=":443"; ma=86400
Page title: Angulion Blog
<!DOCTYPE html><html data-astro-cid-j7pv25f6 lang=en><head><meta charset=utf-8><meta content="width=device-width,initial-scale=1" name=viewport><link href=/favicon.png rel=icon type=image/png><link href=/sitemap-index.xml rel=sitemap><meta content="Astro v4.4.9" name=generator><link href=https://blog.angulion.dev/ rel=canonical><title>Angulion Blog</title><meta content="Angulion Blog" name=title><meta content="The most natural Angular & Frontend Blog" name=description><meta content="angulion, angulion blog, angular, frontend, typescript, javascript, blog" name=keywords><meta content="Bartosz Wasilew" name=author><meta content=website property=og:type><meta content=https://blog.angulion.dev/ property=og:url><meta content="Angulion Blog" property=og:title><meta content="The most natural Angular & Frontend Blog" property=og:description><meta content=https://blog.angulion.dev/ property=og:image><meta content=summary_large_image property=twitter:card><meta content=https://blog.angulion.dev/ property=twitter:url><meta content="Angulion Blog" property=twitter:title><meta content="The most natural Angular & Frontend Blog" property=twitter:description><meta content=https://blog.angulion.dev/ property=twitter:image><script id=Cookiebot src=https://consent.cookiebot.com/uc.js data-blockingmode=auto data-cbid=74122c05-6be4-4efb-b555-0e7f0dd8d0b2></script><script id=CookieDeclaration src=https://consent.cookiebot.com/74122c05-6be4-4efb-b555-0e7f0dd8d0b2/cd.js async></script><script type=text/partytown>!(function (t, e) {
var o, n, p, r;
e.__SV ||
((window.posthog = e),
(e._i = []),
(e.init = function (i, s, a) {
function g(t, e) {
var o = e.split(".");
2 == o.length && ((t = t[o[0]]), (e = o[1])),
(t[e] = function () {
t.push([e].concat(Array.prototype.slice.call(arguments, 0)));
});
}
((p = t.createElement("script")).type = "text/javascript"),
(p.async = !0),
(p.src = s.api_host + "/static/array.js"),
(r = t.getElementsByTagName("script")[0]).parentNode.insertBefore(
p,
r
);
var u = e;
for (
void 0 !== a ? (u = e[a] = []) : (a = "posthog"),
u.people = u.people || [],
u.toString = function (t) {
var e = "posthog";
return (
"posthog" !== a && (e += "." + a), t || (e += " (stub)"), e
);
},
u.people.toString = function () {
return u.toString(1) + ".people (stub)";
},
o =
"capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags".split(
" "
),
n = 0;
n < o.length;
n++
)
g(u, o[n]);
e._i.push([i, s, a]);
}),
(e.__SV = 1));
})(document, window.posthog || []);
posthog.init("phc_mhkFeVpp5lxOsefr2qaJVPXQlpXkfgPgG5RTHTRKy4M", {
api_host: "https://eu.posthog.com",
});</script><link href=/_astro/index.Cemx-AD-.css rel=stylesheet /><style>a[data-astro-cid-eimmu3lg]{display:inline-block;text-decoration:none}a[data-astro-cid-eimmu3lg].active{font-weight:bolder;background:#f0fff0;border-radius:.3em;color:#9a1663;padding:.3em;text-decoration:none}.post[data-astro-cid-rmwam725]{background:linear-gradient(90deg,#e0144c,#9a1663 35%)}.intro[data-astro-cid-j7pv25f6]{background:linear-gradient(90deg,#32144c 5%,#9a1663 35%);-webkit-clip-path:polygon(0 0,100% 0,100% 85%,0% 100%);clip-path:polygon(0 0,100% 0,100% 85%,0% 100%)}</style><script>!function(t,e,n,r){(window.crossOriginIsolated||navigator.serviceWorker)&&((r=t[e]=Object.assign(t[e]||{},{lib:"/~partytown/",debug:!1}))[n]=(r[n]||[]).concat(["dataLayer.push"]))}(window,"partytown","forward"),function(t,e,n,r,i,o,a,s,d,c,l,p){function u(){p||(p=1,"/"==(a=(o.lib||"/~partytown/")+(o.debug?"debug/":""))[0
Open service 172.67.153.239:80 · blog.angulion.dev
2026-01-10 19:53
HTTP/1.1 301 Moved Permanently
Date: Sat, 10 Jan 2026 19:53:28 GMT
Content-Length: 0
Connection: close
Location: https://blog.angulion.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=XCLjBEa8wyR6Oc%2F9CSSCmjYd7td53lfPU304r9BiaUl2PhTDhOwa8%2BzErAwEdjFlCZnFBM7zDrRmU%2BvMtD8k707lwAM11ktJRjdtRinrvw%3D%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9bbeb8809f8e3da9-LHR
alt-svc: h3=":443"; ma=86400
Open service 172.67.153.239:443 · blog.angulion.dev
2026-01-10 19:53
HTTP/1.1 200 OK
Date: Sat, 10 Jan 2026 19:53:29 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Age: 0
Cache-Control: public,max-age=0,must-revalidate
cache-status: "Netlify Edge"; fwd=miss
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=GjlO%2BbVCG6kq6PyOkq2DVk6BxF93TZ%2Fo9Zt5t%2Bc1LvOA2vuT5duGQc7Y37eSFWJfU2xZ1JUlae6C2eIsWK5YdaHwYYSLqd3mMIPcO76lTDSX"}]}
Server: cloudflare
strict-transport-security: max-age=31536000
vary: Accept-Encoding
x-nf-request-id: 01KEMQH3W2MEBM8VCZYCEWG3PW
cf-cache-status: DYNAMIC
CF-RAY: 9bbeb8849b32873a-LHR
alt-svc: h3=":443"; ma=86400
Page title: Angulion Blog
<!DOCTYPE html><html data-astro-cid-j7pv25f6 lang=en><head><meta charset=utf-8><meta content="width=device-width,initial-scale=1" name=viewport><link href=/favicon.png rel=icon type=image/png><link href=/sitemap-index.xml rel=sitemap><meta content="Astro v4.4.9" name=generator><link href=https://blog.angulion.dev/ rel=canonical><title>Angulion Blog</title><meta content="Angulion Blog" name=title><meta content="The most natural Angular & Frontend Blog" name=description><meta content="angulion, angulion blog, angular, frontend, typescript, javascript, blog" name=keywords><meta content="Bartosz Wasilew" name=author><meta content=website property=og:type><meta content=https://blog.angulion.dev/ property=og:url><meta content="Angulion Blog" property=og:title><meta content="The most natural Angular & Frontend Blog" property=og:description><meta content=https://blog.angulion.dev/ property=og:image><meta content=summary_large_image property=twitter:card><meta content=https://blog.angulion.dev/ property=twitter:url><meta content="Angulion Blog" property=twitter:title><meta content="The most natural Angular & Frontend Blog" property=twitter:description><meta content=https://blog.angulion.dev/ property=twitter:image><script id=Cookiebot src=https://consent.cookiebot.com/uc.js data-blockingmode=auto data-cbid=74122c05-6be4-4efb-b555-0e7f0dd8d0b2></script><script id=CookieDeclaration src=https://consent.cookiebot.com/74122c05-6be4-4efb-b555-0e7f0dd8d0b2/cd.js async></script><script type=text/partytown>!(function (t, e) {
var o, n, p, r;
e.__SV ||
((window.posthog = e),
(e._i = []),
(e.init = function (i, s, a) {
function g(t, e) {
var o = e.split(".");
2 == o.length && ((t = t[o[0]]), (e = o[1])),
(t[e] = function () {
t.push([e].concat(Array.prototype.slice.call(arguments, 0)));
});
}
((p = t.createElement("script")).type = "text/javascript"),
(p.async = !0),
(p.src = s.api_host + "/static/array.js"),
(r = t.getElementsByTagName("script")[0]).parentNode.insertBefore(
p,
r
);
var u = e;
for (
void 0 !== a ? (u = e[a] = []) : (a = "posthog"),
u.people = u.people || [],
u.toString = function (t) {
var e = "posthog";
return (
"posthog" !== a && (e += "." + a), t || (e += " (stub)"), e
);
},
u.people.toString = function () {
return u.toString(1) + ".people (stub)";
},
o =
"capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags".split(
" "
),
n = 0;
n < o.length;
n++
)
g(u, o[n]);
e._i.push([i, s, a]);
}),
(e.__SV = 1));
})(document, window.posthog || []);
posthog.init("phc_mhkFeVpp5lxOsefr2qaJVPXQlpXkfgPgG5RTHTRKy4M", {
api_host: "https://eu.posthog.com",
});</script><link href=/_astro/index.Cemx-AD-.css rel=stylesheet /><style>a[data-astro-cid-eimmu3lg]{display:inline-block;text-decoration:none}a[data-astro-cid-eimmu3lg].active{font-weight:bolder;background:#f0fff0;border-radius:.3em;color:#9a1663;padding:.3em;text-decoration:none}.post[data-astro-cid-rmwam725]{background:linear-gradient(90deg,#e0144c,#9a1663 35%)}.intro[data-astro-cid-j7pv25f6]{background:linear-gradient(90deg,#32144c 5%,#9a1663 35%);-webkit-clip-path:polygon(0 0,100% 0,100% 85%,0% 100%);clip-path:polygon(0 0,100% 0,100% 85%,0% 100%)}</style><script>!function(t,e,n,r){(window.crossOriginIsolated||navigator.serviceWorker)&&((r=t[e]=Object.assign(t[e]||{},{lib:"/~partytown/",debug:!1}))[n]=(r[n]||[]).concat(["dataLayer.push"]))}(window,"partytown","forward"),function(t,e,n,r,i,o,a,s,d,c,l,p){function u(){p||(p=1,"/"==(a=(o.lib||"/~partytown/")+(o.debug?"debug/":""))[0
Open service 104.21.12.240:443 · blog.angulion.dev
2026-01-10 19:53
HTTP/1.1 200 OK
Date: Sat, 10 Jan 2026 19:53:29 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Age: 4
Cache-Control: public,max-age=0,must-revalidate
cache-status: "Netlify Edge"; hit
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=6weSrJNQ56sG27hrokBMOGtWW8Tly7AJUMZPbceJqj65VK6xK4vfu3C5EYwE1LeRLrAlYV7RAHdUvFtn7Wa7Xe5D3LxNtQWayCnU9yKAb5E%2B"}]}
Server: cloudflare
strict-transport-security: max-age=31536000
vary: Accept-Encoding
x-nf-request-id: 01KEMQH3QMJNJRRKK707KHJG74
cf-cache-status: DYNAMIC
CF-RAY: 9bbeb8847b2066be-AMS
alt-svc: h3=":443"; ma=86400
Page title: Angulion Blog
<!DOCTYPE html><html data-astro-cid-j7pv25f6 lang=en><head><meta charset=utf-8><meta content="width=device-width,initial-scale=1" name=viewport><link href=/favicon.png rel=icon type=image/png><link href=/sitemap-index.xml rel=sitemap><meta content="Astro v4.4.9" name=generator><link href=https://blog.angulion.dev/ rel=canonical><title>Angulion Blog</title><meta content="Angulion Blog" name=title><meta content="The most natural Angular & Frontend Blog" name=description><meta content="angulion, angulion blog, angular, frontend, typescript, javascript, blog" name=keywords><meta content="Bartosz Wasilew" name=author><meta content=website property=og:type><meta content=https://blog.angulion.dev/ property=og:url><meta content="Angulion Blog" property=og:title><meta content="The most natural Angular & Frontend Blog" property=og:description><meta content=https://blog.angulion.dev/ property=og:image><meta content=summary_large_image property=twitter:card><meta content=https://blog.angulion.dev/ property=twitter:url><meta content="Angulion Blog" property=twitter:title><meta content="The most natural Angular & Frontend Blog" property=twitter:description><meta content=https://blog.angulion.dev/ property=twitter:image><script id=Cookiebot src=https://consent.cookiebot.com/uc.js data-blockingmode=auto data-cbid=74122c05-6be4-4efb-b555-0e7f0dd8d0b2></script><script id=CookieDeclaration src=https://consent.cookiebot.com/74122c05-6be4-4efb-b555-0e7f0dd8d0b2/cd.js async></script><script type=text/partytown>!(function (t, e) {
var o, n, p, r;
e.__SV ||
((window.posthog = e),
(e._i = []),
(e.init = function (i, s, a) {
function g(t, e) {
var o = e.split(".");
2 == o.length && ((t = t[o[0]]), (e = o[1])),
(t[e] = function () {
t.push([e].concat(Array.prototype.slice.call(arguments, 0)));
});
}
((p = t.createElement("script")).type = "text/javascript"),
(p.async = !0),
(p.src = s.api_host + "/static/array.js"),
(r = t.getElementsByTagName("script")[0]).parentNode.insertBefore(
p,
r
);
var u = e;
for (
void 0 !== a ? (u = e[a] = []) : (a = "posthog"),
u.people = u.people || [],
u.toString = function (t) {
var e = "posthog";
return (
"posthog" !== a && (e += "." + a), t || (e += " (stub)"), e
);
},
u.people.toString = function () {
return u.toString(1) + ".people (stub)";
},
o =
"capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags".split(
" "
),
n = 0;
n < o.length;
n++
)
g(u, o[n]);
e._i.push([i, s, a]);
}),
(e.__SV = 1));
})(document, window.posthog || []);
posthog.init("phc_mhkFeVpp5lxOsefr2qaJVPXQlpXkfgPgG5RTHTRKy4M", {
api_host: "https://eu.posthog.com",
});</script><link href=/_astro/index.Cemx-AD-.css rel=stylesheet /><style>a[data-astro-cid-eimmu3lg]{display:inline-block;text-decoration:none}a[data-astro-cid-eimmu3lg].active{font-weight:bolder;background:#f0fff0;border-radius:.3em;color:#9a1663;padding:.3em;text-decoration:none}.post[data-astro-cid-rmwam725]{background:linear-gradient(90deg,#e0144c,#9a1663 35%)}.intro[data-astro-cid-j7pv25f6]{background:linear-gradient(90deg,#32144c 5%,#9a1663 35%);-webkit-clip-path:polygon(0 0,100% 0,100% 85%,0% 100%);clip-path:polygon(0 0,100% 0,100% 85%,0% 100%)}</style><script>!function(t,e,n,r){(window.crossOriginIsolated||navigator.serviceWorker)&&((r=t[e]=Object.assign(t[e]||{},{lib:"/~partytown/",debug:!1}))[n]=(r[n]||[]).concat(["dataLayer.push"]))}(window,"partytown","forward"),function(t,e,n,r,i,o,a,s,d,c,l,p){function u(){p||(p=1,"/"==(a=(o.lib||"/~partytown/")+(o.debug?"debug/":""))[0
Open service 2606:4700:3031::6815:cf0:80 · blog.angulion.dev
2026-01-10 19:53
HTTP/1.1 301 Moved Permanently
Date: Sat, 10 Jan 2026 19:53:28 GMT
Content-Length: 0
Connection: close
Location: https://blog.angulion.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=Oa7hjB4MnrXuTAhAyzqNB5G2sKibApuNICHo3zQTu7k0C6O%2FdraHOHVLpnjuK%2B8DoTrB1qmHRrNhcr9mShcxg%2Fv0s8A3CnrX996appvzZ1XyNwMrbfqh3FGGMut5"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
CF-RAY: 9bbeb8807923777a-LHR
alt-svc: h3=":443"; ma=86400
Open service 104.21.12.240:8443 · blog.angulion.dev
2026-01-10 19:53
Open service 172.67.153.239:8443 · blog.angulion.dev
2026-01-10 19:53