diff --git a/assets/scss/_alert.scss b/assets/scss/_alert.scss
new file mode 100644
index 000000000..2f3f0a24c
--- /dev/null
+++ b/assets/scss/_alert.scss
@@ -0,0 +1,20 @@
+.alert {
+ --mm-spacing: 20px;
+ background: linear-gradient(#fff, var(--mm-color-sidebar));
+ border-bottom: 1px solid #eee;
+ border-left: 1px solid #eee;
+ border-color: #f5f5f5 #eee #ddd #7eadda;
+ border-radius: 0 var(--mm-border-radius) var(--mm-border-radius) 0;
+ border-top: 1px solid #eee;
+ border-style: solid;
+ border-width: 1px 1px 1px 6px;
+ box-shadow: 0 1px 3px #0000001a;
+ color: var(--mm-color-primary-text);
+ margin: var(--mm-spacing) 0;
+ padding: calc(var(--mm-spacing) / 2) var(--mm-spacing);
+ position: relative;
+}
+
+.alert--warning {
+ border-left-color: #e89f29;
+}
diff --git a/assets/scss/_mm-ips.scss b/assets/scss/_mm-ips.scss
new file mode 100644
index 000000000..1eab0e079
--- /dev/null
+++ b/assets/scss/_mm-ips.scss
@@ -0,0 +1,17 @@
+.mm-ips {
+ background-color: var(--mm-color-background-code);
+ border-radius: var(--mm-border-radius);
+ padding: 1rem;
+
+ span {
+ color: #ddd;
+ display: block;
+ font-family: monospace;
+ font-size: 0.9rem;
+ }
+}
+
+.mm-ips__last-updated {
+ font-style: italic;
+ margin-top: 0.5rem;
+}
diff --git a/assets/scss/_variables.scss b/assets/scss/_variables.scss
index 660eccbb9..219cfc02f 100644
--- a/assets/scss/_variables.scss
+++ b/assets/scss/_variables.scss
@@ -39,7 +39,7 @@ $containers: (
--mm-color-border: #ddd;
--mm-color-logo-blue-light: #00aeef;
--mm-color-logo-blue-dark: #005f83;
- --mm-color-primary-text: #595959;
+ --mm-color-primary-text: #161616;
--mm-color-display-text: #005f83;
--mm-color-medium-blue: #4877bb;
--mm-color-geoip: #2ca695;
diff --git a/assets/scss/index.scss b/assets/scss/index.scss
index 81f9fb76c..e54023de6 100644
--- a/assets/scss/index.scss
+++ b/assets/scss/index.scss
@@ -16,6 +16,8 @@
@import 'product-featured';
@import 'fourohfour';
@import 'codeset';
+@import 'mm-ips';
+@import 'alert';
*:focus {
outline-color: var(--mm-color-logo-blue-light);
diff --git a/content/maxmind-server-ip-addresses.mdx b/content/maxmind-server-ip-addresses.md
similarity index 66%
rename from content/maxmind-server-ip-addresses.mdx
rename to content/maxmind-server-ip-addresses.md
index d82613507..f854bd988 100644
--- a/content/maxmind-server-ip-addresses.mdx
+++ b/content/maxmind-server-ip-addresses.md
@@ -1,13 +1,14 @@
---
draft: false
+layout: mm-ips
title: MaxMind Server IP Addresses
+outputs:
+- rss
+- html
+_comment: json feed is handled by module mounts. see hugo.toml
---
-import { FaRss as RssFeed } from 'react-icons/fa';
-import { RiBracesFill as JsonFeed } from 'react-icons/ri';
-
-
-
+{{< warning >}}
In January 2024, we began using R2 presigned URLs for all database downloads.
Database downloads will no longer use the IP addresses specified below.
@@ -15,8 +16,7 @@ For information about IP addresses used to serve database downloads see
[the appropriate section below](#database-download-ip-addresses).
[Read our release note for more information.](/geoip/release-notes/2024#presigned-urls-for-database-downloads)
-
-
+{{< /warning >}}
This page lists the IP addresses that may be used for minFraud, GeoIP, and
GeoLite web service requests by our \*.maxmind.com API hostnames. We strongly
@@ -25,30 +25,13 @@ this page will be in use at a given time. The IPs returned in DNS could change
at any time. Note that the IPs below don’t apply to the `www.maxmind.com`
hostname, which could use any IP and changes frequently.
-
+{{< mm-ips >}}
## Monitoring Changes
-MaxMind provides RSS and JSON feeds, allowing you to monitor changes to our
+MaxMind provides [**RSS**](/maxmind-server-ip-addresses/index.xml) and [**JSON**](/maxmind-server-ip-addresses.json) feeds, allowing you to monitor changes to our
minFraud, GeoIP, and GeoLite web service server IP addresses.
-
-
-
-
-
-
-
## Database download IP addresses
MaxMind uses Cloudflare to serve our GeoIP and GeoLite database downloads.
diff --git a/content/test.md b/content/test.md
index 28a2232bb..96ac6a9df 100644
--- a/content/test.md
+++ b/content/test.md
@@ -10,35 +10,35 @@ description: >
{{< codeset >}}
- {{< highlight js >}}
+```js
console.log('hello');
- {{< /highlight >}}
+```
- {{< highlight go >}}
+```go
fmt.Println("hello")
- {{< /highlight >}}
+```
- {{< highlight php >}}
+```php
Hello World
'; ?>
- {{< /highlight >}}
+```
{{< /codeset >}}
{{< codeset >}}
- {{< highlight php >}}
+```php
Hello World'; ?>
- {{< /highlight >}}
+```
- {{< highlight csharp >}}
+```csharp
System.Console.WriteLine("Hello, World!");
- {{< /highlight >}}
+```
{{< /codeset >}}
{{< codeset >}}
- {{< highlight js >}}
+```js
console.log('hello');
- {{< /highlight >}}
+```
- {{< highlight go >}}
+```go
fmt.Println("hello")
- {{< /highlight >}}
+```
{{< /codeset >}}
diff --git a/static/maxmind-server-ip-addresses.json b/data/mm_ips.json
similarity index 100%
rename from static/maxmind-server-ip-addresses.json
rename to data/mm_ips.json
diff --git a/hugo.toml b/hugo.toml
index 51ba2a05d..809d47240 100644
--- a/hugo.toml
+++ b/hugo.toml
@@ -18,11 +18,23 @@ title = 'MaxMind'
tabWidth = 4
[menus]
- [[menus.main]]
+ [[menus.minfraud]]
name = 'minFraud'
pageRef = '/minfraud'
weight = 10
- [[menus.main]]
+ [[menus.geoip]]
name = 'GeoIP'
pageRef = '/geoip'
- weight = 20
+ weight = 10
+ [[menus.general]]
+ name = 'MaxMind Server IP Addresses'
+ pageRef = '/maxmind-server-ip-addresses'
+ weight = 10
+
+[module]
+ [[module.mounts]]
+ source = "data/mm_ips.json"
+ target = "static/maxmind-server-ip-addresses.json"
+
+[outputs]
+ home = ["HTML"]
diff --git a/layouts/_default/mm-ips.xml b/layouts/_default/mm-ips.xml
new file mode 100644
index 000000000..40a593a74
--- /dev/null
+++ b/layouts/_default/mm-ips.xml
@@ -0,0 +1,30 @@
+
+
+
+ {{ .Page.Title }}
+
+
+ Feed of MaxMind server addresses.
+
+ https://dev.maxmind.com
+ {{ index $.Site.Data.mm_ips "lastUpdated" }}
+ -
+
+ {{ .Page.Title }}
+
+ https://dev.maxmind.com/maxmind-server-ip-addresses
+ {{ index $.Site.Data.mm_ips "lastUpdated" }}
+
+ {{ range index $.Site.Data.mm_ips "IPv4"}}
+ {{ . }}
+ {{ end }}
+ {{ range index $.Site.Data.mm_ips "IPv6"}}
+ {{ . }}
+ {{ end }}
+
+
+
+
diff --git a/layouts/partials/sidebar.html b/layouts/partials/sidebar.html
index 21c0cc32c..14711fb5f 100644
--- a/layouts/partials/sidebar.html
+++ b/layouts/partials/sidebar.html
@@ -1,10 +1,10 @@
+{{ $currentPage := . }}