diff --git a/about/free-trial.html.md b/about/free-trial.html.md
index 3c49c66dbc..2c97fa4cf1 100644
--- a/about/free-trial.html.md
+++ b/about/free-trial.html.md
@@ -1,20 +1,22 @@
---
-title: Fly.io 7-day Free Trial
+title: Fly.io Free Trial
layout: docs
nav: firecracker
author: kcmartin
-date: 2025-10-09
+date: 2025-10-27
---
-**Fly.io runs your apps close to your users. This page explains how our 7-day free trial works and what resources you can use before you need to add a payment method.**
+**Fly.io runs your apps close to your users. This page explains how our free trial works and what resources you can use before you need to add a payment method.**
## Free Trial overview
-A free trial on Fly.io lasts for **7 days**, and gives you just enough room to get a real app up and running before you decide if you're in.
+A free trial on Fly.io includes 2 hours of machine runtime or 7 days of access, whichever comes first. That’s just enough to get a real app up and running before you decide if it’s a fit for you.
+
+
If you hit any of the limits below before your 7 days are up, **your trial is considered exhausted**, and your apps will stop until you add a payment method.
Here’s what’s **included** during the trial:
-- **2 total VM hours** (shared across any machines you launch)
+- **2 total VM hours** (Shared across any machines you launch)
**Note: Trial Machines are set to automatically stop after running for 5 minutes**
- **10 machines max**
- **20GB of volume storage**
- Up to **2 vCPUs per machine**
@@ -26,16 +28,14 @@ These are **not included** in the free trial:
- Access to performance-optimized vCPUs
- GPU machines
-### Checking usage
+You can add a credit card from the dashboard at any time during the trial. This lifts the resource limits and keeps your apps running without interruption. **Note: adding a card ends the free trial** and your usage starts counting toward your bill from that point on.
+
+## Checking usage
You can see what you’ve used and what’s left under **“Trial Status”** in the Fly.io dashboard. Machines usage (including memory) is tracked per second, while Volumes and Machine count are tracked per hour.
The free trial is meant for kicking the tires. Spin something up, poke around, deploy a real app or two. If Fly.io fits your use case, great! Add a credit card to keep going. If not, no hard feelings.
-If you hit any of these limits before your 7 days are up, your trial is considered **exhausted**, and your apps will stop until you add a payment method.
-
-You can add a credit card from the dashboard at any time during the trial. This lifts the resource limits and keeps your apps running without interruption. Just a heads-up: adding a card ends the free trial, and from that point on, your usage starts counting toward your bill.
-
## What happens when the free trial ends?
If you don’t add a payment method by the end of your 7-day trial, or if you use up the included resources, your apps will stop running. You won’t be able to launch new machines, attach volumes, or deploy changes until billing is set up.
diff --git a/about/pricing.html.markerb b/about/pricing.html.markerb
index 77441a7620..f243365603 100644
--- a/about/pricing.html.markerb
+++ b/about/pricing.html.markerb
@@ -278,3 +278,11 @@ To change your plan to the Pay As You Go plan, go to the [**Organizations** page
If you were on the free Hobby plan at the time that the paid Hobby plan became the default for new organizations, your plan is now called the Legacy Hobby plan. Your costs stay the same as they were, with no monthly subscription fee, and no included usage beyond the free resource allowances.
If you change your plan, you won't be able to return to the Legacy Hobby Plan.
+
+## **Related reading**
+
+- [Billing for Fly.io](/docs/about/billing/) How invoicing, payment methods, and usage tracking work.
+- [Cost Management](/docs/about/cost-management/) Best practices for estimating, monitoring, and controlling your spend.
+- [Free Trial](/docs/about/free-trial/) What the Fly.io Free trial gives you and when billing begins.
+- [Organization Roles & Permissions](/docs/security/org-roles-permissions/) How org structure, permissions and billing interplay.
+- [Optimize Compute Costs: Fine‑tune your app](/docs/apps/fine-tune-apps/) Tuning machine size, memory/CPU, and stop‑/start behavior to reduce waste.
\ No newline at end of file
diff --git a/blueprints/autoscale-machines.html.md b/blueprints/autoscale-machines.html.md
index cf5b6381da..26370c1150 100644
--- a/blueprints/autoscale-machines.html.md
+++ b/blueprints/autoscale-machines.html.md
@@ -10,7 +10,7 @@ redirect_from: /docs/blueprints/autoscale-machines-like-a-boss/
You have an app with services that's configured to [automatically start
-and stop Machines based on traffic demand]((/docs/launch/autostop-autostart/)). But the traffic to your app changes
+and stop Machines based on traffic demand](/docs/launch/autostop-autostart/). But the traffic to your app changes
significantly during the day and you don't want to keep a lot of stopped
Machines during the period of low traffic.
diff --git a/launch/scale-count.html.markerb b/launch/scale-count.html.markerb
index 701691fa98..113d66b5f0 100644
--- a/launch/scale-count.html.markerb
+++ b/launch/scale-count.html.markerb
@@ -334,3 +334,10 @@ fly machine destroy --force 0e286039f42e86
```
If you destroy a Machine with a volume attached, the volume remains intact until you either explicitly destroy the volume or destroy the app it belongs to.
+
+## Related reading
+
+- [Scale Machine CPU and RAM](/docs/launch/scale-machine/) How to use vertical scaling.
+- [Autoscale based on metrics](/docs/launch/autoscale-by-metric/) Learn about automatic scaling using metrics.
+- [flyctl scale — CLI reference](/docs/flyctl/scale/) Read a full breakdown of the scale subcommands.
+- [Machine Placement and Regional Capacity](/docs/machines/guides-examples/machine-placement/) Find out how region choice and resource availability affect scaling success.
diff --git a/machines/guides-examples/machine-placement.html.md b/machines/guides-examples/machine-placement.html.md
index 7e2ad35692..3e929180ac 100644
--- a/machines/guides-examples/machine-placement.html.md
+++ b/machines/guides-examples/machine-placement.html.md
@@ -84,7 +84,7 @@ Here's the [current list](/docs/reference/regions/): ams, arn, bom, cdg, dfw, ew
-### Related reading:
+### Related reading
- [An Introduction to Fly Machines](/docs/machines/overview/)
- [Regions Reference](/docs/reference/regions/)
diff --git a/machines/overview.html.markerb b/machines/overview.html.markerb
index 7a923a4b0e..17d3115cd1 100644
--- a/machines/overview.html.markerb
+++ b/machines/overview.html.markerb
@@ -164,3 +164,11 @@ API are best-effort. If you're working with us at this level of control, it's on
* Provide ephemeral storage, a blank slate on every startup
* Attach a volume for persistent storage
* Place in any region
+
+## Related reading
+
+- [Machine states and lifecycle](/docs/machines/machine-states/) Find out how Machines move through states (created → started → stopped etc), what it means, how to detect issues.
+- [Machine placement and regional capacity](/docs/machines/guides-examples/machine-placement/) Learn more about how region and host capacity affect where your Machines land and what to do if placement fails.
+- [`fly machine` CLI reference](/docs/flyctl/machine/) Use this command‑line reference for managing Machines via `flyctl` (create, update, stop, clone, etc).
+- [Working with the Machines API](/docs/machines/api/working-with-machines-api/) Read a practical guide to creating, updating, and managing Machines via API calls.
+- [OpenAPI specification](http://docs.machines.dev/#description/introduction) Use this low-level reference for the Machines API runtime, straight from the source.
diff --git a/networking/custom-domain.html.markerb b/networking/custom-domain.html.markerb
index 42b37a7e12..99d771ff1b 100644
--- a/networking/custom-domain.html.markerb
+++ b/networking/custom-domain.html.markerb
@@ -197,6 +197,9 @@ For this to work:
Alternatively, you can use the [DNS-01 challenge method](#optional-use-an-acme-dns-01-challenge) instead of the automatic validation method, though this may conflict with Cloudflare's own certificate issuance.
-## Related topics
+## Related reading
-- [Automate the certificate process for custom domains with the GraphQL API](/docs/networking/custom-domain-api/)
+- [Networking overview](/docs/networking/) Broader look at how Fly.io handles routing, DNS, IPs, and certificates.
+- [Automate the certificate process for custom domains](/docs/networking/custom-domain-api/) Use Fly.io's GraphQL API to automate cert provisioning and domain verification.
+- [TLS termination by Fly Proxy](/docs/security/tls-termination/) — How Fly.io handles HTTPS for your apps and manages TLS certificates automatically behind the scenes.
+- [Understanding Cloudflare](/docs/networking/understanding-cloudflare/) What happens when you put Fly.io behind Cloudflare, and how to avoid common pitfalls.
diff --git a/networking/private-networking.html.md b/networking/private-networking.html.md
index 275fbe5a60..14ac87933f 100644
--- a/networking/private-networking.html.md
+++ b/networking/private-networking.html.md
@@ -17,35 +17,44 @@ You can connect apps running outside of Fly.io to your 6PN using WireGuard. You
You can use `.internal` domains to connect your app to databases, API servers, or other apps in your 6PN. If you don't need the granular subdomains and routing available with `.internal`, and you want to use Fly Proxy features for your internal apps, then you should use [Flycast](/docs/networking/flycast/) instead.
-A Fly Machine is configured to resolve domain names with a custom DNS server from the Fly Platform. This DNS server can resolve arbitrary DNS queries, so you can look up `google.com` with it. But it’s also aware of 6PN addresses, and will let you look up 6PN addresses for other apps in your organization. Those addresses live under the custom top-level domain `.internal`.
+A Fly Machine is configured to resolve domain names with a custom DNS server from the Fly Platform. This DNS server can resolve arbitrary DNS queries, so you can look up `google.com` with it. But it’s also aware of 6PN addresses, and will let you look up 6PN addresses for other apps in your organization. Those addresses live under the custom top-level domain `.internal`.
Underneath `.internal` there are second-level domains for every app in your Fly organization. For example, if your app is in an organization with another app called `my-app-name`, then there will be a AAAA record at `my-app-name.internal`. The AAAA record will contain all the 6PN addresses of the started Fly Machines that belong to the `my-app-name` Fly App. Note that different libraries and tools will use multi-address AAAA records differently; most will only use the first address that is returned, but others might round-robin between entries for every request -- if you'd like to know more, consult the documentation for the library or tool you are using for DNS lookup.
-
-**Important:** All queries to Fly.io `.internal` domains only return information for started (running) Machines. Any stopped Machines, including those autostopped by Fly Proxy, are not included in the response to the DNS query.
-
-
Each `.internal` domain has further subdomains which can be used to return a more precise subset of the started Machines in that app. For example, you can add a region name qualifier to return the 6PN addresses of an app's Machines in a specific region: `iad.my-app-name.internal`. Querying this domain returns the 6PN addresses of `my-app-name` Machines in the `iad` region.
Some `.internal` domains do not contain an AAAA record, but instead contain a TXT record with Machine, app, or region information. For example, if you request the TXT records using `regions.my-app-name.internal`, then you'll get back a comma-separated list of regions that `my-app-name` is deployed in. And you can discover all the apps in the organization by requesting the TXT records associated with `_apps.internal`. This will return a comma-separated list of the app names.
-The following table lists the available `.internal` domains:
-
-| Name | AAAA | TXT |
-| -- | --- | -- |
-|`.internal`|6PN addresses of all
Machines in any
region for the app|none
-|`top.nearest.of..internal`|6PN addresses of
top _number_ closest
Machines for the app|none
-|`.vm..internal`|6PN address of
a specific Machine
for the app|none
-|`vms..internal`|none|comma-separated list
of Machine ID and region
name for the app
-|`.process..internal`|6PN addresses of
Machines in process
group for the app|none
-|`..internal`|6PN addresses of
Machines in region
for the app|none
-|`global..internal`|alias for
`.internal`|none
-|`regions..internal`|none|comma-separated list
of region names where
Machines are deployed
for app|
-|`..kv._metadata..internal`|6PN addresses of
Machines with
matching [metadata](https://community.fly.io/t/dynamic-machine-metadata/13115)|none|
-|`_apps.internal`|none|comma-separated list
of the names of all apps
in current organization|
-|`_peer.internal`|none|comma-separated list
of the names of all
WireGuard peers in
current organization|
-|`._peer.internal`|6PN address of peer|none|
-|`_instances.internal`|none|comma-separated list
of Machine ID, app name,
6PN address, and region for
all Machines in current
organization|
+
+**Important:** All AAAA queries to Fly.io `.internal` domains only return 6PN information for started (running) Machines. Any stopped Machines, including those autostopped by Fly Proxy, are not included in the response to the DNS query.
+
+
+The following table lists the available `.internal` domains for AAAA queries:
+
+| Name | AAAA Response |
+| -- | --- |
+|`.internal`|6PN addresses of all Machines
in any region for the app|
+|`top.nearest.of..internal`|6PN addresses of top _number_
closest Machines for the app|
+|`.vm..internal`|6PN address of a specific
Machine for the app|
+|`.process..internal`|6PN addresses of Machines
in process group for the app|
+|`..internal`|6PN addresses of Machines
in region for the app|
+|`global..internal`|alias for `.internal`|
+|`..kv._metadata..internal`|6PN addresses of Machines
with matching [metadata](https://community.fly.io/t/dynamic-machine-metadata/13115)|
+|`._peer.internal`|6PN address of peer|
+
+The following table lists the available `.internal` domains for TXT queries:
+
+| Name | TXT Response |
+| -- | -- |
+|`vms..internal`|comma-separated list of Machine ID and
region name for started app Machines|
+|`all.vms..internal`|comma-separated list of Machine ID and
region name for all deployed app Machines|
+|`regions..internal`|comma-separated list of region names
where Machines are started for app|
+|`all.regions..internal`|comma-separated list of region names
where Machines are deployed for app|
+|`_apps.internal`|comma-separated list of the names of all
apps in current organization|
+|`_peer.internal`|comma-separated list of the names of all
WireGuard peers in current organization|
+|`_instances.internal`|comma-separated list of Machine ID, app name,
6PN address, and region for all started Machines
in current organization|
+|`all._instances.internal`|comma-separated list of Machine ID, app name,
6PN address, and region for all deployed Machines
in current organization|
+
See the [fly-examples/privatenet](https://github.com/fly-apps/privatenet+external) repo for examples that use the `.internal` domains.
diff --git a/networking/services.html.markerb b/networking/services.html.markerb
index 51f844ca51..8ad57a4d74 100644
--- a/networking/services.html.markerb
+++ b/networking/services.html.markerb
@@ -267,3 +267,10 @@ You may have to install software on the Machine to use `dig` or `curl`. On Debia
## Default-Deny security policy
All requests to Fly.io apps are routed to our edge servers, where we use our memory-safe Rust proxy to direct traffic. The proxy listens on all ports and all Anycast addresses, so ports appear to be 'open' from the wider internet. However, nothing on your app is exposed unless you expose it via [services](/docs/networking/app-services/). You’re locked down by default.
+
+## Related reading
+
+- [Connect to an App Service](/docs/networking/app-services/) How to expose your Fly App’s processes publicly or privately through services.
+- [Dynamic Request Routing with fly‑replay](/docs/networking/dynamic-request-routing/) How to route requests between regions, apps, or machines using Fly‑specific headers.
+- [Connect Your Private Network with WireGuard](/docs/blueprints/connect-private-network-wireguard/) Set up secure access between Fly.io and your private infrastructure using WireGuard tunnels.
+- [Private Networking](/docs/networking/private-networking/) How services communicate securely over Fly.io’s private network without going through the public internet.
diff --git a/reference/regions.html.markerb b/reference/regions.html.markerb
index 13d49d0186..da0c6c33d8 100644
--- a/reference/regions.html.markerb
+++ b/reference/regions.html.markerb
@@ -52,3 +52,11 @@ You can see which regions your app is running in with [`fly status`](/docs/flyct
Learn more about Machine placement and regional capacity in this [guide](/docs/machines/guides-examples/machine-placement/).
When an application instance is started, the three-letter name for the region it's running in is stored in the Machine's `FLY_REGION` environment variable. This, along with other [Runtime Environment](/docs/machines/runtime-environment/) information, is visible to your app running on that instance.
+
+## Related reading
+
+- [Scaling to multiple regions](/docs/blueprints/resilient-apps-multiple-machines/#scaling-to-multiple-regions) Read our guide for making your app resilient and globally distributed.
+- [Cost Management](/docs/about/cost-management/) Find out how region choice, scaling strategy, and app architecture affect your Fly.io bill.
+- [Machine Placement and Regional Capacity](/docs/machines/guides-examples/machine-placement/) Learn more about how the choice of region (and region capacity) affects where your Machines land.
+- [Dynamic Request Routing with fly‑replay](/docs/networking/dynamic-request-routing/) Check out our guide to routing requests to specific regions or fallbacks using region codes.
+