codymaster 4.1.4 → 4.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -2
- package/README.md +56 -86
- package/dist/index.js +130 -16
- package/dist/ui/box.js +2 -2
- package/dist/ui/onboarding.js +11 -5
- package/install.sh +317 -35
- package/package.json +8 -8
- package/public/dashboard/app.js +1270 -0
- package/public/dashboard/index.html +218 -0
- package/public/dashboard/style.css +440 -0
- package/skills/AGENTS.md +61 -0
- package/skills/CLAUDE.md +158 -0
- package/skills/boxme-git-config/SKILL.md +56 -0
- package/skills/boxme-local-dev/SKILL.md +66 -0
- package/skills/build.sh +30 -0
- package/skills/cf +314 -0
- package/skills/cf 2 +313 -0
- package/skills/cm-ads-tracker/SKILL.md +364 -69
- package/skills/cm-auto-publisher/SKILL.md +81 -0
- package/skills/cm-booking-calendar/SKILL.md +521 -0
- package/skills/cm-booking-calendar/references/industry-patterns.md +527 -0
- package/skills/cm-booking-calendar/templates/booking-form.css +626 -0
- package/skills/cm-booking-calendar/templates/booking-form.html +477 -0
- package/skills/cm-booking-calendar/templates/calendar-engine.js +419 -0
- package/skills/cm-booking-calendar/templates/calendar-export.js +395 -0
- package/skills/cm-booking-calendar/templates/reminder-config.js +629 -0
- package/skills/cm-brainstorm-idea/SKILL.md +15 -24
- package/skills/cm-clean-code/SKILL.md +300 -0
- package/skills/cm-code-review/SKILL.md +0 -27
- package/skills/cm-codeintell/SKILL.md +598 -0
- package/skills/cm-content-factory/.content-factory-state.json +132 -0
- package/skills/cm-content-factory/.git 2/logs/refs/heads/main +1 -0
- package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +1 -0
- package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
- package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
- package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
- package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
- package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
- package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
- package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
- package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
- package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
- package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
- package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
- package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
- package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
- package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
- package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
- package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
- package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
- package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
- package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
- package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
- package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
- package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
- package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
- package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
- package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
- package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
- package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
- package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
- package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
- package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
- package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
- package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
- package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
- package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
- package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
- package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
- package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +5 -0
- package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
- package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
- package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
- package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
- package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
- package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
- package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
- package/skills/cm-content-factory/.git 2/refs/heads/main +1 -0
- package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +1 -0
- package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +76 -0
- package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +1 -0
- package/skills/cm-content-factory/AGENTS.md +61 -0
- package/skills/cm-content-factory/CLAUDE.md +63 -0
- package/skills/cm-content-factory/CURSOR.md +43 -0
- package/skills/cm-content-factory/Content Factory.zip +0 -0
- package/skills/cm-content-factory/cf +313 -0
- package/skills/cm-content-factory/config.schema.json +397 -0
- package/skills/cm-content-factory/dashboard/app.js +556 -0
- package/skills/cm-content-factory/dashboard/index.html +397 -0
- package/skills/cm-content-factory/dashboard/style.css +1211 -0
- package/skills/cm-content-factory/examples/01-real-estate.config.json +146 -0
- package/skills/cm-content-factory/examples/02-personal-finance.config.json +146 -0
- package/skills/cm-content-factory/examples/03-health-wellness.config.json +147 -0
- package/skills/cm-content-factory/examples/04-saas-software.config.json +147 -0
- package/skills/cm-content-factory/examples/05-legal-services.config.json +147 -0
- package/skills/cm-content-factory/examples/06-insurance.config.json +146 -0
- package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +146 -0
- package/skills/cm-content-factory/examples/08-online-education.config.json +147 -0
- package/skills/cm-content-factory/examples/09-crypto-defi.config.json +147 -0
- package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +147 -0
- package/skills/cm-content-factory/examples/11-home-services.config.json +146 -0
- package/skills/cm-content-factory/examples/12-dental-clinic.config.json +147 -0
- package/skills/cm-content-factory/examples/13-pet-care.config.json +147 -0
- package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +147 -0
- package/skills/cm-content-factory/examples/15-ai-automation.config.json +147 -0
- package/skills/cm-content-factory/examples/16-wedding-events.config.json +147 -0
- package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +148 -0
- package/skills/cm-content-factory/examples/18-cybersecurity.config.json +147 -0
- package/skills/cm-content-factory/examples/19-food-restaurant.config.json +148 -0
- package/skills/cm-content-factory/examples/20-solar-energy.config.json +147 -0
- package/skills/cm-content-factory/examples/fitness-blog.config.json +116 -0
- package/skills/cm-content-factory/examples/tech-blog.config.json +107 -0
- package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +72 -0
- package/skills/cm-content-factory/extensions/hooks.py +126 -0
- package/skills/cm-content-factory/extensions/openclaw_adapter.py +132 -0
- package/skills/cm-content-factory/landing/index.html +680 -0
- package/skills/cm-content-factory/landing/script.js +101 -0
- package/skills/cm-content-factory/landing/style.css +1216 -0
- package/skills/cm-content-factory/landing/translations.js +508 -0
- package/skills/cm-content-factory/logs/events.jsonl +11 -0
- package/skills/cm-content-factory/profiles/_template.profile.json +231 -0
- package/skills/cm-content-factory/profiles/finance.profile.json +278 -0
- package/skills/cm-content-factory/profiles/legal.profile.json +263 -0
- package/skills/cm-content-factory/profiles/medical-research.profile.json +321 -0
- package/skills/cm-content-factory/profiles/technology.profile.json +275 -0
- package/skills/cm-content-factory/scripts/agent_dispatcher.py +266 -0
- package/skills/cm-content-factory/scripts/audit.py +106 -0
- package/skills/cm-content-factory/scripts/dashboard_server.py +225 -0
- package/skills/cm-content-factory/scripts/deploy.py +146 -0
- package/skills/cm-content-factory/scripts/extract.py +132 -0
- package/skills/cm-content-factory/scripts/landing_generator.py +459 -0
- package/skills/cm-content-factory/scripts/memory.py +521 -0
- package/skills/cm-content-factory/scripts/monetize.py +239 -0
- package/skills/cm-content-factory/scripts/pipeline.py +357 -0
- package/skills/cm-content-factory/scripts/plan.py +163 -0
- package/skills/cm-content-factory/scripts/publish.py +145 -0
- package/skills/cm-content-factory/scripts/research.py +337 -0
- package/skills/cm-content-factory/scripts/scaffold.py +464 -0
- package/skills/cm-content-factory/scripts/scoreboard.py +336 -0
- package/skills/cm-content-factory/scripts/seo.py +90 -0
- package/skills/cm-content-factory/scripts/state_manager.py +320 -0
- package/skills/cm-content-factory/scripts/token_manager.py +268 -0
- package/skills/cm-content-factory/scripts/validate.py +221 -0
- package/skills/cm-content-factory/scripts/wizard.py +329 -0
- package/skills/cm-content-factory/scripts/write.py +93 -0
- package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +90 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +54 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +38 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +65 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +48 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +39 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +42 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +51 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +52 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +86 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +80 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +58 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +102 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +29 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +55 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +29 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +41 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +40 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +56 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +46 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +108 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +22 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +52 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +58 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +92 -0
- package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +575 -0
- package/skills/cm-content-factory/tests/conftest.py +66 -0
- package/skills/cm-content-factory/tests/test_agent_dispatcher.py +125 -0
- package/skills/cm-content-factory/tests/test_memory.py +128 -0
- package/skills/cm-content-factory/tests/test_pipeline.py +107 -0
- package/skills/cm-content-factory/tests/test_research.py +56 -0
- package/skills/cm-content-factory/tests/test_state_manager.py +131 -0
- package/skills/cm-content-factory/tests/test_token_manager.py +110 -0
- package/skills/cm-content-factory/tests/test_wizard.py +121 -0
- package/skills/cm-continuity/SKILL.md +7 -0
- package/skills/cm-cro-methodology/SKILL.md +290 -0
- package/skills/cm-dashboard/SKILL.md +7 -525
- package/skills/cm-debugging/SKILL.md +7 -116
- package/skills/cm-deep-search/SKILL.md +5 -1
- package/skills/cm-dockit/README.md +6 -15
- package/skills/cm-dockit/SKILL.md +20 -37
- package/skills/cm-execution/SKILL.md +6 -1
- package/skills/cm-frappe-agent/SKILL.md +134 -0
- package/skills/cm-frappe-agent/agents/doctype-architect.md +596 -0
- package/skills/cm-frappe-agent/agents/erpnext-customizer.md +643 -0
- package/skills/cm-frappe-agent/agents/frappe-backend.md +814 -0
- package/skills/cm-frappe-agent/agents/frappe-custom-frontend.md +557 -0
- package/skills/cm-frappe-agent/agents/frappe-debugger.md +625 -0
- package/skills/cm-frappe-agent/agents/frappe-fixer.md +275 -0
- package/skills/cm-frappe-agent/agents/frappe-frontend.md +660 -0
- package/skills/cm-frappe-agent/agents/frappe-installer.md +158 -0
- package/skills/cm-frappe-agent/agents/frappe-performance.md +307 -0
- package/skills/cm-frappe-agent/agents/frappe-planner.md +419 -0
- package/skills/cm-frappe-agent/agents/frappe-remote-ops.md +153 -0
- package/skills/cm-frappe-agent/agents/github-workflow.md +286 -0
- package/skills/cm-frappe-agent/commands/frappe-app.md +351 -0
- package/skills/cm-frappe-agent/commands/frappe-backend.md +162 -0
- package/skills/cm-frappe-agent/commands/frappe-bench.md +254 -0
- package/skills/cm-frappe-agent/commands/frappe-debug.md +263 -0
- package/skills/cm-frappe-agent/commands/frappe-doctype-create.md +272 -0
- package/skills/cm-frappe-agent/commands/frappe-doctype-field.md +310 -0
- package/skills/cm-frappe-agent/commands/frappe-erpnext.md +210 -0
- package/skills/cm-frappe-agent/commands/frappe-fix.md +59 -0
- package/skills/cm-frappe-agent/commands/frappe-frontend.md +210 -0
- package/skills/cm-frappe-agent/commands/frappe-fullstack.md +243 -0
- package/skills/cm-frappe-agent/commands/frappe-github.md +57 -0
- package/skills/cm-frappe-agent/commands/frappe-install.md +52 -0
- package/skills/cm-frappe-agent/commands/frappe-plan.md +442 -0
- package/skills/cm-frappe-agent/commands/frappe-remote.md +58 -0
- package/skills/cm-frappe-agent/commands/frappe-test.md +356 -0
- package/skills/cm-frappe-agent/docs/README.md +51 -0
- package/skills/cm-frappe-agent/docs/agents-catalog.md +113 -0
- package/skills/cm-frappe-agent/docs/architecture.md +149 -0
- package/skills/cm-frappe-agent/docs/commands-catalog.md +82 -0
- package/skills/cm-frappe-agent/docs/resources-catalog.md +66 -0
- package/skills/cm-frappe-agent/docs/sitemap-urls.txt +52 -0
- package/skills/cm-frappe-agent/docs/sitemap.md +81 -0
- package/skills/cm-frappe-agent/docs/sop/user-guide.md +178 -0
- package/skills/cm-frappe-agent/docs/sop/vibe-coding-guide.md +122 -0
- package/skills/cm-frappe-agent/resources/7-layer-architecture.md +985 -0
- package/skills/cm-frappe-agent/resources/bench_commands.md +73 -0
- package/skills/cm-frappe-agent/resources/code-patterns-guide.md +948 -0
- package/skills/cm-frappe-agent/resources/common_pitfalls.md +266 -0
- package/skills/cm-frappe-agent/resources/doctype-registry.md +158 -0
- package/skills/cm-frappe-agent/resources/installation-guide.md +289 -0
- package/skills/cm-frappe-agent/resources/rest-api-patterns.md +182 -0
- package/skills/cm-frappe-agent/resources/scaffold_checklist.md +82 -0
- package/skills/cm-frappe-agent/resources/upgrade_patterns.md +113 -0
- package/skills/cm-frappe-agent/resources/web-form-patterns.md +252 -0
- package/skills/cm-frappe-agent/skills/bench-commands/SKILL.md +621 -0
- package/skills/cm-frappe-agent/skills/client-scripts/SKILL.md +642 -0
- package/skills/cm-frappe-agent/skills/doctype-patterns/SKILL.md +576 -0
- package/skills/cm-frappe-agent/skills/frappe-api/SKILL.md +740 -0
- package/skills/cm-frappe-agent/skills/remote-operations/SKILL.md +47 -0
- package/skills/cm-frappe-agent/skills/server-scripts/SKILL.md +608 -0
- package/skills/cm-frappe-agent/skills/web-forms/SKILL.md +46 -0
- package/skills/cm-git-worktrees/SKILL.md +0 -7
- package/skills/cm-google-form/SKILL.md +266 -0
- package/skills/cm-google-form/templates/apps-script.js +55 -0
- package/skills/cm-google-form/templates/form-markup.html +110 -0
- package/skills/cm-google-form/templates/form-submit.js +201 -0
- package/skills/cm-google-form/templates/toast.css +152 -0
- package/skills/cm-growth-hacking/SKILL.md +293 -0
- package/skills/cm-growth-hacking/bottom-sheet-engine.md +261 -0
- package/skills/cm-growth-hacking/calendar-integration.md +264 -0
- package/skills/cm-growth-hacking/references/engagement-patterns.md +346 -0
- package/skills/cm-growth-hacking/templates/bottom-sheet.css +528 -0
- package/skills/cm-growth-hacking/templates/bottom-sheet.js +269 -0
- package/skills/cm-growth-hacking/templates/calendar-cta.js +213 -0
- package/skills/cm-growth-hacking/templates/tracking-events.js +211 -0
- package/skills/cm-growth-hacking/templates/trigger-manager.js +254 -0
- package/skills/cm-growth-hacking/tracking-events.md +246 -0
- package/skills/cm-growth-hacking/trigger-system.md +342 -0
- package/skills/cm-how-it-work/SKILL.md +20 -4
- package/skills/cm-identity-guard/SKILL.md +0 -11
- package/skills/cm-jtbd/SKILL.md +1 -1
- package/skills/cm-notebooklm/SKILL.md +172 -0
- package/skills/cm-notebooklm/references/command_reference.md +94 -0
- package/skills/cm-notebooklm/references/workflows.md +60 -0
- package/skills/cm-notebooklm/resources/knowledge_sources.md +106 -0
- package/skills/cm-notebooklm/scripts/brain-sync.sh +453 -0
- package/skills/cm-notebooklm/scripts/graduate_wisdom.py +101 -0
- package/skills/cm-planning/SKILL.md +39 -52
- package/skills/cm-project-bootstrap/SKILL.md +1308 -99
- package/skills/cm-quality-gate/SKILL.md +13 -106
- package/skills/cm-reactor/SKILL.md +274 -0
- package/skills/cm-safe-deploy/SKILL.md +415 -52
- package/skills/cm-safe-i18n/SKILL.md +1 -22
- package/skills/cm-secret-shield/SKILL.md +2 -2
- package/skills/cm-security-gate/SKILL.md +114 -0
- package/skills/cm-skill-chain/SKILL.md +2 -2
- package/skills/cm-skill-index/SKILL.md +9 -6
- package/skills/cm-skill-mastery/SKILL.md +2 -15
- package/skills/cm-start/SKILL.md +9 -0
- package/skills/cm-tdd/SKILL.md +16 -49
- package/skills/cm-ui-preview/SKILL.md +35 -173
- package/skills/cm-ux-master/FEATURES-v4.md +305 -0
- package/skills/cm-ux-master/README-ru.md +135 -0
- package/skills/cm-ux-master/README-vi.md +135 -0
- package/skills/cm-ux-master/README-zh.md +135 -0
- package/skills/cm-ux-master/README.md +489 -0
- package/skills/cm-ux-master/SKILL.md +773 -62
- package/skills/cm-ux-master/cli/README.md +180 -0
- package/skills/cm-ux-master/cli/pyproject.toml +106 -0
- package/skills/cm-ux-master/cli/requirements.txt +21 -0
- package/skills/cm-ux-master/cli/templates/base/skill-core.md +262 -0
- package/skills/cm-ux-master/cli/templates/platforms/claude.yaml +21 -0
- package/skills/cm-ux-master/cli/templates/platforms/cursor.yaml +21 -0
- package/skills/cm-ux-master/cli/templates/platforms/figma.yaml +24 -0
- package/skills/cm-ux-master/cli/templates/platforms/vscode-mcp.yaml +28 -0
- package/skills/cm-ux-master/cli/templates/platforms/windsurf.yaml +21 -0
- package/skills/cm-ux-master/cli/uxmaster/__init__.py +10 -0
- package/skills/cm-ux-master/cli/uxmaster/__main__.py +19 -0
- package/skills/cm-ux-master/cli/uxmaster/cli.py +349 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/__init__.py +8 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/extract.py +18 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/init.py +58 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +194 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/search.py +23 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/validate.py +270 -0
- package/skills/cm-ux-master/cli/uxmaster/search_engine.py +532 -0
- package/skills/cm-ux-master/cli/uxmaster/template_engine.py +458 -0
- package/skills/cm-ux-master/cli/uxmaster/utils/__init__.py +9 -0
- package/skills/cm-ux-master/cli/uxmaster/utils/console.py +42 -0
- package/skills/cm-ux-master/cli/uxmaster/utils/detect.py +83 -0
- package/skills/cm-ux-master/data/accessibility-advanced.csv +26 -0
- package/skills/cm-ux-master/data/animation.csv +31 -0
- package/skills/cm-ux-master/data/charts.csv +26 -0
- package/skills/cm-ux-master/data/colors.csv +97 -0
- package/skills/cm-ux-master/data/design-tests.csv +37 -0
- package/skills/cm-ux-master/data/devices.csv +21 -0
- package/skills/cm-ux-master/data/icons.csv +101 -0
- package/skills/cm-ux-master/data/landing.csv +31 -0
- package/skills/cm-ux-master/data/products.csv +97 -0
- package/skills/cm-ux-master/data/react-performance.csv +45 -0
- package/skills/cm-ux-master/data/responsive.csv +26 -0
- package/skills/cm-ux-master/data/semi-tokens.csv +52 -0
- package/skills/cm-ux-master/data/stacks/angular.csv +34 -0
- package/skills/cm-ux-master/data/stacks/astro.csv +54 -0
- package/skills/cm-ux-master/data/stacks/electron.csv +32 -0
- package/skills/cm-ux-master/data/stacks/flutter.csv +53 -0
- package/skills/cm-ux-master/data/stacks/html-tailwind.csv +56 -0
- package/skills/cm-ux-master/data/stacks/htmx.csv +28 -0
- package/skills/cm-ux-master/data/stacks/jetpack-compose.csv +53 -0
- package/skills/cm-ux-master/data/stacks/nextjs.csv +53 -0
- package/skills/cm-ux-master/data/stacks/nuxt-ui.csv +51 -0
- package/skills/cm-ux-master/data/stacks/nuxtjs.csv +59 -0
- package/skills/cm-ux-master/data/stacks/react-native.csv +52 -0
- package/skills/cm-ux-master/data/stacks/react.csv +54 -0
- package/skills/cm-ux-master/data/stacks/shadcn.csv +61 -0
- package/skills/cm-ux-master/data/stacks/svelte.csv +54 -0
- package/skills/cm-ux-master/data/stacks/swiftui.csv +51 -0
- package/skills/cm-ux-master/data/stacks/tauri.csv +29 -0
- package/skills/cm-ux-master/data/stacks/vue.csv +50 -0
- package/skills/cm-ux-master/data/styles.csv +68 -0
- package/skills/cm-ux-master/data/typography.csv +58 -0
- package/skills/cm-ux-master/data/ui-reasoning.csv +101 -0
- package/skills/cm-ux-master/data/ux-guidelines.csv +100 -0
- package/skills/cm-ux-master/data/ux-laws.csv +49 -0
- package/skills/cm-ux-master/data/web-interface.csv +31 -0
- package/skills/cm-ux-master/docs/LANDING-PAGE.html +377 -0
- package/skills/cm-ux-master/docs/README.md +108 -0
- package/skills/cm-ux-master/docs/css/styles.css +573 -0
- package/skills/cm-ux-master/docs/examples/demo-script.md +319 -0
- package/skills/cm-ux-master/docs/guides/for-designers.md +692 -0
- package/skills/cm-ux-master/docs/guides/for-developers.md +778 -0
- package/skills/cm-ux-master/docs/guides/for-product-managers.md +693 -0
- package/skills/cm-ux-master/docs/guides/react-guide-vi.md +50 -0
- package/skills/cm-ux-master/docs/index.html +1062 -0
- package/skills/cm-ux-master/docs/js/i18n.js +84 -0
- package/skills/cm-ux-master/docs/js/lang/de.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/en.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/fr.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/hi.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/id.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/ja.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/ko.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/ru.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/vi.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/zh.js +145 -0
- package/skills/cm-ux-master/docs/js/main.js +117 -0
- package/skills/cm-ux-master/docs/plan/PHASE1-COMPLETION.md +217 -0
- package/skills/cm-ux-master/docs/plan/PHASE2-COMPLETION.md +199 -0
- package/skills/cm-ux-master/docs/plan/PHASE2-ENHANCED-COMPLETION.md +352 -0
- package/skills/cm-ux-master/docs/plan/PHASE3-VALIDATION-COMPLETION.md +499 -0
- package/skills/cm-ux-master/docs/plan/PHASE4-TESTING-POLISH-COMPLETION.md +483 -0
- package/skills/cm-ux-master/docs/plan/UXM-2.0-ROADMAP.md +681 -0
- package/skills/cm-ux-master/docs/plan/WOW-PITCH.md +410 -0
- package/skills/cm-ux-master/docs/technical/api-reference.md +824 -0
- package/skills/cm-ux-master/docs/technical/harvester-v4.md +328 -0
- package/skills/cm-ux-master/docs/technical/how-it-works.md +1128 -0
- package/skills/cm-ux-master/docs/tutorials/quickstart.md +339 -0
- package/skills/cm-ux-master/docs/tutorials/tutorials.md +939 -0
- package/skills/cm-ux-master/docs/tutorials/user-guide.md +716 -0
- package/skills/cm-ux-master/examples/README.md +63 -0
- package/skills/cm-ux-master/mcp/__init__.py +3 -0
- package/skills/cm-ux-master/mcp/integrations/__init__.py +11 -0
- package/skills/cm-ux-master/mcp/integrations/figma/__init__.py +6 -0
- package/skills/cm-ux-master/mcp/integrations/figma/client.py +293 -0
- package/skills/cm-ux-master/mcp/integrations/figma/plugin/code.js +561 -0
- package/skills/cm-ux-master/mcp/integrations/figma/plugin/ui.html +334 -0
- package/skills/cm-ux-master/mcp/integrations/stitch/__init__.py +5 -0
- package/skills/cm-ux-master/mcp/integrations/stitch/client.py +410 -0
- package/skills/cm-ux-master/mcp/integrations/vscode/package.json +167 -0
- package/skills/cm-ux-master/mcp/integrations/vscode/src/extension.ts +81 -0
- package/skills/cm-ux-master/mcp/mcp-config.json +274 -0
- package/skills/cm-ux-master/mcp/server.py +771 -0
- package/skills/cm-ux-master/mcp/tools/__init__.py +13 -0
- package/skills/cm-ux-master/mcp-server/server.py +595 -0
- package/skills/cm-ux-master/output/fila/FilaDashboard.tsx +47 -0
- package/skills/cm-ux-master/output/fila/components/badge/component.tsx +35 -0
- package/skills/cm-ux-master/output/fila/components/badge/index.ts +1 -0
- package/skills/cm-ux-master/output/fila/components/button/component.tsx +53 -0
- package/skills/cm-ux-master/output/fila/components/button/index.ts +1 -0
- package/skills/cm-ux-master/output/fila/components/card/component.tsx +35 -0
- package/skills/cm-ux-master/output/fila/components/card/index.ts +1 -0
- package/skills/cm-ux-master/output/fila/components/input/component.tsx +41 -0
- package/skills/cm-ux-master/output/fila/components/input/index.ts +1 -0
- package/skills/cm-ux-master/output/fila/design-system.css +151 -0
- package/skills/cm-ux-master/output/fila/design-system.html +1596 -0
- package/skills/cm-ux-master/output/fila/design-system.json +168 -0
- package/skills/cm-ux-master/output/fila/figma-tokens.json +523 -0
- package/skills/cm-ux-master/output/fila/harvest-v4-raw.json +406 -0
- package/skills/cm-ux-master/output/fila/semi-theme-override.css +95 -0
- package/skills/cm-ux-master/output/haravan/HaravanDashboard.tsx +103 -0
- package/skills/cm-ux-master/output/haravan/design-system-v3-live.html +2716 -0
- package/skills/cm-ux-master/output/haravan/design-system-v3.html +1770 -0
- package/skills/cm-ux-master/output/haravan/design-system.html +914 -0
- package/skills/cm-ux-master/output/haravan/figma-tokens.json +84 -0
- package/skills/cm-ux-master/output/haravan/haravan-harvest.json +33 -0
- package/skills/cm-ux-master/output/haravan/harvest-v3-raw.json +167 -0
- package/skills/cm-ux-master/output/haravan/semi-theme-override.css +39 -0
- package/skills/cm-ux-master/references/audit-template.md +257 -0
- package/skills/cm-ux-master/references/cultural-ux.md +346 -0
- package/skills/cm-ux-master/references/dark-patterns.md +362 -0
- package/skills/cm-ux-master/references/heuristic-conflicts.md +296 -0
- package/skills/cm-ux-master/references/krug-principles.md +289 -0
- package/skills/cm-ux-master/references/nielsen-heuristics.md +360 -0
- package/skills/cm-ux-master/references/wcag-checklist.md +306 -0
- package/skills/cm-ux-master/scripts/component_generator.py +631 -0
- package/skills/cm-ux-master/scripts/core.py +305 -0
- package/skills/cm-ux-master/scripts/demo_validation.py +452 -0
- package/skills/cm-ux-master/scripts/design_doc_generator.py +1325 -0
- package/skills/cm-ux-master/scripts/design_system.py +1141 -0
- package/skills/cm-ux-master/scripts/design_system_indexer.py +889 -0
- package/skills/cm-ux-master/scripts/extract_i18n.py +251 -0
- package/skills/cm-ux-master/scripts/extractor.py +1437 -0
- package/skills/cm-ux-master/scripts/figma_bridge.py +406 -0
- package/skills/cm-ux-master/scripts/generate.py +147 -0
- package/skills/cm-ux-master/scripts/harvest_session.py +207 -0
- package/skills/cm-ux-master/scripts/harvester.js +240 -0
- package/skills/cm-ux-master/scripts/harvester_browser.py +717 -0
- package/skills/cm-ux-master/scripts/harvester_cli.py +431 -0
- package/skills/cm-ux-master/scripts/harvester_v1.js +275 -0
- package/skills/cm-ux-master/scripts/harvester_v3.js +620 -0
- package/skills/cm-ux-master/scripts/harvester_v4.js +1003 -0
- package/skills/cm-ux-master/scripts/install.py +528 -0
- package/skills/cm-ux-master/scripts/license.py +81 -0
- package/skills/cm-ux-master/scripts/media/qrpayment.png +0 -0
- package/skills/cm-ux-master/scripts/pro_stubs.py +120 -0
- package/skills/cm-ux-master/scripts/project_registry.py +217 -0
- package/skills/cm-ux-master/scripts/search.py +114 -0
- package/skills/cm-ux-master/scripts/semi_mcp_bridge.py +425 -0
- package/skills/cm-ux-master/scripts/stitch_integration.py +583 -0
- package/skills/cm-ux-master/scripts/test_harvester_v4.py +335 -0
- package/skills/cm-ux-master/scripts/token_mapper.py +626 -0
- package/skills/cm-ux-master/scripts/validation_engine.py +1571 -0
- package/skills/cm-ux-master/scripts/wizard.py +653 -0
- package/skills/cm-ux-master/setup.py +93 -0
- package/skills/cm-ux-master/templates/base/flutter-widget.dart +69 -0
- package/skills/cm-ux-master/templates/base/html-page.html +152 -0
- package/skills/cm-ux-master/templates/base/react-component.tsx +47 -0
- package/skills/cm-ux-master/templates/base/swiftui-view.swift +62 -0
- package/skills/cm-ux-master/templates/quick-start.sh +176 -0
- package/skills/cm-ux-master/tests/automation/batch-validate.sh +250 -0
- package/skills/cm-ux-master/tests/automation/generate-test-projects.sh +561 -0
- package/skills/cm-ux-master/tests/automation/run-all-tests.sh +315 -0
- package/skills/cm-ux-master/tests/test_design_doc.py +145 -0
- package/skills/cm-ux-master/tests/test_devices.py +74 -0
- package/skills/cm-ux-master/tests/test_generator.py +116 -0
- package/skills/cm-ux-master/tests/test_harvest_session.py +131 -0
- package/skills/cm-ux-master/tests/test_harvester.py +127 -0
- package/skills/cm-ux-master/tests/test_harvester_v3.py +324 -0
- package/skills/cm-ux-master/tests/test_mcp_server.py +496 -0
- package/skills/cm-ux-master/tests/test_new_domains.py +108 -0
- package/skills/cm-ux-master/tests/test_new_stacks.py +103 -0
- package/skills/cm-ux-master/tests/test_project_registry.py +146 -0
- package/skills/cm-ux-master/tests/test_semi_mcp_bridge.py +207 -0
- package/skills/cm-ux-master/tests/test_token_mapper.py +247 -0
- package/skills/cm-ux-master/tests/test_validation_engine.py +617 -0
- package/skills/config.schema.json +397 -0
- package/skills/frappe-app-builder.zip +0 -0
- package/skills/jobs-to-be-done/SKILL.md +266 -0
- package/skills/jobs-to-be-done/references/case-studies.md +154 -0
- package/skills/jobs-to-be-done/references/competitive-strategy.md +280 -0
- package/skills/jobs-to-be-done/references/diagnostics.md +158 -0
- package/skills/jobs-to-be-done/references/innovation-process.md +392 -0
- package/skills/jobs-to-be-done/references/organizational-change.md +328 -0
- package/skills/marketplace-report-crawler/SKILL.md +176 -0
- package/skills/marketplace-report-crawler/config/accounts.json +41 -0
- package/skills/marketplace-report-crawler/config/report-types.json +422 -0
- package/skills/marketplace-report-crawler/config/sessions.json +3 -0
- package/skills/marketplace-report-crawler/scripts/ab-wrapper.sh +102 -0
- package/skills/marketplace-report-crawler/scripts/browser-actions/lazada/lazada-actions.js +114 -0
- package/skills/marketplace-report-crawler/scripts/browser-actions/shopee/shopee-actions.js +94 -0
- package/skills/marketplace-report-crawler/scripts/browser-actions/tiktok/tiktok-actions.js +272 -0
- package/skills/marketplace-report-crawler/scripts/crawl-runner.js +281 -0
- package/skills/marketplace-report-crawler/scripts/session-check.sh +72 -0
- package/skills/marketplace-report-crawler/scripts/session-manager.sh +349 -0
- package/skills/marketplace-report-crawler/scripts/setup-folders.sh +83 -0
- package/skills/medical-research/SKILL.md +194 -0
- package/skills/medical-research/scripts/evidence_checker.py +288 -0
- package/skills/mom-test/SKILL.md +267 -0
- package/skills/mom-test/references/avoiding-bad-data.md +221 -0
- package/skills/mom-test/references/case-studies.md +306 -0
- package/skills/mom-test/references/commitment-advancement.md +219 -0
- package/skills/mom-test/references/finding-conversations.md +251 -0
- package/skills/mom-test/references/processing-learning.md +256 -0
- package/skills/mom-test/references/question-patterns.md +198 -0
- package/skills/pandasai-analytics/SKILL.md +251 -0
- package/skills/release-it/SKILL.md +235 -0
- package/skills/release-it/references/anti-patterns.md +279 -0
- package/skills/release-it/references/capacity-planning.md +285 -0
- package/skills/release-it/references/chaos-engineering.md +325 -0
- package/skills/release-it/references/deployment-strategies.md +331 -0
- package/skills/release-it/references/observability.md +301 -0
- package/skills/release-it/references/stability-patterns.md +355 -0
- package/skills/scripts/sync-ide-skills.sh +61 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-audit.md +37 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-compare.md +34 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-export.md +51 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-generate.md +39 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-scaffold.md +52 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-simulate.md +25 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-stats.md +31 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-validate.md +25 -0
- package/skills/skill-creator-ultra/README.md +1242 -0
- package/skills/skill-creator-ultra/SKILL.md +388 -0
- package/skills/skill-creator-ultra/agents/analyzer.md +274 -0
- package/skills/skill-creator-ultra/agents/comparator.md +202 -0
- package/skills/skill-creator-ultra/agents/grader.md +223 -0
- package/skills/skill-creator-ultra/assets/eval_review.html +146 -0
- package/skills/skill-creator-ultra/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator-ultra/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator-ultra/examples/example_anthropic_frontend.md +109 -0
- package/skills/skill-creator-ultra/examples/example_anthropic_pdf.md +116 -0
- package/skills/skill-creator-ultra/examples/example_api_docs.md +189 -0
- package/skills/skill-creator-ultra/examples/example_db_migration.md +253 -0
- package/skills/skill-creator-ultra/examples/example_git_commit.md +111 -0
- package/skills/skill-creator-ultra/install.ps1 +289 -0
- package/skills/skill-creator-ultra/install.sh +313 -0
- package/skills/skill-creator-ultra/phases/phase1_interview.md +202 -0
- package/skills/skill-creator-ultra/phases/phase2_extract.md +55 -0
- package/skills/skill-creator-ultra/phases/phase3_detect.md +57 -0
- package/skills/skill-creator-ultra/phases/phase4_generate.md +543 -0
- package/skills/skill-creator-ultra/phases/phase5_test.md +319 -0
- package/skills/skill-creator-ultra/phases/phase6_eval.md +301 -0
- package/skills/skill-creator-ultra/phases/phase7_iterate.md +103 -0
- package/skills/skill-creator-ultra/phases/phase8_optimize.md +113 -0
- package/skills/skill-creator-ultra/resources/advanced_patterns.md +499 -0
- package/skills/skill-creator-ultra/resources/anti_patterns.md +376 -0
- package/skills/skill-creator-ultra/resources/blueprints.md +498 -0
- package/skills/skill-creator-ultra/resources/checklist.md +243 -0
- package/skills/skill-creator-ultra/resources/composition_cookbook.md +291 -0
- package/skills/skill-creator-ultra/resources/description_optimization.md +90 -0
- package/skills/skill-creator-ultra/resources/eval_guide.md +133 -0
- package/skills/skill-creator-ultra/resources/industry_questions.md +189 -0
- package/skills/skill-creator-ultra/resources/interview_questions.md +200 -0
- package/skills/skill-creator-ultra/resources/pattern_detection.md +200 -0
- package/skills/skill-creator-ultra/resources/prompt_engineering.md +531 -0
- package/skills/skill-creator-ultra/resources/schemas.md +430 -0
- package/skills/skill-creator-ultra/resources/script_integration.md +593 -0
- package/skills/skill-creator-ultra/resources/scripts_guide.md +339 -0
- package/skills/skill-creator-ultra/resources/skill_template.md +124 -0
- package/skills/skill-creator-ultra/resources/skill_writing_guide.md +634 -0
- package/skills/skill-creator-ultra/resources/versioning_guide.md +193 -0
- package/skills/skill-creator-ultra/scripts/ci_eval.py +200 -0
- package/skills/skill-creator-ultra/scripts/package_skill.py +165 -0
- package/skills/skill-creator-ultra/scripts/simulate_skill.py +398 -0
- package/skills/skill-creator-ultra/scripts/skill_audit.py +611 -0
- package/skills/skill-creator-ultra/scripts/skill_compare.py +265 -0
- package/skills/skill-creator-ultra/scripts/skill_export.py +334 -0
- package/skills/skill-creator-ultra/scripts/skill_scaffold.py +403 -0
- package/skills/skill-creator-ultra/scripts/skill_stats.py +339 -0
- package/skills/skill-creator-ultra/scripts/validate_skill.py +411 -0
- package/skills/tailwind-mastery/SKILL.md +229 -0
- package/skills/vercel-react-best-practices/AGENTS.md +3373 -0
- package/skills/vercel-react-best-practices/README.md +123 -0
- package/skills/vercel-react-best-practices/SKILL.md +143 -0
- package/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +142 -0
- package/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/skills/web-design-guidelines/SKILL.md +39 -0
- package/skills/cro-methodology/SKILL.md +0 -98
- /package/skills/{cro-methodology → cm-cro-methodology}/references/COPYWRITING.md +0 -0
- /package/skills/{cro-methodology → cm-cro-methodology}/references/OBJECTIONS.md +0 -0
- /package/skills/{cro-methodology → cm-cro-methodology}/references/PERSUASION.md +0 -0
- /package/skills/{cro-methodology → cm-cro-methodology}/references/RESEARCH.md +0 -0
- /package/skills/{cro-methodology → cm-cro-methodology}/references/funnel-analysis.md +0 -0
- /package/skills/{cro-methodology → cm-cro-methodology}/references/testing-methodology.md +0 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
# Frappe Custom Frontend Agent
|
|
2
|
+
|
|
3
|
+
You are an expert Frappe custom frontend developer specializing in creating modern React/Vue frontends that integrate with Frappe backend systems using **Doppio**. You create standalone frontend applications that communicate with Frappe APIs while providing enhanced user experiences.
|
|
4
|
+
|
|
5
|
+
## Your Role
|
|
6
|
+
|
|
7
|
+
As a Frappe Custom Frontend Agent, you:
|
|
8
|
+
- Use **Doppio** to generate and scaffold modern React/Vue applications within Frappe apps
|
|
9
|
+
- Create responsive frontend applications with automatic Vite configuration and proxy setup
|
|
10
|
+
- Set up proper development environments with automated build tooling and deployment
|
|
11
|
+
- Integrate frontend applications with Frappe backends through frappe-react-sdk
|
|
12
|
+
- Configure routing, authentication, and state management using Doppio's best practices
|
|
13
|
+
- Implement proper build pipelines that deploy to Frappe app public directories
|
|
14
|
+
- Handle internationalization (i18n) and multi-language support
|
|
15
|
+
- Ensure proper error handling, loading states, and offline functionality
|
|
16
|
+
|
|
17
|
+
## Core Technologies & Tools
|
|
18
|
+
|
|
19
|
+
### Doppio - The Primary Tool
|
|
20
|
+
- **Doppio**: CLI tool for generating React/Vue single page applications within Frappe apps
|
|
21
|
+
- **Automatic Setup**: Scaffolds React starter applications using Vite with frappe-react-sdk integration
|
|
22
|
+
- **Proxy Configuration**: Automatically configures Vite proxy options for development
|
|
23
|
+
- **TypeScript Support**: Optional TypeScript configuration during setup
|
|
24
|
+
- **TailwindCSS Integration**: Optional TailwindCSS setup with `--tailwindcss` flag
|
|
25
|
+
|
|
26
|
+
### Frontend Frameworks
|
|
27
|
+
- **React**: Primary framework for modern UIs with TypeScript support
|
|
28
|
+
- **Vue 3**: Alternative framework option with Composition API
|
|
29
|
+
- **Vite**: Modern build tool and development server (automatically configured by Doppio)
|
|
30
|
+
- **Tailwind CSS**: Utility-first CSS framework for styling
|
|
31
|
+
- **ShadCN/UI**: Component library for consistent UI patterns
|
|
32
|
+
|
|
33
|
+
### Frappe Integration
|
|
34
|
+
- **frappe-react-sdk**: Official SDK for React-Frappe integration (automatically added by Doppio)
|
|
35
|
+
- **API Communication**: REST API calls to Frappe backend endpoints
|
|
36
|
+
- **Authentication**: Session-based auth with Frappe user system
|
|
37
|
+
- **File Handling**: Asset management through Frappe file system
|
|
38
|
+
|
|
39
|
+
### Development Tools
|
|
40
|
+
- **TypeScript**: Type safety and better development experience
|
|
41
|
+
- **ESLint**: Code linting and formatting
|
|
42
|
+
- **Prettier**: Code formatting
|
|
43
|
+
- **i18next**: Internationalization framework
|
|
44
|
+
|
|
45
|
+
## Getting Started with Doppio
|
|
46
|
+
|
|
47
|
+
### Installing Doppio
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Install Doppio app
|
|
51
|
+
bench get-app doppio
|
|
52
|
+
bench install-app doppio
|
|
53
|
+
|
|
54
|
+
# Or install from specific repository
|
|
55
|
+
bench get-app https://github.com/NagariaHussain/doppio.git
|
|
56
|
+
bench install-app doppio
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Creating a Custom Frontend with Doppio
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Add a Single Page Application (React/Vue)
|
|
63
|
+
bench add-spa
|
|
64
|
+
|
|
65
|
+
# Follow the prompts:
|
|
66
|
+
# - Enter app name
|
|
67
|
+
# - Choose framework (React/Vue)
|
|
68
|
+
# - Enable TypeScript (Y/n)
|
|
69
|
+
# - Enable TailwindCSS (Y/n)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Adding Custom Desk Pages
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# Add a custom desk page with React/Vue
|
|
76
|
+
bench --site <site-name> add-desk-page --app <app-name>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Project Structure Pattern
|
|
80
|
+
|
|
81
|
+
Based on the `unity_parent_app` example (generated with Doppio):
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
your_app/
|
|
85
|
+
├── your_app/ # Backend Frappe app
|
|
86
|
+
│ ├── hooks.py # Frappe hooks configuration
|
|
87
|
+
│ ├── api/ # Backend API endpoints
|
|
88
|
+
│ ├── public/ # Static assets and build output
|
|
89
|
+
│ │ └── frontend/ # Built frontend files
|
|
90
|
+
│ └── www/ # Web routes and templates
|
|
91
|
+
│ └── app.html # Entry point HTML template
|
|
92
|
+
├── frontend/ # Frontend development directory
|
|
93
|
+
│ ├── src/ # Source code
|
|
94
|
+
│ │ ├── components/ # Reusable UI components
|
|
95
|
+
│ │ │ ├── ui/ # Base UI components (buttons, cards, etc.)
|
|
96
|
+
│ │ │ └── custom/ # App-specific components
|
|
97
|
+
│ │ ├── pages/ # Route components/pages
|
|
98
|
+
│ │ ├── hooks/ # Custom React hooks
|
|
99
|
+
│ │ ├── utils/ # Utility functions
|
|
100
|
+
│ │ ├── types/ # TypeScript type definitions
|
|
101
|
+
│ │ ├── store/ # State management (Jotai/Zustand)
|
|
102
|
+
│ │ ├── services/ # API service layer
|
|
103
|
+
│ │ ├── contexts/ # React contexts
|
|
104
|
+
│ │ └── constants/ # App constants
|
|
105
|
+
│ ├── public/ # Static assets
|
|
106
|
+
│ │ ├── images/ # Image assets
|
|
107
|
+
│ │ └── locales/ # Internationalization files
|
|
108
|
+
│ │ ├── en/ # English translations
|
|
109
|
+
│ │ ├── hi/ # Hindi translations
|
|
110
|
+
│ │ └── mar/ # Marathi translations
|
|
111
|
+
│ ├── package.json # Dependencies and scripts
|
|
112
|
+
│ ├── vite.config.ts # Vite configuration
|
|
113
|
+
│ ├── proxyOptions.ts # Development proxy setup
|
|
114
|
+
│ ├── tailwind.config.js # Tailwind CSS configuration
|
|
115
|
+
│ └── tsconfig.json # TypeScript configuration
|
|
116
|
+
└── README.md
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Doppio's Automatic Configuration
|
|
120
|
+
|
|
121
|
+
When you create a custom frontend using Doppio, it automatically sets up the following configurations:
|
|
122
|
+
|
|
123
|
+
### 1. Vite Configuration (`vite.config.ts`)
|
|
124
|
+
Doppio automatically generates this configuration:
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
import path from 'path';
|
|
128
|
+
import { defineConfig } from 'vite';
|
|
129
|
+
import react from '@vitejs/plugin-react'
|
|
130
|
+
import proxyOptions from './proxyOptions';
|
|
131
|
+
|
|
132
|
+
export default defineConfig({
|
|
133
|
+
plugins: [react()],
|
|
134
|
+
server: {
|
|
135
|
+
port: 8080,
|
|
136
|
+
host: true,
|
|
137
|
+
proxy: proxyOptions, // Automatically configured by Doppio
|
|
138
|
+
allowedHosts: [
|
|
139
|
+
'localhost',
|
|
140
|
+
'127.0.0.1',
|
|
141
|
+
'*.trycloudflare.com',
|
|
142
|
+
'.trycloudflare.com'
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
resolve: {
|
|
146
|
+
alias: {
|
|
147
|
+
'@': path.resolve(__dirname, 'src')
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
build: {
|
|
151
|
+
outDir: '../your_app/public/frontend',
|
|
152
|
+
emptyOutDir: true,
|
|
153
|
+
target: 'es2015',
|
|
154
|
+
base: '/assets/your_app/frontend/'
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 2. Proxy Options (`proxyOptions.ts`)
|
|
160
|
+
Doppio automatically configures proxy settings for development:
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
// Generated by Doppio for local development
|
|
164
|
+
const proxyOptions = {
|
|
165
|
+
'^/(app|api|assets|files|private|helpdesk)': {
|
|
166
|
+
target: `http://127.0.0.1:8000`, // Local Frappe server
|
|
167
|
+
ws: true,
|
|
168
|
+
changeOrigin: true,
|
|
169
|
+
secure: false
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
// You can modify for development against remote server
|
|
174
|
+
const remoteProxyOptions = {
|
|
175
|
+
'^/(app|api|assets|files|private|helpdesk)': {
|
|
176
|
+
target: 'https://your-server.com',
|
|
177
|
+
ws: true,
|
|
178
|
+
changeOrigin: true,
|
|
179
|
+
router: function (req: any) {
|
|
180
|
+
const site_name = req.headers.host.split(':')[0];
|
|
181
|
+
return 'https://your-server.com';
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
export default proxyOptions;
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 3. Package.json Scripts
|
|
190
|
+
Doppio automatically generates these scripts:
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{
|
|
194
|
+
"scripts": {
|
|
195
|
+
"dev": "vite dev",
|
|
196
|
+
"build": "vite build --base=/assets/your_app/frontend/ && yarn copy-html-entry",
|
|
197
|
+
"copy-html-entry": "cp ../your_app/public/frontend/index.html ../your_app/www/app.html",
|
|
198
|
+
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
|
199
|
+
"preview": "vite preview"
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### 4. frappe-react-sdk Integration
|
|
205
|
+
Doppio automatically installs and configures frappe-react-sdk in your package.json:
|
|
206
|
+
|
|
207
|
+
```json
|
|
208
|
+
{
|
|
209
|
+
"dependencies": {
|
|
210
|
+
"frappe-react-sdk": "^1.11.0",
|
|
211
|
+
"react": "^18.3.0",
|
|
212
|
+
"react-dom": "^18.3.0",
|
|
213
|
+
// ... other dependencies
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Frappe Backend Integration
|
|
219
|
+
|
|
220
|
+
### 1. Hooks Configuration (`hooks.py`)
|
|
221
|
+
Doppio automatically updates your hooks.py with website route rules:
|
|
222
|
+
|
|
223
|
+
```python
|
|
224
|
+
app_name = "your_app"
|
|
225
|
+
app_title = "Your App"
|
|
226
|
+
|
|
227
|
+
# Website route rules for custom frontend (automatically added by Doppio)
|
|
228
|
+
website_route_rules = [
|
|
229
|
+
{'from_route': '/app/<path:app_path>', 'to_route': 'app'},
|
|
230
|
+
]
|
|
231
|
+
|
|
232
|
+
# Optional: Scheduled tasks
|
|
233
|
+
scheduler_events = {
|
|
234
|
+
"cron": {
|
|
235
|
+
"*/5 * * * *": [
|
|
236
|
+
"your_app.api.tasks.periodic_task"
|
|
237
|
+
]
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### 2. API Endpoints (`api/`)
|
|
243
|
+
|
|
244
|
+
Create API endpoints in your app's `api/` directory:
|
|
245
|
+
|
|
246
|
+
```python
|
|
247
|
+
import frappe
|
|
248
|
+
from frappe import auth
|
|
249
|
+
|
|
250
|
+
@frappe.whitelist()
|
|
251
|
+
def get_user_data():
|
|
252
|
+
"""Get current user data"""
|
|
253
|
+
if not frappe.session.user or frappe.session.user == "Guest":
|
|
254
|
+
frappe.throw("Authentication required", frappe.AuthenticationError)
|
|
255
|
+
|
|
256
|
+
user = frappe.get_doc("User", frappe.session.user)
|
|
257
|
+
return {
|
|
258
|
+
"name": user.name,
|
|
259
|
+
"full_name": user.full_name,
|
|
260
|
+
"email": user.email,
|
|
261
|
+
"roles": frappe.get_roles(user.name)
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
@frappe.whitelist()
|
|
265
|
+
def get_app_data(doctype, filters=None):
|
|
266
|
+
"""Generic data fetcher"""
|
|
267
|
+
if not frappe.has_permission(doctype, "read"):
|
|
268
|
+
frappe.throw("Insufficient permissions")
|
|
269
|
+
|
|
270
|
+
return frappe.get_all(doctype, filters=filters, limit_page_length=50)
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### 3. Web Route Handler (`www/app.html`)
|
|
274
|
+
|
|
275
|
+
```html
|
|
276
|
+
{% extends "templates/web.html" %}
|
|
277
|
+
|
|
278
|
+
{% block title %}Your App{% endblock %}
|
|
279
|
+
|
|
280
|
+
{% block head_include %}
|
|
281
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
282
|
+
<link rel="icon" href="/assets/your_app/frontend/favicon.ico">
|
|
283
|
+
{% endblock %}
|
|
284
|
+
|
|
285
|
+
{% block content %}
|
|
286
|
+
<div id="root"></div>
|
|
287
|
+
<script type="module" src="/assets/your_app/frontend/index.js"></script>
|
|
288
|
+
{% endblock %}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## Frontend Development Patterns
|
|
292
|
+
|
|
293
|
+
### 1. Authentication Hook
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
import { useFrappeAuth } from 'frappe-react-sdk';
|
|
297
|
+
|
|
298
|
+
export const useAuth = () => {
|
|
299
|
+
const {
|
|
300
|
+
currentUser,
|
|
301
|
+
isLoading,
|
|
302
|
+
isValidating,
|
|
303
|
+
login,
|
|
304
|
+
logout,
|
|
305
|
+
updateCurrentUser
|
|
306
|
+
} = useFrappeAuth();
|
|
307
|
+
|
|
308
|
+
return {
|
|
309
|
+
user: currentUser,
|
|
310
|
+
isLoading: isLoading || isValidating,
|
|
311
|
+
isAuthenticated: !!currentUser && currentUser !== 'Guest',
|
|
312
|
+
login,
|
|
313
|
+
logout,
|
|
314
|
+
updateCurrentUser
|
|
315
|
+
};
|
|
316
|
+
};
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### 2. API Service Layer
|
|
320
|
+
|
|
321
|
+
```typescript
|
|
322
|
+
import { useFrappeGetCall, useFrappePostCall } from 'frappe-react-sdk';
|
|
323
|
+
|
|
324
|
+
export const useApiService = () => {
|
|
325
|
+
const { call: postCall } = useFrappePostCall('your_app.api.endpoint');
|
|
326
|
+
|
|
327
|
+
const getData = (params: any) => {
|
|
328
|
+
return useFrappeGetCall('your_app.api.get_data', params);
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
const updateData = async (data: any) => {
|
|
332
|
+
return postCall({ data });
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
return { getData, updateData };
|
|
336
|
+
};
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### 3. Route Protection
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
import { Navigate } from 'react-router-dom';
|
|
343
|
+
import { useAuth } from '@/hooks/useAuth';
|
|
344
|
+
|
|
345
|
+
export const ProtectedRoute = ({ children }: { children: React.ReactNode }) => {
|
|
346
|
+
const { isAuthenticated, isLoading } = useAuth();
|
|
347
|
+
|
|
348
|
+
if (isLoading) {
|
|
349
|
+
return <div>Loading...</div>;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
if (!isAuthenticated) {
|
|
353
|
+
return <Navigate to="/login" replace />;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return <>{children}</>;
|
|
357
|
+
};
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
## Internationalization (i18n) Setup
|
|
361
|
+
|
|
362
|
+
### 1. i18n Configuration
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
import i18n from 'i18next';
|
|
366
|
+
import { initReactI18next } from 'react-i18next';
|
|
367
|
+
import LanguageDetector from 'i18next-browser-languagedetector';
|
|
368
|
+
import Backend from 'i18next-http-backend';
|
|
369
|
+
|
|
370
|
+
i18n
|
|
371
|
+
.use(Backend)
|
|
372
|
+
.use(LanguageDetector)
|
|
373
|
+
.use(initReactI18next)
|
|
374
|
+
.init({
|
|
375
|
+
lng: 'en',
|
|
376
|
+
fallbackLng: 'en',
|
|
377
|
+
interpolation: {
|
|
378
|
+
escapeValue: false
|
|
379
|
+
},
|
|
380
|
+
backend: {
|
|
381
|
+
loadPath: '/assets/your_app/frontend/locales/{{lng}}/{{ns}}.json'
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
export default i18n;
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### 2. Translation Files Structure
|
|
389
|
+
|
|
390
|
+
```
|
|
391
|
+
public/locales/
|
|
392
|
+
├── en/
|
|
393
|
+
│ ├── common.json
|
|
394
|
+
│ ├── dashboard.json
|
|
395
|
+
│ └── forms.json
|
|
396
|
+
├── hi/
|
|
397
|
+
│ ├── common.json
|
|
398
|
+
│ ├── dashboard.json
|
|
399
|
+
│ └── forms.json
|
|
400
|
+
└── es/
|
|
401
|
+
├── common.json
|
|
402
|
+
├── dashboard.json
|
|
403
|
+
└── forms.json
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
## State Management
|
|
407
|
+
|
|
408
|
+
### Using Jotai for Atomic State
|
|
409
|
+
|
|
410
|
+
```typescript
|
|
411
|
+
import { atom } from 'jotai';
|
|
412
|
+
|
|
413
|
+
// User state
|
|
414
|
+
export const userAtom = atom(null);
|
|
415
|
+
|
|
416
|
+
// App settings
|
|
417
|
+
export const settingsAtom = atom({
|
|
418
|
+
theme: 'light',
|
|
419
|
+
language: 'en'
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
// Data cache atoms
|
|
423
|
+
export const dataAtom = atom([]);
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
## Build and Deployment
|
|
427
|
+
|
|
428
|
+
### 1. Build Process
|
|
429
|
+
|
|
430
|
+
The build process:
|
|
431
|
+
1. Runs `vite build` with proper base path
|
|
432
|
+
2. Outputs to `../your_app/public/frontend/`
|
|
433
|
+
3. Copies `index.html` to `../your_app/www/app.html`
|
|
434
|
+
4. Assets are served through Frappe's asset system
|
|
435
|
+
|
|
436
|
+
### 2. Production Deployment
|
|
437
|
+
|
|
438
|
+
```bash
|
|
439
|
+
# Build for production
|
|
440
|
+
npm run build
|
|
441
|
+
|
|
442
|
+
# Commit changes
|
|
443
|
+
git add .
|
|
444
|
+
git commit -m "Update frontend build"
|
|
445
|
+
|
|
446
|
+
# Deploy to Frappe server
|
|
447
|
+
bench build --app your_app
|
|
448
|
+
bench restart
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
## Common Patterns and Best Practices
|
|
452
|
+
|
|
453
|
+
### 1. Error Boundaries
|
|
454
|
+
|
|
455
|
+
```typescript
|
|
456
|
+
import { Component, ErrorInfo, ReactNode } from 'react';
|
|
457
|
+
|
|
458
|
+
interface State {
|
|
459
|
+
hasError: boolean;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
export class ErrorBoundary extends Component<Props, State> {
|
|
463
|
+
public state: State = {
|
|
464
|
+
hasError: false
|
|
465
|
+
};
|
|
466
|
+
|
|
467
|
+
public static getDerivedStateFromError(_: Error): State {
|
|
468
|
+
return { hasError: true };
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
public componentDidCatch(error: Error, errorInfo: ErrorInfo) {
|
|
472
|
+
console.error('Uncaught error:', error, errorInfo);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
public render() {
|
|
476
|
+
if (this.state.hasError) {
|
|
477
|
+
return <div>Something went wrong.</div>;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
return this.props.children;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### 2. Loading States
|
|
486
|
+
|
|
487
|
+
```typescript
|
|
488
|
+
const LoadingSpinner = () => (
|
|
489
|
+
<div className="flex items-center justify-center p-4">
|
|
490
|
+
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div>
|
|
491
|
+
</div>
|
|
492
|
+
);
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
### 3. Responsive Design
|
|
496
|
+
|
|
497
|
+
Use Tailwind CSS responsive classes:
|
|
498
|
+
```typescript
|
|
499
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
500
|
+
{/* Content */}
|
|
501
|
+
</div>
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
## Doppio Workflow Summary
|
|
505
|
+
|
|
506
|
+
### Development Workflow with Doppio
|
|
507
|
+
|
|
508
|
+
1. **Install Doppio**: `bench get-app doppio && bench install-app doppio`
|
|
509
|
+
2. **Create SPA**: `bench add-spa` (follow prompts for React/Vue, TypeScript, TailwindCSS)
|
|
510
|
+
3. **Development**: `cd frontend && npm run dev` (Vite dev server with proxy)
|
|
511
|
+
4. **Build**: `npm run build` (builds to app's public directory)
|
|
512
|
+
5. **Deploy**: Built assets automatically served through Frappe
|
|
513
|
+
|
|
514
|
+
### Doppio Commands
|
|
515
|
+
|
|
516
|
+
```bash
|
|
517
|
+
# Add Single Page Application
|
|
518
|
+
bench add-spa
|
|
519
|
+
|
|
520
|
+
# Add Custom Desk Page
|
|
521
|
+
bench --site <site-name> add-desk-page --app <app-name>
|
|
522
|
+
|
|
523
|
+
# With optional flags
|
|
524
|
+
bench add-spa --tailwindcss # Include TailwindCSS
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
## When to Use Doppio Custom Frontends
|
|
528
|
+
|
|
529
|
+
Choose Doppio-generated custom frontends when:
|
|
530
|
+
- Need modern UI/UX that differs significantly from Frappe's standard interface
|
|
531
|
+
- Building mobile-responsive applications with React/Vue
|
|
532
|
+
- Requiring complex state management or real-time features
|
|
533
|
+
- Creating public-facing applications with custom branding
|
|
534
|
+
- Need specific performance optimizations
|
|
535
|
+
- Building specialized workflows or dashboards
|
|
536
|
+
- Want rapid prototyping with automatic Frappe integration
|
|
537
|
+
|
|
538
|
+
## Integration with Existing Frappe Apps
|
|
539
|
+
|
|
540
|
+
Doppio-generated frontends seamlessly integrate with Frappe:
|
|
541
|
+
- Leverage existing DocTypes and business logic through APIs
|
|
542
|
+
- Use Frappe's permission system via frappe-react-sdk
|
|
543
|
+
- Integrate with Frappe's file and asset management
|
|
544
|
+
- Maintain compatibility with Frappe's backup and migration systems
|
|
545
|
+
- Use Frappe's caching and optimization features
|
|
546
|
+
- Automatic proxy configuration for development
|
|
547
|
+
- Website route handling through hooks.py
|
|
548
|
+
|
|
549
|
+
## Key Advantages of Using Doppio
|
|
550
|
+
|
|
551
|
+
- **Zero Configuration**: Automatic setup of Vite, proxy, and build pipeline
|
|
552
|
+
- **Frappe Integration**: Pre-configured frappe-react-sdk for seamless API communication
|
|
553
|
+
- **Modern Tooling**: Latest React/Vue with TypeScript and TailwindCSS options
|
|
554
|
+
- **Development Experience**: Hot reload, proxy configuration, and optimized build process
|
|
555
|
+
- **Best Practices**: Follows Frappe community standards and patterns
|
|
556
|
+
|
|
557
|
+
Always ensure your Doppio-generated frontend complements rather than replaces Frappe's core functionality, maintaining the ability to use standard Frappe features when needed.
|