From be45f6d28d53220126f099c295431a7dc783cc3e Mon Sep 17 00:00:00 2001 From: Christoph Dyllick-Brenzinger Date: Tue, 16 Jun 2026 14:56:59 +0200 Subject: [PATCH 1/3] Add HTML Pages developer section New top-level section documenting how to build interactive HTML Pages for SeaTable Universal Apps (6.2+) with the seatable-html-page-sdk: - index: introduction and architecture - getting-started: project setup, modular/non-modular, build & upload - example: complete read/write flow (single-file and modular) - sdk/initialization, sdk/rows, sdk/files: SDK reference Return shapes verified against seatable-html-page-sdk@0.0.12 source: row methods resolve to the HTTP response (payload under .data), upload methods return the result object directly. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/html-pages/example.md | 177 +++++++++++++++++++ docs/html-pages/getting-started.md | 103 +++++++++++ docs/html-pages/index.md | 44 +++++ docs/html-pages/sdk/files.md | 69 ++++++++ docs/html-pages/sdk/initialization.md | 101 +++++++++++ docs/html-pages/sdk/rows.md | 238 ++++++++++++++++++++++++++ mkdocs.yml | 8 + 7 files changed, 740 insertions(+) create mode 100644 docs/html-pages/example.md create mode 100644 docs/html-pages/getting-started.md create mode 100644 docs/html-pages/index.md create mode 100644 docs/html-pages/sdk/files.md create mode 100644 docs/html-pages/sdk/initialization.md create mode 100644 docs/html-pages/sdk/rows.md diff --git a/docs/html-pages/example.md b/docs/html-pages/example.md new file mode 100644 index 00000000..fce5619f --- /dev/null +++ b/docs/html-pages/example.md @@ -0,0 +1,177 @@ +--- +description: A complete, minimal HTML Page example — initialize the SDK, read rows from the base, render them, and write new linked rows back on submit. +--- + +# Example: a form that reads and writes + +This page ties the SDK together into one working flow: load data on start, render it, and write new rows back on submit. It is a distilled version of the [simple form template](https://github.com/seatable/seatable-html-page-template-simple-form) — a form that lists products from the base, lets the user pick quantities, and stores the result as an order. + +The data flow is always the same four steps: + +```mermaid +flowchart LR + A[init SDK] --> B[listRows: load data] + B --> C[render UI] + C --> D[on submit: batchAddRows + addRow] +``` + +It assumes the three tables described in [Getting Started](getting-started.md): **Products**, **OrderItems** (link to Products), and **Orders** (link to OrderItems). + +## Single-file version (non-modular) + +This is the complete page. It loads the SDK from a CDN, so everything lives in one `index.html` — the non-modular style. Styling is omitted for clarity. + +```html + + + + + Product Order + + +
+ +

+ + + + + +``` + +!!! tip "Linking rows" + + Notice the two-step write: first create the `OrderItems` rows with `batchAddRows`, then read their `_id` values from `res.data.rows` and pass them as an array to the `Orders` row's link column. Link columns always take an array of linked row IDs — see [`addRow`](sdk/rows.md#add-rows). + +## Modular version + +For anything beyond a simple page, split the logic into modules and import the SDK from the npm package. The template's `src/esm` directory does exactly this. A common pattern is to wrap all base access in a single `Context` class, keeping SDK calls out of your UI code: + +```js +import { HTMLPageSDK } from "seatable-html-page-sdk"; + +export default class Context { + async init(options) { + this.sdk = new HTMLPageSDK(options); + await this.sdk.init(); + } + + async loadProducts() { + const res = await this.sdk.listRows({ tableName: "Products" }); + return { + columns: res.data.metadata, + rows: res.data.results, + }; + } + + async submitOrder(orderItemsData) { + const itemsRes = await this.sdk.batchAddRows({ + tableName: "OrderItems", + rowsData: orderItemsData, + }); + const orderItemIds = itemsRes.data.rows.map((row) => row._id); + + await this.sdk.addRow({ + tableName: "Orders", + rowData: { OrderItems: orderItemIds }, + }); + } +} +``` + +The entry point reads the injected dev config and starts the app: + +```js +// index.js +import Context from "./context"; + +document.addEventListener("DOMContentLoaded", async () => { + const context = new Context(); + await context.init(window.__HTML_PAGE_DEV_CONFIG__ || null); + const { rows } = await context.loadProducts(); + // ... render rows, wire up submit -> context.submitOrder(...) +}); +``` + +## Next steps + +- [SDK Reference: Rows](sdk/rows.md) — full parameters and return shapes for every row method. +- [SDK Reference: Files & Images](sdk/files.md) — add file and image uploads to your form. diff --git a/docs/html-pages/getting-started.md b/docs/html-pages/getting-started.md new file mode 100644 index 00000000..a57c11b6 --- /dev/null +++ b/docs/html-pages/getting-started.md @@ -0,0 +1,103 @@ +--- +description: Set up, develop, build and upload a SeaTable HTML Page. Walks through the simple form template with Vite, the SDK, and the uploadable ZIP package. +--- + +# Getting Started + +This guide walks through building an HTML Page from the official [simple form template](https://github.com/seatable/seatable-html-page-template-simple-form): a form that writes submitted records into a base. By the end you will have a packaged ZIP that you can upload to a Universal App. + +The template ships the build configuration and project structure you need. It supports two development styles: + +- **Modular** — HTML, JavaScript and CSS split across multiple files. Suited for complex pages. +- **Non-modular** — everything in a single `index.html`. Suited for simple pages. + +Choose the approach that fits the complexity of your page. Both produce the same kind of uploadable package. + +!!! note "Base requirements for this example" + + The form reads products from the base and writes orders back, so it expects three tables: + + - **Products** — with `Product_name` (text) and `Unit_price` (number) + - **OrderItems** — with `Product` (link to Products) and `Quantity` (number) + - **Orders** — with `OrderItems` (link to OrderItems) + + Create them in your base before running the page, or adapt the table and field names in the template's source. + +## 1. Get the template + +```shell +git clone https://github.com/seatable/seatable-html-page-template-simple-form.git +cd seatable-html-page-template-simple-form +npm install +``` + +## 2. Choose a development style + +The active style is controlled by the `ESM` variable in `.env`. Vite derives its `root` from it automatically (`src/esm` when `true`, `src/classic` when `false`) — you do not edit `vite.config.js`. + +=== "Modular" + + JavaScript and CSS are split into multiple files under `src/esm`, and the entry file is imported into `index.html` with `type="module"`. The SDK is used via the npm package (`import { HTMLPageSDK } from "seatable-html-page-sdk"`). + + Enable it by setting `ESM=true`. Either edit `.env` directly, or copy `.env` to `.env.local` (git-ignored) and set it there. + +=== "Non-modular" + + All logic lives in a single `index.html` under `src/classic`, with the SDK loaded from a CDN. This is the template default (`ESM=false`), so no extra configuration is required. + +## 3. Configure local development + +During local development, the page needs to know which base to talk to. Create `src/setting.js` based on `setting.template.js`: + +```js +export default { + server: "", + appUuid: "", + pageId: "", + accountToken: "", +}; +``` + +These values are registered to `window.__HTML_PAGE_DEV_CONFIG__` and picked up by the SDK when you call `init()` in development. See [Initialization](sdk/initialization.md) for how the SDK consumes them. + +!!! note "Where the values come from" + + - `accountToken` — an API token you generate in the base in advance. See [how to create API tokens](https://seatable.com/help/create-api-tokens/). + - `server`, `appUuid` and `pageId` — shown in the prompts when you create a new blank HTML Page in the app. + +## 4. Run the development server + +```shell +npm run dev +``` + +Open the local development URL in your browser to preview and test the page. Changes reload live. + +## 5. Build and package + +Generate the uploadable ZIP: + +```shell +npm run build-page +``` + +This single command cleans the output, runs the Vite build (into `dist`), and packages it into a ZIP under the `page-zip` directory. The ZIP is named after the project, for example `seatable-html-page-template-simple-form-0.0.1.zip` — bump the `version` in `package.json` before building so you can tell uploads apart. + +!!! note "Inspecting the build" + + `npm run build-page` already runs the build, so you do not call `npm run build` separately. Run `npm run build` on its own only if you want to inspect the unpackaged output in `dist`, or `npm run dev` to preview it live. + +## 6. Upload and test + +1. In SeaTable, open the configuration of the HTML Page in your Universal App. +2. Upload the generated ZIP as the HTML page package. +3. Open the app preview, fill in the form, and submit it. +4. Return to the base and confirm that the corresponding records were created. + +Once the submitted records appear in the base, the page is fully integrated and ready to use. + +## Next steps + +- [SDK Reference: Initialization](sdk/initialization.md) +- [SDK Reference: Rows](sdk/rows.md) +- [SDK Reference: Files & Images](sdk/files.md) diff --git a/docs/html-pages/index.md b/docs/html-pages/index.md new file mode 100644 index 00000000..c7327551 --- /dev/null +++ b/docs/html-pages/index.md @@ -0,0 +1,44 @@ +--- +description: Build interactive HTML Pages for SeaTable Universal Apps. Learn how a page reads and writes base data through the seatable-html-page-sdk. +--- + +# HTML Pages + +Starting with SeaTable 6.2, a Universal App can contain a new page type: the **HTML Page**. You upload a packaged HTML/JavaScript/CSS bundle, and SeaTable renders it as a full page inside the app. + +A static bundle on its own can only display fixed content. To turn an HTML Page into a real application — a custom form, a dashboard, a calculator — it needs to read from and write to the base. That data exchange runs through the [`seatable-html-page-sdk`](https://www.npmjs.com/package/seatable-html-page-sdk). + +This section is written for developers. It covers how to set up a project, how to develop and package a page, and the full SDK reference. + +## Architecture + +An HTML Page is rendered in a sandboxed context inside the Universal App. It never talks to the base directly. Instead, the SDK provides a messaging bridge to the app, which performs the actual data operations. + +```mermaid +flowchart LR + A[HTML Page] -->|seatable-html-page-sdk| B[Universal App] + B -->|API| C[(Base)] + C --> B + B --> A +``` + +The SDK offers: + +- **Data APIs** — list, add, update and delete rows; upload files and images. +- **Event propagation** — bidirectional events (mouse, keyboard, drag-and-drop) between the page and the app. + +## Prerequisites + +- SeaTable 6.2 or later. +- A Universal App with an HTML Page added to it. +- An API token generated in the base (used during local development). +- Node.js and npm for building the page. + +## Where to start + +- [Getting Started](getting-started.md) — set up the project, develop locally, build and upload a page. We follow the official [simple form template](https://github.com/seatable/seatable-html-page-template-simple-form) end to end. +- [SDK Reference](sdk/initialization.md) — installation, initialization, and the full API for rows, files and images. + +!!! tip "Example project" + + The [`seatable-html-page-template-simple-form`](https://github.com/seatable/seatable-html-page-template-simple-form) repository contains a complete, buildable form page. It is the running example used throughout this section. diff --git a/docs/html-pages/sdk/files.md b/docs/html-pages/sdk/files.md new file mode 100644 index 00000000..26246ecd --- /dev/null +++ b/docs/html-pages/sdk/files.md @@ -0,0 +1,69 @@ +--- +description: seatable-html-page-sdk reference for uploading files and images from an HTML Page into file and image columns of a base. +--- + +# Files & Images + +Upload files and images from an HTML Page. The returned data is used to populate a file or image column — typically by passing it into `updateRow` or `addRow` (see [Rows](rows.md)). The `sdk` instance below is created and initialized as shown in [Initialization](initialization.md). + +!!! note "Return value" + + Unlike the row methods, the upload methods resolve to the result object **directly** — there is no `.data` wrapper. + +!!! abstract "uploadFile" + + Upload a file for use in a **file** column. + + ```js + sdk.uploadFile({ file }); + ``` + + __Parameters__ + + `file` + : object — the file to upload (for example, a `File` from an ``) + + __Returns__ `{ name, size, type, url }` — pass this object as the value of a file column. + + __Example__ + ```js + fileInput.addEventListener("change", async (e) => { + const file = e.target.files[0]; + const { name, size, type, url } = await sdk.uploadFile({ file }); + + await sdk.updateRow({ + tableName: "Documents", + rowId: "fcHIocncTsOygA3FjL-toQ", + rowData: { Attachment: [{ name, size, type, url }] }, + }); + }); + ``` + +!!! abstract "uploadImage" + + Upload an image for use in an **image** column. + + ```js + sdk.uploadImage({ file }); + ``` + + __Parameters__ + + `file` + : object — the image file to upload + + __Returns__ `{ name, size, type, url }` — same shape as `uploadFile`, with `type` set to `"image"`. Pass the URL as the value of an image column. + + __Example__ + ```js + fileInput.addEventListener("change", async (e) => { + const file = e.target.files[0]; + const { url } = await sdk.uploadImage({ file }); + + await sdk.updateRow({ + tableName: "Products", + rowId: "fcHIocncTsOygA3FjL-toQ", + rowData: { Photo: [url] }, + }); + }); + ``` diff --git a/docs/html-pages/sdk/initialization.md b/docs/html-pages/sdk/initialization.md new file mode 100644 index 00000000..641eb38c --- /dev/null +++ b/docs/html-pages/sdk/initialization.md @@ -0,0 +1,101 @@ +--- +description: Install and initialize the seatable-html-page-sdk. Set up the SDK via npm or CDN and connect an HTML Page to its SeaTable base. +--- + +# Initialization + +The `seatable-html-page-sdk` is the bridge between an HTML Page and its Universal App. It exposes APIs for data interaction and event subscription. This page covers installation and initialization. For data operations, see [Rows](rows.md) and [Files & Images](files.md). + +## Installation + +=== "Package manager" + + Install with npm or yarn — recommended for the [modular development style](../getting-started.md#2-choose-a-development-style). + + ```shell + # npm + npm install seatable-html-page-sdk --save + + # yarn + yarn add seatable-html-page-sdk + ``` + + ```js + import { HTMLPageSDK } from "seatable-html-page-sdk"; + ``` + +=== "CDN" + + Load the SDK via CDN — convenient for the non-modular style, where everything lives in `index.html`. `HTMLPageSDK` becomes available as a global. + + ```html + + + + + + + + ``` + + !!! tip "Pin a version" + + `@latest` always resolves to the newest release. For production pages, pin an explicit version (for example `seatable-html-page-sdk@1.0.0`) so a new release cannot change behavior unexpectedly. + +## Initialize the SDK + +Create an instance, then call `init()` before making any data calls. Write the initialization **once** — the same code works in both development and production: + +```js +const options = window.__HTML_PAGE_DEV_CONFIG__ || null; +const sdk = new HTMLPageSDK(options); +await sdk.init(); +``` + +How `options` is resolved differs by environment, but your code does not change: + +=== "Production" + + Inside the Universal App, `window.__HTML_PAGE_DEV_CONFIG__` is not defined, so `options` is `null`. The SDK derives the connection context from the host app automatically — no credentials in your code. + +=== "Development" + + There is no host app locally, so the SDK needs connection details. You do **not** hardcode them: the Vite dev server reads [`src/setting.js`](../getting-started.md#3-configure-local-development) and injects the values into `window.__HTML_PAGE_DEV_CONFIG__` at serve time. + + The injected object has this shape: + + ```js + { + server: "your-html-page-server", + accountToken: "your-account-token", + appUuid: "your-app-uuid", + pageId: "your-app-page-id", + } + ``` + + Because `setting.js` is git-ignored and never bundled, your account token stays out of the build. + +## Basic usage + +Once initialized, call the data APIs on the instance: + +```js +const sdk = new HTMLPageSDK(options); +await sdk.init(); + +const res = await sdk.listRows({ + tableName: "Employees", + start: 0, + limit: 100, +}); +const rows = res.data.results; +``` + +All SDK methods are asynchronous and return promises — always `await` them. Row methods resolve to the HTTP response, so the payload is under `.data` (see [Rows](rows.md)). Upload methods are the exception and return the result object directly (see [Files & Images](files.md)). + +## Next steps + +- [Rows](rows.md) — list, add, update and delete rows, including batch operations. +- [Files & Images](files.md) — upload files and images for file and image columns. diff --git a/docs/html-pages/sdk/rows.md b/docs/html-pages/sdk/rows.md new file mode 100644 index 00000000..b33dcefd --- /dev/null +++ b/docs/html-pages/sdk/rows.md @@ -0,0 +1,238 @@ +--- +description: seatable-html-page-sdk reference for row operations — list, add, update, delete, and batch-modify rows in a base from an HTML Page. +--- + +# Rows + +Row operations on the `seatable-html-page-sdk`. All methods are asynchronous — `await` them. The `sdk` instance below is created and initialized as shown in [Initialization](initialization.md). + +!!! warning "Response format" + + Row methods resolve to the underlying HTTP response — the payload is under `.data`, not the return value itself. For example, `listRows` gives you the rows via `res.data.results` and the column metadata via `res.data.metadata`. The `Returns` sections below describe the shape of `.data`. + +!!! tip "Single- and multi-select values" + + Single-select and multi-select fields — including those returned via linked records and lookup formulas — return the **option names**, not their internal IDs. + +## List rows + +!!! abstract "listRows" + + List rows from a specific table, with pagination. + + ```js + sdk.listRows({ tableName, start, limit }); + ``` + + __Parameters__ + + `tableName` + : string — name of the target table + + `start` + : number — starting index for pagination + + `limit` + : number — number of rows to retrieve + + __Returns__ `.data` holds `{ metadata, results }` — `results` is the array of row objects, `metadata` the column definitions. + + __Example__ + ```js + const res = await sdk.listRows({ tableName: "Employees", start: 0, limit: 50 }); + const rows = res.data.results; + const columns = res.data.metadata; + ``` + +## Add rows + +!!! abstract "addRow" + + Add a new row to the specified table. + + ```js + sdk.addRow({ tableName, rowData }); + ``` + + __Parameters__ + + `tableName` + : string — name of the target table + + `rowData` + : object — key-value pairs of column names and values + + __Returns__ `.data` holds `{ row }` — the newly created row object. + + __Example__ + ```js + const res = await sdk.addRow({ + tableName: "Employees", + rowData: { + Name: "Jane Smith", + Age: 28, + Department: "Engineering", + + // IDs of records linked in the Manager field + Manager: ["NSPa_fd4SEqRESqOZzRqyg", "eA6rQDuxQyGITmD1hrfyzw"], + }, + }); + ``` + + !!! tip "Linked record fields" + + Set a link column with `{ "link_column_name": ["linked_row_id1", "linked_row_id2", ...] }`. + +!!! abstract "batchAddRows" + + Add multiple rows to the specified table in one call. + + ```js + sdk.batchAddRows({ tableName, rowsData }); + ``` + + __Parameters__ + + `tableName` + : string — name of the target table + + `rowsData` + : array — an array of row objects + + __Returns__ `.data` holds `{ rows }` — the list of created row objects. Each row carries its new `_id`, which you can use to populate link fields in a follow-up call. + + __Example__ + ```js + await sdk.batchAddRows({ + tableName: "Employees", + rowsData: [ + { + Name: "Jane Smith", + Age: 28, + Department: "Engineering", + Manager: ["NSPa_fd4SEqRESqOZzRqyg", "eA6rQDuxQyGITmD1hrfyzw"], + }, + { + Name: "Tom", + Age: 24, + Department: "Product Management", + Manager: ["QgK2KMf8Sxad8duPcq6gQA", "bBDbhbzXReSPWpcxq225xA"], + }, + ], + }); + ``` + +## Update rows + +!!! abstract "updateRow" + + Update an existing row. + + ```js + sdk.updateRow({ tableName, rowId, rowData }); + ``` + + __Parameters__ + + `tableName` + : string — name of the target table + + `rowId` + : string — the unique ID of the row to update + + `rowData` + : object — the fields to update + + __Returns__ `.data` holds `{ success: true, row: {...} }` + + __Example__ + ```js + await sdk.updateRow({ + tableName: "Employees", + rowId: "fcHIocncTsOygA3FjL-toQ", + rowData: { Age: 18 }, + }); + ``` + +!!! abstract "batchUpdateRows" + + Update multiple rows in one call. + + ```js + sdk.batchUpdateRows({ tableName, rowsData }); + ``` + + __Parameters__ + + `tableName` + : string — name of the target table + + `rowsData` + : array — objects containing a `row_id` and the updated `row` data + + __Returns__ `.data` holds `{ success: true, rows: [{...}, ...] }` + + __Example__ + ```js + await sdk.batchUpdateRows({ + tableName: "Employees", + rowsData: [ + { row_id: "fcHIocncTsOygA3FjL-toQ", row: { Age: 18 } }, + { row_id: "BIXJ_dUMS1OW8Lyoxrx4Fw", row: { Age: 24 } }, + ], + }); + ``` + +## Delete rows + +!!! abstract "deleteRow" + + Delete a single row. + + ```js + sdk.deleteRow({ tableName, rowId }); + ``` + + __Parameters__ + + `tableName` + : string — name of the target table + + `rowId` + : string — the unique ID of the row to delete + + __Returns__ `.data` holds `{ success: true }` + + __Example__ + ```js + await sdk.deleteRow({ + tableName: "Employees", + rowId: "fcHIocncTsOygA3FjL-toQ", + }); + ``` + +!!! abstract "batchDeleteRows" + + Delete multiple rows in one call. + + ```js + sdk.batchDeleteRows({ tableName, rowsIds }); + ``` + + __Parameters__ + + `tableName` + : string — name of the target table + + `rowsIds` + : array — the row IDs to delete + + __Returns__ `.data` holds `{ success: true }` + + __Example__ + ```js + await sdk.batchDeleteRows({ + tableName: "Employees", + rowsIds: ["fcHIocncTsOygA3FjL-toQ", "BIXJ_dUMS1OW8Lyoxrx4Fw"], + }); + ``` diff --git a/mkdocs.yml b/mkdocs.yml index 8b7989a5..b9c45045 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -240,3 +240,11 @@ nav: - plugins/index.md - Environments: plugins/environments.md - Available methods: plugins/methods.md + - HTML Pages: + - html-pages/index.md + - Getting Started: html-pages/getting-started.md + - Example: html-pages/example.md + - SDK Reference: + - Initialization: html-pages/sdk/initialization.md + - Rows: html-pages/sdk/rows.md + - Files & Images: html-pages/sdk/files.md From 37b0acc0ae156f36a7ccebe7738db3dac6b3853c Mon Sep 17 00:00:00 2001 From: Christoph Dyllick-Brenzinger Date: Tue, 16 Jun 2026 15:31:06 +0200 Subject: [PATCH 2/3] Add screenshots to HTML Pages getting-started guide - html-page-add.png: adding an HTML Page in the app (Before you start) - html-page-config.png: configuration with development info and upload area (referenced from step 3 and step 6) Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/html-pages/getting-started.md | 14 ++++++++++++-- docs/media/html-page-add.png | Bin 0 -> 19214 bytes docs/media/html-page-config.png | Bin 0 -> 43719 bytes 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 docs/media/html-page-add.png create mode 100644 docs/media/html-page-config.png diff --git a/docs/html-pages/getting-started.md b/docs/html-pages/getting-started.md index a57c11b6..b4c1fcf8 100644 --- a/docs/html-pages/getting-started.md +++ b/docs/html-pages/getting-started.md @@ -23,6 +23,12 @@ Choose the approach that fits the complexity of your page. Both produce the same Create them in your base before running the page, or adapt the table and field names in the template's source. +## Before you start: add an HTML Page in the app + +In your Universal App, add a new page and choose **Add HTML page**. This creates the empty page you will later upload your build to, and it surfaces the `server`, `appUuid` and `pageId` values you need for local development ([step 3](#3-configure-local-development)). + +![Adding an HTML Page to a Universal App](../media/html-page-add.png) + ## 1. Get the template ```shell @@ -63,7 +69,11 @@ These values are registered to `window.__HTML_PAGE_DEV_CONFIG__` and picked up b !!! note "Where the values come from" - `accountToken` — an API token you generate in the base in advance. See [how to create API tokens](https://seatable.com/help/create-api-tokens/). - - `server`, `appUuid` and `pageId` — shown in the prompts when you create a new blank HTML Page in the app. + - `server`, `appUuid` and `pageId` — shown under **HTML Page development information** in the page's configuration (see below). + +The HTML Page configuration shows these values ready to copy, alongside the upload area you will use later: + +![HTML Page configuration with development information and upload area](../media/html-page-config.png) ## 4. Run the development server @@ -90,7 +100,7 @@ This single command cleans the output, runs the Vite build (into `dist`), and pa ## 6. Upload and test 1. In SeaTable, open the configuration of the HTML Page in your Universal App. -2. Upload the generated ZIP as the HTML page package. +2. Drag the generated ZIP into the **Upload HTML page file** area (the same configuration shown in [step 3](#3-configure-local-development)). 3. Open the app preview, fill in the form, and submit it. 4. Return to the base and confirm that the corresponding records were created. diff --git a/docs/media/html-page-add.png b/docs/media/html-page-add.png new file mode 100644 index 0000000000000000000000000000000000000000..3932cc6b912b80e150ff90cb5ac46e547e9ce00b GIT binary patch literal 19214 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 literal 0 HcmV?d00001 diff --git a/docs/media/html-page-config.png b/docs/media/html-page-config.png new file mode 100644 index 0000000000000000000000000000000000000000..af3c44ba5766dd10d4e1c58ea126b03245fa987a GIT binary patch literal 43719 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 Date: Tue, 16 Jun 2026 15:32:48 +0200 Subject: [PATCH 3/3] Ignore .cache/ (mkdocs plugin build cache) Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8d8d9655..50d6cce1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Mkdocs build directory /site/ +/.cache/ /.idea .vscode __pycache__/