Agent skill

Frappe Ops Website Deploy

by Impertio-Studio in Impertio-Studio/Frappe_Claude_Skill_Package

Deploy HTML/CSS websites to ERPNext/Frappe (v15/v16) as Web Pages via the REST API.

MITAuto-check passedBackend & APIs

Install Frappe Ops Website Deploy

skills CLI
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-website-deploy -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-ops-website-deploy --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/source/ops/frappe-ops-website-deploy .claude/skills/frappe-ops-website-deploy && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
frappe-ops-website-deploy
GitHub stars
188
Token cost
~2.5k tokens
SKILL.md length
723 words
Files
3 (incl. scripts, references)
Skills in repo
61
Repo updated
First seen
Licence
MIT

At a glance

Deploy HTML/CSS websites to ERPNext/Frappe (v15/v16) as Web Pages via the REST API.

  • Works in 3 steps: Create the Raw HTML Section Web Template → Create Web Pages with Page Builder → Configure Website Settings
  • A user wants to host a website on ERPNext
  • SKILL.md covers Critical: ERPNext v16 Does NOT…, Decision Tree, Step 1: Create the Raw HTML… and Step 2: Create Web Pages with…, plus 6 more sections
  • Runs Python scripts from its folder

What it does

Frappe Ops Website Deploy is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Deploy HTML/CSS websites to ERPNext/Frappe (v15/v16) as Web Pages via the REST API. Use this skill whenever a user wants to host a website on ERPNext, deploy HTML mockups to Frappe, create Web Pages programmatically, configure Website Settings, or integrate Frappe's Discussion system as a forum. Also use when the user mentions "website on ERPNext", "Web Page API", "Page Builder", "Web Template", or wants to serve custom HTML from Frappe. Covers: Web Pages with Page Builder, custom Web Templates, Website Settings…

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including scripts and reference files (for example `references/frappe-wrapper-elements.md` and `scripts/deploy.py`). Compatibility notes: Claude Code, Claude.ai Projects, Claude API. Frappe v15-v16, ERPNext v15-v16.

It sits in Backend & APIs, covering Deployment and REST APIs. The repository describes itself as: 60 deterministic Claude AI skills for Frappe Framework & ERPNext v14-v16 development and operations. The licence is MIT.

When your agent uses it

  • A user wants to host a website on ERPNext
  • Deploy HTML mockups to Frappe
  • Create Web Pages programmatically
  • Configure Website Settings

Example prompts

  • “s Discussion system as a forum. Also use when the user mentions”
  • “Web Page API”
  • “Page Builder”
  • “/frappe-ops-website-deploy”

Requirements

  • Python 3
  • Compatibility (from SKILL.md): Claude Code, Claude.ai Projects, Claude API. Frappe v15-v16, ERPNext v15-v16.

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Create the Raw HTML Section Web Template
  2. Create Web Pages with Page Builder
  3. Configure Website Settings

What it can do on your machine

Read from SKILL.md and the folder at commit 36cfa80. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Claude Code, Claude.ai Projects, Claude API. Frappe v15-v16, ERPNext v15-v16.

    From compatibility in the SKILL.md frontmatter.

Context cost

Frappe Ops Website Deploy loads about 2.5k tokens when it runs, and up to ~3k if it reads all its reference files. Until then it costs about 159 tokens; SKILL.md has 723 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~159
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from Impertio-Studio/Frappe_Claude_Skill_Package at commit 36cfa80, republished under its MIT licence (© Impertio-Studio). 723 words, ~2,515 tokens.

Download SKILL.mdSave it as .claude/skills/frappe-ops-website-deploy/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
frappe-ops-website-deploy
description
Deploy HTML/CSS websites to ERPNext/Frappe (v15/v16) as Web Pages via the REST API. Use this skill whenever a user wants to host a website on ERPNext, deploy HTML mockups to Frappe, create Web Pages programmatically, configure Website Settings, or integrate Frappe's Discussion system as a forum. Also use when the user mentions "website on ERPNext", "Web Page API", "Page Builder", "Web Template", or wants to serve custom HTML from Frappe. Covers: Web Pages with Page Builder, custom Web Templates, Website Settings (navbar, footer), CSS management, Frappe Discussion integration, and deployment scripting.
compatibility
Claude Code, Claude.ai Projects, Claude API. Frappe v15-v16, ERPNext v15-v16.
license
MIT
metadata.author
OpenAEC-Foundation
metadata.version
1.0

Deploy Websites on ERPNext/Frappe

Patterns for deploying static HTML/CSS websites to ERPNext v15/v16 using Web Pages, Page Builder, and the REST API.


Critical: ERPNext v16 Does NOT Render main_section

In Frappe v16, the main_section field on a Web Page is stored but not rendered in the browser — even with content_type: "HTML" or dynamic_template: 1. The Page Builder (page_blocks) is the primary rendering mechanism.

You must use page_blocks with a custom Web Template to render HTML content.


Decision Tree

What do you need?
├── Deploy HTML pages to ERPNext
│   ├── Step 1: Create "Raw HTML Section" Web Template (one-time)
│   ├── Step 2: Create Web Pages with page_blocks
│   └── Step 3: Configure Website Settings
│
├── Add a forum / discussion system
│   └── Use Frappe's built-in Discussion Topic/Reply + Discussions Web Template
│
├── Manage CSS
│   ├── Per-page CSS → Web Page `css` field
│   ├── Global CSS → Website Settings `head_html`
│   └── WARNING: Never stack !important overrides (see CSS Management)
│
└── Configure navigation
    └── Website Settings: top_bar_items, footer_items, brand_html, home_page

Step 1: Create the Raw HTML Section Web Template

This is a one-time setup. The template accepts raw HTML and renders it as-is.

POST /api/resource/Web%20Template
json
{
  "name": "Raw HTML Section",
  "type": "Section",
  "template": "{{ values.html_content }}",
  "fields": [
    {
      "fieldname": "html_content",
      "fieldtype": "Text",
      "label": "HTML Content"
    }
  ]
}

Important constraints:

  • The fieldtype must be "Text" — Frappe rejects "Code" for Web Template fields
  • Allowed fieldtypes: Attach Image, Check, Data, Int, Link, Select, Small Text, Text, Markdown Editor, Section Break, Column Break, Table Break
  • The template uses {{ values.html_content }} (with values. prefix) to access field data

Step 2: Create Web Pages with Page Builder

Each page needs content_type: "Page Builder" and its HTML in page_blocks.

POST /api/resource/Web%20Page
json
{
  "title": "Page Title",
  "route": "my-page",
  "published": 1,
  "show_title": 0,
  "full_width": 1,
  "content_type": "Page Builder",
  "css": "<per-page CSS here>",
  "page_blocks": [
    {
      "web_template": "Raw HTML Section",
      "web_template_values": "{\"html_content\": \"<div>Your HTML here</div>\"}"
    }
  ]
}

Critical: web_template_values is a JSON string, not an object. Serialize it with json.dumps() before sending.

Updating an existing page
PUT /api/resource/Web%20Page/{url_encoded_name}

To find a page by route:

GET /api/resource/Web%20Page?filters=[["route","=","my-page"]]&fields=["name"]

Step 3: Configure Website Settings

PUT /api/resource/Website%20Settings/Website%20Settings
json
{
  "home_page": "home",
  "brand_html": "<span style=\"...\">NL</span> My Brand",
  "head_html": "<link href=\"fonts.css\" rel=\"stylesheet\">\n<style>/* global CSS */</style>",
  "top_bar_items": [
    {"label": "About", "url": "/about", "right": 0}
  ],
  "footer_items": [
    {"label": "About", "url": "/about"}
  ]
}
head_html: Frappe Wrapper Fixes

Frappe wraps page content in several divs that add unwanted whitespace. Add these fixes to head_html:

html
<style>
.page-header-wrapper { display: none !important; }
.page-breadcrumbs { display: none !important; }
.page-content-wrapper { padding: 0 !important; margin: 0 !important; }
.page_content { padding: 0 !important; margin: 0 !important; }
.webpage-content { padding: 0 !important; margin: 0 !important; }
.web-page-content { padding: 0 !important; margin: 0 !important; max-width: none !important; }
.section.section-padding-top { padding-top: 0 !important; }
.section.section-padding-bottom { padding-bottom: 0 !important; }
.web-template-section { padding: 0 !important; margin: 0 !important; }
main { padding: 0 !important; margin: 0 !important; }
</style>

These are the only !important overrides you should use — they target Frappe's own wrapper elements, not your content.


CSS Management

The golden rule: keep your mockup CSS intact

Use the original mockup CSS in each page's css field. Only add Frappe wrapper fixes in head_html. Do not layer !important overrides on top of your content CSS — this leads to cascading conflicts and unpredictable layouts.

Where CSS goes
CSS TypeWhereField
Mockup/page CSSPer Web Pagecss
Google Fonts, Frappe fixesWebsite Settingshead_html
CSS variables (:root)Website Settingshead_html
What NOT to do

Never add broad !important overrides for content elements like .card, section, h2, etc. If spacing looks wrong, the cause is almost always a Frappe wrapper div — fix that specifically rather than overriding all your content styles.


Deploying from HTML Mockups

When converting a static HTML mockup to ERPNext Web Pages, follow this process:

1. Extract the body content

Strip everything outside the main content area — typically between </header> and <footer>. Remove the mockup's own nav and footer since Frappe provides its own via Website Settings.

Replace .html file references with Frappe routes:

href="about.html"  →  href="/about"
href="index.html"  →  href="/"
3. Handle images

Local img/ references won't work on ERPNext. Options:

  • Upload images via Frappe File Manager and use the returned URL
  • Use the File API: POST /api/method/upload_file
  • Reference external image URLs
Show full SKILL.md (287 more words)Show less
4. Deploy script pattern

See scripts/deploy.py for a complete deployment script. The key pattern:

python
import requests, json

def deploy_page(title, route, html_content, css):
    data = {
        "title": title,
        "route": route,
        "published": 1,
        "show_title": 0,
        "full_width": 1,
        "content_type": "Page Builder",
        "css": css,
        "page_blocks": [{
            "web_template": "Raw HTML Section",
            "web_template_values": json.dumps({"html_content": html_content})
        }]
    }
    # Create or update (check 409 conflict for existing pages)
    resp = requests.post(f"{BASE_URL}/api/resource/Web%20Page",
                         headers=HEADERS, json=data)
    if resp.status_code == 409:
        # Find and update existing
        ...

Forum Integration with Frappe Discussions

Frappe has built-in DocTypes for discussions that can be embedded on any Web Page.

Available DocTypes
  • Discussion Topic — a thread/topic linked to a reference document
  • Discussion Reply — a reply within a topic
Creating a forum page

Use the built-in "Discussions" Web Template as a page block:

json
{
  "page_blocks": [
    {
      "web_template": "Raw HTML Section",
      "web_template_values": "{\"html_content\": \"<section><div class=\\\"container\\\"><h1>Forum</h1></div></section>\"}"
    },
    {
      "web_template": "Discussions",
      "web_template_values": "{\"title\": \"Discussies\", \"cta_title\": \"Nieuw onderwerp\", \"docname\": \"forum\", \"single_thread\": 0}"
    }
  ]
}
Discussions Web Template fields
FieldTypePurpose
titleDataSection heading
cta_titleDataButton text for new topic
docnameLinkWeb Page to attach discussions to
single_threadCheck0 = multiple topics, 1 = single thread
Managing topics via API
POST /api/resource/Discussion%20Topic
{"subject": "My topic", "reference_doctype": "Web Page", "reference_docname": "forum"}

POST /api/resource/Discussion%20Reply
{"topic": "TOPIC0001", "reply": "My reply text"}

Authentication

All API calls require authentication via token header:

Authorization: token {api_key}:{api_secret}

Generate API keys in ERPNext: User Settings → API Access → Generate Keys.

Never store API keys in skill files, SKILL.md, or commit them to git. Pass them as environment variables or read from a secure config.


Troubleshooting

Page is blank / main_section not rendering

You're hitting the v16 Page Builder issue. Switch to content_type: "Page Builder" with page_blocks. See Step 2.

White bar above content

Frappe's .page-header-wrapper and .page-breadcrumbs add empty space. Hide them via head_html. See Step 3.

Web Template creation fails with fieldtype error

Use "Text" not "Code" for the fieldtype. Frappe Web Templates only allow a subset of fieldtypes.

CSS looks wrong / spacing is off

Check if Frappe's .section.section-padding-top or .page-content-wrapper are adding padding. Fix those specifically — don't override your content CSS with !important.

Grid layouts collapse to single column

If your mockup CSS has media queries that override grid columns, those will apply on ERPNext too. Check the rendered CSS for conflicting media query rules.

Images don't show

Local img/ paths from mockups won't resolve. Upload files to ERPNext or use absolute URLs.

© Impertio-Studio, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (scripts, references) in skills/source/ops/frappe-ops-website-deploy of Impertio-Studio/Frappe_Claude_Skill_Package.

  • SKILL.md
  • references/frappe-wrapper-elements.md
  • scripts/deploy.py

Open the folder on GitHubat commit 36cfa80

Compare with similar skills

Frappe Ops Website Deploy next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Frappe Ops Website Deploy compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Frappe Ops Website Deploy this skillImpertio-Studio/Frappe_Claude_Skill_Package188—~2.5kAutomated safety check: PassMIT
Mintlify APImacro-inc/macro4.6k2 repos~333Automated safety check: PassMIT
Golem Add HTTP Endpoint Effectgolemcloud/golem1.5k—~3.3kAutomated safety check: PassCustom licence
Ship Coolifykovrichard/catalyst470—~1.9kAutomated safety check: NotesNone
Finding TriageHacktronAI/skills115—~2.9kAutomated safety check: NotesMIT
Implementing Deception Based Detection With Canarytokenmukul975/Anthropic-Cybersecurity-Skills34k—~591Automated safety check: PassApache-2.0

Similar skills

  • Mintlify API

    macro-inc/macro

    Interact with the Mintlify REST API to manage deployments, trigger builds, and query documentation site metadata programmatically.

    4.6k GitHub starsUsed in 2 repos~333 tokens
    Backend & APIsAuto-check passed
  • Exposing an Effect-based Golem agent over HTTP. An agent skill from golemcloud/golem.

    1.5k GitHub stars~3.3k tokensUpdated today
    Backend & APIsAuto-check passed
  • Ship Coolify

    kovrichard/catalyst

    Verify a Coolify deploy end-to-end after a push — wait for GitHub CI, then the Coolify deployment, confirm the commit is live, and run a visual check.

    470 GitHub stars~1.9k tokensUpdated 9 days ago
    Backend & APIsAuto-check: notes
  • Finding Triage

    HacktronAI/skills

    Interactively validate and triage Hacktron findings against the actual source code and (optionally) a live deployment, separate true positives from false positives, adjust severity, then either…

    115 GitHub stars~2.9k tokensUpdated 4 mo ago
    Backend & APIsAuto-check: notes
  • Implementing Deception Based Detection With Canarytoken

    mukul975/Anthropic-Cybersecurity-Skills

    Deploys and monitors Canary Tokens via the Thinkst Canary REST API for deception-based breach detection, programmatically creating web bug, DNS, MS Word document, and AWS API key tokens and…

    34k GitHub stars~591 tokensUpdated 1 mo ago
    DevOps & CloudAuto-check passed
  • Os Usage

    goinfinite/os

    A skill your agent uses when deploying or managing applications on an Infinite OS instance — maps the dashboard, CLI, and REST API, and gives the core deployment workflows.

    361 GitHub stars~4.8k tokensUpdated today
    DevOps & CloudAuto-check: notes

More from Impertio-Studio/Frappe_Claude_Skill_Package

All 61 skills in this repo
  • Frappe Agent Architect

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when designing multi-app Frappe architectures, deciding whether to split functionality into separate apps, or implementing cross-app communication patterns.

    188 GitHub stars~2.8k tokensUpdated 22 days ago
    Auto-check passed
  • Frappe Agent Debugger

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when debugging Frappe errors, using bench console for live inspection, analyzing tracebacks, or reading Frappe log files.

    188 GitHub stars~2.9k tokensUpdated 22 days ago
    Auto-check passed
  • Frappe Agent Interpreter

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when receiving vague or unclear ERPNext/Frappe development requests that need interpretation.

    188 GitHub stars~3.2k tokensUpdated 22 days ago
    Auto-check passed
  • Frappe Agent Migrator

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when migrating a Frappe app between major versions, detecting breaking API changes, or resolving post-migration errors.

    188 GitHub stars~2.8k tokensUpdated 22 days ago
    Auto-check: notes
  • Frappe Agent Validator

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when reviewing or validating Frappe/ERPNext code against best practices and common pitfalls.

    188 GitHub stars~2.8k tokensUpdated 22 days ago
    Auto-check passed
  • Frappe Core API

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when building ERPNext/Frappe API integrations (v14/v15/v16) including REST API, RPC API, authentication, webhooks, and rate limiting.

    188 GitHub stars~3.2k tokensUpdated 22 days ago
    Auto-check passed

Questions about Frappe Ops Website Deploy

What does Frappe Ops Website Deploy do?

Deploy HTML/CSS websites to ERPNext/Frappe (v15/v16) as Web Pages via the REST API. Frappe Ops Website Deploy is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Deploy HTML/CSS websites to ERPNext/Frappe (v15/v16) as Web Pages via the REST API.

When should I use Frappe Ops Website Deploy?

Frappe Ops Website Deploy fits situations like: A user wants to host a website on ERPNext; deploy HTML mockups to Frappe; create Web Pages programmatically; configure Website Settings.

How do I install Frappe Ops Website Deploy in Claude Code?

Run `npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-website-deploy -a claude-code`. Or copy the skill folder (skills/source/ops/frappe-ops-website-deploy in Impertio-Studio/Frappe_Claude_Skill_Package) into .claude/skills/frappe-ops-website-deploy in your project. Claude Code loads it when a task matches its description.

How do I install Frappe Ops Website Deploy in Codex?

Run `npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-website-deploy -a codex`. Or copy the skill folder (skills/source/ops/frappe-ops-website-deploy in Impertio-Studio/Frappe_Claude_Skill_Package) into .agents/skills/frappe-ops-website-deploy in your project. Codex loads it when a task matches its description.

Can I use Frappe Ops Website Deploy in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-ops-website-deploy -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/frappe-ops-website-deploy, .gemini/skills/frappe-ops-website-deploy, .github/skills/frappe-ops-website-deploy and .opencode/skills/frappe-ops-website-deploy in your project.

What does Frappe Ops Website Deploy need to run?

Going by SKILL.md and its folder, Frappe Ops Website Deploy needs Python for the scripts in its folder. Our summary lists: Python 3. Compatibility (from SKILL.md): Claude Code, Claude.ai Projects, Claude API. Frappe v15-v16, ERPNext v15-v16..

Does Frappe Ops Website Deploy access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Frappe Ops Website Deploy safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Frappe Ops Website Deploy use?

Frappe Ops Website Deploy is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Frappe Ops Website Deploy use?

About 2.5k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 453 tokens, read only when the agent opens those files.

What are the alternatives to Frappe Ops Website Deploy?

Skills that share tags, products or a category with Frappe Ops Website Deploy: Mintlify API (macro-inc/macro, 4.6k stars), Golem Add HTTP Endpoint Effect (golemcloud/golem, 1.5k stars), Ship Coolify (kovrichard/catalyst, 470 stars) and Finding Triage (HacktronAI/skills, 115 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Frappe Ops Website Deploy?

Impertio-Studio (a GitHub organization) maintains it in Impertio-Studio/Frappe_Claude_Skill_Package, which has 188 GitHub stars. The repository holds 61 skills in this directory. The repository was last updated on September 17, 2026.

Source: Impertio-Studio/Frappe_Claude_Skill_Package on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.