diff --git a/.changeset/twelve-oranges-approve.md b/.changeset/twelve-oranges-approve.md
new file mode 100644
index 000000000..25ee7464c
--- /dev/null
+++ b/.changeset/twelve-oranges-approve.md
@@ -0,0 +1,11 @@
+---
+'astro': patch
+---
+
+Provides first-class support for a site deployed to a subpath
+
+Now you can deploy your site to a subpath more easily. Astro will use your `buildOptions.site` URL and host the dev server from there.
+
+If your site config is `http://example.com/blog` you will need to go to `http://localhost:3000/blog/` in dev and when using `astro preview`.
+
+Includes a helpful 404 page when encountering this in dev and preview.
\ No newline at end of file
diff --git a/examples/subpath/README.md b/examples/subpath/README.md
new file mode 100644
index 000000000..d1175d61a
--- /dev/null
+++ b/examples/subpath/README.md
@@ -0,0 +1,45 @@
+# Astro Starter Kit: A site deployed to a subpath
+
+```
+npm init astro -- --template subpath
+```
+
+[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/snowpackjs/astro/tree/latest/examples/subpath)
+
+> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
+
+## 🚀 Project Structure
+
+Inside of your Astro project, you'll see the following folders and files:
+
+```
+/
+├── public/
+├── src/
+│ └── components/
+│ └── Time.jsx
+│ └── pages/
+│ └── index.astro
+└── package.json
+```
+
+Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
+
+There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
+
+Any static assets, like images, can be placed in the `public/` directory.
+
+## 🧞 Commands
+
+All commands are run from the root of the project, from a terminal:
+
+| Command | Action |
+|:---------------- |:-------------------------------------------- |
+| `npm install` | Installs dependencies |
+| `npm run dev` | Starts local dev server at `localhost:3000` |
+| `npm run build` | Build your production site to `./dist/` |
+| `npm run preview` | Preview your build locally, before deploying |
+
+## 👀 Want to learn more?
+
+Feel free to check [our documentation](https://github.com/snowpackjs/astro) or jump into our [Discord server](https://astro.build/chat).
diff --git a/examples/subpath/astro.config.mjs b/examples/subpath/astro.config.mjs
new file mode 100644
index 000000000..989f60121
--- /dev/null
+++ b/examples/subpath/astro.config.mjs
@@ -0,0 +1,16 @@
+// Full Astro Configuration API Documentation:
+// https://docs.astro.build/reference/configuration-reference
+
+// @type-check enabled!
+// VSCode and other TypeScript-enabled text editors will provide auto-completion,
+// helpful tooltips, and warnings if your exported object is invalid.
+// You can disable this by removing "@ts-check" and `@type` comments below.
+
+// @ts-check
+export default /** @type {import('astro').AstroUserConfig} */ ({
+ // Comment out "renderers: []" to enable Astro's default component support.
+ buildOptions: {
+ site: 'http://example.com/blog'
+ },
+ renderers: ['@astrojs/renderer-react'],
+});
diff --git a/examples/subpath/package.json b/examples/subpath/package.json
new file mode 100644
index 000000000..2aaf016c5
--- /dev/null
+++ b/examples/subpath/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "@example/subpath",
+ "version": "0.0.1",
+ "private": true,
+ "scripts": {
+ "dev": "astro dev",
+ "start": "astro dev",
+ "build": "astro build",
+ "preview": "astro preview"
+ },
+ "devDependencies": {
+ "astro": "^0.21.0-next.3"
+ }
+}
diff --git a/examples/subpath/public/favicon.ico b/examples/subpath/public/favicon.ico
new file mode 100644
index 000000000..578ad458b
Binary files /dev/null and b/examples/subpath/public/favicon.ico differ
diff --git a/examples/subpath/public/images/penguin.png b/examples/subpath/public/images/penguin.png
new file mode 100644
index 000000000..bc9523bd4
Binary files /dev/null and b/examples/subpath/public/images/penguin.png differ
diff --git a/examples/subpath/public/robots.txt b/examples/subpath/public/robots.txt
new file mode 100644
index 000000000..1f53798bb
--- /dev/null
+++ b/examples/subpath/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /
diff --git a/examples/subpath/sandbox.config.json b/examples/subpath/sandbox.config.json
new file mode 100644
index 000000000..9178af77d
--- /dev/null
+++ b/examples/subpath/sandbox.config.json
@@ -0,0 +1,11 @@
+{
+ "infiniteLoopProtection": true,
+ "hardReloadOnChange": false,
+ "view": "browser",
+ "template": "node",
+ "container": {
+ "port": 3000,
+ "startScript": "start",
+ "node": "14"
+ }
+}
diff --git a/examples/subpath/src/components/Time.jsx b/examples/subpath/src/components/Time.jsx
new file mode 100644
index 000000000..8172b77dd
--- /dev/null
+++ b/examples/subpath/src/components/Time.jsx
@@ -0,0 +1,7 @@
+import React from 'react';
+
+export default function() {
+ const date = new Date();
+ const format = new Intl.DateTimeFormat('en-US');
+ return
+}
\ No newline at end of file
diff --git a/examples/subpath/src/pages/index.astro b/examples/subpath/src/pages/index.astro
new file mode 100644
index 000000000..b08f2e06f
--- /dev/null
+++ b/examples/subpath/src/pages/index.astro
@@ -0,0 +1,32 @@
+---
+import Time from '../components/Time.jsx'
+---
+
+
+
+