cue-ai 0.9.0 → 0.9.2
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 +40 -0
- package/README.md +82 -33
- package/bin/cue-review-progress +107 -0
- package/bin/cue-review-watch +98 -0
- package/dist/cue.js +7352 -3744
- package/package.json +16 -5
- package/profiles/_types.ts +9 -0
- package/profiles/backend/profile.yaml +2 -0
- package/profiles/blog-writer/profile.yaml +10 -0
- package/profiles/browser/profile.yaml +9 -2
- package/profiles/builder/profile.yaml +3 -6
- package/profiles/career/profile.yaml +13 -2
- package/profiles/claude-api/profile.yaml +1 -1
- package/profiles/commerce/profile.yaml +27 -3
- package/profiles/core/logo.png +0 -0
- package/profiles/core/profile.yaml +62 -2
- package/profiles/dash-merge-test/profile.yaml +109 -0
- package/profiles/designer/profile.yaml +2 -0
- package/profiles/designer-medusa-next/profile.yaml +4 -1
- package/profiles/designer-medusa-vite/profile.yaml +4 -1
- package/profiles/docs-writer/profile.yaml +3 -1
- package/profiles/eu-tender-research/README.md +48 -0
- package/profiles/eu-tender-research/logo.png +0 -0
- package/profiles/eu-tender-research/profile.yaml +108 -0
- package/profiles/finance/logo.png +0 -0
- package/profiles/finance/profile.yaml +46 -0
- package/profiles/frontend/profile.yaml +5 -9
- package/profiles/growth/profile.yaml +2 -3
- package/profiles/gstack/profile.yaml +15 -0
- package/profiles/higgsfield/profile.yaml +3 -0
- package/profiles/hyperframes/logo.png +0 -0
- package/profiles/hyperframes/profile.yaml +59 -0
- package/profiles/improver/profile.yaml +88 -0
- package/profiles/marketing/profile.yaml +0 -3
- package/profiles/medusa-dev/profile.yaml +2 -0
- package/profiles/medusa-next/profile.yaml +2 -3
- package/profiles/medusa-vite/profile.yaml +2 -3
- package/profiles/n8n/logo.png +0 -0
- package/profiles/n8n/profile.yaml +50 -0
- package/profiles/nextjs/profile.yaml +2 -3
- package/profiles/ops/profile.yaml +2 -0
- package/profiles/postizz/profile.yaml +13 -3
- package/profiles/python/profile.yaml +3 -0
- package/profiles/research/profile.yaml +3 -1
- package/profiles/schema.json +10 -0
- package/profiles/secops/profile.yaml +2 -0
- package/profiles/seo/profile.yaml +56 -0
- package/profiles/skill-writer/profile.yaml +8 -0
- package/profiles/ssh/profile.yaml +32 -0
- package/profiles/strapi/logo.png +0 -0
- package/profiles/strapi/profile.yaml +45 -0
- package/profiles/stripe/logo.png +0 -0
- package/profiles/stripe/profile.yaml +1 -0
- package/profiles/supabase/logo.png +0 -0
- package/profiles/supabase/profile.yaml +85 -0
- package/profiles/vercel/logo.png +0 -0
- package/profiles/vercel/profile.yaml +25 -1
- package/profiles/vite/profile.yaml +4 -3
- package/profiles/web-frontend-base/profile.yaml +5 -4
- package/profiles/webshop/profile.yaml +23 -5
- package/profiles/x-growth-bot/profile.yaml +44 -0
- package/resources/icons/generate-icons.py +128 -2
- package/resources/mcps/configs/claude.sanitized.json +42 -0
- package/resources/mcps/configs/codex.sanitized.json +7 -0
- package/resources/skills/skills/career/resume-version-manager/SKILL.md +351 -0
- package/resources/skills/skills/career/salary-negotiation-prep/SKILL.md +378 -0
- package/resources/skills/skills/content/pdf/SKILL.md +2 -0
- package/resources/skills/skills/content/postiz-cards/SKILL.md +48 -0
- package/resources/skills/skills/content/postiz-cards/scripts/analytics.sh +38 -0
- package/resources/skills/skills/content/postiz-cards/scripts/card.sh +42 -0
- package/resources/skills/skills/content/postiz-cards/scripts/lint.py +38 -0
- package/resources/skills/skills/design/headless-gif-demo/SKILL.md +1 -1
- package/resources/skills/skills/design/readme-svg-design/SKILL.md +1 -1
- package/resources/skills/skills/eu-funding/grant-outreach/SKILL.md +70 -0
- package/resources/skills/skills/eu-funding/hu-grant-finder/SKILL.md +114 -0
- package/resources/skills/skills/eu-funding/hu-grant-finder/evals.md +26 -0
- package/resources/skills/skills/eu-funding/ted-tender-search/SKILL.md +80 -0
- package/resources/skills/skills/eu-funding/ted-tender-search/evals.md +26 -0
- package/resources/skills/skills/eu-funding/ted-tender-search/scripts/ted-search.sh +46 -0
- package/resources/skills/skills/event-design/wedding-invitations/SKILL.md +1 -1
- package/resources/skills/skills/github/gx-agents/SKILL.md +96 -0
- package/resources/skills/skills/gstack/design-shotgun/SKILL.md +1 -1
- package/resources/skills/skills/marketing/ab-test-analyzer/SKILL.md +1 -1
- package/resources/skills/skills/marketing/ab-test-setup-and-analysis/SKILL.md +1 -1
- package/resources/skills/skills/marketing/account-structure-review/SKILL.md +1 -1
- package/resources/skills/skills/marketing/ad-copy-variant-generator/SKILL.md +1 -1
- package/resources/skills/skills/marketing/ad-extension-audit/SKILL.md +1 -1
- package/resources/skills/skills/marketing/ad-spend-allocator/SKILL.md +1 -1
- package/resources/skills/skills/marketing/anomaly-detection/SKILL.md +1 -1
- package/resources/skills/skills/marketing/attribution-model-comparison/SKILL.md +1 -1
- package/resources/skills/skills/marketing/audience-overlap-analysis/SKILL.md +7 -1
- package/resources/skills/skills/marketing/bid-strategy-recommendations/SKILL.md +7 -1
- package/resources/skills/skills/marketing/budget-scenario-planner/SKILL.md +6 -1
- package/resources/skills/skills/marketing/campaign-naming-convention-builder/SKILL.md +7 -1
- package/resources/skills/skills/marketing/channel-mix-optimizer/SKILL.md +7 -1
- package/resources/skills/skills/marketing/client-report-narratives/SKILL.md +6 -1
- package/resources/skills/skills/marketing/competitor-creative-analysis/SKILL.md +1 -1
- package/resources/skills/skills/marketing/competitor-teardown/SKILL.md +1 -1
- package/resources/skills/skills/marketing/content-repurposer/SKILL.md +1 -1
- package/resources/skills/skills/marketing/conversion-path-analysis/SKILL.md +1 -1
- package/resources/skills/skills/marketing/cpa-diagnostics/SKILL.md +1 -1
- package/resources/skills/skills/marketing/creative-fatigue-detection/SKILL.md +1 -1
- package/resources/skills/skills/marketing/day-hour-performance-breakdown/SKILL.md +1 -1
- package/resources/skills/skills/marketing/device-performance-split/SKILL.md +1 -1
- package/resources/skills/skills/marketing/e2e-seo-assistant/SKILL.md +1 -1
- package/resources/skills/skills/marketing/email-sequence-writer/SKILL.md +1 -1
- package/resources/skills/skills/marketing/frequency-cap-recommendations/SKILL.md +1 -1
- package/resources/skills/skills/marketing/geo-performance-analysis/SKILL.md +1 -1
- package/resources/skills/skills/marketing/google-ads-audit/SKILL.md +1 -1
- package/resources/skills/skills/marketing/icp-research-assistant/SKILL.md +1 -1
- package/resources/skills/skills/marketing/keyword-cannibalization-check/SKILL.md +1 -1
- package/resources/skills/skills/marketing/landing-page-audit/SKILL.md +1 -1
- package/resources/skills/skills/marketing/landing-page-audit-quick/SKILL.md +1 -1
- package/resources/skills/skills/marketing/linkedin-ads-audit/SKILL.md +1 -1
- package/resources/skills/skills/marketing/meta-ads-audit/SKILL.md +1 -1
- package/resources/skills/skills/marketing/pacing-monitor/SKILL.md +1 -1
- package/resources/skills/skills/marketing/performance-benchmarking/SKILL.md +1 -1
- package/resources/skills/skills/marketing/programmatic-seo-builder/SKILL.md +1 -1
- package/resources/skills/skills/marketing/quality-score-breakdown/SKILL.md +1 -1
- package/resources/skills/skills/marketing/reddit-ads-audit/SKILL.md +1 -1
- package/resources/skills/skills/marketing/retargeting-window-analysis/SKILL.md +1 -1
- package/resources/skills/skills/marketing/roas-forecasting/SKILL.md +1 -1
- package/resources/skills/skills/marketing/search-term-mining/SKILL.md +1 -1
- package/resources/skills/skills/marketing/utm-tracking-generator/SKILL.md +1 -1
- package/resources/skills/skills/marketing/wasted-spend-finder/SKILL.md +1 -1
- package/resources/skills/skills/marketing/weekly-account-summary/SKILL.md +1 -1
- package/resources/skills/skills/meta/awesome-list-submit/SKILL.md +4 -4
- package/resources/skills/skills/meta/cue-dashboard/SKILL.md +109 -0
- package/resources/skills/skills/meta/cue-developer/SKILL.md +161 -0
- package/resources/skills/skills/meta/cue-developer/evals/evals.json +57 -0
- package/resources/skills/skills/meta/cue-developer/references/architecture.md +65 -0
- package/resources/skills/skills/meta/cue-developer/references/build_and_test.md +72 -0
- package/resources/skills/skills/meta/cue-developer/references/contributing.md +75 -0
- package/resources/skills/skills/meta/cue-developer/references/conventions.md +57 -0
- package/resources/skills/skills/meta/cue-developer/references/first_time_setup.md +51 -0
- package/resources/skills/skills/meta/cue-developer/references/skill_and_mcp_authoring.md +84 -0
- package/resources/skills/skills/meta/cue-developer/references/troubleshooting.md +42 -0
- package/resources/skills/skills/meta/delegation-check/SKILL.md +148 -0
- package/resources/skills/skills/meta/delegation-check/specs/scan-algorithm.md +125 -0
- package/resources/skills/skills/meta/delegation-check/specs/separation-rules.md +190 -0
- package/resources/skills/skills/meta/focus/SKILL.md +62 -0
- package/resources/skills/skills/meta/help/SKILL.md +1 -1
- package/resources/skills/skills/meta/integrity-tags/SKILL.md +2 -0
- package/resources/skills/skills/meta/next-steps/SKILL.md +124 -0
- package/resources/skills/skills/meta/next-steps/evals/eval-set.json +92 -0
- package/resources/skills/skills/meta/profile-from-docs/SKILL.md +141 -0
- package/resources/skills/skills/meta/ralph-loop/SKILL.md +83 -0
- package/resources/skills/skills/meta/ralph-loop/scripts/loop.sh +73 -0
- package/resources/skills/skills/meta/skill-simplify/SKILL.md +136 -0
- package/resources/skills/skills/meta/skill-simplify/phases/01-analysis.md +173 -0
- package/resources/skills/skills/meta/skill-simplify/phases/02-optimize.md +104 -0
- package/resources/skills/skills/meta/skill-simplify/phases/03-check.md +145 -0
- package/resources/skills/skills/meta/smart-loader/scripts/smart-lookup.sh +13 -4
- package/resources/skills/skills/meta/verify-council/SKILL.md +182 -0
- package/resources/skills/skills/meta/verify-council/references/lane-prompts.md +103 -0
- package/resources/skills/skills/meta/verify-council/references/workflow.js +217 -0
- package/resources/skills/skills/nvidia/aiq-research/SKILL.md +1 -1
- package/resources/skills/skills/nvidia/cuopt-developer/SKILL.md +16 -1
- package/resources/skills/skills/nvidia/cuopt-developer/resources/contributing.md +2 -2
- package/resources/skills/skills/nvidia/cuopt-developer/resources/numerical_debugging.md +128 -0
- package/resources/skills/skills/nvidia/cuopt-developer/resources/python_bindings.md +2 -9
- package/resources/skills/skills/nvidia/cuopt-developer/resources/vrp_skills.md +166 -0
- package/resources/skills/skills/nvidia/cuopt-install/SKILL.md +2 -10
- package/resources/skills/skills/nvidia/cuopt-numerical-optimization-api-c/SKILL.md +3 -23
- package/resources/skills/skills/nvidia/cuopt-numerical-optimization-api-c/resources/examples.md +40 -20
- package/resources/skills/skills/nvidia/cuopt-numerical-optimization-api-python/SKILL.md +5 -1
- package/resources/skills/skills/nvidia/skill-evolution/SKILL.md +4 -5
- package/resources/skills/skills/research/trendradar/SKILL.md +1 -1
- package/resources/skills/skills/ssh/ssh-config/SKILL.md +94 -0
- package/resources/skills/skills/ssh/ssh-copy/SKILL.md +92 -0
- package/resources/skills/skills/ssh/ssh-harden/SKILL.md +108 -0
- package/resources/skills/skills/ssh/ssh-keys/SKILL.md +82 -0
- package/resources/skills/skills/ssh/ssh-paste-image/LICENSE +28 -0
- package/resources/skills/skills/ssh/ssh-paste-image/SKILL.md +149 -0
- package/resources/skills/skills/ssh/ssh-paste-image/scripts/build.sh +29 -0
- package/resources/skills/skills/ssh/ssh-paste-image/scripts/client/go.mod +3 -0
- package/resources/skills/skills/ssh/ssh-paste-image/scripts/client/main.go +79 -0
- package/resources/skills/skills/ssh/ssh-paste-image/scripts/daemon/ccimgd.service +12 -0
- package/resources/skills/skills/ssh/ssh-paste-image/scripts/daemon/com.ccimgd.plist +20 -0
- package/resources/skills/skills/ssh/ssh-paste-image/scripts/daemon/go.mod +3 -0
- package/resources/skills/skills/ssh/ssh-paste-image/scripts/daemon/main.go +98 -0
- package/resources/skills/skills/ssh/ssh-tunnel/SKILL.md +96 -0
- package/resources/skills/skills/strapi/building-with-strapi/SKILL.md +112 -0
- package/resources/skills/skills/strapi/strapi-cli/SKILL.md +93 -0
- package/resources/skills/skills/strapi/strapi-content-api/SKILL.md +115 -0
- package/resources/skills/skills/strapi/strapi-deploy/SKILL.md +89 -0
- package/resources/skills/skills/strapi/strapi-mcp-setup/SKILL.md +101 -0
- package/resources/skills/skills/strapi/strapi-plugins/SKILL.md +97 -0
- package/resources/skills/skills/tools/context7/SKILL.md +101 -0
- package/resources/skills/skills/tools/opensrc/SKILL.md +1 -1
- package/resources/skills/skills/tools/portless/SKILL.md +186 -0
- package/resources/skills/skills/xbot/operate/SKILL.md +229 -0
- package/src/commands/_index.ts +8 -0
- package/src/commands/ai-score.e2e.test.ts +11 -4
- package/src/commands/ai.ts +3 -4
- package/src/commands/auto-detect.ts +1 -1
- package/src/commands/cli.test.ts +1 -2
- package/src/commands/cli.ts +1 -1
- package/src/commands/cloud.ts +1 -1
- package/src/commands/current.ts +1 -4
- package/src/commands/dash.test.ts +110 -0
- package/src/commands/dash.ts +194 -0
- package/src/commands/dashboard.ts +26 -0
- package/src/commands/diff.ts +1 -1
- package/src/commands/discover.test.ts +1 -1
- package/src/commands/discover.ts +90 -40
- package/src/commands/doctor.test.ts +58 -0
- package/src/commands/doctor.ts +79 -3
- package/src/commands/eval-behavior.ts +1 -1
- package/src/commands/eval.ts +2 -2
- package/src/commands/evolve.ts +4 -3
- package/src/commands/failures.test.ts +1 -1
- package/src/commands/features-batch1.test.ts +6 -1
- package/src/commands/icon.ts +1 -5
- package/src/commands/import-profile.ts +1 -1
- package/src/commands/init.ts +50 -7
- package/src/commands/install-sh.e2e.test.ts +65 -0
- package/src/commands/launch-handoff.e2e.test.ts +88 -0
- package/src/commands/launch.e2e.test.ts +8 -1
- package/src/commands/launch.test.ts +29 -0
- package/src/commands/launch.ts +185 -131
- package/src/commands/lock.ts +0 -1
- package/src/commands/marketplace.ts +0 -4
- package/src/commands/materialize.ts +1 -1
- package/src/commands/mem.ts +341 -0
- package/src/commands/optimizer.ts +0 -3
- package/src/commands/playground.ts +1 -2
- package/src/commands/profile-draft-skill.ts +1 -1
- package/src/commands/replay-whatif.ts +1 -6
- package/src/commands/score.ts +2 -2
- package/src/commands/security.test.ts +88 -0
- package/src/commands/security.ts +74 -28
- package/src/commands/shell.test.ts +65 -4
- package/src/commands/shell.ts +67 -7
- package/src/commands/skills-test.ts +0 -1
- package/src/commands/skills.ts +28 -2
- package/src/commands/sources.ts +1 -2
- package/src/commands/status.ts +2 -6
- package/src/commands/submit-profile.ts +1 -1
- package/src/commands/suggest.ts +35 -10
- package/src/commands/trigger-gaps.test.ts +50 -0
- package/src/commands/trigger-gaps.ts +63 -29
- package/src/commands/update.ts +1 -1
- package/src/commands/validate.ts +16 -4
- package/src/commands/watch-live.ts +1 -1
- package/src/commands/workspace.ts +1 -1
- package/src/index.ts +26 -10
- package/src/lib/active-sessions.ts +1 -1
- package/src/lib/agent-adapters.test.ts +100 -0
- package/src/lib/agent-adapters.ts +2 -2
- package/src/lib/analytics.test.ts +88 -0
- package/src/lib/analytics.ts +82 -1
- package/src/lib/auto-detect.test.ts +10 -4
- package/src/lib/auto-detect.ts +19 -23
- package/src/lib/brand-icons.ts +0 -1
- package/src/lib/cache.ts +2 -3
- package/src/lib/claude-mem-env.test.ts +148 -0
- package/src/lib/claude-mem-env.ts +172 -0
- package/src/lib/combo-history.test.ts +53 -0
- package/src/lib/combo-history.ts +83 -0
- package/src/lib/companion-detect.test.ts +108 -0
- package/src/lib/companion-detect.ts +140 -0
- package/src/lib/companion-fetch.ts +4 -6
- package/src/lib/conditional-skills.test.ts +1 -1
- package/src/lib/config-paths.test.ts +53 -0
- package/src/lib/config-paths.ts +33 -0
- package/src/lib/dashboard-server.test.ts +351 -0
- package/src/lib/dashboard-server.ts +1476 -27
- package/src/lib/debug-log.test.ts +66 -0
- package/src/lib/debug-log.ts +45 -0
- package/src/lib/mcp-catalog.test.ts +102 -0
- package/src/lib/mcp-catalog.ts +193 -0
- package/src/lib/pair-suggestions.test.ts +111 -0
- package/src/lib/pair-suggestions.ts +98 -5
- package/src/lib/permissions.test.ts +76 -0
- package/src/lib/permissions.ts +125 -0
- package/src/lib/picker.test.ts +1106 -1
- package/src/lib/picker.ts +1230 -142
- package/src/lib/plugin-discovery.ts +126 -0
- package/src/lib/pr-poster.ts +1 -1
- package/src/lib/pr-throttle.ts +2 -6
- package/src/lib/profile-linter.test.ts +67 -1
- package/src/lib/profile-linter.ts +59 -14
- package/src/lib/profile-loader.test.ts +21 -0
- package/src/lib/profile-loader.ts +22 -3
- package/src/lib/profile-metrics.ts +2 -6
- package/src/lib/profile-names.test.ts +58 -0
- package/src/lib/repos.test.ts +57 -0
- package/src/lib/repos.ts +167 -0
- package/src/lib/resolver-npx.ts +10 -1
- package/src/lib/runtime-materializer.test.ts +200 -3
- package/src/lib/runtime-materializer.ts +129 -20
- package/src/lib/shared-profiles.ts +2 -3
- package/src/lib/skill-clis.test.ts +113 -0
- package/src/lib/skill-clis.ts +232 -0
- package/src/lib/skill-dependencies.ts +9 -1
- package/src/lib/skill-deps.ts +1 -1
- package/src/lib/skill-linter.ts +1 -1
- package/src/lib/skill-quality.ts +0 -1
- package/src/lib/skill-sandbox.test.ts +1 -1
- package/src/lib/skills-lock.test.ts +1 -1
- package/src/lib/telemetry-consent.ts +3 -5
- package/src/lib/telemetry-report.test.ts +2 -2
- package/src/lib/token-budget.ts +111 -0
- package/src/lib/trigger-gaps.test.ts +70 -0
- package/src/lib/trigger-gaps.ts +48 -6
- package/src/lib/tui/data.ts +1 -5
- package/src/lib/workflow-store.ts +150 -0
- package/src/lib/workspace-secrets.ts +0 -4
- package/src/lib/workspaces.ts +1 -1
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: salary-negotiation-prep
|
|
3
|
+
description: Research market comp bands, build a negotiation strategy, and write counter-offer scripts. Use when user says "negotiate my offer", "salary negotiation", "counter offer", "what should I ask for", "is this offer fair", "they lowballed me", or "how much should I counter".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Salary Negotiation Prep
|
|
7
|
+
|
|
8
|
+
## When to Use This Skill
|
|
9
|
+
|
|
10
|
+
Use this skill when the user wants to:
|
|
11
|
+
- Negotiate a job offer or salary
|
|
12
|
+
- Research market rates for their role
|
|
13
|
+
- Create a counter-offer strategy
|
|
14
|
+
- Understand total compensation packages
|
|
15
|
+
- Mentions: "salary negotiation", "negotiate offer", "counter offer", "compensation", "how much should I ask for"
|
|
16
|
+
|
|
17
|
+
## Core Capabilities
|
|
18
|
+
|
|
19
|
+
- Research and validate market compensation
|
|
20
|
+
- Build negotiation strategy and scripts
|
|
21
|
+
- Calculate total compensation (not just base salary)
|
|
22
|
+
- Prepare counter-offer responses
|
|
23
|
+
- Identify negotiation leverage points
|
|
24
|
+
- Navigate difficult salary conversations
|
|
25
|
+
|
|
26
|
+
## The Negotiation Mindset
|
|
27
|
+
|
|
28
|
+
**Key Principles:**
|
|
29
|
+
1. Negotiation is expected - companies budget for it
|
|
30
|
+
2. 84% of employers expect candidates to negotiate
|
|
31
|
+
3. Not negotiating leaves $500K-$1M on the table over a career
|
|
32
|
+
4. The goal is win-win, not adversarial
|
|
33
|
+
|
|
34
|
+
**What You're Really Negotiating:**
|
|
35
|
+
- Base salary
|
|
36
|
+
- Signing bonus
|
|
37
|
+
- Annual bonus/commission
|
|
38
|
+
- Equity (stock options, RSUs)
|
|
39
|
+
- Benefits (401k match, insurance)
|
|
40
|
+
- Perks (vacation, remote work, professional development)
|
|
41
|
+
- Start date
|
|
42
|
+
- Title
|
|
43
|
+
|
|
44
|
+
## Research Phase
|
|
45
|
+
|
|
46
|
+
### Step 1: Determine Market Rate
|
|
47
|
+
|
|
48
|
+
**Sources to Check:**
|
|
49
|
+
- Levels.fyi (best for tech)
|
|
50
|
+
- Glassdoor (general, take with grain of salt)
|
|
51
|
+
- LinkedIn Salary
|
|
52
|
+
- Blind (anonymous reports)
|
|
53
|
+
- PayScale
|
|
54
|
+
- Salary.com
|
|
55
|
+
- H1B salary data (publicly available)
|
|
56
|
+
|
|
57
|
+
**Build a Range:**
|
|
58
|
+
```
|
|
59
|
+
Low (25th percentile): $XXX,XXX
|
|
60
|
+
Target (50th percentile): $XXX,XXX
|
|
61
|
+
High (75th percentile): $XXX,XXX
|
|
62
|
+
Stretch (90th percentile): $XXX,XXX
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Step 2: Know Your Value
|
|
66
|
+
|
|
67
|
+
**Factors That Increase Your Worth:**
|
|
68
|
+
- Years of relevant experience
|
|
69
|
+
- Specialized/rare skills
|
|
70
|
+
- Track record of results
|
|
71
|
+
- In-demand certifications
|
|
72
|
+
- Current competing offers
|
|
73
|
+
- Referral from employee
|
|
74
|
+
- Market demand in your field
|
|
75
|
+
|
|
76
|
+
**Factors That May Limit:**
|
|
77
|
+
- Entry level or career change
|
|
78
|
+
- Less experience than ideal candidate
|
|
79
|
+
- Gaps in required skills
|
|
80
|
+
- Location arbitrage (lower cost of living)
|
|
81
|
+
|
|
82
|
+
### Step 3: Calculate Total Compensation
|
|
83
|
+
|
|
84
|
+
**Total Comp = Base + Bonus + Equity + Benefits**
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
EXAMPLE:
|
|
88
|
+
Base Salary: $150,000
|
|
89
|
+
Target Bonus (15%): $22,500
|
|
90
|
+
RSU Grant (4-year): $200,000 ($50,000/year)
|
|
91
|
+
401k Match (4%): $6,000
|
|
92
|
+
Benefits Value: ~$15,000
|
|
93
|
+
|
|
94
|
+
Total Annual Comp: $243,500
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Common Equity Terms:**
|
|
98
|
+
- **RSUs:** Restricted Stock Units (real shares, taxed when vesting)
|
|
99
|
+
- **Options:** Right to buy at strike price (value = current price - strike price)
|
|
100
|
+
- **Vesting:** Typically 4-year with 1-year cliff
|
|
101
|
+
- **Refresh grants:** Annual additional equity grants
|
|
102
|
+
|
|
103
|
+
## Negotiation Strategy
|
|
104
|
+
|
|
105
|
+
### When to Negotiate
|
|
106
|
+
|
|
107
|
+
**Best Time:** After you have a written offer, before you sign
|
|
108
|
+
|
|
109
|
+
**Timeline:**
|
|
110
|
+
1. Receive verbal offer → Express enthusiasm, ask for written offer
|
|
111
|
+
2. Receive written offer → Thank them, ask for time to review
|
|
112
|
+
3. Research and prepare → 24-48 hours
|
|
113
|
+
4. Counter with ask → Email or call
|
|
114
|
+
5. Discussion/back and forth → May take several rounds
|
|
115
|
+
6. Final agreement → Get in writing
|
|
116
|
+
|
|
117
|
+
### The Counter-Offer Framework
|
|
118
|
+
|
|
119
|
+
**Structure:**
|
|
120
|
+
1. Express enthusiasm
|
|
121
|
+
2. Reinforce your value
|
|
122
|
+
3. Make specific ask
|
|
123
|
+
4. Provide justification
|
|
124
|
+
5. Open discussion
|
|
125
|
+
|
|
126
|
+
### Counter-Offer Email Template
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
Subject: [Your Name] - Offer Discussion
|
|
130
|
+
|
|
131
|
+
Hi [Recruiter/Hiring Manager],
|
|
132
|
+
|
|
133
|
+
Thank you so much for the offer to join [Company] as [Title]. I'm very excited about the opportunity to [specific thing about the role]. After speaking with the team and learning more about [something specific], I'm confident this is the right fit.
|
|
134
|
+
|
|
135
|
+
I've had time to review the offer details and wanted to discuss the compensation. Based on my research of the market and my [X years of experience / specific valuable skill / competing offer], I was hoping we could discuss a base salary of $[Your Ask] rather than $[Their Offer].
|
|
136
|
+
|
|
137
|
+
[Optional: Add specific justification - e.g., "I've seen similar roles at [comparable companies] in this range" or "Given the scope of the role and my track record of [specific achievement], I believe this reflects my value."]
|
|
138
|
+
|
|
139
|
+
I'm flexible and open to discussing other elements of the package as well. Would you have time for a quick call to discuss?
|
|
140
|
+
|
|
141
|
+
Thank you again for this opportunity. I'm looking forward to finding a package that works for both of us.
|
|
142
|
+
|
|
143
|
+
Best,
|
|
144
|
+
[Your Name]
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Counter-Offer Call Script
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
"Hi [Name], thanks for making time. I'm really excited about this opportunity - [genuine specific reason].
|
|
151
|
+
|
|
152
|
+
I've reviewed the offer and want to discuss compensation. Based on my market research and [X years experience / key accomplishment / competing offer], I was hoping for a base salary closer to $[Amount].
|
|
153
|
+
|
|
154
|
+
Is there flexibility there?"
|
|
155
|
+
|
|
156
|
+
[LISTEN - Let them respond]
|
|
157
|
+
|
|
158
|
+
[If they push back:]
|
|
159
|
+
"I understand there are constraints. I'm flexible - could we look at other elements like signing bonus, equity, or [other element] to bridge the gap?"
|
|
160
|
+
|
|
161
|
+
[If they say they'll need to check:]
|
|
162
|
+
"That's totally fair. When would be a good time to reconnect?"
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Common Negotiation Scenarios
|
|
166
|
+
|
|
167
|
+
### Scenario 1: First Offer Is Low
|
|
168
|
+
|
|
169
|
+
**Approach:**
|
|
170
|
+
- Don't accept immediately
|
|
171
|
+
- Express enthusiasm for role
|
|
172
|
+
- Counter with research-backed number
|
|
173
|
+
- Be prepared to justify
|
|
174
|
+
|
|
175
|
+
**Script:**
|
|
176
|
+
```
|
|
177
|
+
"I'm thrilled about the opportunity. The base salary is lower than I expected based on my research. For this role and market, I was expecting something in the $X-$Y range. Is there room to move closer to $X?"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Scenario 2: They Ask Your Salary Expectations First
|
|
181
|
+
|
|
182
|
+
**Deflection Strategy:**
|
|
183
|
+
```
|
|
184
|
+
"I'm flexible and focused on finding the right fit. What's the range you've budgeted for this role?"
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**If Pressed:**
|
|
188
|
+
```
|
|
189
|
+
"Based on my research for this role and market, I'm looking at $X-$Y, but I'm open to discussing the full compensation picture."
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Scenario 3: They Won't Budge on Base
|
|
193
|
+
|
|
194
|
+
**Alternatives to Negotiate:**
|
|
195
|
+
- Signing bonus (one-time, easier to approve)
|
|
196
|
+
- Additional equity
|
|
197
|
+
- Earlier performance review (sooner raise)
|
|
198
|
+
- More vacation days
|
|
199
|
+
- Remote work flexibility
|
|
200
|
+
- Professional development budget
|
|
201
|
+
- Title upgrade
|
|
202
|
+
- Relocation assistance
|
|
203
|
+
- Start date
|
|
204
|
+
|
|
205
|
+
**Script:**
|
|
206
|
+
```
|
|
207
|
+
"I understand the base salary is firm. Could we discuss a signing bonus to help bridge the gap? Something in the range of $X would make this work."
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Scenario 4: You Have Competing Offers
|
|
211
|
+
|
|
212
|
+
**Use Carefully:**
|
|
213
|
+
- Only mention if true
|
|
214
|
+
- Don't make it a threat
|
|
215
|
+
- Frame as problem-solving
|
|
216
|
+
|
|
217
|
+
**Script:**
|
|
218
|
+
```
|
|
219
|
+
"I want to be transparent - I'm also in discussions with [another company/a few other companies]. They're offering $X. [Your Company] is my first choice because [genuine reason], but I want to make sure the compensation is competitive."
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Scenario 5: They Ask About Current Salary
|
|
223
|
+
|
|
224
|
+
**In Many States, This Question Is Illegal**
|
|
225
|
+
|
|
226
|
+
**If Asked (and legal):**
|
|
227
|
+
```
|
|
228
|
+
"I'd prefer to focus on the value I'd bring to this role and what the market rate is. What's the range you've budgeted?"
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Or Redirect:**
|
|
232
|
+
```
|
|
233
|
+
"My current compensation isn't really comparable since [different location/role/structure]. Based on my research for this role, I'm targeting $X-$Y."
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Negotiation Tactics
|
|
237
|
+
|
|
238
|
+
### Do's:
|
|
239
|
+
- ✅ Always negotiate (respectfully)
|
|
240
|
+
- ✅ Get the offer in writing before negotiating
|
|
241
|
+
- ✅ Research thoroughly
|
|
242
|
+
- ✅ Be specific with numbers
|
|
243
|
+
- ✅ Express genuine enthusiasm
|
|
244
|
+
- ✅ Give them a way to say yes
|
|
245
|
+
- ✅ Consider total compensation
|
|
246
|
+
- ✅ Be patient - process takes time
|
|
247
|
+
- ✅ Get final agreement in writing
|
|
248
|
+
|
|
249
|
+
### Don'ts:
|
|
250
|
+
- ❌ Accept on the spot
|
|
251
|
+
- ❌ Give a salary history (if not required by law)
|
|
252
|
+
- ❌ Make ultimatums
|
|
253
|
+
- ❌ Lie about competing offers
|
|
254
|
+
- ❌ Be rude or aggressive
|
|
255
|
+
- ❌ Negotiate just for the sake of it
|
|
256
|
+
- ❌ Accept verbal promises without writing
|
|
257
|
+
- ❌ Burn bridges if it doesn't work out
|
|
258
|
+
|
|
259
|
+
## Total Compensation Comparison
|
|
260
|
+
|
|
261
|
+
### Side-by-Side Analysis
|
|
262
|
+
|
|
263
|
+
```markdown
|
|
264
|
+
## OFFER COMPARISON
|
|
265
|
+
|
|
266
|
+
| Component | Company A | Company B | Notes |
|
|
267
|
+
|-----------|-----------|-----------|-------|
|
|
268
|
+
| Base Salary | $150,000 | $140,000 | A wins |
|
|
269
|
+
| Target Bonus | 15% ($22,500) | 20% ($28,000) | B wins |
|
|
270
|
+
| Signing Bonus | $20,000 | $10,000 | A wins |
|
|
271
|
+
| Equity (annual) | $50,000 | $75,000 | B wins |
|
|
272
|
+
| 401k Match | 4% ($6,000) | 6% ($8,400) | B wins |
|
|
273
|
+
| Benefits | Standard | Premium | B wins |
|
|
274
|
+
| WFH | Hybrid (3 days) | Full remote | B wins |
|
|
275
|
+
| Vacation | 3 weeks | Unlimited | Depends |
|
|
276
|
+
|
|
277
|
+
**Year 1 Total Comp:**
|
|
278
|
+
Company A: $248,500
|
|
279
|
+
Company B: $261,400
|
|
280
|
+
|
|
281
|
+
**Analysis:** Company B is higher total comp, but Company A has higher base which affects future raises and mortgage qualification.
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## Negotiation Timeline Template
|
|
285
|
+
|
|
286
|
+
```
|
|
287
|
+
Day 1: Receive offer
|
|
288
|
+
- Thank them, express enthusiasm
|
|
289
|
+
- Ask for offer in writing
|
|
290
|
+
- Ask deadline for response
|
|
291
|
+
|
|
292
|
+
Day 1-3: Research
|
|
293
|
+
- Verify market rate
|
|
294
|
+
- Calculate total comp
|
|
295
|
+
- Identify priorities
|
|
296
|
+
- Prepare counter-offer
|
|
297
|
+
|
|
298
|
+
Day 3-5: Counter
|
|
299
|
+
- Send counter-offer email or schedule call
|
|
300
|
+
- Be specific about ask
|
|
301
|
+
|
|
302
|
+
Day 5-10: Discussion
|
|
303
|
+
- May require several rounds
|
|
304
|
+
- Be patient but responsive
|
|
305
|
+
- Stay professional and positive
|
|
306
|
+
|
|
307
|
+
Day 10+: Resolution
|
|
308
|
+
- Agree on terms
|
|
309
|
+
- Get everything in writing
|
|
310
|
+
- Sign and celebrate!
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
## Output Format
|
|
314
|
+
|
|
315
|
+
When preparing salary negotiation:
|
|
316
|
+
|
|
317
|
+
```markdown
|
|
318
|
+
# SALARY NEGOTIATION STRATEGY
|
|
319
|
+
|
|
320
|
+
## Market Research Summary
|
|
321
|
+
**Role:** [Title]
|
|
322
|
+
**Location:** [City/Remote]
|
|
323
|
+
**Experience Level:** [Years]
|
|
324
|
+
|
|
325
|
+
**Market Range:**
|
|
326
|
+
- 25th percentile: $XXX,XXX
|
|
327
|
+
- 50th percentile: $XXX,XXX (target)
|
|
328
|
+
- 75th percentile: $XXX,XXX
|
|
329
|
+
- 90th percentile: $XXX,XXX (stretch)
|
|
330
|
+
|
|
331
|
+
**Sources:** [List sources used]
|
|
332
|
+
|
|
333
|
+
## Their Offer
|
|
334
|
+
| Component | Amount |
|
|
335
|
+
|-----------|--------|
|
|
336
|
+
| Base | $XXX,XXX |
|
|
337
|
+
| Bonus | X% |
|
|
338
|
+
| Equity | $XXX,XXX |
|
|
339
|
+
| Signing | $XXX |
|
|
340
|
+
| Total Year 1 | $XXX,XXX |
|
|
341
|
+
|
|
342
|
+
## Your Counter
|
|
343
|
+
| Component | Ask | Justification |
|
|
344
|
+
|-----------|-----|---------------|
|
|
345
|
+
| Base | $XXX,XXX | [Why] |
|
|
346
|
+
| Signing | $XXX | [Why] |
|
|
347
|
+
| [Other] | | |
|
|
348
|
+
|
|
349
|
+
## Counter-Offer Script
|
|
350
|
+
[Email template or call script customized for this situation]
|
|
351
|
+
|
|
352
|
+
## If They Push Back
|
|
353
|
+
**Plan B:** [Alternative elements to negotiate]
|
|
354
|
+
**Walk-away Point:** [Your minimum]
|
|
355
|
+
|
|
356
|
+
## Key Talking Points
|
|
357
|
+
1. [Your experience/value point]
|
|
358
|
+
2. [Market data point]
|
|
359
|
+
3. [Specific achievement]
|
|
360
|
+
|
|
361
|
+
## Questions to Clarify
|
|
362
|
+
- [Equity vesting schedule?]
|
|
363
|
+
- [Bonus guaranteed?]
|
|
364
|
+
- [Review cycle timeline?]
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
## Implementation Checklist
|
|
368
|
+
|
|
369
|
+
1. ✅ Research market rate from 3+ sources
|
|
370
|
+
2. ✅ Calculate total compensation (not just base)
|
|
371
|
+
3. ✅ Identify your priorities
|
|
372
|
+
4. ✅ Determine walk-away point
|
|
373
|
+
5. ✅ Prepare counter-offer with justification
|
|
374
|
+
6. ✅ Write or practice negotiation script
|
|
375
|
+
7. ✅ Plan for pushback scenarios
|
|
376
|
+
8. ✅ Get agreement in writing
|
|
377
|
+
9. ✅ Review final offer letter carefully
|
|
378
|
+
10. ✅ Sign and celebrate!
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pdf
|
|
3
3
|
description: >-
|
|
4
|
+
Use when user says "extract text from pdf", "merge pdfs", "split a pdf", "fill out a pdf form",
|
|
5
|
+
"extract tables from pdf", or "create a pdf".
|
|
4
6
|
Comprehensive PDF manipulation toolkit for extracting text and tables, creating new PDFs,
|
|
5
7
|
merging/splitting documents, and handling forms. When Claude needs to fill in a PDF form or
|
|
6
8
|
programmatically process, generate, or analyze PDF documents at scale.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: postiz-cards
|
|
3
|
+
description: 'Use when user says "build a branded card", "make a postiz card", "schedule a branded post", "composite the logo on this card", "lint my post copy". Brand-aware card pipeline for Postiz. Lints post copy (cashtag/em-dash/stat gates), composites the brand logo band onto Higgsfield cards (with OCR text-check), and pulls analytics. For building or scheduling branded image-card posts for ANY postizz brand (volaria, etc.). Pairs with /post-as.'
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash
|
|
6
|
+
- Read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# postiz-cards
|
|
10
|
+
|
|
11
|
+
The reusable toolkit behind `/post-as` — the card-building and pre-publish discipline, generalized so any brand under `profiles/postizz/brands/<brand>/` can use it. Volaria is the reference implementation.
|
|
12
|
+
|
|
13
|
+
## Why this exists
|
|
14
|
+
|
|
15
|
+
Hand-rolling generate → composite → lint → upload → schedule for every card is slow and error-prone (cashtag-limit failures, em-dashes, garbled headline text, logo redraws). These scripts make each step one command.
|
|
16
|
+
|
|
17
|
+
## Scripts (`scripts/`)
|
|
18
|
+
|
|
19
|
+
### `lint.py` — pre-publish gate
|
|
20
|
+
```
|
|
21
|
+
python3 scripts/lint.py <draftfile> # tweets separated by a line: ===
|
|
22
|
+
```
|
|
23
|
+
Per tweet enforces **≤1 cashtag** (X rejects 2+ as nonRetryable), **0 em-dashes**, char count; warns on **uncited stats** (numbers with no source link). Exit 1 on FAIL. Run before every schedule.
|
|
24
|
+
|
|
25
|
+
### `card.sh` — logo composite + OCR check + upload
|
|
26
|
+
```
|
|
27
|
+
scripts/card.sh <raw.png> [out.png] [--brand <name>] [--check "HEADLINE WORDS"] [--upload]
|
|
28
|
+
```
|
|
29
|
+
Composites the brand's logo band onto a raw Higgsfield card (defaults: 220px band, logo `-resize x180` at `north +0+20` — override via `BAND_H`/`LOGO_H`/`LOGO_OFF` env). `--check` OCRs the rendered card (tesseract) to catch text errors like a dropped word. `--upload` pushes to Postiz and prints the media URL.
|
|
30
|
+
**Never** pass the logo to image-gen as a reference — it redraws. Always composite post-gen.
|
|
31
|
+
|
|
32
|
+
### `analytics.sh` — performance report
|
|
33
|
+
```
|
|
34
|
+
scripts/analytics.sh [--brand <name>] [--int <integration_id>]
|
|
35
|
+
```
|
|
36
|
+
Postiz platform + recent-post metrics. **Caveat:** Postiz analytics lag X by ~30× on fresh posts — use for trend, cross-check X-native (the account's per-post analytics or Premium export).
|
|
37
|
+
|
|
38
|
+
## Standing pipeline (per post)
|
|
39
|
+
research/verify → draft copy → `lint.py` → generate card (EMPTY top band) → `card.sh --check --upload` → schedule via the `postiz` CLI with a first-reply CTA, at a peak slot → reply within 30 min.
|
|
40
|
+
|
|
41
|
+
## Brand config (per brand, under `profiles/postizz/brands/<brand>/`)
|
|
42
|
+
- `logo.png` — composited onto every card (the band recipe; tune via env if a brand differs).
|
|
43
|
+
- `brand.md` — palette/voice/card templates + the content plan (pillars, cadence, levers).
|
|
44
|
+
- `accounts.yaml` — integration IDs (or pass `--int` / `POSTIZ_INT`).
|
|
45
|
+
|
|
46
|
+
## Related
|
|
47
|
+
- Command: `/post-as <brand>` (wraps this end-to-end). `/trend-to-thread`, `/article-to-everywhere`.
|
|
48
|
+
- Rules: `rules/postiz/x-cashtag-limit.md`.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Postiz performance report for a brand's integration + recent posts. Brand-parameterized.
|
|
3
|
+
# Usage: analytics.sh [--brand <name>] [--int <integration_id>]
|
|
4
|
+
# WARNING: Postiz analytics LAG X by ~30x on fresh posts. Trend only; cross-check X-native.
|
|
5
|
+
set -uo pipefail
|
|
6
|
+
CUE_ROOT="${CUE_REPO_ROOT:-$HOME/Documents/cue}"
|
|
7
|
+
brand="${POSTIZ_BRAND:-volaria}"; INT="${POSTIZ_INT:-}"
|
|
8
|
+
while [ $# -gt 0 ]; do case "$1" in --brand) brand="$2"; shift 2;; --int) INT="$2"; shift 2;; *) shift;; esac; done
|
|
9
|
+
# fall back to the brand's accounts.yaml
|
|
10
|
+
[ -z "$INT" ] && INT="$(grep -oE 'cmp[a-z0-9]{20,}' "$CUE_ROOT/profiles/postizz/brands/$brand/accounts.yaml" 2>/dev/null | head -1)"
|
|
11
|
+
[ -n "$INT" ] || { echo "no integration id (pass --int or set POSTIZ_INT, or fill accounts.yaml for $brand)"; exit 1; }
|
|
12
|
+
|
|
13
|
+
echo "=== $brand platform analytics (Postiz - LAGS X ~30x) ==="
|
|
14
|
+
postiz analytics:platform "$INT" 2>&1 | python3 -c "
|
|
15
|
+
import sys,json
|
|
16
|
+
t=sys.stdin.read(); i=t.find('[')
|
|
17
|
+
try:
|
|
18
|
+
d=json.loads(t[i:])
|
|
19
|
+
for m in d:
|
|
20
|
+
vals=m.get('data',[]); tot=vals[-1].get('total') if vals else '?'
|
|
21
|
+
print(f' {m.get(\"label\",\"?\"):12} {tot}')
|
|
22
|
+
except Exception: print(' (parse failed)', t[:120])
|
|
23
|
+
"
|
|
24
|
+
echo
|
|
25
|
+
echo "=== recent published posts ==="
|
|
26
|
+
postiz posts:list 2>/dev/null > /tmp/postiz-pl.json
|
|
27
|
+
python3 - <<'PY'
|
|
28
|
+
import json
|
|
29
|
+
t=open('/tmp/postiz-pl.json').read(); i=t.find('{'); d=json.loads(t[i:])
|
|
30
|
+
pub=[p for p in (d.get('posts') or []) if p.get('state')=='PUBLISHED']
|
|
31
|
+
pub.sort(key=lambda p:p.get('publishDate') or '')
|
|
32
|
+
for p in pub[-8:]:
|
|
33
|
+
c=(p.get('content') or '').replace('\n',' ')[:38]
|
|
34
|
+
print(f" {(p.get('publishDate') or '')[:16]} {p['id']} {c}")
|
|
35
|
+
print(f" ({len(pub)} published total)")
|
|
36
|
+
PY
|
|
37
|
+
echo
|
|
38
|
+
echo "GOLD STANDARD (not Postiz): the account's X-native per-post analytics, or X Premium export."
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Brand card finisher: composite the brand logo band onto a raw Higgsfield card,
|
|
3
|
+
# optional OCR headline check, optional Postiz upload. Brand-parameterized.
|
|
4
|
+
# Usage: card.sh <raw.png> [out.png] [--brand <name>] [--check "WORDS"] [--upload]
|
|
5
|
+
# Composite tunables via env: BAND_H (220), LOGO_H (180), LOGO_OFF (+0+20)
|
|
6
|
+
set -uo pipefail
|
|
7
|
+
CUE_ROOT="${CUE_REPO_ROOT:-$HOME/Documents/cue}"
|
|
8
|
+
brand="${POSTIZ_BRAND:-volaria}"
|
|
9
|
+
BAND="${BAND_H:-220}"; LH="${LOGO_H:-180}"; OFF="${LOGO_OFF:-+0+20}"
|
|
10
|
+
raw=""; out=""; check=""; do_upload=0
|
|
11
|
+
while [ $# -gt 0 ]; do
|
|
12
|
+
case "$1" in
|
|
13
|
+
--brand) brand="${2:-}"; shift 2;;
|
|
14
|
+
--check) check="${2:-}"; shift 2;;
|
|
15
|
+
--upload) do_upload=1; shift;;
|
|
16
|
+
-*) echo "unknown option: $1"; exit 2;;
|
|
17
|
+
*) if [ -z "$raw" ]; then raw="$1"; else out="$1"; fi; shift;;
|
|
18
|
+
esac
|
|
19
|
+
done
|
|
20
|
+
[ -f "$raw" ] || { echo "usage: card.sh <raw.png> [out.png] [--brand <name>] [--check \"WORDS\"] [--upload]"; exit 2; }
|
|
21
|
+
LOGO="$CUE_ROOT/profiles/postizz/brands/$brand/logo.png"
|
|
22
|
+
[ -f "$LOGO" ] || { echo "no logo for brand '$brand' at $LOGO"; exit 1; }
|
|
23
|
+
[ -z "$out" ] && out="${raw%.*}-card.png"
|
|
24
|
+
|
|
25
|
+
convert "$raw" -background black -gravity north -splice "0x${BAND}" \
|
|
26
|
+
\( "$LOGO" -resize "x${LH}" \) -gravity north -geometry "${OFF}" -composite "$out"
|
|
27
|
+
echo "composited -> $out ($(identify -format '%wx%h' "$out")) [brand=$brand band=${BAND} logo=x${LH}]"
|
|
28
|
+
|
|
29
|
+
if [ -n "$check" ]; then
|
|
30
|
+
if command -v tesseract >/dev/null 2>&1; then
|
|
31
|
+
txt="$(tesseract "$out" - 2>/dev/null | tr '[:lower:]' '[:upper:]' | tr -d '\n')"
|
|
32
|
+
miss=""
|
|
33
|
+
for w in $check; do
|
|
34
|
+
printf '%s' "$txt" | grep -q "$(printf '%s' "$w" | tr '[:lower:]' '[:upper:]')" || miss="$miss $w"
|
|
35
|
+
done
|
|
36
|
+
[ -n "$miss" ] && echo "WARN OCR: words not found ->$miss (re-roll the card)" || echo "OK OCR: all check words present"
|
|
37
|
+
else
|
|
38
|
+
echo "note: tesseract not installed; OCR headline check skipped"
|
|
39
|
+
fi
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
[ "$do_upload" = 1 ] && { echo -n "uploaded: "; postiz upload "$out" 2>&1 | grep -oE 'https?://[^"]+/uploads/[^"]+\.png' | head -1; }
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Pre-publish lint for Postiz brand posts (cashtag + em-dash + stat gate).
|
|
3
|
+
|
|
4
|
+
Usage: lint.py <postfile> # tweets separated by a line containing only ===
|
|
5
|
+
cat draft.txt | lint.py
|
|
6
|
+
|
|
7
|
+
Per tweet, enforces:
|
|
8
|
+
- <= 1 cashtag ($TICKER) -> X rejects 2+ as nonRetryable
|
|
9
|
+
- 0 em-dashes -> de-slop rule
|
|
10
|
+
- char count (note if >280; fine on Premium)
|
|
11
|
+
Post-level:
|
|
12
|
+
- WARN if numeric stats appear with no source link anywhere (finance EEAT gate)
|
|
13
|
+
Exit 1 if any tweet FAILs. Brand-agnostic.
|
|
14
|
+
"""
|
|
15
|
+
import sys, re
|
|
16
|
+
|
|
17
|
+
data = open(sys.argv[1]).read() if len(sys.argv) > 1 else sys.stdin.read()
|
|
18
|
+
tweets = [t.strip() for t in re.split(r'(?m)^===\s*$', data) if t.strip()]
|
|
19
|
+
has_source = bool(re.search(r'https?://|[Ss]ource\s*:', data))
|
|
20
|
+
fails = 0
|
|
21
|
+
|
|
22
|
+
for i, tw in enumerate(tweets, 1):
|
|
23
|
+
cash = [c for c in re.findall(r'\$[A-Za-z]{1,6}\b', tw) if c[1:].isupper()] # $NVDA, not $5
|
|
24
|
+
em = tw.count('—')
|
|
25
|
+
chars = len(tw)
|
|
26
|
+
stats = re.findall(r'\b\d+(?:\.\d+)?%|\$\d[\d,.]*|\b\d{3,}\b', tw)
|
|
27
|
+
flags = []
|
|
28
|
+
if len(cash) > 1: flags.append(f"FAIL cashtags {cash} (max 1/tweet)")
|
|
29
|
+
if em: flags.append(f"FAIL em-dash x{em}")
|
|
30
|
+
if chars > 280: flags.append(f"note {chars} chars (>280; ok if Premium)")
|
|
31
|
+
if stats and not has_source: flags.append(f"WARN uncited stats {stats[:4]} (no source link in post)")
|
|
32
|
+
status = "FAIL" if any(f.startswith("FAIL") for f in flags) else ("WARN" if flags else "PASS")
|
|
33
|
+
if status == "FAIL": fails += 1
|
|
34
|
+
print(f"[{status}] tweet {i}: {len(cash)} cashtag, {em} em-dash, {chars} chars")
|
|
35
|
+
for f in flags: print(f" - {f}")
|
|
36
|
+
|
|
37
|
+
print(f"\n{'FAILED' if fails else 'clean'}: {len(tweets)} tweets, {fails} failing, source_present={has_source}")
|
|
38
|
+
sys.exit(1 if fails else 0)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: 'Use when user says "record a CLI demo gif", "make a terminal demo", "capture a tmux session as a gif", "demo gif with brand logos", or "redact text in a screen recording". Headless cage/Wayland + Kitty + tmux + ffmpeg pipeline for high-quality CLI demo GIFs that need Kitty graphics protocol (real PNG icons inline) — instead of vhs/asciinema which don''t speak the Kitty protocol. Includes auto-redaction of moving text via tesseract OCR.'
|
|
3
3
|
requires_mcps: [cue-tty-watch]
|
|
4
4
|
allowed-tools: Bash(cage:*), Bash(weston:*), Bash(Xvfb:*), Bash(kitty:*), Bash(tmux:*), Bash(xdotool:*), Bash(wf-recorder:*), Bash(grim:*), Bash(ffmpeg:*), Bash(/usr/bin/ffmpeg:*), Bash(tesseract:*), Bash(convert:*), Read(*), Write(*), mcp__cue-tty-watch__*
|
|
5
5
|
---
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: 'Use when user says "design a readme", "make my readme beautiful", "create an svg diagram", "architecture diagram for the readme", or "add a hero banner to the docs". Generates publication-quality SVG assets and composes them into a well-structured, GitHub-compatible README.'
|
|
3
3
|
requires_mcps: []
|
|
4
4
|
allowed-tools: Bash(python3:*), Bash(cairosvg:*), Read(*), Write(*)
|
|
5
5
|
---
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grant-outreach
|
|
3
|
+
description: 'Use when user says "grant outreach", "propose grants to companies by email", "grant brokerage", or asks about HU/SK B2B cold-email rules. Matches a grant to a company, drafts a compliant pitch.'
|
|
4
|
+
tags: [eu-funding, outreach, email, grants, compliance, hungary, slovakia]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Grant outreach (HU / SK B2B)
|
|
8
|
+
|
|
9
|
+
Turn the funding-research capability into an outreach motion: find a live grant,
|
|
10
|
+
match it to companies that qualify, and email them a compliant proposal. This is a
|
|
11
|
+
brokerage / lead-gen service (not a product). Find the grants first with [[hu-grant-finder]].
|
|
12
|
+
|
|
13
|
+
## Compliance first (one complaint can outweigh a deal)
|
|
14
|
+
|
|
15
|
+
HU and SK are **opt-in** countries for marketing email (SK: Act 351/2011 §62; HU: Grt.
|
|
16
|
+
+ GDPR). Cold B2B email is defensible only on **GDPR legitimate interest** (Art 6(1)(f)),
|
|
17
|
+
and only done right:
|
|
18
|
+
|
|
19
|
+
- Email **generic company addresses** (`info@`, `obchod@`), never named persons.
|
|
20
|
+
- The pitch must be **genuinely relevant** (a grant the company actually qualifies for)
|
|
21
|
+
and tied to their professional role. That relevance *is* the legitimate interest.
|
|
22
|
+
- **Identify yourself** (company, address) and give a **one-click opt-out** in every mail.
|
|
23
|
+
- Keep a written **LIA** (legitimate interest assessment) and an opt-out / suppression log.
|
|
24
|
+
- Throttle, and never re-email an opt-out.
|
|
25
|
+
- Verify with the **Slovak DPA** (`dataprotection.gov.sk`) or **NAIH** (HU) or a lawyer
|
|
26
|
+
before scaling. This skill is not legal advice.
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
1. **Find a live grant** via [[hu-grant-finder]] (eligibility: sector, size, region, deadline).
|
|
31
|
+
2. **Build a target list** of companies matching the eligibility, from public registers:
|
|
32
|
+
SK **ORSR** (`orsr.sk`) / **FinStat** (`finstat.sk`); HU **e-cégjegyzék** / Céginfo /
|
|
33
|
+
OPTEN. Keep only generic contact addresses.
|
|
34
|
+
3. **Match + rank** each company to the grant: why they qualify, the amount, the deadline.
|
|
35
|
+
4. **Draft** a short, personal email per company (use the `email-sequence-writer` skill for
|
|
36
|
+
the copy). Lead with their fit, not your service.
|
|
37
|
+
5. **Send compliant** through an ESP with sender-ID + opt-out + throttle + suppression list.
|
|
38
|
+
6. **Track** replies; price as success fee (% of grant won) or retainer.
|
|
39
|
+
|
|
40
|
+
## Email skeleton (SK / HU, compliant)
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Subject: <Program> – <amount> for <their sector> (deadline <date>)
|
|
44
|
+
|
|
45
|
+
Dobrý deň / Tisztelt <Company>,
|
|
46
|
+
|
|
47
|
+
<Program X> is open and your company looks eligible: <1-line why: sector, size, region>.
|
|
48
|
+
It is <amount, %>, deadline <date>. Happy to send a 1-page fit check.
|
|
49
|
+
|
|
50
|
+
<Your name>, <Company>, <address> · <phone>
|
|
51
|
+
Unsubscribe: <link> (we will not email again)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Rules
|
|
55
|
+
|
|
56
|
+
- Compliance is the gate, not an afterthought: generic address + real relevance +
|
|
57
|
+
sender-ID + opt-out + LIA, or do not send.
|
|
58
|
+
- Relevance is the legitimate-interest argument. A grant the company cannot win is spam;
|
|
59
|
+
match eligibility hard first via [[hu-grant-finder]].
|
|
60
|
+
- Never email a named individual or a scraped personal address; never re-email an opt-out.
|
|
61
|
+
- This is outreach, not legal counsel. Flag the Slovak DPA / NAIH check before scaling.
|
|
62
|
+
|
|
63
|
+
## Example
|
|
64
|
+
|
|
65
|
+
User: "Let's offer Program Slovensko grants to other companies by email."
|
|
66
|
+
|
|
67
|
+
Pull the open grant + eligibility via [[hu-grant-finder]], build a target list from
|
|
68
|
+
ORSR / FinStat filtered to that eligibility, draft one relevant email per company to its
|
|
69
|
+
generic address with sender-ID + opt-out, log the LIA, and send throttled. Flag that B2B
|
|
70
|
+
cold email needs a legitimate-interest basis and a DPA check before scaling.
|