diff --git a/docs/0.2.x/theme/header.hbs b/docs/0.2.x/theme/header.hbs
new file mode 120000
index 0000000000..e2d3670739
--- /dev/null
+++ b/docs/0.2.x/theme/header.hbs
@@ -0,0 +1 @@
+../../common/header_old.hbs
\ No newline at end of file
diff --git a/docs/0.2.x/theme/index.hbs b/docs/0.2.x/theme/index.hbs
new file mode 120000
index 0000000000..485815ad53
--- /dev/null
+++ b/docs/0.2.x/theme/index.hbs
@@ -0,0 +1 @@
+../../common/index.hbs
\ No newline at end of file
diff --git a/docs/0.3.x/book.toml b/docs/0.3.x/book.toml
new file mode 120000
index 0000000000..bc4f95b8e1
--- /dev/null
+++ b/docs/0.3.x/book.toml
@@ -0,0 +1 @@
+../common/book.toml
\ No newline at end of file
diff --git a/docs/0.3.x/src/SUMMARY.md b/docs/0.3.x/src/SUMMARY.md
new file mode 100644
index 0000000000..f669666806
--- /dev/null
+++ b/docs/0.3.x/src/SUMMARY.md
@@ -0,0 +1,51 @@
+# Summary
+
+- [Introduction](./intro.md)
+ - [What is Perseus?](./what-is-perseus.md)
+ - [Hello World!](./hello-world.md)
+- [Your Second App](./second-app.md)
+***
+# Reference
+
+- [`define_app!`](./define-app.md)
+- [Writing Views](./views.md)
+- [Debugging](./debugging.md)
+- [Templates and Routing](./templates/intro.md)
+ - [Modifying the `
`](./templates/metadata-modification.md)
+ - [Modifying HTTP Headers](./templates/setting-headers.md)
+- [Error Pages](./error-pages.md)
+- [Static Content](./static-content.md)
+- [Internationalization](./i18n/intro.md)
+ - [Defining Translations](./i18n/defining.md)
+ - [Using Translations](./i18n/using.md)
+ - [Translations Managers](./i18n/translations-managers.md)
+ - [Other Translation Engines](./i18n/other-engines.md)
+- [Rendering Strategies](./strategies/intro.md)
+ - [Build State](./strategies/build-state.md)
+ - [Build Paths](./strategies/build-paths.md)
+ - [Request State](./strategies/request-state.md)
+ - [Revalidation](./strategies/revalidation.md)
+ - [Incremental Generation](./strategies/incremental.md)
+ - [State Amalgamation](./strategies/amlagamation.md)
+- [CLI](./cli.md)
+ - [Ejecting](./ejecting.md)
+- [Testing](./testing/intro.md)
+ - [Checkpoints](./testing/checkpoints.md)
+ - [Fantoccini Basics](./testing/fantoccini-basics.md)
+ - [Manual Testing](./testing/manual.md)
+- [Styling](./styling.md)
+- [Stores](./stores.md)
+- [Static Exporting](./exporting.md)
+- [Deploying](./deploying/intro.md)
+ - [Server Deployment](./deploying/serverful.md)
+ - [Serverless Deployment](./deploying/serverless.md)
+ - [Optimizing Code Size](./deploying/size.md)
+- [Migrating from v0.2.x](./updating.md)
+***
+# Advanced
+
+- [Under the Hood](./advanced/intro.md)
+ - [Architecture](./advanced/arch.md)
+ - [Initial Loads](./advanced/initial-loads.md)
+ - [Subsequent Loads](./advanced/subsequent-loads.md)
+ - [Routing](./advanced/routing.md)
diff --git a/docs/0.3.x/src/advanced/arch.md b/docs/0.3.x/src/advanced/arch.md
new file mode 100644
index 0000000000..6f5643e1cf
--- /dev/null
+++ b/docs/0.3.x/src/advanced/arch.md
@@ -0,0 +1,50 @@
+# Architecture
+
+Perseus has five main components:
+
+- `perseus` -- the core module that defines everything necessary to build a Perseus app if you try hard enough
+- `perseus-actix-web` -- an integration that makes it easy to run Perseus on the [Actix Web](https://actix.rs) framework
+- `perseus-cli` -- the command-line interface used to run Perseus apps conveniently
+- `perseus-cli-builder` -- an internal crate created by the CLI responsible for building an app
+- `perseus-cli-server` -- an internal crate created by the CLI responsible for serving an app and performing runtime logic
+
+## Core
+
+At the core of Perseus is the [`perseus`](https://docs.rs/perseus) module, which is used for nearly everything in Perseus. In theory, you could build a fully-functional app based on this crate alone, but you'd be reinventing the wheel at least three times. This crate exposes types for the i18n systems, configuration management, routing, and asset fetching, most of which aren't intended to be used directly by the user.
+
+What is intended to be used directly is the `Template` `struct`, which is integral to Perseus. This stores closures for every rendering strategy, which are executed as provided and necessary at build and runtime. Note that these are all stored in `Rc`s, and `Template`s are cloned.
+
+The other commonly used system from this crate is the `Translator` system, explained in detail in [the i18n section](../i18n/intro.md). `Translator`s are passed around in `Rc`s, and `TranslationsManager` on the server caches all translations by default in memory on the server.
+
+## Actix Web Integration
+
+The core of Perseus provides very few systems to set up a functional Perseus server though, which requires a significant amount of additional work. To this end, [`perseus-actix-web`](https://docs.rs/perseus-actix-web) is used to make this process easy. If you've ejected, you'll be working with this directly, which should be relatively simple, as it just accepts configuration options and then should simply work.
+
+Note that this module provides a `configurer` function, which allows it to be modularly added to any existing Actix Web server, which is particularly useful if you want to run other endpoint on your server, or a system like [Diana](https://github.com/arctic-hen7/diana).
+
+## CLI
+
+As documented in [this section](../cli.md), the CLI simply runs commands to execute the last two components of the Perseus system, acting as a convenience. It also contains these two components inside its binary (using [`include_dir!`](https://github.com/Michael-F-Bryan/include_dir))
+
+## CLI Builder
+
+This system can be further broken down into two parts.
+
+### Static Generator
+
+This is a single binary that just imports the user's templates and some other information (like locales) and then calls `build_app`. This will result in generating a number of files to `.perseus/dist`, which will be served by the server to any clients, which will then hydrate those static pages into fully-fledged Sycamore templates.
+
+### App Shell
+
+This is encapsulated in `.perseus/src/lib.rs`, and it performs a number of integral functions:
+
+- Ensures that any `panic!`s or the like ar printed properly in the browser console
+- Creates and manages the internal router
+- Renders your actual app
+- Handles locale detection
+- Invokes the core app shell to manage initial/subsequent loads and translations
+- Handles error page displaying
+
+## CLI Server
+
+This is just an invocation of the `perseus-actix-web` module's systems with the data provided by the user through the `define_app!` macro. This also sets the default location for static content and the `index.html` file.
diff --git a/docs/0.3.x/src/advanced/initial-loads.md b/docs/0.3.x/src/advanced/initial-loads.md
new file mode 100644
index 0000000000..108ceeacc2
--- /dev/null
+++ b/docs/0.3.x/src/advanced/initial-loads.md
@@ -0,0 +1,23 @@
+# Initial Loads
+
+Perseus handles _initial loads_ very differently from _subsequent loads_. The former refers to what's done when a user visits a page on a Perseus app from an external source (e.g. visiting from a search engine, redirected from another site), and this requires a full HTMl page to be sent that can be interpreted by the browser. By contrast, subsequent loads are loads between pages within the same Perseus app, which can be performed by the app shell (described in the next section).
+
+The process of initial loads is slightly complex, and occurs like so (this example is for a page called `/posts/test`, rendered with incremental generation):
+
+1. Browser requests `/posts/test` from the server.
+2. Server matches requested URL to wildcard (`*`) and handles it with the server-side inferred router, determining which `Template` to use.
+3. Server calls internal core methods to render the page (using incremental generation strategy, but it doesn't need to know that), producing an HTML snippet and a set of JSON properties.
+4. Server calls `template.render_head_str()` and injects the result into the document's `` (avoiding `` flashes and improving SEO) after a delimiter comment that separates it from the metadata on every page (which is hardcoded into `index.html`).
+5. Server interpolates JSON state into `index.html` as a global variable in a `