@underpostnet/underpost
Version:
Underpost Platform — end-to-end CI/CD and application-delivery toolchain CLI. Covers bare metal, Kubernetes, K3s, kubeadm, LXD, container/image orchestration, secrets, databases, cron jobs, monitoring, SSH, runners, PWA + Workbox delivery, and release orc
151 lines (113 loc) • 5.63 kB
Markdown
# Static Page Example
Generate static HTML pages using the `underpost static` CLI.
## Quick Start
```sh
# From the project root directory:
underpost static --page ./examples/static-page/ssr-components/CustomPage.js \
--output-path ./public/default.net/example.html
```
## Using a Config File
A JSON config file lets you define all options in one place instead of passing CLI flags.
**Generate a starter config:**
```sh
underpost static --generate-config ./static-config.json
```
**Build from the included example config:**
```sh
underpost static --config-file ./examples/static-page/static-config-example.json
```
## Preview with Static Server
Use `--run-sv` to start a standalone Express static file server that serves the build output directory, so you can preview your generated pages in a browser.
```sh
# Build and serve on default port 5000:
underpost static --page ./examples/static-page/ssr-components/CustomPage.js \
--output-path ./dist/index.html \
--run-sv
# Build and serve on a custom port:
underpost static --page ./examples/static-page/ssr-components/CustomPage.js \
--output-path ./dist/index.html \
--run-sv 3000
# Serve an existing build directory without rebuilding:
underpost static --output-path ./dist/index.html --run-sv
# Serve the current working directory:
underpost static --run-sv 8080
```
When `--output-path` is provided, the server serves the directory containing the output file (e.g. `./dist/`). Otherwise it serves the current working directory.
## Config File Reference
See [`static-config-example.json`](./static-config-example.json) for a complete working example.
| Field | Type | Description |
|-------|------|-------------|
| `page` | `string` | Path to the SSR component to render |
| `outputPath` | `string` | Output HTML file path |
| `buildPath` | `string` | Base path for static documents or assets (default: `"/"`) |
| `env` | `string` | `"production"` or `"development"` |
| `minify` | `boolean` | Minify HTML output |
| `lang` | `string` | HTML `lang` attribute |
| `dir` | `string` | HTML `dir` attribute (`ltr`/`rtl`) |
| `metadata` | `object` | SEO metadata (title, description, keywords, author, themeColor, canonicalURL, thumbnail, locale, siteName) |
| `scripts` | `object` | `{ head: [...], body: [...] }` — inline or external scripts |
| `styles` | `array` | Inline (`content`) or external (`href`) stylesheets |
| `icons` | `object` | `favicon`, `appleTouchIcon`, `manifest` paths |
| `headComponents` | `array` | SSR component paths injected into `<head>` |
| `bodyComponents` | `array` | SSR component paths injected into `<body>` |
| `microdata` | `array` | JSON-LD structured data objects |
| `customPayload` | `object` | Arbitrary data injected into the render payload |
## CLI Flags
Flags override config file values when both are provided.
### Build & Output
```sh
underpost static --page <path> # SSR component path
--output-path <path> # Output file
--build-path <path> # Base path for assets (default: "/")
--config-file <path> # JSON config file
--generate-config [path] # Generate a template config file
--env <env> # production | development
--minify / --no-minify # Toggle minification
--lang <lang> # HTML lang attribute (default: en)
--dir <dir> # HTML dir attribute (default: ltr)
--dev # Development mode
```
### Metadata & SEO
```sh
--title <title> # Page title (deprecated: use --config-file)
--description <text> # Meta description
--keywords <a,b,c> # Comma-separated keywords
--author <name> # Meta author
--theme-color <color> # Theme color for mobile browsers
--canonical-url <url> # Canonical URL for SEO
--thumbnail <url> # Open Graph thumbnail image URL
--locale <locale> # Page locale (default: en-US)
--site-name <name> # Site name for Open Graph
```
### Scripts & Styles
```sh
--head-scripts <paths> # Comma-separated script paths for <head>
--body-scripts <paths> # Comma-separated script paths for <body>
--styles <paths> # Comma-separated stylesheet paths
```
### Icons
```sh
--favicon <path> # Favicon path
--apple-touch-icon <path> # Apple touch icon path
--manifest <path> # Web manifest path
```
### SSR Components
```sh
--head-components <paths> # Comma-separated SSR head component paths
--body-components <paths> # Comma-separated SSR body component paths
```
### Static Server
```sh
--run-sv [port] # Start Express static server (default port: 5000)
```
## SSR Component
The page content is defined in an SSR component file. See [`ssr-components/CustomPage.js`](./ssr-components/CustomPage.js) for an example.
A component exports an `SrrComponent` function that returns an HTML template literal:
```js
SrrComponent = () => html`
<div>
<h1>Hello World</h1>
<p>Your page content here.</p>
</div>
`;
```