diff --git a/src/content/blog/elixir-v1-1-0-released.md b/src/content/blog/elixir-v1-1-0-released.md
index b5b1f965d..9d7ed33e2 100644
--- a/src/content/blog/elixir-v1-1-0-released.md
+++ b/src/content/blog/elixir-v1-1-0-released.md
@@ -11,11 +11,11 @@ Elixir v1.1 has been released and it brings enhancements, bug fixes, performance
Elixir v1.1 supports both Erlang 17 and Erlang 18. This is, however, the last release supporting Erlang 17, so upgrading to Erlang 18 is advised. Elixir v1.2 will introduce features that are Erlang 18 only.
-On the standard library side, about 40 new functions have been added to Elixir public APIs. For example, [`Enum`](/docs/v1.1/elixir/Enum.html) got [`dedup/1`](/docs/v1.1/elixir/Enum.html#dedup/1), [`random/1`](/docs/v1.1/elixir/Enum.html#random/1), and a couple more. The [`String`](/docs/v1.1/elixir/String.html) module can now [calculate the distance between strings](/docs/v1.1/elixir/String.html#jaro_distance/2). We use this feature to provide suggestions whenever an unknown task name is given when using Mix. You can also [yield to](/docs/v1.1/elixir/Task.html#yield/2) and [shutdown](/docs/v1.1/elixir/Task.html#shutdown/2) tasks in the [`Task`](/docs/v1.1/elixir/Task.html) module.
+On the standard library side, about 40 new functions have been added to Elixir public APIs. For example, [`Enum`](https://hexdocs.pm/elixir/1.1.1/Enum.html) got [`dedup/1`](https://hexdocs.pm/elixir/1.1.1/Enum.html#dedup/1), [`random/1`](https://hexdocs.pm/elixir/1.1.1/Enum.html#random/1), and a couple more. The [`String`](https://hexdocs.pm/elixir/1.1.1/String.html) module can now [calculate the distance between strings](https://hexdocs.pm/elixir/1.1.1/String.html#jaro_distance/2). We use this feature to provide suggestions whenever an unknown task name is given when using Mix. You can also [yield to](https://hexdocs.pm/elixir/1.1.1/Task.html#yield/2) and [shutdown](https://hexdocs.pm/elixir/1.1.1/Task.html#shutdown/2) tasks in the [`Task`](https://hexdocs.pm/elixir/1.1.1/Task.html) module.
-The applications that ship with Elixir also has seen improvements and bug fixes. [ExUnit](/docs/v1.1/ex_unit/ExUnit.html), Elixir's test framework, now has support for skipping tests via tags `@tag :skip`, as well as the ability to capture logs via `@tag :capture_log`, ensuring that all log messages during the tests are captured. Even better, in case of failures, all captured log messages are printed along-side the test error report.
+The applications that ship with Elixir also has seen improvements and bug fixes. [ExUnit](https://hexdocs.pm/ex_unit/1.1.1/ExUnit.html), Elixir's test framework, now has support for skipping tests via tags `@tag :skip`, as well as the ability to capture logs via `@tag :capture_log`, ensuring that all log messages during the tests are captured. Even better, in case of failures, all captured log messages are printed along-side the test error report.
-Mix ships with a [`mix profile.fprof`](/docs/v1.1/mix/Mix.Tasks.Profile.Fprof.html), useful for profiling your application code. The [`mix app.start`](/docs/v1.1/mix/Mix.Tasks.App.Start.html) has also been publicly documented. Although you likely won't invoke it directly through the command line, it is useful when writing your own tasks that require the current application to be up and running.
+Mix ships with a [`mix profile.fprof`](https://hexdocs.pm/mix/1.1.1/Mix.Tasks.Profile.Fprof.html), useful for profiling your application code. The [`mix app.start`](https://hexdocs.pm/mix/1.1.1/Mix.Tasks.App.Start.html) has also been publicly documented. Although you likely won't invoke it directly through the command line, it is useful when writing your own tasks that require the current application to be up and running.
Mix also provides faster re-compilation times. Every time you compile your Elixir code, Mix generates a graph of the dependencies between source files. For example, if `a.ex` depends on `b.ex`, every time `b.ex` changes, `a.ex` must be recompiled. Elixir v1.1 improves this tracking by separating compile-time dependencies from runtime ones, recompiling a file only if a compile-time dependency changed. In projects that have a main dispatch entity, like a web-app router, we have seen `mix compile` go from recompiling the whole project to one or two files per run.
diff --git a/src/content/blog/elixir-v1-11-0-released.md b/src/content/blog/elixir-v1-11-0-released.md
index 8c33f4516..034583f43 100644
--- a/src/content/blog/elixir-v1-11-0-released.md
+++ b/src/content/blog/elixir-v1-11-0-released.md
@@ -17,7 +17,7 @@ For now, let's focus on what's new in Elixir v1.11.
On the footsteps of v1.10, we have further integrated with Erlang's new logger by adding four new log levels: `notice`, `critical`, `alert`, and `emergency`, matching all log levels found in the Syslog standard. The `Logger` module now supports structured logging by passing maps and keyword lists to its various functions. It is also possible to specify the log level per module, via the [`Logger.put_module_level/2`](https://hexdocs.pm/logger/Logger.html#put_module_level/2) function. Log levels per application will be added in future releases.
-IEx also has been improved to show the documentation for Erlang modules directly from your Elixir terminal. For example, here is a clip of me accessing the documentation for [Erlang's gen_server module](erlang.org/doc/man/gen_server.html):
+IEx also has been improved to show the documentation for Erlang modules directly from your Elixir terminal. For example, here is a clip of me accessing the documentation for [Erlang's gen_server module](https://www.erlang.org/doc/man/gen_server.html):
diff --git a/src/content/blog/elixir-v1-20-0-released.md b/src/content/blog/elixir-v1-20-0-released.md
index 83acc3661..8abd72a8b 100644
--- a/src/content/blog/elixir-v1-20-0-released.md
+++ b/src/content/blog/elixir-v1-20-0-released.md
@@ -91,7 +91,7 @@ end
In other words, the `dynamic()` type in Elixir effectively works as a range, which can be refined as it is used throughout the program and reports violations whenever type checks fall outside of the range. This is a contrast to other gradual type systems, which use the dynamic type to discard all type information.
-Behind the scenes, our type inference and type checking algorithms behave as if we annotated all argument types as `dynamic()`. Once we introduce user-supplied type annotations, Elixir's type system will behave as any statically typed language as long as `dynamic()` is not used. And whenever you cross the static-dynamic boundary, we [developed new techniques that ensure our gradual typing is sound, without a need for additional runtime checks](/blog/strong-arrows-gradual-typing/).
+Behind the scenes, our type inference and type checking algorithms behave as if we annotated all argument types as `dynamic()`. Once we introduce user-supplied type annotations, Elixir's type system will behave as any statically typed language as long as `dynamic()` is not used. And whenever you cross the static-dynamic boundary, we [developed new techniques that ensure our gradual typing is sound, without a need for additional runtime checks](/blog/2023/09/20/strong-arrows-gradual-typing/).
## Typing guards, clauses, and more
diff --git a/src/content/blog/lazier-bdds-for-set-theoretic-types.md b/src/content/blog/lazier-bdds-for-set-theoretic-types.md
index 36a148ccc..5a2f053b0 100644
--- a/src/content/blog/lazier-bdds-for-set-theoretic-types.md
+++ b/src/content/blog/lazier-bdds-for-set-theoretic-types.md
@@ -7,7 +7,7 @@ category: "Internals"
tags: []
---
-[The Elixir team and the CNRS are working on a set-theoretic type system for Elixir](https://elixir-lang.org/blog/2023/06/22/type-system-updates-research-dev/) which, simply put, is a type-system powered by unions, intersections, and negations. As part of the implementation of said type systems, we need an efficient way of representing said operations. This article discusses the existing approaches found in theory and practice, as well as the improvements we have introduced as part of [Elixir v1.19](/blog/2025/10/16/elixir-v1-19-0-released.markdown/).
+[The Elixir team and the CNRS are working on a set-theoretic type system for Elixir](https://elixir-lang.org/blog/2023/06/22/type-system-updates-research-dev/) which, simply put, is a type-system powered by unions, intersections, and negations. As part of the implementation of said type systems, we need an efficient way of representing said operations. This article discusses the existing approaches found in theory and practice, as well as the improvements we have introduced as part of [Elixir v1.19](/blog/2025/10/16/elixir-v1-19-0-released/).
This article covers the implementation details of the type system. You don't need to understand these internals to use the type system, just as you don't need to know virtual machine bytecodes or compiler passes to use a programming language. Our goal is to document our progress and provide guidance for future maintainers and implementers. Let's get started.