content-grade 1.0.42 → 1.0.44

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.
@@ -141,10 +141,10 @@ function showFreeTierCTA(count) {
141
141
  // Limit reached — that run just worked; now close the sale
142
142
  console.log(` ${RD}${B}That was your last free analysis (${limit}/${limit} used).${R}`);
143
143
  blank();
144
- console.log(` ${WH}${B}Pro: unlimited analyses — no cap, no daily reset.${R}`);
145
- console.log(` ${WH} · Batch entire /posts/ directories at once${R}`);
146
- console.log(` ${WH} · CI integration exit codes + JSON/HTML output${R}`);
147
- console.log(` ${WH} · Priority support reply within 24h${R}`);
144
+ console.log(` ${WH}${B}Pro: grade every piece you publish — no cap, no resets, ever.${R}`);
145
+ console.log(` ${WH} · No limit run as many analyses as you need${R}`);
146
+ console.log(` ${WH} · Batch mode: grade your entire /posts/ directory in one shot${R}`);
147
+ console.log(` ${WH} · CI integration: exit codes + JSON/HTML output${R}`);
148
148
  blank();
149
149
  console.log(` ${MG}${B}→ Get Pro ($9/mo, cancel anytime): ${CY}${UPGRADE_LINKS.free}${R}`);
150
150
  blank();
@@ -153,16 +153,22 @@ function showFreeTierCTA(count) {
153
153
  console.log(` ${D} 2. Run: ${CY}content-grade activate <your-key>${R}`);
154
154
  console.log(` ${D} Already have a key? Run step 2 now.${R}`);
155
155
  } else if (remaining <= 2) {
156
- // 1-2 runs left — loss aversion + clear Pro value
157
- console.log(` ${YL}${B}${count}/${limit} runs used · ${remaining} free analysis${remaining === 1 ? '' : 'es'} remaining${R}`);
156
+ // 1-2 runs left — loss aversion + specific Pro value
157
+ console.log(` ${YL}${B}${count}/${limit} runs used · ${remaining} free analysis${remaining === 1 ? '' : 'es'} left${R}`);
158
158
  blank();
159
- console.log(` ${WH}${B}Pro: unlimited runs · batch analysis · priority support${R}`);
160
- console.log(` ${MG}${B}→ Get Pro ($9/mo): ${CY}${UPGRADE_LINKS.free}${R}`);
159
+ console.log(` ${WH}${B}Pro: no cap, no resets grade every piece you publish${R}`);
160
+ console.log(` ${WH} · Batch /posts/ directories · CI exit codes · JSON output${R}`);
161
+ console.log(` ${MG}${B}→ Get Pro before you run out ($9/mo): ${CY}${UPGRADE_LINKS.free}${R}`);
161
162
  } else {
162
- // Runs available — always visible count + clear Pro benefits + Stripe link
163
+ // Runs available — rotate benefit angle each run to avoid banner blindness
164
+ const nudgeBenefits = [
165
+ `Pro: no cap — grade every piece you publish, no resets`,
166
+ `Pro: batch entire directories at once · no limits, ever`,
167
+ `Pro: CI integration · exit codes + JSON output · unlimited runs`,
168
+ ];
163
169
  console.log(` ${WH}${count}/${limit} runs used · ${remaining} remaining${R}`);
164
- console.log(` ${WH} Pro: unlimited runs · batch analysis · priority support${R}`);
165
- console.log(` ${MG}→ Upgrade ($9/mo): ${CY}${UPGRADE_LINKS.free}${R}`);
170
+ console.log(` ${WH} ${nudgeBenefits[count % 3]}${R}`);
171
+ console.log(` ${MG}→ Get Pro ($9/mo): ${CY}${UPGRADE_LINKS.free}${R}`);
166
172
  }
167
173
  hr();
168
174
  maybeShowFeedbackCTA(count);
@@ -279,10 +285,10 @@ function checkFreeTierLimit() {
279
285
  hr();
280
286
  console.log(` ${RD}${B}You've used all ${limit} free analyses.${R}`);
281
287
  blank();
282
- console.log(` ${WH}${B}Pro: unlimited analyses — no cap, no daily reset.${R}`);
283
- console.log(` ${WH} · Batch entire /posts/ directories at once${R}`);
284
- console.log(` ${WH} · CI integration exit codes + JSON/HTML output${R}`);
285
- console.log(` ${WH} · Priority support reply within 24h${R}`);
288
+ console.log(` ${WH}${B}Pro: grade every piece you publish — no cap, no resets, ever.${R}`);
289
+ console.log(` ${WH} · No limit run as many analyses as you need${R}`);
290
+ console.log(` ${WH} · Batch mode: grade your entire /posts/ directory in one shot${R}`);
291
+ console.log(` ${WH} · CI integration: exit codes + JSON/HTML output${R}`);
286
292
  blank();
287
293
  console.log(` ${MG}${B}→ Get Pro ($9/mo, cancel anytime): ${CY}${UPGRADE_LINKS.free}${R}`);
288
294
  blank();
@@ -1074,6 +1080,7 @@ async function cmdActivate() {
1074
1080
  const productKeyToTier = {
1075
1081
  contentgrade_starter: 'starter',
1076
1082
  contentgrade_pro: 'pro',
1083
+ contentgrade_business: 'business',
1077
1084
  contentgrade_team: 'team',
1078
1085
  };
1079
1086
  activatedTier = productKeyToTier[data.productKey] || 'pro';
@@ -1090,6 +1097,7 @@ async function cmdActivate() {
1090
1097
  blank();
1091
1098
  process.exit(1);
1092
1099
  }
1100
+ process.stdout.write(' done\n');
1093
1101
  } catch {
1094
1102
  // Server unreachable — allow offline activation with a warning
1095
1103
  process.stdout.write('\n');
@@ -1098,8 +1106,6 @@ async function cmdActivate() {
1098
1106
  validated = true;
1099
1107
  }
1100
1108
 
1101
- process.stdout.write(' done\n');
1102
-
1103
1109
  const config = loadConfig();
1104
1110
  config.licenseKey = key;
1105
1111
  config.tier = activatedTier;
@@ -2199,6 +2205,7 @@ ping(cmd || 'none');
2199
2205
  const productKeyToTier = {
2200
2206
  contentgrade_starter: 'starter',
2201
2207
  contentgrade_pro: 'pro',
2208
+ contentgrade_business: 'business',
2202
2209
  contentgrade_team: 'team',
2203
2210
  };
2204
2211
  updated.tier = productKeyToTier[data.productKey] || 'pro';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "content-grade",
3
- "version": "1.0.42",
3
+ "version": "1.0.44",
4
4
  "description": "AI-powered content analysis CLI. Score any blog post, landing page, or ad copy in under 30 seconds — runs on Claude CLI, no API key needed.",
5
5
  "type": "module",
6
6
  "bin": {