User Guide: My Pages - EyevinnOSC/community GitHub Wiki
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.
- An Eyevinn Open Source Cloud account (any plan)
Navigate to My Pages in the OSC web console. The tab is in the top-level navigation bar.
- Click New page
- 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) - Drag and drop your files into the upload area (or click to browse). Supports any file type.
- 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.
To replace the content of a live site:
- Click the Update button on the site's row in the My Pages list
- Drop in the new set of files
- 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.
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.
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.
- Open My Pages and click the Manage icon on the site row
- Scroll to the Basic authentication section (above Custom Domain)
- 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.
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.
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.
Is my-docs password protected?
The agent calls get-my-page, which returns authEnabled: true and the authUsername when auth is configured.
Each My Page can have one custom domain mapped to it. This requires a paid OSC plan and DNS configuration at your registrar.
- Click the site name in the My Pages list to open its detail view
- Under Custom domain, enter your domain (e.g.
mysite.example.com) and click Attach domain - The UI shows a DNS target value and a "Certificate being issued" status badge
- At your DNS registrar, create a CNAME record pointing your domain to the DNS target shown
- 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.
| 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.
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-createto front the site with a CDN. That workflow has been replaced by My Pages and no longer applies toweb publish.
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:
-
create-my-pagereserves the subdomain -
upload-my-page-filesuploads base64-encoded file content (orupload-my-page-files-from-urlto pull files from external URLs, orget-my-page-upload-urlsto mint presigned upload targets for client-side uploads) -
publish-my-pagemakes 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).
| 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.
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.
- 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