User Guide: My Pages - EyevinnOSC/community GitHub Wiki

My Pages

My Pages lets you host static websites on OSC with each site getting its own subdomain at {name}.pages.osaas.io. No bucket configuration, no CDN setup, just upload your files and they are live.

Prerequisites

Accessing My Pages

Navigate to My Pages in the OSC web console. The tab is in the top-level navigation bar.

Creating a Site

  1. Click New page
  2. Enter a name. The name becomes the subdomain (your-name.pages.osaas.io), so it must be 3 to 52 characters, lowercase letters, digits, and hyphens only, and must start and end with a letter or digit (no leading or trailing hyphen)
  3. Drag and drop your files into the upload area (or click to browse). Supports any file type.
  4. Click Publish to upload the files and make the site live

Site names are unique across all of OSC, not just your own workspace, so a name may already be taken by another tenant.

The site is available at https://{name}.pages.osaas.io immediately after publishing.

Updating an Existing Site

To replace the content of a live site:

  1. Click the Update button on the site's row in the My Pages list
  2. Drop in the new set of files
  3. Click Publish

To manage a site's settings (custom domain, and future options), click the Manage icon (arrow-out-of-box) on the site's row. This opens the site detail view at /dashboard/my-pages/{pageId}.

The update flow performs a manifest diff: files in your new upload that already exist with the same name are skipped, new files are uploaded, and files no longer in the manifest are pruned. This keeps the site consistent with exactly the files you uploaded, so no stale assets are left behind.

For very large sites (over 5 000 files or 512 KiB of filenames), the manifest prune is skipped automatically to stay within platform limits. New and changed files are still uploaded.

Deleting a Site

Click the trash icon on the site's row and confirm. This removes all uploaded files and releases the subdomain so another workspace can claim the name.

Password-Protecting a Site

HTTP Basic Auth lets you restrict access to a My Pages site so only visitors who supply a username and password can view it. This is useful for staging sites, internal docs, or any site you want to share with a specific audience.

Enable auth via the web console

  1. Open My Pages and click the Manage icon on the site row
  2. Scroll to the Basic authentication section (above Custom Domain)
  3. Enter a username and password, then click Enable basic auth

The section shows an eye toggle to reveal the password before submitting. Once enabled, the section displays an "Enabled" chip alongside the configured username.

To disable, click Remove auth and confirm. The site is publicly accessible again immediately.

Note: If you lose the password, enable auth again with a new password. The old credentials are overwritten.

Enable auth via AI agent

Add password protection to my-docs with username "editor" and password "correct-horse-battery-staple"

The agent calls set-my-page-auth with three fields:

  • name — the site name (same as the page id)
  • username — 1–64 characters; letters, digits, dots, underscores, and hyphens only
  • password — 12–72 bytes; stored as an Apache MD5 htpasswd hash, never retrievable afterward

Calling set-my-page-auth on a page that already has auth enabled replaces the credentials in place — no need to remove auth first.

Disable auth via AI agent

Remove password protection from my-docs

The agent calls remove-my-page-auth. The operation is idempotent — it succeeds even if auth was not enabled. After this call the site is publicly accessible again.

Check auth status

Is my-docs password protected?

The agent calls get-my-page, which returns authEnabled: true and the authUsername when auth is configured.

Adding a Custom Domain

Each My Page can have one custom domain mapped to it. This requires a paid OSC plan and DNS configuration at your registrar.

Step-by-step

  1. Click the site name in the My Pages list to open its detail view
  2. Under Custom domain, enter your domain (e.g. mysite.example.com) and click Attach domain
  3. The UI shows a DNS target value and a "Certificate being issued" status badge
  4. At your DNS registrar, create a CNAME record pointing your domain to the DNS target shown
  5. Once DNS propagates and the certificate issues (usually 2-10 minutes), the badge updates to Active

To remove a custom domain, open the site detail view and click Remove domain.

You can attach only one custom domain per site. Reserved platform domains (*.pages.osaas.io, *.apps.osaas.io) cannot be used as custom domains.

DNS record example

Type Name Value
CNAME mysite <dns-target-from-osc>

Use the exact DNS target value shown in the OSC web console. Do not hardcode a hostname.

Note: Custom domains on My Pages use Let's Encrypt certificates provisioned automatically by the platform once DNS propagates. The certificate status auto-updates in the site detail view.

Publishing via the OSC CLI

The OSC CLI publishes directly to My Pages:

npx @osaas/cli@latest web publish <name> <dir>

For example, to publish a React build:

npx @osaas/cli@latest web publish myapp build/
Website published at: https://myapp.pages.osaas.io/

The command creates the page (if it does not exist yet), uploads every file in <dir>, and publishes the site in one step. Running it again against an existing page name republishes the same site with the new contents of <dir>.

Note: Earlier CLI versions provisioned a dedicated storage bucket per site and printed an Origin/Origin Path block for chaining into osc web cdn-create to front the site with a CDN. That workflow has been replaced by My Pages and no longer applies to web publish.

Managing Sites via AI Agent (MCP)

All My Pages operations are available as MCP tools when you connect an AI assistant to OSC.

List your sites:

List my static sites

Create and publish a site:

Create a static site called my-docs and publish these files to it: index.html, styles.css

The agent uses a three-step flow:

  1. create-my-page reserves the subdomain
  2. upload-my-page-files uploads base64-encoded file content (or upload-my-page-files-from-url to pull files from external URLs, or get-my-page-upload-urls to mint presigned upload targets for client-side uploads)
  3. publish-my-page makes the site live

Publish with full prune (replace all files):

Republish my-docs with these files and remove anything not in this list

Pass the complete file list and prune: true to the publish-my-page tool.

Publish files sourced from external URLs:

Publish my-docs with these files: index.html from https://cdn.example.com/index.html, styles.css from https://cdn.example.com/styles.css

The agent uses upload-my-page-files-from-url, which fetches each URL server-side and uploads the content directly. Useful when your build artifacts are already hosted somewhere else and you want to avoid base64-encoding them through the conversation.

Get presigned upload targets (for programmatic upload):

Give me presigned upload URLs for my-docs so I can upload the files myself

The agent calls get-my-page-upload-urls with a list of file paths, sizes, and content types. It returns one presigned POST target per file that you can use directly from any HTTP client. Targets expire after a short window, so upload immediately after receiving them, then call publish-my-page to go live.

Update an existing site (re-upload files):

Update my-docs with the new index.html

The agent uploads only changed files and publishes with manifest diffing.

Delete a site:

Delete my static site called my-docs

Password-protect a site:

Protect my-docs with username "viewer" and password "correct-horse-battery-staple"

The agent calls set-my-page-auth. To disable protection: "Remove password protection from my-docs" (uses remove-my-page-auth).

URL Patterns

Pattern Description
https://{name}.pages.osaas.io/ Root, serves index.html
https://{name}.pages.osaas.io/path/ Directory, serves path/index.html
https://{name}.pages.osaas.io/path/file.ext Direct file path

Directory URL resolution is enabled automatically on publish, so /docs/ serves docs/index.html without a redirect.

Current Limitations

The following are not yet supported:

  • SPA history-mode fallback (a client-side router path with no matching file returns 404 rather than falling back to index.html)
  • Custom HTTP headers
  • Redirect rules
  • Per-site cache-control tuning
  • CDN in front of a My Pages site
  • Custom domain management via AI agent (MCP) or CLI (web console only)

If you need SPA fallback or custom headers today, use the MinIO-based approach described in Developer Guide: Hosting a static website.

Related Resources

  • Developer Guide: Hosting a static website: CLI publishing walkthrough and the MinIO-based alternative
  • User Guide: OSC CLI: installing and authenticating the CLI
  • User Guide: Enable OSC with AI agents: connecting Claude Code, Cursor, and other MCP clients
⚠️ **GitHub.com Fallback** ⚠️