This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 027f78c36 Update new docs
027f78c36 is described below

commit 027f78c367505fa32d2ed3125e32f7f034ee9bd4
Author: James Bognar <james.bog...@salesforce.com>
AuthorDate: Mon Sep 15 13:20:43 2025 -0400

    Update new docs
---
 juneau-docs-poc/docs/topics/01.01.Overview.md      |   2 +-
 .../docs/topics/02.01.Juneau-marshall.md           |  21 ---
 .../docs/topics/02.01.Module-juneau-marshall.md    |  32 +++++
 .../docs/topics/03.01.Juneau-marshall-rdf.md       |  22 ----
 .../topics/03.01.Module-juneau-marshall-rdf.md     |  33 +++++
 juneau-docs-poc/docs/topics/04.01.Juneau-dto.md    |  17 ---
 .../docs/topics/04.01.Module-juneau-dto.md         |  28 ++++
 juneau-docs-poc/docs/topics/05.01.Juneau-config.md |  15 ---
 .../docs/topics/05.01.Module-juneau-config.md      |  26 ++++
 .../docs/topics/06.01.Juneau-assertions.md         |  18 ---
 .../docs/topics/06.01.Module-juneau-assertions.md  |  29 ++++
 ...ommon.md => 07.01.Module-juneau-rest-common.md} |  29 ++--
 ...erver.md => 08.01.Module-juneau-rest-server.md} |  29 ++--
 .../topics/09.01.Juneau-rest-server-springboot.md  |  17 ---
 .../09.01.Module-juneau-rest-server-springboot.md  |  28 ++++
 ...lient.md => 10.01.Module-juneau-rest-client.md} |  36 ++---
 .../docs/topics/11.01.Juneau-rest-mock.md          |  19 ---
 .../docs/topics/11.01.Module-juneau-rest-mock.md   |  30 +++++
 ...md => 12.01.Module-juneau-microservice-core.md} |  29 ++--
 .../docs/topics/13.01.Juneau-microservice-jetty.md |  17 ---
 .../13.01.Module-juneau-microservice-jetty.md      |  28 ++++
 ...au-petstore.md => 16.01.App-juneau-petstore.md} |   2 +-
 ...ore-api.md => 16.03.App-juneau-petstore-api.md} |  15 ++-
 ...ient.md => 16.04.App-juneau-petstore-client.md} |   2 +-
 ...rver.md => 16.05.App-juneau-petstore-server.md} |   2 +-
 juneau-docs-poc/docusaurus.config.ts               |   9 ++
 juneau-docs-poc/fix-maven-dependencies.js          | 146 +++++++++++++++++++++
 juneau-docs-poc/fix-version-placeholders.js        |  86 ++++++++++++
 juneau-docs-poc/html-to-md-converter.js            |  16 ++-
 juneau-docs-poc/rename-module-files.js             | 112 ++++++++++++++++
 juneau-docs-poc/replace-version-numbers.js         | 139 ++++++++++++++++++++
 juneau-docs-poc/sidebars.ts                        |  64 ++++-----
 juneau-docs-poc/src/components/JuneauVersion.tsx   |  24 ++++
 .../src/plugins/remark-version-replacer.js         |  40 ++++++
 juneau-docs-poc/update-sidebars.js                 |  89 +++++++++++++
 35 files changed, 1018 insertions(+), 233 deletions(-)

diff --git a/juneau-docs-poc/docs/topics/01.01.Overview.md 
b/juneau-docs-poc/docs/topics/01.01.Overview.md
index e17938ea6..22ce234d2 100644
--- a/juneau-docs-poc/docs/topics/01.01.Overview.md
+++ b/juneau-docs-poc/docs/topics/01.01.Overview.md
@@ -33,7 +33,7 @@ The easiest way to pull in the library is through the 
following maven dependency
 <dependency>
     <groupId>org.apache.juneau</groupId>
     <artifactId>juneau-all</artifactId>
-    <version>9.0.1</version>
+    <version>{{JUNEAU_VERSION}}</version>
 </dependency>
 ```
 
diff --git a/juneau-docs-poc/docs/topics/02.01.Juneau-marshall.md 
b/juneau-docs-poc/docs/topics/02.01.Juneau-marshall.md
deleted file mode 100644
index e8e7a6cc3..000000000
--- a/juneau-docs-poc/docs/topics/02.01.Juneau-marshall.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: "juneau-marshall"
----
-
-### Maven Dependency
-
-|              org.apache.juneau
-juneau-marshall
-9.0.1
-### Java Library
-
-juneau-marshall-9.0.1.jar
-### OSGi Module
-
-org.apache.juneau.marshall_9.0.1.jar
-The `juneau-marshall` artifact contains the following:
-- Foundation for all serializers and parsers.
-- Implementations for all serializers and parsers except RDF languages.
-- Extensions to Apache HttpCore components used by both client and server APIs.
-- Assertions APIs.
-- Various reusable utilities used throughout the framework.
diff --git a/juneau-docs-poc/docs/topics/02.01.Module-juneau-marshall.md 
b/juneau-docs-poc/docs/topics/02.01.Module-juneau-marshall.md
new file mode 100644
index 000000000..995031fc5
--- /dev/null
+++ b/juneau-docs-poc/docs/topics/02.01.Module-juneau-marshall.md
@@ -0,0 +1,32 @@
+---
+title: "Module: juneau-marshall"
+---
+
+##### Maven Dependency
+
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-marshall</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
+
+##### Java Library
+
+```text
+juneau-marshall-{{JUNEAU_VERSION}}.jar
+```
+
+##### OSGi Module
+
+```text
+org.apache.juneau.marshall_{{JUNEAU_VERSION}}.jar
+```
+
+The `juneau-marshall` artifact contains the following:
+- Foundation for all serializers and parsers.
+- Implementations for all serializers and parsers except RDF languages.
+- Extensions to Apache HttpCore components used by both client and server APIs.
+- Assertions APIs.
+- Various reusable utilities used throughout the framework.
diff --git a/juneau-docs-poc/docs/topics/03.01.Juneau-marshall-rdf.md 
b/juneau-docs-poc/docs/topics/03.01.Juneau-marshall-rdf.md
deleted file mode 100644
index 6ce08970d..000000000
--- a/juneau-docs-poc/docs/topics/03.01.Juneau-marshall-rdf.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: "juneau-marshall-rdf"
----
-
-### Maven Dependency
-
-|              org.apache.juneau
-juneau-marshall-rdf
-9.0.1
-### Java Library
-
-juneau-marshall-rdf-9.0.1.jar
-### OSGi Module
-
-org.apache.juneau.marshaller.rdf_9.0.1.jar
-The `juneau-marshall-rdf` library provides additional serializers and parsers 
for RDF.
-These rely on the Apache Jena library to provide support for the following 
languages:
-- RDF/XML
-- RDF/XML-Abbrev
-- N-Triple
-- Turtle
-- N3
diff --git a/juneau-docs-poc/docs/topics/03.01.Module-juneau-marshall-rdf.md 
b/juneau-docs-poc/docs/topics/03.01.Module-juneau-marshall-rdf.md
new file mode 100644
index 000000000..005d82cd2
--- /dev/null
+++ b/juneau-docs-poc/docs/topics/03.01.Module-juneau-marshall-rdf.md
@@ -0,0 +1,33 @@
+---
+title: "Module: juneau-marshall-rdf"
+---
+
+##### Maven Dependency
+
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-marshall-rdf</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
+
+##### Java Library
+
+```text
+juneau-marshall-rdf-{{JUNEAU_VERSION}}.jar
+```
+
+##### OSGi Module
+
+```text
+org.apache.juneau.marshaller.rdf_{{JUNEAU_VERSION}}.jar
+```
+
+The `juneau-marshall-rdf` library provides additional serializers and parsers 
for RDF.
+These rely on the Apache Jena library to provide support for the following 
languages:
+- RDF/XML
+- RDF/XML-Abbrev
+- N-Triple
+- Turtle
+- N3
diff --git a/juneau-docs-poc/docs/topics/04.01.Juneau-dto.md 
b/juneau-docs-poc/docs/topics/04.01.Juneau-dto.md
deleted file mode 100644
index b71a1ef09..000000000
--- a/juneau-docs-poc/docs/topics/04.01.Juneau-dto.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: "juneau-dto"
----
-
-### Maven Dependency
-
-|              org.apache.juneau
-juneau-dto
-9.0.1
-### Java Library
-
-juneau-dto-9.0.1.jar
-### OSGi Module
-
-org.apache.juneau.dto_9.0.1.jar
-The `juneau-dto` library contains several predefined POJOs for generating 
commonly-used document types.
-This section describes support for these POJOs.
diff --git a/juneau-docs-poc/docs/topics/04.01.Module-juneau-dto.md 
b/juneau-docs-poc/docs/topics/04.01.Module-juneau-dto.md
new file mode 100644
index 000000000..73d288408
--- /dev/null
+++ b/juneau-docs-poc/docs/topics/04.01.Module-juneau-dto.md
@@ -0,0 +1,28 @@
+---
+title: "Module: juneau-dto"
+---
+
+##### Maven Dependency
+
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-dto</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
+
+##### Java Library
+
+```text
+juneau-dto-{{JUNEAU_VERSION}}.jar
+```
+
+##### OSGi Module
+
+```text
+org.apache.juneau.dto_{{JUNEAU_VERSION}}.jar
+```
+
+The `juneau-dto` library contains several predefined POJOs for generating 
commonly-used document types.
+This section describes support for these POJOs.
diff --git a/juneau-docs-poc/docs/topics/05.01.Juneau-config.md 
b/juneau-docs-poc/docs/topics/05.01.Juneau-config.md
deleted file mode 100644
index 44a5d5be6..000000000
--- a/juneau-docs-poc/docs/topics/05.01.Juneau-config.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: "juneau-config"
----
-
-### Maven Dependency
-
-|              org.apache.juneau
-juneau-config
-9.0.1
-### Java Library
-
-juneau-config-9.0.1.jar
-### OSGi Module
-
-org.apache.juneau.config_9.0.1.jar
diff --git a/juneau-docs-poc/docs/topics/05.01.Module-juneau-config.md 
b/juneau-docs-poc/docs/topics/05.01.Module-juneau-config.md
new file mode 100644
index 000000000..b2f062960
--- /dev/null
+++ b/juneau-docs-poc/docs/topics/05.01.Module-juneau-config.md
@@ -0,0 +1,26 @@
+---
+title: "Module: juneau-config"
+---
+
+##### Maven Dependency
+
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-config</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
+
+##### Java Library
+
+```text
+juneau-config-{{JUNEAU_VERSION}}.jar
+```
+
+##### OSGi Module
+
+```text
+org.apache.juneau.config_{{JUNEAU_VERSION}}.jar
+```
+
diff --git a/juneau-docs-poc/docs/topics/06.01.Juneau-assertions.md 
b/juneau-docs-poc/docs/topics/06.01.Juneau-assertions.md
deleted file mode 100644
index 668da05cd..000000000
--- a/juneau-docs-poc/docs/topics/06.01.Juneau-assertions.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: "juneau-assertions"
----
-
-### Maven Dependency
-
-|              org.apache.juneau
-juneau-assertions
-9.0.1
-### Java Library
-
-juneau-assertions-9.0.1.jar
-### OSGi Module
-
-org.apache.juneau.assertions_9.0.1.jar
-The [assertions](../apidocs/org/apache/juneau/assertions.html) package in 
Juneau is a powerful API for performing fluent style assertions.
-It is used to implement built-in assertion methods on both the server and 
client side APIs.
-But it can also be used standalone for testing.
diff --git a/juneau-docs-poc/docs/topics/06.01.Module-juneau-assertions.md 
b/juneau-docs-poc/docs/topics/06.01.Module-juneau-assertions.md
new file mode 100644
index 000000000..ab91b94fe
--- /dev/null
+++ b/juneau-docs-poc/docs/topics/06.01.Module-juneau-assertions.md
@@ -0,0 +1,29 @@
+---
+title: "Module: juneau-assertions"
+---
+
+##### Maven Dependency
+
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-assertions</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
+
+##### Java Library
+
+```text
+juneau-assertions-{{JUNEAU_VERSION}}.jar
+```
+
+##### OSGi Module
+
+```text
+org.apache.juneau.assertions_{{JUNEAU_VERSION}}.jar
+```
+
+The [assertions](../apidocs/org/apache/juneau/assertions.html) package in 
Juneau is a powerful API for performing fluent style assertions.
+It is used to implement built-in assertion methods on both the server and 
client side APIs.
+But it can also be used standalone for testing.
diff --git a/juneau-docs-poc/docs/topics/07.01.Juneau-rest-common.md 
b/juneau-docs-poc/docs/topics/07.01.Module-juneau-rest-common.md
similarity index 78%
rename from juneau-docs-poc/docs/topics/07.01.Juneau-rest-common.md
rename to juneau-docs-poc/docs/topics/07.01.Module-juneau-rest-common.md
index 2870d2fdb..30edfc66f 100644
--- a/juneau-docs-poc/docs/topics/07.01.Juneau-rest-common.md
+++ b/juneau-docs-poc/docs/topics/07.01.Module-juneau-rest-common.md
@@ -1,18 +1,29 @@
 ---
-title: "juneau-rest-common"
+title: "Module: juneau-rest-common"
 ---
 
-### Maven Dependency
+##### Maven Dependency
 
-|              org.apache.juneau
-juneau-rest-common
-9.0.1
-### Java Library
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-rest-common</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
 
-juneau-rest-common-9.0.1.jar
-### OSGi Module
+##### Java Library
+
+```text
+juneau-rest-common-{{JUNEAU_VERSION}}.jar
+```
+
+##### OSGi Module
+
+```text
+org.apache.juneau.rest.common_{{JUNEAU_VERSION}}.jar
+```
 
-org.apache.juneau.rest.common_9.0.1.jar
 The [http](../apidocs/org/apache/juneau/http.html) package contains a slew of 
useful extensions to the Apache HttpComponents libraries
 and define APIs used extensively in the REST server and client APIs.
 - [http](../apidocs/org/apache/juneau/http.html) - Utility classes used for 
HTTP parts/headers/entities.
diff --git a/juneau-docs-poc/docs/topics/08.01.Juneau-rest-server.md 
b/juneau-docs-poc/docs/topics/08.01.Module-juneau-rest-server.md
similarity index 92%
rename from juneau-docs-poc/docs/topics/08.01.Juneau-rest-server.md
rename to juneau-docs-poc/docs/topics/08.01.Module-juneau-rest-server.md
index 42c30a657..0569b56ef 100644
--- a/juneau-docs-poc/docs/topics/08.01.Juneau-rest-server.md
+++ b/juneau-docs-poc/docs/topics/08.01.Module-juneau-rest-server.md
@@ -1,18 +1,29 @@
 ---
-title: "juneau-rest-server"
+title: "Module: juneau-rest-server"
 ---
 
-### Maven Dependency
+##### Maven Dependency
 
-|              org.apache.juneau
-juneau-rest-server
-9.0.1
-### Java Library
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-rest-server</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
 
-juneau-rest-server-9.0.1.jar
-### OSGi Module
+##### Java Library
+
+```text
+juneau-rest-server-{{JUNEAU_VERSION}}.jar
+```
+
+##### OSGi Module
+
+```text
+org.apache.juneau.rest.server_{{JUNEAU_VERSION}}.jar
+```
 
-org.apache.juneau.rest.server_9.0.1.jar
 The juneau-rest-server library allows you to quickly wrap POJOs and expose 
them as full-fledged REST
 resources served up in a servlet container using a bare-minimum amount of code.
 The primary goal for Juneau was to make it as easy as possible to implement 
easy-to-read and self-documenting
diff --git a/juneau-docs-poc/docs/topics/09.01.Juneau-rest-server-springboot.md 
b/juneau-docs-poc/docs/topics/09.01.Juneau-rest-server-springboot.md
deleted file mode 100644
index 2fa0bbdf5..000000000
--- a/juneau-docs-poc/docs/topics/09.01.Juneau-rest-server-springboot.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: "juneau-rest-server-springboot"
----
-
-### Maven Dependency
-
-|              org.apache.juneau
-juneau-rest-server-springboot
-9.0.1
-### Java Library
-
-juneau-rest-server-springboot-9.0.1.jar
-### OSGi Module
-
-org.apache.juneau.rest.server.springboot_9.0.1.jar
-The `juneau-rest-server-springboot` library provides classes to make it easy 
to integrate
-Juneau REST resources with Spring and Spring Boot.
diff --git 
a/juneau-docs-poc/docs/topics/09.01.Module-juneau-rest-server-springboot.md 
b/juneau-docs-poc/docs/topics/09.01.Module-juneau-rest-server-springboot.md
new file mode 100644
index 000000000..1325577c2
--- /dev/null
+++ b/juneau-docs-poc/docs/topics/09.01.Module-juneau-rest-server-springboot.md
@@ -0,0 +1,28 @@
+---
+title: "Module: juneau-rest-server-springboot"
+---
+
+##### Maven Dependency
+
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-rest-server-springboot</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
+
+##### Java Library
+
+```text
+juneau-rest-server-springboot-{{JUNEAU_VERSION}}.jar
+```
+
+##### OSGi Module
+
+```text
+org.apache.juneau.rest.server.springboot_{{JUNEAU_VERSION}}.jar
+```
+
+The `juneau-rest-server-springboot` library provides classes to make it easy 
to integrate
+Juneau REST resources with Spring and Spring Boot.
diff --git a/juneau-docs-poc/docs/topics/10.01.Juneau-rest-client.md 
b/juneau-docs-poc/docs/topics/10.01.Module-juneau-rest-client.md
similarity index 94%
rename from juneau-docs-poc/docs/topics/10.01.Juneau-rest-client.md
rename to juneau-docs-poc/docs/topics/10.01.Module-juneau-rest-client.md
index 3929c090d..232ea20cf 100644
--- a/juneau-docs-poc/docs/topics/10.01.Juneau-rest-client.md
+++ b/juneau-docs-poc/docs/topics/10.01.Module-juneau-rest-client.md
@@ -1,23 +1,33 @@
 ---
-title: "juneau-rest-client"
+title: "Module: juneau-rest-client"
 ---
 
-### Maven Dependency
+##### Maven Dependency
 
-|              org.apache.juneau
-juneau-rest-client
-9.0.1
-### Java Library
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-rest-client</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
+
+##### Java Library
+
+```text
+juneau-rest-client-{{JUNEAU_VERSION}}.jar
+```
 
-juneau-rest-client-9.0.1.jar
-### OSGi Module
+##### OSGi Module
+
+```text
+org.apache.juneau.rest.client_{{JUNEAU_VERSION}}.jar
+```
 
-org.apache.juneau.rest.client_9.0.1.jar
 Built upon the feature-rich Apache HttpClient library, the Juneau RestClient 
API adds support for fluent-style
 REST calls and the ability to perform marshalling of POJOs to and from HTTP 
parts.
 :::tip Example
 
-
 ```java
 // Create a basic REST client with JSON support and download a bean.
 MyBean bean = RestClient.create()
@@ -30,7 +40,6 @@ MyBean bean = RestClient.create()
     .getContent().as(MyBean.class);
 ```
 
-
 Breaking apart the fluent call, we can see the classes being used:
 
 ```java
@@ -47,13 +56,11 @@ ResponseContent content = res.getContent();
 MyBean bean = content.as(MyBean.class);
 ```
 
-
 :::
 
 It additionally provides support for creating remote proxy interfaces using 
REST as the transport medium.
 :::tip Example
 
-
 ```java
 // Define a Remote proxy for interacting with a REST interface.
 @Remote(path="/petstore")
@@ -76,7 +83,6 @@ CreatePet createPet = new CreatePet("Fluffy", 9.99);
 Pet pet = store.addPet(createPet, UUID.randomUUID(), true);
 ```
 
-
 The classes are closely tied to Apache HttpClient, yet provide lots of 
additional functionality:
 [RestClient](../apidocs/org/apache/juneau/rest/client/RestClient.html) 
implements [HttpClient](../apidocs/org/apache/http/client/HttpClient.html), 
creates 
[RestRequest](../apidocs/org/apache/juneau/rest/client/RestRequest.html) 
objects.
 [RestRequest](../apidocs/org/apache/juneau/rest/client/RestRequest.html) 
implements 
[HttpUriRequest](../apidocs/org/apache/http/client/methods/HttpUriRequest.html),
 creates 
[RestResponse](../apidocs/org/apache/juneau/rest/client/RestResponse.html) 
objects.
@@ -90,7 +96,6 @@ This is done using the 
[Builder#rootUrl(Object)](../apidocs/org/apache/juneau/re
 
 :::tip Example
 
-
 ```java
 // Create a client where all URIs are relative to localhost.
 RestClient client = 
RestClient.create().json().rootUrl("http://localhost:10000";).build();
@@ -99,7 +104,6 @@ RestClient client = 
RestClient.create().json().rootUrl("http://localhost:10000";)
 String content = client.get("/subpath").run().getContent().asString();
 ```
 
-
 The [RestClient](../apidocs/org/apache/juneau/rest/client/RestClient.html) 
class creates 
[RestRequest](../apidocs/org/apache/juneau/rest/client/RestRequest.html) 
objects using the following methods:
 - [RestClient](../apidocs/org/apache/juneau/rest/client/RestClient.html)
 - 
[get(uri)](../apidocs/org/apache/juneau/rest/client/RestClient.html#get(Object))
 / [get()](../apidocs/org/apache/juneau/rest/client/RestClient.html#get())
diff --git a/juneau-docs-poc/docs/topics/11.01.Juneau-rest-mock.md 
b/juneau-docs-poc/docs/topics/11.01.Juneau-rest-mock.md
deleted file mode 100644
index 2d7e0c6fc..000000000
--- a/juneau-docs-poc/docs/topics/11.01.Juneau-rest-mock.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: "juneau-rest-mock"
----
-
-### Maven Dependency
-
-|              org.apache.juneau
-juneau-rest-mock
-9.0.1
-### Java Library
-
-juneau-rest-mock-9.0.1.jar
-### OSGi Module
-
-org.apache.juneau.rest.mock_9.0.1.jar
-The `juneau-rest-mock` module contains convenience APIs for performing 
serverless unit
-testing of your REST APIs.
-Each of the APIs provide the ability to fully test your server and client REST 
interfaces without the
-need for a running servlet container.
diff --git a/juneau-docs-poc/docs/topics/11.01.Module-juneau-rest-mock.md 
b/juneau-docs-poc/docs/topics/11.01.Module-juneau-rest-mock.md
new file mode 100644
index 000000000..d7c9d0c9b
--- /dev/null
+++ b/juneau-docs-poc/docs/topics/11.01.Module-juneau-rest-mock.md
@@ -0,0 +1,30 @@
+---
+title: "Module: juneau-rest-mock"
+---
+
+##### Maven Dependency
+
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-rest-mock</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
+
+##### Java Library
+
+```text
+juneau-rest-mock-{{JUNEAU_VERSION}}.jar
+```
+
+##### OSGi Module
+
+```text
+org.apache.juneau.rest.mock_{{JUNEAU_VERSION}}.jar
+```
+
+The `juneau-rest-mock` module contains convenience APIs for performing 
serverless unit
+testing of your REST APIs.
+Each of the APIs provide the ability to fully test your server and client REST 
interfaces without the
+need for a running servlet container.
diff --git a/juneau-docs-poc/docs/topics/12.01.Juneau-microservice-core.md 
b/juneau-docs-poc/docs/topics/12.01.Module-juneau-microservice-core.md
similarity index 51%
rename from juneau-docs-poc/docs/topics/12.01.Juneau-microservice-core.md
rename to juneau-docs-poc/docs/topics/12.01.Module-juneau-microservice-core.md
index 2d2b620cb..11bd0981e 100644
--- a/juneau-docs-poc/docs/topics/12.01.Juneau-microservice-core.md
+++ b/juneau-docs-poc/docs/topics/12.01.Module-juneau-microservice-core.md
@@ -1,18 +1,29 @@
 ---
-title: "juneau-microservice-core"
+title: "Module: juneau-microservice-core"
 ---
 
-### Maven Dependency
+##### Maven Dependency
 
-|              org.apache.juneau
-juneau-microservice-core
-9.0.1
-### Java Library
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-microservice-core</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
 
-juneau-microservice-core-9.0.1.jar
-### OSGi Module
+##### Java Library
+
+```text
+juneau-microservice-core-{{JUNEAU_VERSION}}.jar
+```
+
+##### OSGi Module
+
+```text
+org.apache.juneau.microservice.core_{{JUNEAU_VERSION}}.jar
+```
 
-org.apache.juneau.microservice.core_9.0.1.jar
 Juneau Microservice is an API for creating stand-alone executable jars with 
automatic support for
 Juneau configurations and console commands.
 Features include:
diff --git a/juneau-docs-poc/docs/topics/13.01.Juneau-microservice-jetty.md 
b/juneau-docs-poc/docs/topics/13.01.Juneau-microservice-jetty.md
deleted file mode 100644
index 0c71c8e74..000000000
--- a/juneau-docs-poc/docs/topics/13.01.Juneau-microservice-jetty.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: "juneau-microservice-jetty"
----
-
-### Maven Dependency
-
-|              org.apache.juneau
-juneau-microservice-jetty
-9.0.1
-### Java Library
-
-juneau-microservice-jetty-9.0.1.jar
-### OSGi Module
-
-org.apache.juneau.microservice.jetty_9.0.1.jar
-Juneau Microservice Jetty is an API for creating stand-alone executable jars 
that can be used to
-start lightweight configurable REST interfaces with all the power of the 
Juneau REST server and client APIs.
diff --git 
a/juneau-docs-poc/docs/topics/13.01.Module-juneau-microservice-jetty.md 
b/juneau-docs-poc/docs/topics/13.01.Module-juneau-microservice-jetty.md
new file mode 100644
index 000000000..b7c6a30a3
--- /dev/null
+++ b/juneau-docs-poc/docs/topics/13.01.Module-juneau-microservice-jetty.md
@@ -0,0 +1,28 @@
+---
+title: "Module: juneau-microservice-jetty"
+---
+
+##### Maven Dependency
+
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-microservice-jetty</artifactId>
+    <version>{{JUNEAU_VERSION}}</version>
+</dependency>
+```
+
+##### Java Library
+
+```text
+juneau-microservice-jetty-{{JUNEAU_VERSION}}.jar
+```
+
+##### OSGi Module
+
+```text
+org.apache.juneau.microservice.jetty_{{JUNEAU_VERSION}}.jar
+```
+
+Juneau Microservice Jetty is an API for creating stand-alone executable jars 
that can be used to
+start lightweight configurable REST interfaces with all the power of the 
Juneau REST server and client APIs.
diff --git a/juneau-docs-poc/docs/topics/16.01.Juneau-petstore.md 
b/juneau-docs-poc/docs/topics/16.01.App-juneau-petstore.md
similarity index 96%
rename from juneau-docs-poc/docs/topics/16.01.Juneau-petstore.md
rename to juneau-docs-poc/docs/topics/16.01.App-juneau-petstore.md
index 3dac2a790..d67b2050d 100644
--- a/juneau-docs-poc/docs/topics/16.01.Juneau-petstore.md
+++ b/juneau-docs-poc/docs/topics/16.01.App-juneau-petstore.md
@@ -1,5 +1,5 @@
 ---
-title: "juneau-petstore"
+title: "App: juneau-petstore"
 ---
 
 The `PetStore` application is an functional application meant to demonstrate 
using Juneau with Spring Boot
diff --git a/juneau-docs-poc/docs/topics/16.03.Juneau-petstore-api.md 
b/juneau-docs-poc/docs/topics/16.03.App-juneau-petstore-api.md
similarity index 96%
rename from juneau-docs-poc/docs/topics/16.03.Juneau-petstore-api.md
rename to juneau-docs-poc/docs/topics/16.03.App-juneau-petstore-api.md
index 8edfe1ba1..78439bea4 100644
--- a/juneau-docs-poc/docs/topics/16.03.Juneau-petstore-api.md
+++ b/juneau-docs-poc/docs/topics/16.03.App-juneau-petstore-api.md
@@ -1,5 +1,5 @@
 ---
-title: "juneau-petstore-api"
+title: "App: juneau-petstore-api"
 ---
 
 The `juneau-petstore-api` module contains the Java interface of our 
application and the DTOs that go along
@@ -152,11 +152,16 @@ and will be describe in the client code section.
 @Path and @Body are used by both the client and server side code to map to 
REST artifacts on both
 sides.
 Both sets of annotations are provided by pulling in the Juneau dependency 
below:
-### Maven Dependency
+##### Maven Dependency
+
+```xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>juneau-marshall</artifactId>
+    <version>9.x.x</version>
+</dependency>
+```
 
-|              org.apache.juneau
-juneau-marshall
-9.x.x
 The `Pet` class is a DTO that gets serialized over the REST connection.  It is 
also annotated with JPA annotations
 so that they can easily be stored in a JPA datastore on the server side.
 ### Pet.java
diff --git a/juneau-docs-poc/docs/topics/16.04.Juneau-petstore-client.md 
b/juneau-docs-poc/docs/topics/16.04.App-juneau-petstore-client.md
similarity index 95%
rename from juneau-docs-poc/docs/topics/16.04.Juneau-petstore-client.md
rename to juneau-docs-poc/docs/topics/16.04.App-juneau-petstore-client.md
index 99a320632..130fea507 100644
--- a/juneau-docs-poc/docs/topics/16.04.Juneau-petstore-client.md
+++ b/juneau-docs-poc/docs/topics/16.04.App-juneau-petstore-client.md
@@ -1,5 +1,5 @@
 ---
-title: "juneau-petstore-client"
+title: "App: juneau-petstore-client"
 ---
 
 The `juneau-petstore-client` module contains a single `Main` class used to 
instantiate the proxy against
diff --git a/juneau-docs-poc/docs/topics/16.05.Juneau-petstore-server.md 
b/juneau-docs-poc/docs/topics/16.05.App-juneau-petstore-server.md
similarity index 99%
rename from juneau-docs-poc/docs/topics/16.05.Juneau-petstore-server.md
rename to juneau-docs-poc/docs/topics/16.05.App-juneau-petstore-server.md
index bed659704..abc532625 100644
--- a/juneau-docs-poc/docs/topics/16.05.Juneau-petstore-server.md
+++ b/juneau-docs-poc/docs/topics/16.05.App-juneau-petstore-server.md
@@ -1,5 +1,5 @@
 ---
-title: "juneau-petstore-server"
+title: "App: juneau-petstore-server"
 ---
 
 The `juneau-petstore-server` module contains all of the guts of the 
application.  It's a standard Spring Boot
diff --git a/juneau-docs-poc/docusaurus.config.ts 
b/juneau-docs-poc/docusaurus.config.ts
index 926b9f892..522697b8f 100644
--- a/juneau-docs-poc/docusaurus.config.ts
+++ b/juneau-docs-poc/docusaurus.config.ts
@@ -15,6 +15,7 @@ import {themes as prismThemes} from 'prism-react-renderer';
 import type {Config} from '@docusaurus/types';
 import type * as Preset from '@docusaurus/preset-classic';
 import remarkJuneauLinks from './src/plugins/remark-juneau-links';
+import remarkVersionReplacer from './src/plugins/remark-version-replacer';
 
 // This runs in Node.js - Don't use client-side code here (browser APIs, 
JSX...)
 
@@ -23,6 +24,11 @@ const config: Config = {
   tagline: 'Universal toolkit for marshalling POJOs to a wide variety of 
content types using a common framework',
   favicon: 'img/favicon.ico',
 
+  // Custom configuration variables
+  customFields: {
+    juneauVersion: '9.0.1',
+  },
+
   // Future flags, see https://docusaurus.io/docs/api/docusaurus-config#future
   future: {
     v4: true, // Improve compatibility with the upcoming Docusaurus v4
@@ -73,6 +79,9 @@ const config: Config = {
                 'oajmj': 'org.apache.juneau.microservice.jetty',
               },
               javadocBaseUrl: '../apidocs'
+            }],
+            [remarkVersionReplacer, {
+              version: '9.0.1'
             }]
           ]
         },
diff --git a/juneau-docs-poc/fix-maven-dependencies.js 
b/juneau-docs-poc/fix-maven-dependencies.js
new file mode 100644
index 000000000..d9c6b3bb6
--- /dev/null
+++ b/juneau-docs-poc/fix-maven-dependencies.js
@@ -0,0 +1,146 @@
+#!/usr/bin/env node
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+const fs = require('fs');
+const path = require('path');
+
+function fixMavenDependency(content) {
+    // Pattern to match malformed Maven dependency sections
+    // Matches: ### Maven 
Dependency\n\n|<spaces>org.apache.juneau\n<artifactId>\n<version>
+    const mavenPattern = /### Maven 
Dependency\s*\n\s*\n\s*\|\s*org\.apache\.juneau\s*\n([^\n]+)\s*\n([^\n]+)\s*\n/g;
+    
+    return content.replace(mavenPattern, (match, artifactId, version) => {
+        // Clean up the artifact ID and version (remove any extra whitespace)
+        const cleanArtifactId = artifactId.trim();
+        const cleanVersion = version.trim();
+        
+        return `##### Maven Dependency
+
+\`\`\`xml
+<dependency>
+    <groupId>org.apache.juneau</groupId>
+    <artifactId>${cleanArtifactId}</artifactId>
+    <version>${cleanVersion}</version>
+</dependency>
+\`\`\`
+
+`;
+    });
+}
+
+function fixJavaLibrary(content) {
+    // Pattern to match: ### Java Library\n\n<jarname>
+    const javaLibPattern = /### Java Library\s*\n\s*\n([^\n]+\.jar)\s*\n/g;
+    
+    return content.replace(javaLibPattern, (match, jarName) => {
+        const cleanJarName = jarName.trim();
+        
+        return `##### Java Library
+
+\`\`\`text
+${cleanJarName}
+\`\`\`
+
+`;
+    });
+}
+
+function fixOSGiModule(content) {
+    // Pattern to match: ### OSGi Module\n\n<module-name>
+    const osgiPattern = /### OSGi Module\s*\n\s*\n([^\n]+\.jar)\s*\n/g;
+    
+    return content.replace(osgiPattern, (match, moduleName) => {
+        const cleanModuleName = moduleName.trim();
+        
+        return `##### OSGi Module
+
+\`\`\`text
+${cleanModuleName}
+\`\`\`
+
+`;
+    });
+}
+
+function processFile(filePath) {
+    try {
+        console.log(`Processing: ${path.basename(filePath)}`);
+        let content = fs.readFileSync(filePath, 'utf8');
+        
+        // Check if file contains Maven Dependency pattern that needs fixing
+        if (content.includes('### Maven Dependency') && 
content.match(/\|\s*org\.apache\.juneau/)) {
+            let modified = false;
+            
+            const originalContent = content;
+            
+            // Fix Maven dependency
+            content = fixMavenDependency(content);
+            if (content !== originalContent) {
+                modified = true;
+            }
+            
+            // Fix Java Library
+            content = fixJavaLibrary(content);
+            
+            // Fix OSGi Module
+            content = fixOSGiModule(content);
+            
+            if (modified) {
+                fs.writeFileSync(filePath, content, 'utf8');
+                console.log(`  ✅ Fixed Maven dependency structure in 
${path.basename(filePath)}`);
+            } else {
+                console.log(`  ⏭️  No changes needed in 
${path.basename(filePath)}`);
+            }
+        } else {
+            console.log(`  ⏭️  No Maven dependency issues found in 
${path.basename(filePath)}`);
+        }
+    } catch (error) {
+        console.error(`❌ Error processing ${filePath}:`, error.message);
+    }
+}
+
+// List of files that contain "Maven Dependency"
+const filesToProcess = [
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/02.01.Juneau-marshall.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/03.01.Juneau-marshall-rdf.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/04.01.Juneau-dto.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/05.01.Juneau-config.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/06.01.Juneau-assertions.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/07.01.Juneau-rest-common.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/08.01.Juneau-rest-server.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/09.01.Juneau-rest-server-springboot.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/10.01.Juneau-rest-client.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/11.01.Juneau-rest-mock.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/12.01.Juneau-microservice-core.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/13.01.Juneau-microservice-jetty.md',
+    
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics/16.03.Juneau-petstore-api.md'
+];
+
+console.log('Fixing Maven dependency structures in all affected files...\n');
+
+let fixedCount = 0;
+for (const filePath of filesToProcess) {
+    if (fs.existsSync(filePath)) {
+        const originalContent = fs.readFileSync(filePath, 'utf8');
+        processFile(filePath);
+        const newContent = fs.readFileSync(filePath, 'utf8');
+        if (originalContent !== newContent) {
+            fixedCount++;
+        }
+    } else {
+        console.log(`❌ File not found: ${path.basename(filePath)}`);
+    }
+}
+
+console.log(`\n✅ Fixed ${fixedCount} files with Maven dependency issues!`);
diff --git a/juneau-docs-poc/fix-version-placeholders.js 
b/juneau-docs-poc/fix-version-placeholders.js
new file mode 100644
index 000000000..b845d4227
--- /dev/null
+++ b/juneau-docs-poc/fix-version-placeholders.js
@@ -0,0 +1,86 @@
+#!/usr/bin/env node
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+const fs = require('fs');
+const path = require('path');
+const glob = require('glob');
+
+function processFile(filePath) {
+    try {
+        let content = fs.readFileSync(filePath, 'utf8');
+        
+        // Check if the file contains JuneauVersion components
+        if (!content.includes('<JuneauVersion />')) {
+            return false;
+        }
+        
+        let modified = false;
+        const originalContent = content;
+        
+        // Replace <JuneauVersion /> with {{JUNEAU_VERSION}}
+        content = content.replace(/<JuneauVersion \/>/g, '{{JUNEAU_VERSION}}');
+        
+        // Remove the import statement if it exists
+        content = content.replace(/import JuneauVersion from 
'@site\/src\/components\/JuneauVersion';\s*\n/g, '');
+        
+        // Remove extra blank lines that might be left
+        content = content.replace(/\n\n\n+/g, '\n\n');
+        
+        if (content !== originalContent) {
+            fs.writeFileSync(filePath, content, 'utf8');
+            modified = true;
+        }
+        
+        return modified;
+    } catch (error) {
+        console.error(`Error processing ${filePath}:`, error.message);
+        return false;
+    }
+}
+
+function findAndProcessFiles() {
+    const docsPattern = 
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/**/*.md';
+    
+    // Find all markdown files
+    const files = glob.sync(docsPattern);
+    
+    let processedCount = 0;
+    let totalFiles = 0;
+    
+    console.log('Replacing <JuneauVersion /> with {{JUNEAU_VERSION}} 
placeholders...\n');
+    
+    for (const file of files) {
+        totalFiles++;
+        console.log(`Processing: ${path.basename(file)}`);
+        
+        if (processFile(file)) {
+            console.log(`  ✅ Updated version references`);
+            processedCount++;
+        } else {
+            console.log(`  ⏭️  No JuneauVersion components found`);
+        }
+    }
+    
+    console.log(`\n✅ Processed ${totalFiles} files, updated ${processedCount} 
files.`);
+    
+    if (processedCount > 0) {
+        console.log('\n📝 Now using {{JUNEAU_VERSION}} placeholders that work 
in code blocks!');
+        console.log('\n📝 To update the version:');
+        console.log('  - Edit docusaurus.config.ts');
+        console.log('  - Change the version in remarkVersionReplacer options');
+        console.log('  - All {{JUNEAU_VERSION}} placeholders will be replaced 
automatically!');
+    }
+}
+
+findAndProcessFiles();
diff --git a/juneau-docs-poc/html-to-md-converter.js 
b/juneau-docs-poc/html-to-md-converter.js
index 15f4fc8a7..d135c7b05 100755
--- a/juneau-docs-poc/html-to-md-converter.js
+++ b/juneau-docs-poc/html-to-md-converter.js
@@ -71,10 +71,10 @@ function convertHtmlToMarkdown(htmlContent, sourceFile) {
     
     // Convert HTML entities FIRST, before other processing (except in BXML 
blocks)
     // BXML blocks need special handling to preserve XML structure
-    markdown = 
markdown.replace(/(<p\s+class=['"]bxml['"][^>]*>[\s\S]*?<\/p>)|&lt;/gi, (match, 
bxmlBlock) => {
+    markdown = 
markdown.replace(/(<p\s+class=['"][^'"]*\bbxml(?:\s+[^'"]*)['"][^>]*>[\s\S]*?<\/p>)|&lt;/gi,
 (match, bxmlBlock) => {
         return bxmlBlock || '<';
     });
-    markdown = 
markdown.replace(/(<p\s+class=['"]bxml['"][^>]*>[\s\S]*?<\/p>)|&gt;/gi, (match, 
bxmlBlock) => {
+    markdown = 
markdown.replace(/(<p\s+class=['"][^'"]*\bbxml(?:\s+[^'"]*)['"][^>]*>[\s\S]*?<\/p>)|&gt;/gi,
 (match, bxmlBlock) => {
         return bxmlBlock || '>';
     });
     markdown = markdown.replace(/&amp;/g, '&');
@@ -83,7 +83,8 @@ function convertHtmlToMarkdown(htmlContent, sourceFile) {
     markdown = markdown.replace(/&nbsp;/g, ' ');
     
     // Convert all code block types to proper Markdown with language hints
-    markdown = 
markdown.replace(/<p\s+class=['"]b(java|json|xml|bxml|ini|console|uon|urlenc|code)['"][^>]*>((?:(?!<\/p>)[\s\S])*?)<\/p>/gi,
 (match, type, codeContent) => {
+    // Updated regex to handle width classes like 'bxml w500', 'bcode w800', 
etc.
+    markdown = 
markdown.replace(/<p\s+class=['"][^'"]*\bb(java|json|xml|bxml|ini|console|uon|urlenc|code)(?:\s+[^'"]*)['"][^>]*>((?:(?!<\/p>)[\s\S])*?)<\/p>/gi,
 (match, type, codeContent) => {
         
         // SIMPLE & RELIABLE DOCGENERATOR CONVERTER
         // Focus on getting indentation and empty lines right
@@ -203,6 +204,15 @@ function convertHtmlToMarkdown(htmlContent, sourceFile) {
             code = code.replace(/<(?!\/?[a-zA-Z][a-zA-Z0-9]*\b[^>]*>)[^>]*>/g, 
'');
         }
         
+        // For regular XML blocks (not bxml), also decode HTML entities
+        if (type === 'xml') {
+            code = code.replace(/&lt;/g, '<');
+            code = code.replace(/&gt;/g, '>');
+            code = code.replace(/&amp;/g, '&');
+            code = code.replace(/&quot;/g, '"');
+            code = code.replace(/&#39;/g, "'");
+        }
+        
         // Map code types to appropriate language hints for syntax highlighting
         const languageMap = {
             'java': 'java',
diff --git a/juneau-docs-poc/rename-module-files.js 
b/juneau-docs-poc/rename-module-files.js
new file mode 100644
index 000000000..1f74e2936
--- /dev/null
+++ b/juneau-docs-poc/rename-module-files.js
@@ -0,0 +1,112 @@
+#!/usr/bin/env node
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+const fs = require('fs');
+const path = require('path');
+
+// Define the renaming rules
+const renameRules = [
+    // Module files
+    { old: '02.01.Juneau-marshall.md', new: '02.01.Module-juneau-marshall.md', 
title: 'Module: juneau-marshall' },
+    { old: '03.01.Juneau-marshall-rdf.md', new: 
'03.01.Module-juneau-marshall-rdf.md', title: 'Module: juneau-marshall-rdf' },
+    { old: '04.01.Juneau-dto.md', new: '04.01.Module-juneau-dto.md', title: 
'Module: juneau-dto' },
+    { old: '05.01.Juneau-config.md', new: '05.01.Module-juneau-config.md', 
title: 'Module: juneau-config' },
+    { old: '06.01.Juneau-assertions.md', new: 
'06.01.Module-juneau-assertions.md', title: 'Module: juneau-assertions' },
+    { old: '07.01.Juneau-rest-common.md', new: 
'07.01.Module-juneau-rest-common.md', title: 'Module: juneau-rest-common' },
+    { old: '08.01.Juneau-rest-server.md', new: 
'08.01.Module-juneau-rest-server.md', title: 'Module: juneau-rest-server' },
+    { old: '09.01.Juneau-rest-server-springboot.md', new: 
'09.01.Module-juneau-rest-server-springboot.md', title: 'Module: 
juneau-rest-server-springboot' },
+    { old: '10.01.Juneau-rest-client.md', new: 
'10.01.Module-juneau-rest-client.md', title: 'Module: juneau-rest-client' },
+    { old: '11.01.Juneau-rest-mock.md', new: 
'11.01.Module-juneau-rest-mock.md', title: 'Module: juneau-rest-mock' },
+    { old: '12.01.Juneau-microservice-core.md', new: 
'12.01.Module-juneau-microservice-core.md', title: 'Module: 
juneau-microservice-core' },
+    { old: '13.01.Juneau-microservice-jetty.md', new: 
'13.01.Module-juneau-microservice-jetty.md', title: 'Module: 
juneau-microservice-jetty' },
+    
+    // Petstore files (these should be "App:" instead of "Module:")
+    { old: '16.01.Juneau-petstore.md', new: '16.01.App-juneau-petstore.md', 
title: 'App: juneau-petstore' },
+    { old: '16.03.Juneau-petstore-api.md', new: 
'16.03.App-juneau-petstore-api.md', title: 'App: juneau-petstore-api' },
+    { old: '16.04.Juneau-petstore-client.md', new: 
'16.04.App-juneau-petstore-client.md', title: 'App: juneau-petstore-client' },
+    { old: '16.05.Juneau-petstore-server.md', new: 
'16.05.App-juneau-petstore-server.md', title: 'App: juneau-petstore-server' }
+];
+
+const docsDir = '/Users/james.bognar/git/juneau/juneau-docs-poc/docs/topics';
+
+function updateFileTitle(filePath, newTitle) {
+    try {
+        const content = fs.readFileSync(filePath, 'utf8');
+        
+        // Update the title in the frontmatter
+        const updatedContent = 
content.replace(/^title:\s*["']?([^"'\n]+)["']?$/m, `title: "${newTitle}"`);
+        
+        fs.writeFileSync(filePath, updatedContent, 'utf8');
+        return true;
+    } catch (error) {
+        console.error(`Error updating title in ${filePath}:`, error.message);
+        return false;
+    }
+}
+
+function renameFile(oldPath, newPath, newTitle) {
+    try {
+        // First update the title
+        if (updateFileTitle(oldPath, newTitle)) {
+            console.log(`  ✅ Updated title to "${newTitle}"`);
+        }
+        
+        // Then rename the file
+        fs.renameSync(oldPath, newPath);
+        console.log(`  ✅ Renamed: ${path.basename(oldPath)} → 
${path.basename(newPath)}`);
+        return true;
+    } catch (error) {
+        console.error(`❌ Error renaming ${oldPath}:`, error.message);
+        return false;
+    }
+}
+
+console.log('Renaming module and app files...\n');
+
+let renamedCount = 0;
+const sidebarUpdates = [];
+
+for (const rule of renameRules) {
+    const oldPath = path.join(docsDir, rule.old);
+    const newPath = path.join(docsDir, rule.new);
+    
+    console.log(`Processing: ${rule.old}`);
+    
+    if (fs.existsSync(oldPath)) {
+        if (renameFile(oldPath, newPath, rule.title)) {
+            renamedCount++;
+            
+            // Track sidebar ID changes
+            const oldId = rule.old.replace('.md', '');
+            const newId = rule.new.replace('.md', '');
+            sidebarUpdates.push({ oldId, newId, label: rule.title });
+        }
+    } else {
+        console.log(`  ⚠️  File not found: ${rule.old}`);
+    }
+    console.log('');
+}
+
+console.log(`✅ Successfully renamed ${renamedCount} files!`);
+
+// Output sidebar update information
+if (sidebarUpdates.length > 0) {
+    console.log('\n📝 Sidebar updates needed:');
+    console.log('The following ID and label changes need to be made in 
sidebars.ts:');
+    
+    for (const update of sidebarUpdates) {
+        console.log(`  - id: 'topics/${update.oldId}' → 
'topics/${update.newId}'`);
+        console.log(`  - label: '...' → '${update.label}'`);
+    }
+}
diff --git a/juneau-docs-poc/replace-version-numbers.js 
b/juneau-docs-poc/replace-version-numbers.js
new file mode 100644
index 000000000..cdfbbc13b
--- /dev/null
+++ b/juneau-docs-poc/replace-version-numbers.js
@@ -0,0 +1,139 @@
+#!/usr/bin/env node
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+const fs = require('fs');
+const path = require('path');
+const glob = require('glob');
+
+// Import the component at the top of files that use it
+const IMPORT_STATEMENT = `import JuneauVersion from 
'@site/src/components/JuneauVersion';
+
+`;
+
+function processFile(filePath) {
+    try {
+        let content = fs.readFileSync(filePath, 'utf8');
+        
+        // Check if the file contains version numbers
+        if (!content.includes('9.0.1')) {
+            return false; // No changes needed
+        }
+        
+        let modified = false;
+        const originalContent = content;
+        
+        // Replace version numbers in different contexts
+        
+        // 1. In Maven dependencies
+        content = content.replace(
+            /<version>9\.0\.1<\/version>/g, 
+            '<version><JuneauVersion /></version>'
+        );
+        
+        // 2. In jar file names  
+        content = content.replace(
+            /([a-zA-Z-]+)-9\.0\.1\.jar/g,
+            '$1-<JuneauVersion />.jar'
+        );
+        
+        // 3. In OSGi module names
+        content = content.replace(
+            /([a-zA-Z.]+)_9\.0\.1\.jar/g,
+            '$1_<JuneauVersion />.jar'
+        );
+        
+        // 4. In plain text mentions (be careful not to replace in URLs or 
other contexts)
+        content = content.replace(
+            /(\s|^)9\.0\.1(\s|$|\.)/g,
+            '$1<JuneauVersion />$2'
+        );
+        
+        // If we made changes, add the import statement at the top (after 
frontmatter)
+        if (content !== originalContent) {
+            // Check if import already exists
+            if (!content.includes('import JuneauVersion')) {
+                // Find the end of frontmatter
+                const frontmatterEnd = content.indexOf('---', 3);
+                if (frontmatterEnd !== -1) {
+                    // Insert after frontmatter
+                    const beforeFrontmatter = content.substring(0, 
frontmatterEnd + 3);
+                    const afterFrontmatter = content.substring(frontmatterEnd 
+ 3);
+                    content = beforeFrontmatter + '\n\n' + IMPORT_STATEMENT + 
afterFrontmatter;
+                } else {
+                    // No frontmatter, add at the beginning
+                    content = IMPORT_STATEMENT + content;
+                }
+            }
+            modified = true;
+        }
+        
+        if (modified) {
+            fs.writeFileSync(filePath, content, 'utf8');
+            return true;
+        }
+        
+        return false;
+    } catch (error) {
+        console.error(`Error processing ${filePath}:`, error.message);
+        return false;
+    }
+}
+
+function findAndProcessFiles() {
+    const docsPattern = 
'/Users/james.bognar/git/juneau/juneau-docs-poc/docs/**/*.md';
+    
+    // Find all markdown files
+    const files = glob.sync(docsPattern);
+    
+    let processedCount = 0;
+    let totalFiles = 0;
+    
+    console.log('Replacing version numbers with <JuneauVersion /> 
component...\n');
+    
+    for (const file of files) {
+        totalFiles++;
+        console.log(`Processing: ${path.basename(file)}`);
+        
+        if (processFile(file)) {
+            console.log(`  ✅ Updated version references`);
+            processedCount++;
+        } else {
+            console.log(`  ⏭️  No version references found`);
+        }
+    }
+    
+    console.log(`\n✅ Processed ${totalFiles} files, updated ${processedCount} 
files with version references.`);
+    
+    if (processedCount > 0) {
+        console.log('\n📝 Usage in Markdown files:');
+        console.log('  - Maven dependencies: <version><JuneauVersion 
/></version>');
+        console.log('  - JAR files: juneau-marshall-<JuneauVersion />.jar');
+        console.log('  - Text: Version <JuneauVersion />');
+        console.log('\n📝 To update the version:');
+        console.log('  - Edit docusaurus.config.ts');
+        console.log('  - Change customFields.juneauVersion to the new 
version');
+        console.log('  - All references will update automatically!');
+    }
+}
+
+// Check if glob is available
+try {
+    require.resolve('glob');
+} catch (e) {
+    console.error('Error: The "glob" package is required but not installed.');
+    console.error('Please run: npm install glob');
+    process.exit(1);
+}
+
+findAndProcessFiles();
diff --git a/juneau-docs-poc/sidebars.ts b/juneau-docs-poc/sidebars.ts
index 9088fe640..2142326d9 100644
--- a/juneau-docs-poc/sidebars.ts
+++ b/juneau-docs-poc/sidebars.ts
@@ -91,8 +91,8 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'doc',
-          id: 'topics/02.01.Juneau-marshall',
-          label: '2.1. Juneau Marshall',
+          id: 'topics/02.01.Module-juneau-marshall',
+          label: '2.1. Module: juneau-marshall',
         },
         {
           type: 'doc',
@@ -600,8 +600,8 @@ const sidebars: SidebarsConfig = {
     },
     {
       type: 'doc',
-      id: 'topics/03.01.Juneau-marshall-rdf',
-      label: '3. Marshall RDF',
+      id: 'topics/03.01.Module-juneau-marshall-rdf',
+      label: '3. Module: juneau-marshall-rdf',
     },
     {
       type: 'category',
@@ -610,8 +610,8 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'doc',
-          id: 'topics/04.01.Juneau-dto',
-          label: '4.1. Juneau DTO',
+          id: 'topics/04.01.Module-juneau-dto',
+          label: '4.1. Module: juneau-dto',
         },
         {
           type: 'doc',
@@ -647,8 +647,8 @@ const sidebars: SidebarsConfig = {
           items: [
             {
               type: 'doc',
-              id: 'topics/05.01.Juneau-config',
-              label: '5.1. Juneau Config',
+              id: 'topics/05.01.Module-juneau-config',
+              label: '5.1. Module: juneau-config',
             },
             {
               type: 'doc',
@@ -819,8 +819,8 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'doc',
-          id: 'topics/06.01.Juneau-assertions',
-          label: '6.1. Juneau Assertions',
+          id: 'topics/06.01.Module-juneau-assertions',
+          label: '6.1. Module: juneau-assertions',
         },
         {
           type: 'doc',
@@ -836,8 +836,8 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'doc',
-          id: 'topics/07.01.Juneau-rest-common',
-          label: '7.1. Juneau REST Common',
+          id: 'topics/07.01.Module-juneau-rest-common',
+          label: '7.1. Module: juneau-rest-common',
         },
         {
           type: 'doc',
@@ -883,8 +883,8 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'doc',
-          id: 'topics/08.01.Juneau-rest-server',
-          label: '8.1. Juneau REST Server',
+          id: 'topics/08.01.Module-juneau-rest-server',
+          label: '8.1. Module: juneau-rest-server',
         },
         {
           type: 'category',
@@ -1240,8 +1240,8 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'doc',
-          id: 'topics/09.01.Juneau-rest-server-springboot',
-          label: '9.1. Juneau REST Server SpringBoot',
+          id: 'topics/09.01.Module-juneau-rest-server-springboot',
+          label: '9.1. Module: juneau-rest-server-springboot',
         },
         {
           type: 'doc',
@@ -1257,8 +1257,8 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'doc',
-          id: 'topics/10.01.Juneau-rest-client',
-          label: '10.1. Juneau REST Client',
+          id: 'topics/10.01.Module-juneau-rest-client',
+          label: '10.1. Module: juneau-rest-client',
         },
         {
           type: 'doc',
@@ -1413,8 +1413,8 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'doc',
-          id: 'topics/11.01.Juneau-rest-mock',
-          label: '11.1. Juneau REST Mock',
+          id: 'topics/11.01.Module-juneau-rest-mock',
+          label: '11.1. Module: juneau-rest-mock',
         },
         {
           type: 'doc',
@@ -1430,8 +1430,8 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'doc',
-          id: 'topics/12.01.Juneau-microservice-core',
-          label: '12.1. Juneau Microservice Core',
+          id: 'topics/12.01.Module-juneau-microservice-core',
+          label: '12.1. Module: juneau-microservice-core',
         },
         {
           type: 'doc',
@@ -1487,8 +1487,8 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'doc',
-          id: 'topics/13.01.Juneau-microservice-jetty',
-          label: '13.1. Juneau Microservice Jetty',
+          id: 'topics/13.01.Module-juneau-microservice-jetty',
+          label: '13.1. Module: juneau-microservice-jetty',
         },
         {
           type: 'doc',
@@ -1593,8 +1593,8 @@ const sidebars: SidebarsConfig = {
       items: [
         {
           type: 'doc',
-          id: 'topics/16.01.Juneau-petstore',
-          label: '16.1. Juneau PetStore',
+          id: 'topics/16.01.App-juneau-petstore',
+          label: '16.1. App: juneau-petstore',
         },
         {
           type: 'doc',
@@ -1603,18 +1603,18 @@ const sidebars: SidebarsConfig = {
         },
         {
           type: 'doc',
-          id: 'topics/16.03.Juneau-petstore-api',
-          label: '16.3. Juneau PetStore API',
+          id: 'topics/16.03.App-juneau-petstore-api',
+          label: '16.3. App: juneau-petstore-api',
         },
         {
           type: 'doc',
-          id: 'topics/16.04.Juneau-petstore-client',
-          label: '16.4. Juneau PetStore Client',
+          id: 'topics/16.04.App-juneau-petstore-client',
+          label: '16.4. App: juneau-petstore-client',
         },
         {
           type: 'doc',
-          id: 'topics/16.05.Juneau-petstore-server',
-          label: '16.5. Juneau PetStore Server',
+          id: 'topics/16.05.App-juneau-petstore-server',
+          label: '16.5. App: juneau-petstore-server',
         },
       ],
     },
diff --git a/juneau-docs-poc/src/components/JuneauVersion.tsx 
b/juneau-docs-poc/src/components/JuneauVersion.tsx
new file mode 100644
index 000000000..9f1b3aefe
--- /dev/null
+++ b/juneau-docs-poc/src/components/JuneauVersion.tsx
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+import React from 'react';
+import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
+
+/**
+ * Component to display the current Juneau version.
+ * Usage in Markdown: <JuneauVersion />
+ */
+export default function JuneauVersion(): JSX.Element {
+  const {siteConfig} = useDocusaurusContext();
+  return <>{siteConfig.customFields?.juneauVersion as string}</>;
+}
diff --git a/juneau-docs-poc/src/plugins/remark-version-replacer.js 
b/juneau-docs-poc/src/plugins/remark-version-replacer.js
new file mode 100644
index 000000000..e49a04a85
--- /dev/null
+++ b/juneau-docs-poc/src/plugins/remark-version-replacer.js
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+const { visit } = require('unist-util-visit');
+
+/**
+ * Remark plugin to replace version placeholders with actual version numbers.
+ * This works inside code blocks and anywhere else in the markdown.
+ */
+function remarkVersionReplacer(options = {}) {
+  const version = options.version || '9.0.1';
+  
+  return (tree) => {
+    visit(tree, ['text', 'code'], (node) => {
+      if (node.value) {
+        // Replace {{JUNEAU_VERSION}} with the actual version
+        node.value = node.value.replace(/\{\{JUNEAU_VERSION\}\}/g, version);
+      }
+    });
+    
+    visit(tree, 'code', (node) => {
+      if (node.value) {
+        // Also handle code blocks specifically
+        node.value = node.value.replace(/\{\{JUNEAU_VERSION\}\}/g, version);
+      }
+    });
+  };
+}
+
+module.exports = remarkVersionReplacer;
diff --git a/juneau-docs-poc/update-sidebars.js 
b/juneau-docs-poc/update-sidebars.js
new file mode 100644
index 000000000..1eb82b8d7
--- /dev/null
+++ b/juneau-docs-poc/update-sidebars.js
@@ -0,0 +1,89 @@
+#!/usr/bin/env node
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+const fs = require('fs');
+const path = require('path');
+
+const sidebarFile = 
'/Users/james.bognar/git/juneau/juneau-docs-poc/sidebars.ts';
+
+// Define the updates needed
+const updates = [
+    // Module files
+    { oldId: 'topics/02.01.Juneau-marshall', newId: 
'topics/02.01.Module-juneau-marshall', newLabel: 'Module: juneau-marshall' },
+    { oldId: 'topics/03.01.Juneau-marshall-rdf', newId: 
'topics/03.01.Module-juneau-marshall-rdf', newLabel: 'Module: 
juneau-marshall-rdf' },
+    { oldId: 'topics/04.01.Juneau-dto', newId: 
'topics/04.01.Module-juneau-dto', newLabel: 'Module: juneau-dto' },
+    { oldId: 'topics/05.01.Juneau-config', newId: 
'topics/05.01.Module-juneau-config', newLabel: 'Module: juneau-config' },
+    { oldId: 'topics/06.01.Juneau-assertions', newId: 
'topics/06.01.Module-juneau-assertions', newLabel: 'Module: juneau-assertions' 
},
+    { oldId: 'topics/07.01.Juneau-rest-common', newId: 
'topics/07.01.Module-juneau-rest-common', newLabel: 'Module: 
juneau-rest-common' },
+    { oldId: 'topics/08.01.Juneau-rest-server', newId: 
'topics/08.01.Module-juneau-rest-server', newLabel: 'Module: 
juneau-rest-server' },
+    { oldId: 'topics/09.01.Juneau-rest-server-springboot', newId: 
'topics/09.01.Module-juneau-rest-server-springboot', newLabel: 'Module: 
juneau-rest-server-springboot' },
+    { oldId: 'topics/10.01.Juneau-rest-client', newId: 
'topics/10.01.Module-juneau-rest-client', newLabel: 'Module: 
juneau-rest-client' },
+    { oldId: 'topics/11.01.Juneau-rest-mock', newId: 
'topics/11.01.Module-juneau-rest-mock', newLabel: 'Module: juneau-rest-mock' },
+    { oldId: 'topics/12.01.Juneau-microservice-core', newId: 
'topics/12.01.Module-juneau-microservice-core', newLabel: 'Module: 
juneau-microservice-core' },
+    { oldId: 'topics/13.01.Juneau-microservice-jetty', newId: 
'topics/13.01.Module-juneau-microservice-jetty', newLabel: 'Module: 
juneau-microservice-jetty' },
+    
+    // App files (petstore)
+    { oldId: 'topics/16.01.Juneau-petstore', newId: 
'topics/16.01.App-juneau-petstore', newLabel: 'App: juneau-petstore' },
+    { oldId: 'topics/16.03.Juneau-petstore-api', newId: 
'topics/16.03.App-juneau-petstore-api', newLabel: 'App: juneau-petstore-api' },
+    { oldId: 'topics/16.04.Juneau-petstore-client', newId: 
'topics/16.04.App-juneau-petstore-client', newLabel: 'App: 
juneau-petstore-client' },
+    { oldId: 'topics/16.05.Juneau-petstore-server', newId: 
'topics/16.05.App-juneau-petstore-server', newLabel: 'App: 
juneau-petstore-server' }
+];
+
+function updateSidebar() {
+    try {
+        let content = fs.readFileSync(sidebarFile, 'utf8');
+        let updateCount = 0;
+        
+        for (const update of updates) {
+            // Update the ID
+            const idPattern = new 
RegExp(`id:\\s*['"]${update.oldId.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}['"]`, 
'g');
+            if (content.match(idPattern)) {
+                content = content.replace(idPattern, `id: '${update.newId}'`);
+                console.log(`  ✅ Updated ID: ${update.oldId} → 
${update.newId}`);
+                updateCount++;
+            }
+            
+            // Find and update the corresponding label
+            // Look for the label that comes after this ID
+            const sections = content.split(idPattern);
+            if (sections.length > 1) {
+                // Find the label in the same block
+                const labelPattern = /label:\s*['"]([^'"]+)['"]/;
+                const afterId = sections[1];
+                const labelMatch = afterId.match(labelPattern);
+                if (labelMatch) {
+                    const currentLabel = labelMatch[1];
+                    // Only update if the label looks like it needs updating
+                    if (currentLabel.includes('Juneau') && 
!currentLabel.startsWith('Module:') && !currentLabel.startsWith('App:')) {
+                        content = content.replace(
+                            new 
RegExp(`(id:\\s*['"]${update.newId.replace(/[.*+?^${}()|[\]\\]/g, 
'\\$&')}['"][^}]*label:\\s*)['"]${currentLabel.replace(/[.*+?^${}()|[\]\\]/g, 
'\\$&')}['"]`),
+                            `$1'${update.newLabel}'`
+                        );
+                        console.log(`  ✅ Updated label: "${currentLabel}" → 
"${update.newLabel}"`);
+                    }
+                }
+            }
+        }
+        
+        fs.writeFileSync(sidebarFile, content, 'utf8');
+        console.log(`\n✅ Updated sidebars.ts with ${updateCount} ID changes!`);
+        return true;
+    } catch (error) {
+        console.error('❌ Error updating sidebars.ts:', error.message);
+        return false;
+    }
+}
+
+console.log('Updating sidebars.ts with new file references...\n');
+updateSidebar();

Reply via email to