Engine Whats New
flutter/flutter
Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).
Convert an existing company website into a GrowERP-hosted website for a new owner (tenant), including logo and page images.
$ npx skills add growerp/growerp --skill convert-website -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install growerp/growerp convert-website --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/growerp/growerp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/convert-website .claude/skills/convert-website && rm -rf skills-srcUse ~/.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/
Install the "convert-website" agent skill from https://github.com/growerp/growerp/tree/master/.claude/skills/convert-website into .claude/skills/convert-website/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "convert-website", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/growerp/growerp/tree/master/.claude/skills/convert-websiteType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add growerp/growerp --skill convert-website -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install growerp/growerp convert-website --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growerp/growerp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/convert-website .agents/skills/convert-website && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "convert-website" agent skill from https://github.com/growerp/growerp/tree/master/.claude/skills/convert-website into .agents/skills/convert-website/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "convert-website", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add growerp/growerp --skill convert-website -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install growerp/growerp convert-website --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growerp/growerp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/convert-website .cursor/skills/convert-website && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "convert-website" agent skill from https://github.com/growerp/growerp/tree/master/.claude/skills/convert-website into .cursor/skills/convert-website/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "convert-website", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/growerp/growerp.git --path .claude/skills/convert-website--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add growerp/growerp --skill convert-website -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install growerp/growerp convert-website --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growerp/growerp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/convert-website .gemini/skills/convert-website && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "convert-website" agent skill from https://github.com/growerp/growerp/tree/master/.claude/skills/convert-website into .gemini/skills/convert-website/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "convert-website", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install growerp/growerp convert-websiteInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add growerp/growerp --skill convert-website -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/growerp/growerp.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/convert-website .github/skills/convert-website && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "convert-website" agent skill from https://github.com/growerp/growerp/tree/master/.claude/skills/convert-website into .github/skills/convert-website/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "convert-website", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add growerp/growerp --skill convert-website -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install growerp/growerp convert-website --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growerp/growerp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/convert-website .opencode/skills/convert-website && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "convert-website" agent skill from https://github.com/growerp/growerp/tree/master/.claude/skills/convert-website into .opencode/skills/convert-website/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "convert-website", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
convert-websiteConvert an existing company website into a GrowERP-hosted website for a new owner (tenant), including logo and page images.
Convert Website is an agent skill from growerp/growerp. Convert an existing company website into a GrowERP-hosted website for a new owner (tenant), including logo and page images. Use when the user says "convert this website", "scrape <site into GrowERP", "import a website as a new owner", or gives a company URL to turn into a GrowERP site.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Data & Analytics, covering Web scraping. It works with Flutter, Linux and macOS. The repository describes itself as: GrowERP AI Flutter ERP for Web, Linux, MacOS, Windows, Android, IOS using Moqui.org in English, French, German, Spanish, Thai and Dutch. The licence is Apache-2.0.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 83e237c. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Convert Website loads about 2.6k tokens when it runs. Until then it costs about 76 tokens; SKILL.md has 698 words of instructions outside code blocks.
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.
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); files beside SKILL.md are not scanned.
The full file from growerp/growerp at commit 83e237c, republished under its Apache-2.0 licence (© growerp). 698 words, ~2,557 tokens.
.claude/skills/convert-website/SKILL.md (or your agent's skills folder).Scrape a company website, author it as a GrowERP modern (Lumina) template site, write
everything into ONE Moqui data file, and import that file to create a live, tenant-owned,
admin-app-editable website.
The full page/theme/styling contract is docs/Website_Template_Definition.md — read it before authoring pages. This skill only covers the conversion pipeline around it.
/convert-website <url> --admin-email <e> --admin-first <f> --admin-last <l>
--company-name <n> --currency <USD|EUR|...>
[--hostnames a.com,www.a.com] [--app AppAdmin]Interview the user for anything missing. Never use a scraped address as the admin login — that creates a login for a mailbox we do not control. The scraped contact email becomes the company email only.
Pick a <ID>: uppercase, from the company name (ACCUGEO, ANTWEBSYS). It prefixes every
resource id in the file. Check it is free before generating:
moqui_rest_call e1/moqui.resource.wiki.WikiSpace/<ID>_WS must 404, and
grep -rl '<ID>_ROOT' backend/data/ must be empty.
curl -sL <url> -o /tmp/home.html # follow redirects
grep -oE 'href="[^"]*"' /tmp/home.html | sort -u # route inventorySingle-page apps: download the JS bundle and mine it —
routes grep -oE "path:['\"][^'\"]*", Vue text nodes
perl -ne 'while (/t\._v\("([^"]{25,400})"\)/g) { print "$1\n" }',
colors grep -oE '#[0-9a-fA-F]{6}' | sort | uniq -c | sort -rn.
Map every page to the page-type matrix (doc §2). Drop pages covered by system routes
(product lists, search, cart). Organize many pages into two-level paths
(products/pvc, applications/canals) → one navbar dropdown per first segment. Detail/spec
pages get a _ prefix on the leaf (products/_pvc-spec) → routable but hidden from menus.
Dated blog/news post lists are still not supported — convert posts to hidden pages plus a
manual index page, and tell the user.
Extract the palette from the source CSS. Fill all 16 lumina tokens plus
luminaBrightness ("dark"/"light") and the social *Url keys per doc §3. Never add a
contrast key.
curl -sL <imgUrl> -o /tmp/img/hero-plant.jpg
convert /tmp/img/hero-plant.jpg -resize '1600x1600>' -quality 82 /tmp/img/hero-plant.jpg # if >300KB and ImageMagick present
base64 -w0 /tmp/img/hero-plant.jpgTake the logo plus the images that actually carry meaning (hero, product, team) — not sprites, icons or tracking pixels.
Filename rules (/getImage matches with SQL LIKE '<path>%'): lowercase, hyphens only,
no _ or % (both are SQL wildcards), and no name may be a prefix of another
(hero.jpg + hero-2.jpg is fine, hero.jpg + hero.jpg.webp is not — the lookup takes an
arbitrary one of the two).
Per doc §§2–7: first line exactly <#-- title: X -->, body-only,
<main class="pt-28 pb-16"> (pt-24 for home), token classes only (no hex), FreeMarker
safety rules (<#noparse> around literal ${} in JS/CSS, no backticks). Text-heavy pages may
be .md.ftl (first line # Title, gets prose styling and a TOC sidebar).
Images are referenced as <img src="/getImage/images/<filename>">; the logo is /getLogo.
Footer contact details render automatically from the company's contact records — do not
hardcode them.
backend/data/<Name>OwnerImportData.xml<entity-facade-xml type="demo"> (never auto-loaded at install). Content only — no Party,
ProductStore or ProductStoreSetting records; those are created at import time.
<!-- 1. directory tree; the root's filename must equal its resourceId -->
<moqui.resource.DbResource filename="<ID>_ROOT" isFile="N" resourceId="<ID>_ROOT" parentResourceId=""/>
<moqui.resource.DbResource filename="content" isFile="N" resourceId="<id>_content_dir" parentResourceId="<ID>_ROOT"/>
<moqui.resource.DbResource filename="images" isFile="N" resourceId="<ID>_IMAGES" parentResourceId="<ID>_ROOT"/>
<!-- one extra dir per two-level path group, parent = <id>_content_dir -->
<!-- 2. wiki space (no rootWikiPageId field — it does not exist) -->
<moqui.resource.wiki.WikiSpace wikiSpaceId="<ID>_WS" description="<Company> Website"
allowAnyHtml="Y" rootPageLocation="dbresource://<ID>_ROOT"/>
<!-- 3. one pair per page; sequenceNum = menu order -->
<moqui.resource.wiki.WikiPage wikiPageId="<id>_about" wikiSpaceId="<ID>_WS" pagePath="about"
publishedVersionName="01" sequenceNum="3">
<histories historySeqId="01" versionName="01" changeDateTime="1485028800000"/>
</moqui.resource.wiki.WikiPage>
<moqui.resource.DbResource filename="about.html.ftl" isFile="Y" resourceId="<id>_about"
parentResourceId="<id>_content_dir">
<file mimeType="text/html" versionName="01" rootVersionName="01">
<fileData><![CDATA[<#-- title: About -->
<main class="pt-28 pb-16"> ... </main>]]></fileData>
<histories versionName="01" versionDate="1485028800000" isDiff="N"/>
</file>
</moqui.resource.DbResource>
<!-- 4. images and logo, base64 in the CDATA -->
<moqui.resource.DbResource filename="logo.png" isFile="Y" resourceId="<ID>_LOGO" parentResourceId="<ID>_IMAGES"/>
<moqui.resource.DbResourceFile resourceId="<ID>_LOGO" rootVersionName="01" versionName="01" mimeType="image/png">
<fileData><![CDATA[iVBORw0KGgo...]]></fileData>
</moqui.resource.DbResourceFile>
<!-- 5. theme, under the content dir -->
<moqui.resource.DbResource filename="websiteColor.json" isFile="Y" resourceId="<id>_website_color"
parentResourceId="<id>_content_dir"> ... mimeType="application/json" ... </moqui.resource.DbResource>
<!-- 6. owner spec, directly under the root -->
<moqui.resource.DbResource filename="ownerSpec.json" isFile="Y" resourceId="<ID>_OWNER_SPEC"
parentResourceId="<ID>_ROOT">
<file mimeType="application/json" versionName="01" rootVersionName="01">
<fileData><![CDATA[{
"adminEmail": "...", "adminFirstName": "...", "adminLastName": "...",
"companyName": "AccuGeo Liner, Inc.", "currencyId": "USD", "applicationId": "AppAdmin",
"hostNames": ["www.accugeo.com", "accugeo.com", "accugeo.localhost:8080"],
"logoPath": "images/logo.png",
"contact": {
"email": "info@accugeo.com",
"telephone": {"countryCode": "1", "areaCode": "661", "contactNumber": "321-0447"},
"address": {"address1": "321 Industrial St.", "city": "Bakersfield",
"postalCode": "93307", "stateProvinceGeoId": "USA_CA", "countryGeoId": "USA"}
}
}]]></fileData>
<histories versionName="01" versionDate="1485028800000" isDiff="N"/>
</file>
</moqui.resource.DbResource>Gotchas that fail silently:
fileData must be a nested element with CDATA. Bare text on the <file> element loads as
NULL with no error.publishedVersionName must equal the file versionName exactly — "01", not "1".filename, not by resourceId; they must match.hostNames literal — the value is used as a regex and the oldest matching row over
all stores wins. Always include a <name>.localhost:8080 entry for local testing.stateProvinceGeoId/countryGeoId exist:
moqui_rest_call e1/moqui.basic.Geo/USA_CA. A wrong id aborts the import with an FK error.Backend must be running.
mcp__moqui__moqui_execute_service
serviceName: growerp.100.ImportExportServices100.import#WebsiteOwner
parameters: {location: 'component://growerp/data/<Name>OwnerImportData.xml',
siteId: '<ID>', password: '<chosen or omit for a random one>'}If the MCP server answers "Unknown service name", its service list predates the backend start — call the service over the Moqui tools endpoint instead (same result, works without a restart):
curl -s -u SystemSupport:moqui -X POST \
'http://localhost:8080/apps/tools/Service/ServiceRun/runJson' \
--data-urlencode 'serviceName=growerp.100.ImportExportServices100.import#WebsiteOwner' \
--data-urlencode 'location=component://growerp/data/<Name>OwnerImportData.xml' \
--data-urlencode 'siteId=<ID>' --data-urlencode 'password=<chosen>'The service loads the file, creates the owner with create#Tenant + complete#TenantSetup,
repoints the new store at <ID>_WS / dbresource://<ID>_ROOT with PsstTemplateId=modern,
adds the hostnames, links the logo and registers every image under <ID>_IMAGES.
Report ownerPartyId, companyPartyId, productStoreId and the password back to the
user — it is not recoverable afterwards.
The import runs once per owner: a second run stops with "already registered" and changes nothing. To re-import content into an existing tenant, edit the pages in the admin app's Website dialog instead.
H='Host: www.accugeo.com'
curl -s -o /dev/null -w '%{http_code}\n' -H "$H" http://localhost:8080/ # 200
curl -s -o /dev/null -w '%{http_code}\n' -H "$H" http://localhost:8080/content/about
curl -s -H "$H" http://localhost:8080/ | grep -E '<#|\$\{' # empty
curl -s -o /dev/null -w '%{http_code}\n' -H "$H" http://localhost:8080/getLogo # 200
curl -s -o /dev/null -w '%{http_code}\n' -H "$H" http://localhost:8080/getImage/images/logo.png
curl -s http://localhost:8080/components/styles/<productStoreId>.css | grep -- '--l-contrast'Check every route from the inventory, that hidden _ pages are absent from the navbar markup,
that the dropdown count matches the path groups, and that pre-existing stores still resolve on
their own hostnames. Then log in to the admin app with the admin email and the returned
password: the Website dialog must list all pages, and the company must show the scraped
address, phone and logo.
© growerp, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/convert-website of growerp/growerp.
Open the folder on GitHubat commit 83e237c
Convert Website 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Convert Website this skillgrowerp/growerp | 115 | — | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Engine Whats Newflutter/flutter | 179k | — | ~978 | Automated safety check: Pass | BSD-3-Clause | |
| Updating Android SDKflutter/flutter | 179k | — | ~1.7k | Automated safety check: Pass | BSD-3-Clause | |
| OdevioOdevio/Odevio-CLI | 423 | — | ~7.6k | Automated safety check: Pass | MIT | |
| Flutter UI Probelibnativeapi/nativeapi | 161 | — | ~988 | Automated safety check: Pass | MIT | |
| flutter_soloud Setupalnitak/flutter_soloud | 424 | — | ~3.6k | Automated safety check: Notes | MIT |
flutter/flutter
Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).
flutter/flutter
Upgrades Flutter's Android SDK dependency to a new Android API version (or preview/canary release) in packages.txt, verifies CIPD tag uniqueness, and packages/uploads the binaries using…
Odevio/Odevio-CLI
Take a Flutter project to an iPhone or the App Store with Odevio - build, sign and publish iOS apps from Windows, Linux or macOS with no Mac and no Xcode.
libnativeapi/nativeapi
Find where widgets are on screen in a running debug Flutter desktop app (macOS, Windows, Linux) by reading its render tree through the VM service — no hard-coded coordinates, no screenshots, works…
alnitak/flutter_soloud
Walks through adding the flutter_soloud audio engine to a Flutter app, with per-platform setup, initialization, binary-size and logging options, and output device switching.
libnativeapi/nativeapi
End-to-end test a desktop app (Flutter desktop apps and plain native executables such as C++ examples) by launching the real app, driving it with guarded synthetic mouse input — eased moves, clicks…
growerp/growerp
Build, run and screenshot the GrowERP admin Flutter app headless to verify UI changes at runtime.
growerp/growerp
Create a new GrowERP vertical app or extend an existing one from building blocks.
Categories
Convert an existing company website into a GrowERP-hosted website for a new owner (tenant), including logo and page images. Convert Website is an agent skill from growerp/growerp. Convert an existing company website into a GrowERP-hosted website for a new owner (tenant), including logo and page images.
Convert Website fits situations like: the user says convert this website; scrape <site into GrowERP; import a website as a new owner; gives a company URL to turn into a GrowERP site.
Run `npx skills add growerp/growerp --skill convert-website -a claude-code`. Or copy the skill folder (.claude/skills/convert-website in growerp/growerp) into .claude/skills/convert-website in your project. Claude Code loads it when a task matches its description.
Run `npx skills add growerp/growerp --skill convert-website -a codex`. Or copy the skill folder (.claude/skills/convert-website in growerp/growerp) into .agents/skills/convert-website in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add growerp/growerp --skill convert-website -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/convert-website, .gemini/skills/convert-website, .github/skills/convert-website and .opencode/skills/convert-website in your project.
Going by SKILL.md and its folder, Convert Website needs the command-line tools its instructions call (curl).
SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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. Review the folder before installing.
Convert Website is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k 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.
Skills that share tags, products or a category with Convert Website: Engine Whats New (flutter/flutter, 179k stars), Updating Android SDK (flutter/flutter, 179k stars), Odevio (Odevio/Odevio-CLI, 423 stars) and Flutter UI Probe (libnativeapi/nativeapi, 161 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
growerp (a GitHub organization) maintains it in growerp/growerp, which has 115 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 8, 2026.
Source: growerp/growerp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.