cloudflare
tcp/443 tcp/80 tcp/8443
Open service 2a06:98c1:58::60:443 · froi.dev
2026-01-13 00:16
HTTP/1.1 200 OK
Date: Tue, 13 Jan 2026 00:16:58 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
CF-RAY: 9bd0b53c3f900c97-SJC
last-modified: Mon, 24 Nov 2025 00:48:35 GMT
x-rgw-object-type: Normal
x-amz-request-id: tx000001f09fb631486f6c0-0069636107-12ac58421-nyc3c
Cache-Control: public,max-age=10,s-maxage=86400
x-do-app-origin: 7a61d204-53ea-4dac-93d4-e8e37f8946d1
x-do-orig-status: 200
CF-Cache-Status: HIT
Age: 81442
Accept-Ranges: bytes
Set-Cookie: __cf_bm=GCSsL_19NKABtw7e5Ex0pcIYFSY07wdf6cave.Opws8-1768263418-1.0.1.1-ysGVg5LloCODZ3H.QJj2nRHcSE5X9msGkwFbu1Zrh7WP6y_OCUky7Qvrbv4eYk2qYqPuAVtXKmxj6dOK2TruIgznAVVWUtFyVvKMiF.JbGA; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.froi.dev; HttpOnly; Secure; SameSite=None
Server: cloudflare
alt-svc: h3=":443"; ma=86400
Page title:
Froilán Irizarry Rivera
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="Hugo 0.147.8">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="Froilán Irizarry Rivera">
<meta name="description" content="Software Engineering, Civic Tech, and Spanglish" />
<meta name="keywords" content="" />
<meta name="robots" content="noodp" />
<meta name="theme-color" content="" />
<meta name="fediverse:creator" content="@froi@mastodon.social">
<link rel="canonical" href="https://froi.dev/" />
<title>
Froilán Irizarry Rivera
</title>
<link rel="stylesheet" href="/main.min.e7ece113806522d618cf7fe04bb2f0f13c56ad499692093c55e78b6c85d53eb0.css" integrity="sha256-5+zhE4BlItYYz3/gS7Lw8TxWrUmWkgk8VeeLbIXVPrA=" crossorigin="anonymous">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="">
<link rel="shortcut icon" href="/favicon.ico">
<meta name="msapplication-TileColor" content="">
<meta itemprop="name" content="Froi.dev">
<meta itemprop="description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta itemprop="dateModified" content="2025-11-24T00:47:58+00:00">
<meta itemprop="image" content="https://froi.dev/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://froi.dev/">
<meta name="twitter:title" content="Froi.dev">
<meta name="twitter:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:url" content="https://froi.dev/">
<meta property="og:site_name" content="Froilán Irizarry Rivera">
<meta property="og:title" content="Froi.dev">
<meta property="og:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:locale" content="en">
<meta property="og:type" content="website">
<meta property="og:image" content="https://froi.dev/">
<link rel="alternate" type="application/rss+xml" href="https://froi.dev/index.xml" title="Froilán Irizarry Rivera" />
<script defer data-domain="froi.dev" src="https://plausible.io/js/script.js"></script>
</head>
<body class="">
<div class="container">
<header class="header">
<span class="header__inner">
<a href="/" style="text-decoration: none;">
<div class="logo">
<span class="logo__mark">></span>
<span class="logo__text ">
froi.dev</span>
<span class="logo__cursor" style=
"
">
</span>
</div>
</a>
<span class="header__right">
<nav class="menu">
<ul class="menu__inner"><li><a href="/about">About</a></li><li><a href="/posts">Blog</a></li><li><a href="/contact">Contact</a></li><li><a href="/privacy">Privacy</a></li><li><a href="/projects">Projects</a></li><li><a href="/talks">Talks</a></li>
</ul>
</nav>
<span class="menu-trigger">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none"/>
<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>
</svg>
</span>
<span class="theme-toggle not-selectable"><svg class="theme-toggler" width="24" height="24" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22 41C32.4934 41 41 32.4934 41 22C41 11.5066 32.4934 3 22
3C11.5066 3 3 11.5066 3 22C3 32.4934 11.5066 41 22 41ZM7 22C7
13.7157 13.7157 7 22 7V37C13.7157 37 7 30.2843 7 22Z"/>
</svg></s
Open service 172.66.0.96:8443 · froi.dev
2026-01-13 00:16
HTTP/1.1 522 Date: Tue, 13 Jan 2026 00:17:18 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close X-Frame-Options: SAMEORIGIN Referrer-Policy: same-origin 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 Server: cloudflare CF-RAY: 9bd0b541ec0ace58-SJC alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 2a06:98c1:3105::6812:2ae3:80 · beluga.froi.dev
2026-01-13 00:16
HTTP/1.1 403 Forbidden Date: Tue, 13 Jan 2026 00:16:58 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9bd0b53d2db36e7c-SIN x-amz-request-id: tx00000d4e3649ee63bddd1-0069658efa-1315c7fdb-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=J1WMMLeY7z92wSE7OGb6OVwWgclqnAqvfkph1JRrwGA-1768263418-1.0.1.1-L_c0ldqNfTyVTElWJ2LVhBPPRS4fblF9nCISbDbq1U1aypipZ11Ex_qXaAcQySNoTEo3X_pTipVKVXyZiYFSY3qQa6mI92xRqD2vjpkkjts; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.beluga.froi.dev; HttpOnly Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx00000d4e3649ee63bddd1-0069658efa-1315c7fdb-nyc3c</RequestId><HostId>1315c7fdb-nyc3c-nyc3-zg03</HostId></Error>
Open service 2a06:98c1:58::60:8443 · froi.dev
2026-01-13 00:16
HTTP/1.1 522 Date: Tue, 13 Jan 2026 00:17:18 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close X-Frame-Options: SAMEORIGIN Referrer-Policy: same-origin 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 Server: cloudflare CF-RAY: 9bd0b541dc0e9dfa-BLR alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 172.64.145.29:80 · beluga.froi.dev
2026-01-13 00:16
HTTP/1.1 403 Forbidden Date: Tue, 13 Jan 2026 00:16:58 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9bd0b53c08183451-SJC x-amz-request-id: tx000001338e064a9449fea-0069658efa-1315c7fdb-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=ekn52BjGsNvGOhYSclcLH43UYs8hB9XqpcFSLZITHoQ-1768263418-1.0.1.1-Gfm0.FzOWtIMI7x08BMV1W0tGMRSO57dQCHpBTm6GTe6tf9Pkn7cP7cd637w.rPwWGF3uqdUIDPktrAk7EV_TOHL2LtlGzBckWUTCuhHR5k; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.beluga.froi.dev; HttpOnly Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx000001338e064a9449fea-0069658efa-1315c7fdb-nyc3c</RequestId><HostId>1315c7fdb-nyc3c-nyc3-zg03</HostId></Error>
Open service 2a06:98c1:3105::6812:2ae3:443 · beluga.froi.dev
2026-01-13 00:16
HTTP/1.1 403 Forbidden Date: Tue, 13 Jan 2026 00:16:58 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9bd0b53b9e8de702-YYZ x-amz-request-id: tx0000090ccb00d99442c78-0069658efa-1315f13e6-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=naEiu8PT99liP7wN5QNs9ssiBB_fKdC3mO_7d9yrlvg-1768263418-1.0.1.1-6eh0Vs7gH7A2nBfEqRal4TILdeiL8t4GLlbh3IDQhVwYkhcrzVP3P24ycg8EmjHi6p4eM_goLqRIRzyd_OeUQ8XSeStBkPxeG45.wGxy5G4; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.beluga.froi.dev; HttpOnly; Secure; SameSite=None Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx0000090ccb00d99442c78-0069658efa-1315f13e6-nyc3c</RequestId><HostId>1315f13e6-nyc3c-nyc3-zg03</HostId></Error>
Open service 104.18.42.227:80 · beluga.froi.dev
2026-01-13 00:16
HTTP/1.1 403 Forbidden Date: Tue, 13 Jan 2026 00:16:58 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9bd0b53b6b2238ea-EWR x-amz-request-id: tx00000f9910ec35e802123-0069658efa-13171b1eb-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=CjhTRBPXAtdFKimcZAUcRDudkpNOXG2sdQa1ejNzveM-1768263418-1.0.1.1-vy54gCUwMMuXiAFFS12cOwz4BJ2vXzBjc2J7sxU3CZs8d4gxqECEa_XIHa514Nk2aQMnqtR8oZvyFq.DVUB2IKLcAgQ965aI9RTY5IasUdo; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.beluga.froi.dev; HttpOnly Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx00000f9910ec35e802123-0069658efa-13171b1eb-nyc3c</RequestId><HostId>13171b1eb-nyc3c-nyc3-zg03</HostId></Error>
Open service 2a06:98c1:3105::6812:2ae3:8443 · beluga.froi.dev
2026-01-13 00:16
Open service 2606:4700:7::60:80 · froi.dev
2026-01-13 00:16
HTTP/1.1 301 Moved Permanently Date: Tue, 13 Jan 2026 00:16:58 GMT Content-Type: text/html Content-Length: 167 Connection: close Cache-Control: max-age=3600 Expires: Tue, 13 Jan 2026 01:16:58 GMT Location: https://froi.dev/ Set-Cookie: __cf_bm=xVn9fi45RlKUkLdxVN9WRLRnH6fttD17oJL97J8a0sg-1768263418-1.0.1.1-q9.t33DkucAt_i4cmM06Kggpc5FdqxlN3zT8YQt4Q5b1UNg1DZJV_MentWdgoIIIAzT1PyfDZHPFxvbGJO8odYRC0yBPhAYw9oMYWTs4a2w; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.froi.dev; HttpOnly Server: cloudflare CF-RAY: 9bd0b53b2c74ac70-YYZ alt-svc: h3=":443"; ma=86400 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>cloudflare</center> </body> </html>
Open service 172.64.145.29:443 · beluga.froi.dev
2026-01-13 00:16
HTTP/1.1 403 Forbidden Date: Tue, 13 Jan 2026 00:16:58 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9bd0b53b7db46aeb-FRA x-amz-request-id: tx0000036a1f4f5ab2b6c72-0069658efa-1346312cb-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=Mx3xt2eOA2RHaAsJttK.Z7a3Tg_KgwVCOoJmzVeeQUE-1768263418-1.0.1.1-2hUEYUWBB2Msz.vUkkMswxte_lChbAp4VjLJOgTxzdB5LRNBLRij05XuEuI0L5otiTA7X5P8qhFq6cRhg9Vgg5iR1urz4VqVqbs4Bijn6o0; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.beluga.froi.dev; HttpOnly; Secure; SameSite=None Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx0000036a1f4f5ab2b6c72-0069658efa-1346312cb-nyc3c</RequestId><HostId>1346312cb-nyc3c-nyc3-zg03</HostId></Error>
Open service 2606:4700:7::60:8443 · froi.dev
2026-01-13 00:16
HTTP/1.1 522 Date: Tue, 13 Jan 2026 00:17:18 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close X-Frame-Options: SAMEORIGIN Referrer-Policy: same-origin 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 Server: cloudflare CF-RAY: 9bd0b5410d91b956-AMS alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 172.66.0.96:443 · froi.dev
2026-01-13 00:16
HTTP/1.1 200 OK
Date: Tue, 13 Jan 2026 00:16:58 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
CF-RAY: 9bd0b53aca483764-FRA
last-modified: Mon, 24 Nov 2025 00:48:35 GMT
x-rgw-object-type: Normal
x-amz-request-id: tx000001fcefb9f9c97fe87-006923ae27-12ac58421-nyc3c
Cache-Control: public,max-age=10,s-maxage=86400
x-do-app-origin: 7a61d204-53ea-4dac-93d4-e8e37f8946d1
x-do-orig-status: 200
CF-Cache-Status: HIT
Age: 25973
Accept-Ranges: bytes
Set-Cookie: __cf_bm=C2tD1kZinaNrNWDNbNDZNzVzrhYXQ1Bs0cCXYZJe_V8-1768263418-1.0.1.1-pkicqx2knDK_dvexMr7S5rCg_V5.DLtFvW81KsbX4mBMmkBZC3PgDqQMBd9KxLKrPuHrheVTR65.xvWsYLYJrORneX_9tWQtKKu5BoN8jeE; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.froi.dev; HttpOnly; Secure; SameSite=None
Server: cloudflare
alt-svc: h3=":443"; ma=86400
Page title:
Froilán Irizarry Rivera
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="Hugo 0.147.8">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="Froilán Irizarry Rivera">
<meta name="description" content="Software Engineering, Civic Tech, and Spanglish" />
<meta name="keywords" content="" />
<meta name="robots" content="noodp" />
<meta name="theme-color" content="" />
<meta name="fediverse:creator" content="@froi@mastodon.social">
<link rel="canonical" href="https://froi.dev/" />
<title>
Froilán Irizarry Rivera
</title>
<link rel="stylesheet" href="/main.min.e7ece113806522d618cf7fe04bb2f0f13c56ad499692093c55e78b6c85d53eb0.css" integrity="sha256-5+zhE4BlItYYz3/gS7Lw8TxWrUmWkgk8VeeLbIXVPrA=" crossorigin="anonymous">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="">
<link rel="shortcut icon" href="/favicon.ico">
<meta name="msapplication-TileColor" content="">
<meta itemprop="name" content="Froi.dev">
<meta itemprop="description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta itemprop="dateModified" content="2025-11-24T00:47:58+00:00">
<meta itemprop="image" content="https://froi.dev/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://froi.dev/">
<meta name="twitter:title" content="Froi.dev">
<meta name="twitter:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:url" content="https://froi.dev/">
<meta property="og:site_name" content="Froilán Irizarry Rivera">
<meta property="og:title" content="Froi.dev">
<meta property="og:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:locale" content="en">
<meta property="og:type" content="website">
<meta property="og:image" content="https://froi.dev/">
<link rel="alternate" type="application/rss+xml" href="https://froi.dev/index.xml" title="Froilán Irizarry Rivera" />
<script defer data-domain="froi.dev" src="https://plausible.io/js/script.js"></script>
</head>
<body class="">
<div class="container">
<header class="header">
<span class="header__inner">
<a href="/" style="text-decoration: none;">
<div class="logo">
<span class="logo__mark">></span>
<span class="logo__text ">
froi.dev</span>
<span class="logo__cursor" style=
"
">
</span>
</div>
</a>
<span class="header__right">
<nav class="menu">
<ul class="menu__inner"><li><a href="/about">About</a></li><li><a href="/posts">Blog</a></li><li><a href="/contact">Contact</a></li><li><a href="/privacy">Privacy</a></li><li><a href="/projects">Projects</a></li><li><a href="/talks">Talks</a></li>
</ul>
</nav>
<span class="menu-trigger">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none"/>
<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>
</svg>
</span>
<span class="theme-toggle not-selectable"><svg class="theme-toggler" width="24" height="24" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22 41C32.4934 41 41 32.4934 41 22C41 11.5066 32.4934 3 22
3C11.5066 3 3 11.5066 3 22C3 32.4934 11.5066 41 22 41ZM7 22C7
13.7157 13.7157 7 22 7V37C13.7157 37 7 30.2843 7 22Z"/>
</svg></s
Open service 172.64.145.29:8443 · beluga.froi.dev
2026-01-13 00:16
Open service 162.159.140.98:443 · froi.dev
2026-01-13 00:16
HTTP/1.1 200 OK
Date: Tue, 13 Jan 2026 00:16:58 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
CF-RAY: 9bd0b53abf25d9d8-FRA
last-modified: Mon, 24 Nov 2025 00:48:35 GMT
x-rgw-object-type: Normal
x-amz-request-id: tx000001fcefb9f9c97fe87-006923ae27-12ac58421-nyc3c
Cache-Control: public,max-age=10,s-maxage=86400
x-do-app-origin: 7a61d204-53ea-4dac-93d4-e8e37f8946d1
x-do-orig-status: 200
CF-Cache-Status: HIT
Age: 25973
Accept-Ranges: bytes
Set-Cookie: __cf_bm=SpmXc6AnjcrjI_0ABcFK9zrWYUFIDFfZLqJ22DH3ZIk-1768263418-1.0.1.1-rtGY8sj7dXOGFwtLjwGwbJ07EC9hcP4aZY70ePgPiXDMa2lXOmYAN2OuAjjLTVRWHTCZI8hKI07TFpXf7BePOSl0m3qmf8wQz476aQ3O.Y0; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.froi.dev; HttpOnly; Secure; SameSite=None
Server: cloudflare
alt-svc: h3=":443"; ma=86400
Page title:
Froilán Irizarry Rivera
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="Hugo 0.147.8">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="Froilán Irizarry Rivera">
<meta name="description" content="Software Engineering, Civic Tech, and Spanglish" />
<meta name="keywords" content="" />
<meta name="robots" content="noodp" />
<meta name="theme-color" content="" />
<meta name="fediverse:creator" content="@froi@mastodon.social">
<link rel="canonical" href="https://froi.dev/" />
<title>
Froilán Irizarry Rivera
</title>
<link rel="stylesheet" href="/main.min.e7ece113806522d618cf7fe04bb2f0f13c56ad499692093c55e78b6c85d53eb0.css" integrity="sha256-5+zhE4BlItYYz3/gS7Lw8TxWrUmWkgk8VeeLbIXVPrA=" crossorigin="anonymous">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="">
<link rel="shortcut icon" href="/favicon.ico">
<meta name="msapplication-TileColor" content="">
<meta itemprop="name" content="Froi.dev">
<meta itemprop="description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta itemprop="dateModified" content="2025-11-24T00:47:58+00:00">
<meta itemprop="image" content="https://froi.dev/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://froi.dev/">
<meta name="twitter:title" content="Froi.dev">
<meta name="twitter:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:url" content="https://froi.dev/">
<meta property="og:site_name" content="Froilán Irizarry Rivera">
<meta property="og:title" content="Froi.dev">
<meta property="og:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:locale" content="en">
<meta property="og:type" content="website">
<meta property="og:image" content="https://froi.dev/">
<link rel="alternate" type="application/rss+xml" href="https://froi.dev/index.xml" title="Froilán Irizarry Rivera" />
<script defer data-domain="froi.dev" src="https://plausible.io/js/script.js"></script>
</head>
<body class="">
<div class="container">
<header class="header">
<span class="header__inner">
<a href="/" style="text-decoration: none;">
<div class="logo">
<span class="logo__mark">></span>
<span class="logo__text ">
froi.dev</span>
<span class="logo__cursor" style=
"
">
</span>
</div>
</a>
<span class="header__right">
<nav class="menu">
<ul class="menu__inner"><li><a href="/about">About</a></li><li><a href="/posts">Blog</a></li><li><a href="/contact">Contact</a></li><li><a href="/privacy">Privacy</a></li><li><a href="/projects">Projects</a></li><li><a href="/talks">Talks</a></li>
</ul>
</nav>
<span class="menu-trigger">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none"/>
<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>
</svg>
</span>
<span class="theme-toggle not-selectable"><svg class="theme-toggler" width="24" height="24" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22 41C32.4934 41 41 32.4934 41 22C41 11.5066 32.4934 3 22
3C11.5066 3 3 11.5066 3 22C3 32.4934 11.5066 41 22 41ZM7 22C7
13.7157 13.7157 7 22 7V37C13.7157 37 7 30.2843 7 22Z"/>
</svg></s
Open service 2606:4700:4405::ac40:911d:80 · beluga.froi.dev
2026-01-13 00:16
HTTP/1.1 403 Forbidden Date: Tue, 13 Jan 2026 00:16:58 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9bd0b53b3815d37e-FRA x-amz-request-id: tx000005dbaa3b719bba048-0069658efa-1316e65dd-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=Tyh_1DjXR2N0f85jEzcQB6.E9JZhbsG8VpakGuV77t8-1768263418-1.0.1.1-Gwi11xLWUnijz0qiJuefqduAM8BoQpsYgV6WDr5Bp0opdxJrcoi0Egy8z5XFgUUqPkScU1sLw1Wxjdf9w.YJC8dJq7VfjdNC2BhrIxG74Ow; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.beluga.froi.dev; HttpOnly Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx000005dbaa3b719bba048-0069658efa-1316e65dd-nyc3c</RequestId><HostId>1316e65dd-nyc3c-nyc3-zg03</HostId></Error>
Open service 2606:4700:4405::ac40:911d:443 · beluga.froi.dev
2026-01-13 00:16
HTTP/1.1 403 Forbidden Date: Tue, 13 Jan 2026 00:16:58 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9bd0b53b28349bac-FRA x-amz-request-id: tx000005642390152519e02-0069658efa-1346312cb-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=Ltb1G8RuWP8KmpSS.O_Ja7dZO4TA_sL27uek8HrnmhQ-1768263418-1.0.1.1-aQFgYzhdEuzTBef9G9.GkqPbDQcvhVr1sgImvwhSfzx8xzFtiZ_F6C9kafH3_kffWHvm3SXo.mvJDls0q2fr0Py4gtEbRcXrSRwzNwf_LG8; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.beluga.froi.dev; HttpOnly; Secure; SameSite=None Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx000005642390152519e02-0069658efa-1346312cb-nyc3c</RequestId><HostId>1346312cb-nyc3c-nyc3-zg03</HostId></Error>
Open service 172.66.0.96:80 · froi.dev
2026-01-13 00:16
HTTP/1.1 301 Moved Permanently Date: Tue, 13 Jan 2026 00:16:58 GMT Content-Type: text/html Content-Length: 167 Connection: close Cache-Control: max-age=3600 Expires: Tue, 13 Jan 2026 01:16:58 GMT Location: https://froi.dev/ Set-Cookie: __cf_bm=cD8dMBwG9FKLebkFkuGTFdT4MotBZB3qJ726SfzrewA-1768263418-1.0.1.1-s.JaFwYyNuMz3e4dXOmL8PzXUTd5gjqnf94haCpegmcf5S1Yb4pQIOQ289IJqUrVam9V3dlqXTHsSj7EKiS5fpsXMEA4O1GVKjRLDP2hEHc; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.froi.dev; HttpOnly Server: cloudflare CF-RAY: 9bd0b53a9b587aea-EWR alt-svc: h3=":443"; ma=86400 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>cloudflare</center> </body> </html>
Open service 104.18.42.227:8443 · beluga.froi.dev
2026-01-13 00:16
Open service 2606:4700:4405::ac40:911d:8443 · beluga.froi.dev
2026-01-13 00:16
HTTP/1.1 522 Date: Tue, 13 Jan 2026 00:17:18 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close Strict-Transport-Security: max-age=15552000; includeSubDomains; preload X-Frame-Options: SAMEORIGIN Referrer-Policy: same-origin 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 Server: cloudflare CF-RAY: 9bd0b540ad971b03-LHR error code: 522
Open service 2606:4700:7::60:443 · froi.dev
2026-01-13 00:16
HTTP/1.1 200 OK
Date: Tue, 13 Jan 2026 00:16:58 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
CF-RAY: 9bd0b53a8d0bb687-YYZ
last-modified: Mon, 24 Nov 2025 00:48:35 GMT
x-rgw-object-type: Normal
x-amz-request-id: tx000001933e049d4c50ee4-006962d586-12ac58421-nyc3c
Cache-Control: public,max-age=10,s-maxage=86400
x-do-app-origin: 7a61d204-53ea-4dac-93d4-e8e37f8946d1
x-do-orig-status: 200
CF-Cache-Status: HIT
Age: 60960
Accept-Ranges: bytes
Set-Cookie: __cf_bm=SVfm5HfplMqkEe_EXTHTg9F9.bOyyU90R4lVgR4Gims-1768263418-1.0.1.1-mE5WHAMbqjC1ogCufyd7b_mKwtL.dNFD2OnHIB89XjJqnfoG8L4UTllWRWsrwh.s7WEgMS7xnUg.UmKKE1E.L68vdpAcCMnCEPlOSwDUbIA; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.froi.dev; HttpOnly; Secure; SameSite=None
Server: cloudflare
alt-svc: h3=":443"; ma=86400
Page title:
Froilán Irizarry Rivera
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="Hugo 0.147.8">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="Froilán Irizarry Rivera">
<meta name="description" content="Software Engineering, Civic Tech, and Spanglish" />
<meta name="keywords" content="" />
<meta name="robots" content="noodp" />
<meta name="theme-color" content="" />
<meta name="fediverse:creator" content="@froi@mastodon.social">
<link rel="canonical" href="https://froi.dev/" />
<title>
Froilán Irizarry Rivera
</title>
<link rel="stylesheet" href="/main.min.e7ece113806522d618cf7fe04bb2f0f13c56ad499692093c55e78b6c85d53eb0.css" integrity="sha256-5+zhE4BlItYYz3/gS7Lw8TxWrUmWkgk8VeeLbIXVPrA=" crossorigin="anonymous">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="">
<link rel="shortcut icon" href="/favicon.ico">
<meta name="msapplication-TileColor" content="">
<meta itemprop="name" content="Froi.dev">
<meta itemprop="description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta itemprop="dateModified" content="2025-11-24T00:47:58+00:00">
<meta itemprop="image" content="https://froi.dev/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://froi.dev/">
<meta name="twitter:title" content="Froi.dev">
<meta name="twitter:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:url" content="https://froi.dev/">
<meta property="og:site_name" content="Froilán Irizarry Rivera">
<meta property="og:title" content="Froi.dev">
<meta property="og:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:locale" content="en">
<meta property="og:type" content="website">
<meta property="og:image" content="https://froi.dev/">
<link rel="alternate" type="application/rss+xml" href="https://froi.dev/index.xml" title="Froilán Irizarry Rivera" />
<script defer data-domain="froi.dev" src="https://plausible.io/js/script.js"></script>
</head>
<body class="">
<div class="container">
<header class="header">
<span class="header__inner">
<a href="/" style="text-decoration: none;">
<div class="logo">
<span class="logo__mark">></span>
<span class="logo__text ">
froi.dev</span>
<span class="logo__cursor" style=
"
">
</span>
</div>
</a>
<span class="header__right">
<nav class="menu">
<ul class="menu__inner"><li><a href="/about">About</a></li><li><a href="/posts">Blog</a></li><li><a href="/contact">Contact</a></li><li><a href="/privacy">Privacy</a></li><li><a href="/projects">Projects</a></li><li><a href="/talks">Talks</a></li>
</ul>
</nav>
<span class="menu-trigger">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none"/>
<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>
</svg>
</span>
<span class="theme-toggle not-selectable"><svg class="theme-toggler" width="24" height="24" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22 41C32.4934 41 41 32.4934 41 22C41 11.5066 32.4934 3 22
3C11.5066 3 3 11.5066 3 22C3 32.4934 11.5066 41 22 41ZM7 22C7
13.7157 13.7157 7 22 7V37C13.7157 37 7 30.2843 7 22Z"/>
</svg></s
Open service 162.159.140.98:80 · froi.dev
2026-01-13 00:16
HTTP/1.1 301 Moved Permanently Date: Tue, 13 Jan 2026 00:16:57 GMT Content-Type: text/html Content-Length: 167 Connection: close Cache-Control: max-age=3600 Expires: Tue, 13 Jan 2026 01:16:57 GMT Location: https://froi.dev/ Set-Cookie: __cf_bm=Iymt2w0J9NHHWHHO8.UGy3K4hByVF99w8W.e8vtuLzI-1768263417-1.0.1.1-9NoHqJn6ajnoUFDhYtecdjrcbsfFhf0o5Z76XgaRh_KhJPS1wQ_ZjtAwHj8Tk2qbY6guT0.SeZp3gZwH9y4kXz6Wf05f6fM2FkaHwpi627E; path=/; expires=Tue, 13-Jan-26 00:46:57 GMT; domain=.froi.dev; HttpOnly Server: cloudflare CF-RAY: 9bd0b53a1eb8d34a-FRA alt-svc: h3=":443"; ma=86400 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>cloudflare</center> </body> </html>
Open service 2a06:98c1:58::60:80 · froi.dev
2026-01-13 00:16
HTTP/1.1 301 Moved Permanently Date: Tue, 13 Jan 2026 00:16:57 GMT Content-Type: text/html Content-Length: 167 Connection: close Cache-Control: max-age=3600 Expires: Tue, 13 Jan 2026 01:16:57 GMT Location: https://froi.dev/ Set-Cookie: __cf_bm=zSTHD0fwJlRr6aP1CW8DSiPVMPKObEsEFjbn21AuDHw-1768263417-1.0.1.1-VuecqCQAAGl.LAGXnkOilKTyfeu3KCy4N4TkLAD7XzV0mnzBTtoZUGAhZ4rOKmopJ8Xw41Gt9hk3C8jad6WiCqnUtWzgQGWYyW.etmmf_sI; path=/; expires=Tue, 13-Jan-26 00:46:57 GMT; domain=.froi.dev; HttpOnly Server: cloudflare CF-RAY: 9bd0b53a2da0b8e5-AMS alt-svc: h3=":443"; ma=86400 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>cloudflare</center> </body> </html>
Open service 162.159.140.98:8443 · froi.dev
2026-01-13 00:16
HTTP/1.1 522 Date: Tue, 13 Jan 2026 00:17:18 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close X-Frame-Options: SAMEORIGIN Referrer-Policy: same-origin 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 Server: cloudflare CF-RAY: 9bd0b5403ec73a8b-FRA alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 104.18.42.227:443 · beluga.froi.dev
2026-01-13 00:16
HTTP/1.1 403 Forbidden Date: Tue, 13 Jan 2026 00:16:58 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9bd0b53abebad358-FRA x-amz-request-id: tx000008193fc9aaf0c649d-0069658efa-1316f0b28-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=Iq5wM3K.cAYRlzzmspSth2nrg6hpvn_7CAauOuSvuOI-1768263418-1.0.1.1-RxY_sP1fspgUpGMSuf4Frm0VOM.RCSJ9VFVEQ7pVWdnSvCoR6JIMgxGJDLa5OyF7.FwsEYfL2nuUBRwf5jCy8J4ZBa41QWdbQFXJLLE7wWw; path=/; expires=Tue, 13-Jan-26 00:46:58 GMT; domain=.beluga.froi.dev; HttpOnly; Secure; SameSite=None Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx000008193fc9aaf0c649d-0069658efa-1316f0b28-nyc3c</RequestId><HostId>1316f0b28-nyc3c-nyc3-zg03</HostId></Error>
Open service 162.159.140.98:80 · froi.dev
2025-12-20 10:11
HTTP/1.1 301 Moved Permanently Date: Sat, 20 Dec 2025 10:11:18 GMT Content-Type: text/html Content-Length: 167 Connection: close Cache-Control: max-age=3600 Expires: Sat, 20 Dec 2025 11:11:18 GMT Location: https://froi.dev/ Set-Cookie: __cf_bm=qN_23r9uLc5XuCPxqaDsUsOp73bjbqaUgGoIWMlFVVE-1766225478-1.0.1.1-oVAKk7lDx4csSCbZIbtEYyEzFw2Wy4_57erIcmfptjMyvHJpYVPbGR6owG6Jt5GX9gWlAZsdmt_P_fitLUdfitgdq_zU2hO_uJnXwcvTJjk; path=/; expires=Sat, 20-Dec-25 10:41:18 GMT; domain=.froi.dev; HttpOnly Server: cloudflare CF-RAY: 9b0e5ad5bf145c3e-FRA alt-svc: h3=":443"; ma=86400 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>cloudflare</center> </body> </html>
Open service 162.159.140.98:443 · froi.dev
2025-12-20 10:11
HTTP/1.1 200 OK
Date: Sat, 20 Dec 2025 10:11:17 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
CF-RAY: 9b0e5ad56d29c4c7-YYZ
last-modified: Mon, 24 Nov 2025 00:48:35 GMT
x-rgw-object-type: Normal
x-amz-request-id: tx00000d4719b8b0b728194-006923ab7b-12ac58421-nyc3c
Cache-Control: public,max-age=10,s-maxage=86400
x-do-app-origin: 7a61d204-53ea-4dac-93d4-e8e37f8946d1
x-do-orig-status: 200
CF-Cache-Status: HIT
Age: 27750
Accept-Ranges: bytes
Set-Cookie: __cf_bm=uq9wdtcaBBtLFXVHzToShSf6mFcSPJCVHDy8Uuu2GhQ-1766225477-1.0.1.1-RrfUdhrPBo4Npvm_Cep.jzM1xXGMQj5MiqzF1O6NgMN2Sltz3UmCuk8HHs6VW_ueHvdJbrqoVnfJ2mgC6zDHLSLpS0hH_zQqFfYY0wdspKc; path=/; expires=Sat, 20-Dec-25 10:41:17 GMT; domain=.froi.dev; HttpOnly; Secure; SameSite=None
Server: cloudflare
alt-svc: h3=":443"; ma=86400
Page title:
Froilán Irizarry Rivera
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="Hugo 0.147.8">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="Froilán Irizarry Rivera">
<meta name="description" content="Software Engineering, Civic Tech, and Spanglish" />
<meta name="keywords" content="" />
<meta name="robots" content="noodp" />
<meta name="theme-color" content="" />
<meta name="fediverse:creator" content="@froi@mastodon.social">
<link rel="canonical" href="https://froi.dev/" />
<title>
Froilán Irizarry Rivera
</title>
<link rel="stylesheet" href="/main.min.e7ece113806522d618cf7fe04bb2f0f13c56ad499692093c55e78b6c85d53eb0.css" integrity="sha256-5+zhE4BlItYYz3/gS7Lw8TxWrUmWkgk8VeeLbIXVPrA=" crossorigin="anonymous">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="">
<link rel="shortcut icon" href="/favicon.ico">
<meta name="msapplication-TileColor" content="">
<meta itemprop="name" content="Froi.dev">
<meta itemprop="description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta itemprop="dateModified" content="2025-11-24T00:47:58+00:00">
<meta itemprop="image" content="https://froi.dev/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://froi.dev/">
<meta name="twitter:title" content="Froi.dev">
<meta name="twitter:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:url" content="https://froi.dev/">
<meta property="og:site_name" content="Froilán Irizarry Rivera">
<meta property="og:title" content="Froi.dev">
<meta property="og:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:locale" content="en">
<meta property="og:type" content="website">
<meta property="og:image" content="https://froi.dev/">
<link rel="alternate" type="application/rss+xml" href="https://froi.dev/index.xml" title="Froilán Irizarry Rivera" />
<script defer data-domain="froi.dev" src="https://plausible.io/js/script.js"></script>
</head>
<body class="">
<div class="container">
<header class="header">
<span class="header__inner">
<a href="/" style="text-decoration: none;">
<div class="logo">
<span class="logo__mark">></span>
<span class="logo__text ">
froi.dev</span>
<span class="logo__cursor" style=
"
">
</span>
</div>
</a>
<span class="header__right">
<nav class="menu">
<ul class="menu__inner"><li><a href="/about">About</a></li><li><a href="/posts">Blog</a></li><li><a href="/contact">Contact</a></li><li><a href="/privacy">Privacy</a></li><li><a href="/projects">Projects</a></li><li><a href="/talks">Talks</a></li>
</ul>
</nav>
<span class="menu-trigger">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none"/>
<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>
</svg>
</span>
<span class="theme-toggle not-selectable"><svg class="theme-toggler" width="24" height="24" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22 41C32.4934 41 41 32.4934 41 22C41 11.5066 32.4934 3 22
3C11.5066 3 3 11.5066 3 22C3 32.4934 11.5066 41 22 41ZM7 22C7
13.7157 13.7157 7 22 7V37C13.7157 37 7 30.2843 7 22Z"/>
</svg></s
Open service 104.18.42.227:443 · beluga.froi.dev
2025-12-20 10:11
HTTP/1.1 403 Forbidden Date: Sat, 20 Dec 2025 10:11:18 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9b0e5ad59e80130e-YYZ x-amz-request-id: tx000008c005f83a8fe41a8-0069467646-1316f0b28-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=01q8g21iOJrzAKawChRdrcoNCPA9wyhKd6KebRf1Js0-1766225478-1.0.1.1-73W3eQfgviyDWlwHLlrDwg7LqfCYItobCrJggZVLfPds8InmpZJeqAzF63ZR9Qhxa0fc7n9a1XSs9u5HojSbD5ENWkI1xNkDUg5sAjl4XKs; path=/; expires=Sat, 20-Dec-25 10:41:18 GMT; domain=.beluga.froi.dev; HttpOnly; Secure; SameSite=None Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx000008c005f83a8fe41a8-0069467646-1316f0b28-nyc3c</RequestId><HostId>1316f0b28-nyc3c-nyc3-zg03</HostId></Error>
Open service 2a06:98c1:3105::6812:2ae3:8443 · beluga.froi.dev
2025-12-20 10:11
HTTP/1.1 522 Date: Sat, 20 Dec 2025 10:11:38 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close Strict-Transport-Security: max-age=15552000; includeSubDomains; preload X-Frame-Options: SAMEORIGIN Referrer-Policy: same-origin 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 Server: cloudflare CF-RAY: 9b0e5adb4f269f88-AMS error code: 522
Open service 162.159.140.98:8443 · froi.dev
2025-12-20 10:11
HTTP/1.1 522 Date: Sat, 20 Dec 2025 10:11:38 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close X-Frame-Options: SAMEORIGIN Referrer-Policy: same-origin 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 Server: cloudflare CF-RAY: 9b0e5adb5ba79547-LHR alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 2a06:98c1:3105::6812:2ae3:443 · beluga.froi.dev
2025-12-20 10:11
HTTP/1.1 403 Forbidden Date: Sat, 20 Dec 2025 10:11:18 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9b0e5ad6bb59bed8-LHR x-amz-request-id: tx0000090b2d6ccd79f5e39-0069467646-1315c810c-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=57m85feQ4V_.O07MTCRySDrL6gON3xevyGMqVxSEzdc-1766225478-1.0.1.1-K6CP1BD1vdUpxhVuexiI8yuPyFooqDiu2kJtz4lHPtJGIS8UB139Oveiff8YZ16f_knCEXODgvi6oQ3_BxEOroAEC4IGeFQEHa5Tj7KXFTs; path=/; expires=Sat, 20-Dec-25 10:41:18 GMT; domain=.beluga.froi.dev; HttpOnly; Secure; SameSite=None Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx0000090b2d6ccd79f5e39-0069467646-1315c810c-nyc3c</RequestId><HostId>1315c810c-nyc3c-nyc3-zg03</HostId></Error>
Open service 104.18.42.227:80 · beluga.froi.dev
2025-12-20 10:11
HTTP/1.1 403 Forbidden Date: Sat, 20 Dec 2025 10:11:17 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9b0e5ad4bb71de93-EWR x-amz-request-id: tx00000f952b10de28529ec-0069467645-13171b1eb-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=yrF46pf5U0s6yeS7E2vLYvTDGENYj1GoGaQlbGwLtv4-1766225477-1.0.1.1-bS3_K8GqcylB.8KgjJaAd.crkvbLWvfoT7IrwJRj7sdYJiWrfr2DhtLP1WmSPrWdHc6BMDMYAWTZzVrn8V94te5DcEeQxAitPvJGi8cFVBI; path=/; expires=Sat, 20-Dec-25 10:41:17 GMT; domain=.beluga.froi.dev; HttpOnly Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx00000f952b10de28529ec-0069467645-13171b1eb-nyc3c</RequestId><HostId>13171b1eb-nyc3c-nyc3-zg03</HostId></Error>
Open service 2a06:98c1:58::60:8443 · froi.dev
2025-12-20 10:11
HTTP/1.1 522 Date: Sat, 20 Dec 2025 10:11:38 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close X-Frame-Options: SAMEORIGIN Referrer-Policy: same-origin 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 Server: cloudflare CF-RAY: 9b0e5adafae50f58-SIN alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 2a06:98c1:58::60:80 · froi.dev
2025-12-20 10:11
HTTP/1.1 301 Moved Permanently Date: Sat, 20 Dec 2025 10:11:17 GMT Content-Type: text/html Content-Length: 167 Connection: close Cache-Control: max-age=3600 Expires: Sat, 20 Dec 2025 11:11:17 GMT Location: https://froi.dev/ Set-Cookie: __cf_bm=pzPSe44utcDDKYwd2FCG97kQjBEIbbuga88LHtSs9oI-1766225477-1.0.1.1-ZK0HjJfVlUL7s_KfVQLMOgNWq6cQLZbImTMQxW248wgnzMecZAUYwhG5dCkTpDYUesDqgg00db8Wmhxsds9eGKCGh953nJTlNqVdgUkcZBk; path=/; expires=Sat, 20-Dec-25 10:41:17 GMT; domain=.froi.dev; HttpOnly Server: cloudflare CF-RAY: 9b0e5ad4c8e2ce6e-SIN alt-svc: h3=":443"; ma=86400 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>cloudflare</center> </body> </html>
Open service 2606:4700:7::60:443 · froi.dev
2025-12-20 10:11
HTTP/1.1 200 OK
Date: Sat, 20 Dec 2025 10:11:17 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
CF-RAY: 9b0e5ad4ca38c1c8-SIN
last-modified: Mon, 24 Nov 2025 00:48:35 GMT
x-rgw-object-type: Normal
x-amz-request-id: tx0000071a4856189d12f7e-006945ccc0-12ac58421-nyc3c
Cache-Control: public,max-age=10,s-maxage=86400
x-do-app-origin: 7a61d204-53ea-4dac-93d4-e8e37f8946d1
x-do-orig-status: 200
CF-Cache-Status: HIT
Age: 43397
Accept-Ranges: bytes
Set-Cookie: __cf_bm=ULAltlhllXkeHwg2VOz9rMWrxF2mqR2JZbIRPx6ztig-1766225477-1.0.1.1-7HtjtBem9bJ0bij2nob9vQSjyb4DOF0KsEnCvrY4qIEEJ_F9RgjoE_iUNBIgnP0f_hY0DLZGHtbxFcnkYzcg3zseFOyFulbw1h_lo9c7..Y; path=/; expires=Sat, 20-Dec-25 10:41:17 GMT; domain=.froi.dev; HttpOnly; Secure; SameSite=None
Server: cloudflare
alt-svc: h3=":443"; ma=86400
Page title:
Froilán Irizarry Rivera
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="Hugo 0.147.8">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="Froilán Irizarry Rivera">
<meta name="description" content="Software Engineering, Civic Tech, and Spanglish" />
<meta name="keywords" content="" />
<meta name="robots" content="noodp" />
<meta name="theme-color" content="" />
<meta name="fediverse:creator" content="@froi@mastodon.social">
<link rel="canonical" href="https://froi.dev/" />
<title>
Froilán Irizarry Rivera
</title>
<link rel="stylesheet" href="/main.min.e7ece113806522d618cf7fe04bb2f0f13c56ad499692093c55e78b6c85d53eb0.css" integrity="sha256-5+zhE4BlItYYz3/gS7Lw8TxWrUmWkgk8VeeLbIXVPrA=" crossorigin="anonymous">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="">
<link rel="shortcut icon" href="/favicon.ico">
<meta name="msapplication-TileColor" content="">
<meta itemprop="name" content="Froi.dev">
<meta itemprop="description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta itemprop="dateModified" content="2025-11-24T00:47:58+00:00">
<meta itemprop="image" content="https://froi.dev/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://froi.dev/">
<meta name="twitter:title" content="Froi.dev">
<meta name="twitter:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:url" content="https://froi.dev/">
<meta property="og:site_name" content="Froilán Irizarry Rivera">
<meta property="og:title" content="Froi.dev">
<meta property="og:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:locale" content="en">
<meta property="og:type" content="website">
<meta property="og:image" content="https://froi.dev/">
<link rel="alternate" type="application/rss+xml" href="https://froi.dev/index.xml" title="Froilán Irizarry Rivera" />
<script defer data-domain="froi.dev" src="https://plausible.io/js/script.js"></script>
</head>
<body class="">
<div class="container">
<header class="header">
<span class="header__inner">
<a href="/" style="text-decoration: none;">
<div class="logo">
<span class="logo__mark">></span>
<span class="logo__text ">
froi.dev</span>
<span class="logo__cursor" style=
"
">
</span>
</div>
</a>
<span class="header__right">
<nav class="menu">
<ul class="menu__inner"><li><a href="/about">About</a></li><li><a href="/posts">Blog</a></li><li><a href="/contact">Contact</a></li><li><a href="/privacy">Privacy</a></li><li><a href="/projects">Projects</a></li><li><a href="/talks">Talks</a></li>
</ul>
</nav>
<span class="menu-trigger">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none"/>
<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>
</svg>
</span>
<span class="theme-toggle not-selectable"><svg class="theme-toggler" width="24" height="24" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22 41C32.4934 41 41 32.4934 41 22C41 11.5066 32.4934 3 22
3C11.5066 3 3 11.5066 3 22C3 32.4934 11.5066 41 22 41ZM7 22C7
13.7157 13.7157 7 22 7V37C13.7157 37 7 30.2843 7 22Z"/>
</svg></s
Open service 2a06:98c1:58::60:443 · froi.dev
2025-12-20 10:11
HTTP/1.1 200 OK
Date: Sat, 20 Dec 2025 10:11:17 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
CF-RAY: 9b0e5ad4bfe0f93c-SIN
last-modified: Mon, 24 Nov 2025 00:48:35 GMT
x-rgw-object-type: Normal
x-amz-request-id: tx0000071a4856189d12f7e-006945ccc0-12ac58421-nyc3c
Cache-Control: public,max-age=10,s-maxage=86400
x-do-app-origin: 7a61d204-53ea-4dac-93d4-e8e37f8946d1
x-do-orig-status: 200
CF-Cache-Status: HIT
Age: 43397
Accept-Ranges: bytes
Set-Cookie: __cf_bm=tIjYFKsiCOAenLWpsyYsClq0.Yq4keFz2dUhl0_3mwo-1766225477-1.0.1.1-uTNmZ9mGlwRYHLjeF6hOZhBZ5Xx.vhcAfT7fSW427c2VXtAT5ocuJvD9fsKeLupA4z4yyFEr2A4QS2fFyu4FtQMaOCsHd8QFHQpsGpJowFo; path=/; expires=Sat, 20-Dec-25 10:41:17 GMT; domain=.froi.dev; HttpOnly; Secure; SameSite=None
Server: cloudflare
alt-svc: h3=":443"; ma=86400
Page title:
Froilán Irizarry Rivera
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="Hugo 0.147.8">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="Froilán Irizarry Rivera">
<meta name="description" content="Software Engineering, Civic Tech, and Spanglish" />
<meta name="keywords" content="" />
<meta name="robots" content="noodp" />
<meta name="theme-color" content="" />
<meta name="fediverse:creator" content="@froi@mastodon.social">
<link rel="canonical" href="https://froi.dev/" />
<title>
Froilán Irizarry Rivera
</title>
<link rel="stylesheet" href="/main.min.e7ece113806522d618cf7fe04bb2f0f13c56ad499692093c55e78b6c85d53eb0.css" integrity="sha256-5+zhE4BlItYYz3/gS7Lw8TxWrUmWkgk8VeeLbIXVPrA=" crossorigin="anonymous">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="">
<link rel="shortcut icon" href="/favicon.ico">
<meta name="msapplication-TileColor" content="">
<meta itemprop="name" content="Froi.dev">
<meta itemprop="description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta itemprop="dateModified" content="2025-11-24T00:47:58+00:00">
<meta itemprop="image" content="https://froi.dev/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://froi.dev/">
<meta name="twitter:title" content="Froi.dev">
<meta name="twitter:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:url" content="https://froi.dev/">
<meta property="og:site_name" content="Froilán Irizarry Rivera">
<meta property="og:title" content="Froi.dev">
<meta property="og:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:locale" content="en">
<meta property="og:type" content="website">
<meta property="og:image" content="https://froi.dev/">
<link rel="alternate" type="application/rss+xml" href="https://froi.dev/index.xml" title="Froilán Irizarry Rivera" />
<script defer data-domain="froi.dev" src="https://plausible.io/js/script.js"></script>
</head>
<body class="">
<div class="container">
<header class="header">
<span class="header__inner">
<a href="/" style="text-decoration: none;">
<div class="logo">
<span class="logo__mark">></span>
<span class="logo__text ">
froi.dev</span>
<span class="logo__cursor" style=
"
">
</span>
</div>
</a>
<span class="header__right">
<nav class="menu">
<ul class="menu__inner"><li><a href="/about">About</a></li><li><a href="/posts">Blog</a></li><li><a href="/contact">Contact</a></li><li><a href="/privacy">Privacy</a></li><li><a href="/projects">Projects</a></li><li><a href="/talks">Talks</a></li>
</ul>
</nav>
<span class="menu-trigger">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none"/>
<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>
</svg>
</span>
<span class="theme-toggle not-selectable"><svg class="theme-toggler" width="24" height="24" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22 41C32.4934 41 41 32.4934 41 22C41 11.5066 32.4934 3 22
3C11.5066 3 3 11.5066 3 22C3 32.4934 11.5066 41 22 41ZM7 22C7
13.7157 13.7157 7 22 7V37C13.7157 37 7 30.2843 7 22Z"/>
</svg></s
Open service 2606:4700:7::60:8443 · froi.dev
2025-12-20 10:11
HTTP/1.1 522 Date: Sat, 20 Dec 2025 10:11:38 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close X-Frame-Options: SAMEORIGIN Referrer-Policy: same-origin 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 Server: cloudflare CF-RAY: 9b0e5adaf8c8ce01-SIN alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 2606:4700:7::60:80 · froi.dev
2025-12-20 10:11
HTTP/1.1 301 Moved Permanently Date: Sat, 20 Dec 2025 10:11:17 GMT Content-Type: text/html Content-Length: 167 Connection: close Cache-Control: max-age=3600 Expires: Sat, 20 Dec 2025 11:11:17 GMT Location: https://froi.dev/ Set-Cookie: __cf_bm=6Dv_yEAkcXV6OU085aIfs7cqkwNJREP_blRdEwaa8GQ-1766225477-1.0.1.1-En4_Sgsql8zGcMawbk7Q040glrYKkvT8QZ703fKABtFN073Tkq_g72eEXwaSPOlapcxHEzNeTibvNm2L7BawyeH1hdWiyYmXTEott4vlciA; path=/; expires=Sat, 20-Dec-25 10:41:17 GMT; domain=.froi.dev; HttpOnly Server: cloudflare CF-RAY: 9b0e5ad4cc40fe08-SIN alt-svc: h3=":443"; ma=86400 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>cloudflare</center> </body> </html>
Open service 172.66.0.96:443 · froi.dev
2025-12-20 10:11
HTTP/1.1 200 OK
Date: Sat, 20 Dec 2025 10:11:17 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
CF-RAY: 9b0e5ad4bd10fdfa-SIN
last-modified: Mon, 24 Nov 2025 00:48:35 GMT
x-rgw-object-type: Normal
x-amz-request-id: tx0000071a4856189d12f7e-006945ccc0-12ac58421-nyc3c
Cache-Control: public,max-age=10,s-maxage=86400
x-do-app-origin: 7a61d204-53ea-4dac-93d4-e8e37f8946d1
x-do-orig-status: 200
CF-Cache-Status: HIT
Age: 43397
Accept-Ranges: bytes
Set-Cookie: __cf_bm=1slPvgEQOEOr6aUER7etPn2kupDdpSdGnnI.96wUB3I-1766225477-1.0.1.1-1qjOEY9NMbunfdJOoSBlXcJ9cKnQMo5CN3fO9qhnFNmifXqXXL2PiyKfeKULseLbmRMpTDkcEhUjzVqREvmE97X.rhxAiPeL1PbiILiyQp4; path=/; expires=Sat, 20-Dec-25 10:41:17 GMT; domain=.froi.dev; HttpOnly; Secure; SameSite=None
Server: cloudflare
alt-svc: h3=":443"; ma=86400
Page title:
Froilán Irizarry Rivera
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="Hugo 0.147.8">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="Froilán Irizarry Rivera">
<meta name="description" content="Software Engineering, Civic Tech, and Spanglish" />
<meta name="keywords" content="" />
<meta name="robots" content="noodp" />
<meta name="theme-color" content="" />
<meta name="fediverse:creator" content="@froi@mastodon.social">
<link rel="canonical" href="https://froi.dev/" />
<title>
Froilán Irizarry Rivera
</title>
<link rel="stylesheet" href="/main.min.e7ece113806522d618cf7fe04bb2f0f13c56ad499692093c55e78b6c85d53eb0.css" integrity="sha256-5+zhE4BlItYYz3/gS7Lw8TxWrUmWkgk8VeeLbIXVPrA=" crossorigin="anonymous">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="">
<link rel="shortcut icon" href="/favicon.ico">
<meta name="msapplication-TileColor" content="">
<meta itemprop="name" content="Froi.dev">
<meta itemprop="description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta itemprop="dateModified" content="2025-11-24T00:47:58+00:00">
<meta itemprop="image" content="https://froi.dev/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://froi.dev/">
<meta name="twitter:title" content="Froi.dev">
<meta name="twitter:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:url" content="https://froi.dev/">
<meta property="og:site_name" content="Froilán Irizarry Rivera">
<meta property="og:title" content="Froi.dev">
<meta property="og:description" content="Homepage and blog for Froilán Irizarry Rivera">
<meta property="og:locale" content="en">
<meta property="og:type" content="website">
<meta property="og:image" content="https://froi.dev/">
<link rel="alternate" type="application/rss+xml" href="https://froi.dev/index.xml" title="Froilán Irizarry Rivera" />
<script defer data-domain="froi.dev" src="https://plausible.io/js/script.js"></script>
</head>
<body class="">
<div class="container">
<header class="header">
<span class="header__inner">
<a href="/" style="text-decoration: none;">
<div class="logo">
<span class="logo__mark">></span>
<span class="logo__text ">
froi.dev</span>
<span class="logo__cursor" style=
"
">
</span>
</div>
</a>
<span class="header__right">
<nav class="menu">
<ul class="menu__inner"><li><a href="/about">About</a></li><li><a href="/posts">Blog</a></li><li><a href="/contact">Contact</a></li><li><a href="/privacy">Privacy</a></li><li><a href="/projects">Projects</a></li><li><a href="/talks">Talks</a></li>
</ul>
</nav>
<span class="menu-trigger">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none"/>
<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>
</svg>
</span>
<span class="theme-toggle not-selectable"><svg class="theme-toggler" width="24" height="24" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22 41C32.4934 41 41 32.4934 41 22C41 11.5066 32.4934 3 22
3C11.5066 3 3 11.5066 3 22C3 32.4934 11.5066 41 22 41ZM7 22C7
13.7157 13.7157 7 22 7V37C13.7157 37 7 30.2843 7 22Z"/>
</svg></s
Open service 172.66.0.96:8443 · froi.dev
2025-12-20 10:11
HTTP/1.1 522 Date: Sat, 20 Dec 2025 10:11:38 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close X-Frame-Options: SAMEORIGIN Referrer-Policy: same-origin 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 Server: cloudflare CF-RAY: 9b0e5adae8f381d4-SIN alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 172.66.0.96:80 · froi.dev
2025-12-20 10:11
HTTP/1.1 301 Moved Permanently Date: Sat, 20 Dec 2025 10:11:17 GMT Content-Type: text/html Content-Length: 167 Connection: close Cache-Control: max-age=3600 Expires: Sat, 20 Dec 2025 11:11:17 GMT Location: https://froi.dev/ Set-Cookie: __cf_bm=W4pO6PXAhH9nBlWtMwixANr5OUoS6.obItMIXMX1ip8-1766225477-1.0.1.1-B7iMMwQJNwX5.OuGyljqmTmGyJJoNyPJjxCz7zCmw5yIEqvFZfbWAtc7xc4_h0jAWyyab78YVBgvgF15c5pvlR03eC2ts8YTIQrvcbjdciI; path=/; expires=Sat, 20-Dec-25 10:41:17 GMT; domain=.froi.dev; HttpOnly Server: cloudflare CF-RAY: 9b0e5ad4db04eba0-SIN alt-svc: h3=":443"; ma=86400 Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>cloudflare</center> </body> </html>
Open service 172.64.145.29:8443 · beluga.froi.dev
2025-12-20 10:11
Open service 172.64.145.29:443 · beluga.froi.dev
2025-12-20 10:11
HTTP/1.1 403 Forbidden Date: Sat, 20 Dec 2025 10:11:17 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9b0e5ad4b9dad5f4-YYZ x-amz-request-id: tx0000024e7aaf1b771a775-0069467645-1315f13e6-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=hTYKf2Ql2SlWTlcihSpx3Q3V_UU7udFERJ9GPOv98FM-1766225477-1.0.1.1-y32zpN3ppKDyE1HGT_6UTjXwwXfki_6gdtXfCgoMADUQKRD2FR2iwItTCJK7XZ.U9XMY_0WCFJPte4E33rfxQ_qUImA9ZV3cTWCSNKTAcZ0; path=/; expires=Sat, 20-Dec-25 10:41:17 GMT; domain=.beluga.froi.dev; HttpOnly; Secure; SameSite=None Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx0000024e7aaf1b771a775-0069467645-1315f13e6-nyc3c</RequestId><HostId>1315f13e6-nyc3c-nyc3-zg03</HostId></Error>
Open service 104.18.42.227:8443 · beluga.froi.dev
2025-12-20 10:11
Open service 2606:4700:4405::ac40:911d:80 · beluga.froi.dev
2025-12-20 10:11
HTTP/1.1 403 Forbidden Date: Sat, 20 Dec 2025 10:11:18 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9b0e5ad4ed42d3c0-FRA x-amz-request-id: tx000004a2bda9a618b92d6-0069467645-1315c7fdb-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=EI6qMeNeRwDAX2SfJnkitt7C9B274mgbqEu2L.1VvBs-1766225478-1.0.1.1-sMcxdgyKodt8oQ4tDx_UkvbwBNjMNz0Zzo2D.6RICSdvlgN2UxRikgVZ4kOky.qbkG89bUSAtMpE178ypEdZKhiiPbY_2AR6.CAi6siEWio; path=/; expires=Sat, 20-Dec-25 10:41:18 GMT; domain=.beluga.froi.dev; HttpOnly Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx000004a2bda9a618b92d6-0069467645-1315c7fdb-nyc3c</RequestId><HostId>1315c7fdb-nyc3c-nyc3-zg03</HostId></Error>
Open service 2606:4700:4405::ac40:911d:443 · beluga.froi.dev
2025-12-20 10:11
HTTP/1.1 403 Forbidden Date: Sat, 20 Dec 2025 10:11:18 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9b0e5ad4cb7d7a98-FRA x-amz-request-id: tx00000a7fc93c14ea13249-0069467645-1316f0b28-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=u4pFehxprxydDAJ5nFQO9NTTu6Gktc_FSDlch3RxqJ0-1766225478-1.0.1.1-lqanrfbu8SkzETHGBLwy3lB._8G8wt1hIPuRzgx6CQREPcYYuFsV0veZi4o3NyvFzgND8RpJA2FfSPSfMwCcnqg0hCzmofEqnSk4nWq.sFk; path=/; expires=Sat, 20-Dec-25 10:41:18 GMT; domain=.beluga.froi.dev; HttpOnly; Secure; SameSite=None Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx00000a7fc93c14ea13249-0069467645-1316f0b28-nyc3c</RequestId><HostId>1316f0b28-nyc3c-nyc3-zg03</HostId></Error>
Open service 2606:4700:4405::ac40:911d:8443 · beluga.froi.dev
2025-12-20 10:11
HTTP/1.1 522 Date: Sat, 20 Dec 2025 10:11:38 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close Strict-Transport-Security: max-age=15552000; includeSubDomains; preload X-Frame-Options: SAMEORIGIN Referrer-Policy: same-origin 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 Server: cloudflare CF-RAY: 9b0e5ada4db6f5f6-EWR error code: 522
Open service 2a06:98c1:3105::6812:2ae3:80 · beluga.froi.dev
2025-12-20 10:11
HTTP/1.1 403 Forbidden Date: Sat, 20 Dec 2025 10:11:18 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9b0e5ad52c03a01b-FRA x-amz-request-id: tx00000f9161193cb63a26a-0069467646-1316e65dd-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=6HOtWDrF6VQBqQVi1YwJhOTsiINOKa6GJXXlnZWVyCw-1766225478-1.0.1.1-94ahjY7itoggjGGTY8OxrEQLIojZlGA32DsO5HXpecuA2npd.yR0T.XYkKRE435_og8Qx0eRrV6BYXhBxvwwBgiBt2RmoGuE9pRAXurB4CY; path=/; expires=Sat, 20-Dec-25 10:41:18 GMT; domain=.beluga.froi.dev; HttpOnly Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx00000f9161193cb63a26a-0069467646-1316e65dd-nyc3c</RequestId><HostId>1316e65dd-nyc3c-nyc3-zg03</HostId></Error>
Open service 172.64.145.29:80 · beluga.froi.dev
2025-12-20 10:11
HTTP/1.1 403 Forbidden Date: Sat, 20 Dec 2025 10:11:18 GMT Content-Type: application/xml Content-Length: 252 Connection: close CF-RAY: 9b0e5ad48cf85d5b-FRA x-amz-request-id: tx00000bbeb37a1af78c8c6-0069467645-1316e6c63-nyc3c Accept-Ranges: bytes Cache-Control: max-age=0 strict-transport-security: max-age=15552000; includeSubDomains; preload x-do-cdn-uuid: 3d133666-9bf0-44ca-b067-709e8246e279 cf-cache-status: MISS Set-Cookie: __cf_bm=Xye8oPgN3XtYXBlEfm.P.5.HcvTICnk4hEnHoSbrHrE-1766225478-1.0.1.1-DhRipsX_bhfrSg26LAIPnnodLJJbFGHOWVaG3URE7A_2KjBBlgXIJlTLmKKOrQ_70LqFMMC1ALL_JzYf7zRtp7PYbJH11P6253L9r10bDgU; path=/; expires=Sat, 20-Dec-25 10:41:18 GMT; domain=.beluga.froi.dev; HttpOnly Server: cloudflare <?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message></Message><BucketName>beluga.froi.dev</BucketName><RequestId>tx00000bbeb37a1af78c8c6-0069467645-1316e6c63-nyc3c</RequestId><HostId>1316e6c63-nyc3c-nyc3-zg03</HostId></Error>