Help us improve
Share bugs, ideas, or general feedback.
Uploads self-contained HTML files to PageDrop for temporary shareable links with configurable TTL (1h,1d,3d,once), private visibility, password, and custom paths. Use for sharing dashboards, reports, or previews via PowerShell or curl.
npx claudepluginhub promptclickrun/power-agents-blueprint --plugin power-agents-blueprintHow this skill is triggered — by the user, by Claude, or both
Slash command
/power-agents-blueprint:pagedrop-uploadThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Upload self-contained HTML files to PageDrop for shareable, time-limited links. No API key required. Supports private visibility and configurable TTL (1 hour, 1 day, 3 days, or single-view).
Publishes text, markdown, JSON, or files to brewpage.app. Detects type via Bash, prompts for namespace and password using AskUserQuestion, sets TTL, returns public URL.
Deploys a single HTML file to FluidDocs hosting. Handles browser sign-in and opens the live URL. Triggered by words like 'deploy', 'publish', 'ship it'.
Publish a local HTML file or static site directory to a configured local share server and return a browser-viewable URL. Use when the user wants to open coding-agent output in a browser on the same machine or another device over a private tailnet.
Share bugs, ideas, or general feedback.
Upload self-contained HTML files to PageDrop for shareable, time-limited links. No API key required. Supports private visibility and configurable TTL (1 hour, 1 day, 3 days, or single-view).
Use this skill when you need to share an HTML file via a temporary URL. Common scenarios:
POST https://pagedrop.io/api/upload
Content-Type: application/json
No API key required. The API is open for programmatic use.
⚠️ Browser requests are blocked — the API rejects requests with
OriginorSec-Fetch-*headers. Use PowerShellInvoke-RestMethod,curl, or equivalent.
| Field | Type | Required | Description |
|---|---|---|---|
html | string | Yes | Full HTML content (max 16 MB) |
ttl | enum | Yes | Time-to-live: 1h, 1d, 3d, once |
fileName | string | No | Display filename for the page |
customPath | string | No | Custom URL slug (3–63 chars, lowercase alphanumeric + hyphens) |
password | string | No | Password-protect the page (max 128 chars) |
visibility | string | No | Set to private to exclude from public explore page |
{
"success": true,
"data": {
"url": "https://{slug}.pagedrop.io",
"slug": "{slug}",
"isExplore": false
}
}
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Human-readable description"
}
}
| Code | Meaning | Recovery |
|---|---|---|
REQUEST_TOO_LARGE | HTML exceeds 16 MB | Minify the HTML and retry |
PATH_UNAVAILABLE | Custom path already taken | Omit customPath to auto-generate |
CONTENT_BLOCKED | Content flagged by moderation | Open file locally instead |
RATE_LIMIT_EXCEEDED | Too many requests | Wait and retry after delay |
INVALID_TTL | TTL value not in allowed enum | Use one of: 1h, 1d, 3d, once |
# Read the HTML file
$htmlContent = Get-Content "{full-path-to-html-file}" -Raw
# Build the request payload
$payload = @{
html = $htmlContent
ttl = "3d"
fileName = "{solution-name}-architecture.html"
visibility = "private"
} | ConvertTo-Json -Depth 3
# Upload to PageDrop
$response = Invoke-RestMethod -Uri "https://pagedrop.io/api/upload" `
-Method POST `
-ContentType "application/json" `
-Body $payload
# Output the response
$response | ConvertTo-Json -Depth 5
if ($response.success) {
$url = $response.data.url
Write-Output "Live at: $url"
} else {
Write-Output "Upload failed: $($response.error.code) - $($response.error.message)"
}
When integrating into an agent workflow, follow this pattern after generating an HTML file:
Use the ask_user tool:
["Yes — generate a shareable link (active for 3 days)", "No — just open it locally"]$htmlContent = Get-Content "{path}" -Raw
$payload = @{ html = $htmlContent; ttl = "3d"; fileName = "{name}"; visibility = "private" } | ConvertTo-Json -Depth 3
$response = Invoke-RestMethod -Uri "https://pagedrop.io/api/upload" -Method POST -ContentType "application/json" -Body $payload
Present the result:
🔗 Your file is live for 3 days: {url}
Also open locally with Start-Process so the user has both options.
If upload fails, fall back to local open with an error note:
Upload failed — opened locally instead. Error: {error message}
Start-Process "{full-path-to-html-file}"
Present the file path:
📂 File saved to:
{full-path-to-html-file}
html field)1h (1 hour), 1d (1 day), 3d (3 days), once (single view then deleted)RATE_LIMIT_EXCEEDEDCONTENT_BLOCKED