content-grade 1.0.50 → 1.1.0
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/bin/content-grade.js +17 -17
- package/dist/landing.html +8 -8
- package/package.json +1 -1
package/bin/content-grade.js
CHANGED
|
@@ -98,9 +98,9 @@ function incrementUsage() {
|
|
|
98
98
|
|
|
99
99
|
// Upgrade links — Free → Pro → Business → Team
|
|
100
100
|
const UPGRADE_LINKS = {
|
|
101
|
-
free: 'https://buy.stripe.com/4gM14p87GeCh9vn9ks8k80a', // Pro $
|
|
102
|
-
pro: 'https://buy.stripe.com/bJefZjafO2Tz36Z2W48k80b', // Business $
|
|
103
|
-
business: 'https://buy.stripe.com/cNiaEZfA8cu9bDv4088k80c', // Team $
|
|
101
|
+
free: 'https://buy.stripe.com/4gM14p87GeCh9vn9ks8k80a', // Pro $9/mo — direct checkout
|
|
102
|
+
pro: 'https://buy.stripe.com/bJefZjafO2Tz36Z2W48k80b', // Business $29/mo
|
|
103
|
+
business: 'https://buy.stripe.com/cNiaEZfA8cu9bDv4088k80c', // Team $79/mo
|
|
104
104
|
};
|
|
105
105
|
|
|
106
106
|
const TIER_NAMES = {
|
|
@@ -119,9 +119,9 @@ const TIER_LIMITS = {
|
|
|
119
119
|
|
|
120
120
|
function getUpgradeMessage() {
|
|
121
121
|
const tier = getLicenseTier();
|
|
122
|
-
if (tier === 'free') return `Unlimited analyses with Pro — $
|
|
123
|
-
if (tier === 'pro') return `Upgrade to Business — priority support, $
|
|
124
|
-
if (tier === 'business') return `Upgrade to Team — team seats, $
|
|
122
|
+
if (tier === 'free') return `Unlimited analyses with Pro — $9/mo → ${UPGRADE_LINKS.free}`;
|
|
123
|
+
if (tier === 'pro') return `Upgrade to Business — priority support, $29/mo → ${UPGRADE_LINKS.pro}`;
|
|
124
|
+
if (tier === 'business') return `Upgrade to Team — team seats, $79/mo → ${UPGRADE_LINKS.business}`;
|
|
125
125
|
return '';
|
|
126
126
|
}
|
|
127
127
|
|
|
@@ -142,7 +142,7 @@ function showFreeTierCTA(count) {
|
|
|
142
142
|
// Variant D — power user, last run of the day
|
|
143
143
|
console.log(` ${YL}${B}${count}/${limit} — that's all your free runs for today.${R}`);
|
|
144
144
|
blank();
|
|
145
|
-
console.log(` ${WH}You're clearly using this. $
|
|
145
|
+
console.log(` ${WH}You're clearly using this. $9/month removes the cap entirely —${R}`);
|
|
146
146
|
console.log(` ${WH}unlimited analyses, JSON/HTML export, bulk mode. Cancel anytime.${R}`);
|
|
147
147
|
blank();
|
|
148
148
|
console.log(` ${CY}→ ${UPGRADE_LINKS.free}${R}`);
|
|
@@ -233,11 +233,11 @@ function showUsageFooter(count) {
|
|
|
233
233
|
const remaining = Math.max(0, limit - count);
|
|
234
234
|
blank();
|
|
235
235
|
if (remaining === 0) {
|
|
236
|
-
console.log(` ${RD}[ You've used ${limit}/${limit} free runs today · Pro:
|
|
236
|
+
console.log(` ${RD}[ You've used ${limit}/${limit} free runs today · Pro: unlimited, JSON/HTML export, bulk mode — $9/mo → ${UPGRADE_LINKS.free} ]${R}`);
|
|
237
237
|
} else if (remaining <= 1) {
|
|
238
|
-
console.log(` ${YL}[ You've used ${count}/${limit} free runs today · ${remaining} remaining · Pro:
|
|
238
|
+
console.log(` ${YL}[ You've used ${count}/${limit} free runs today · ${remaining} remaining · Pro: unlimited ($9/mo) → ${UPGRADE_LINKS.free} ]${R}`);
|
|
239
239
|
} else {
|
|
240
|
-
console.log(` ${D}[ You've used ${count}/${limit} free runs today · ${remaining} remaining · Pro:
|
|
240
|
+
console.log(` ${D}[ You've used ${count}/${limit} free runs today · ${remaining} remaining · Pro: unlimited ($9/mo) → ${UPGRADE_LINKS.free} ]${R}`);
|
|
241
241
|
}
|
|
242
242
|
maybeShowEarlyAdopterCTA(count);
|
|
243
243
|
maybeShowFeedbackCTA(count);
|
|
@@ -272,7 +272,7 @@ function checkFreeTierLimit() {
|
|
|
272
272
|
hr();
|
|
273
273
|
console.log(` ${RD}${B}✗ Free limit reached (${limit}/${limit} today)${R}`);
|
|
274
274
|
blank();
|
|
275
|
-
console.log(` ${WH}content-grade Pro${R}${D} — $
|
|
275
|
+
console.log(` ${WH}content-grade Pro${R}${D} — $9/mo, cancel anytime${R}`);
|
|
276
276
|
console.log(` ${D} ├── ${R}${WH}Unlimited analyses${R}${D} — no daily cap${R}`);
|
|
277
277
|
console.log(` ${D} ├── ${R}${WH}JSON + HTML output${R}${D} — pipe into your pipeline${R}`);
|
|
278
278
|
console.log(` ${D} ├── ${R}${WH}CI mode ${R}${D} — exit 1 on below-threshold content${R}`);
|
|
@@ -961,7 +961,7 @@ async function cmdInit() {
|
|
|
961
961
|
console.log(` ${CY}content-grade start${R}`);
|
|
962
962
|
blank();
|
|
963
963
|
}
|
|
964
|
-
console.log(` ${WH}Pro: unlimited analyses · JSON/HTML export · bulk mode · CI integration — $
|
|
964
|
+
console.log(` ${WH}Pro: unlimited analyses · JSON/HTML export · bulk mode · CI integration — $9/mo, cancel anytime${R}`);
|
|
965
965
|
console.log(` ${MG}→ Get Pro: ${CY}${UPGRADE_LINKS.free}${R}`);
|
|
966
966
|
console.log(` ${D}After checkout: content-grade activate <your-key>${R}`);
|
|
967
967
|
blank();
|
|
@@ -993,7 +993,7 @@ async function cmdActivate() {
|
|
|
993
993
|
return;
|
|
994
994
|
}
|
|
995
995
|
|
|
996
|
-
console.log(` ${D}Pro unlocks unlimited analyses, JSON/HTML export, and bulk mode for $
|
|
996
|
+
console.log(` ${D}Pro unlocks unlimited analyses, JSON/HTML export, and bulk mode for $9/mo:${R}`);
|
|
997
997
|
blank();
|
|
998
998
|
console.log(` ${MG}${B}→ Get Pro: ${CY}${UPGRADE_LINKS.free}${R}`);
|
|
999
999
|
blank();
|
|
@@ -1131,9 +1131,9 @@ async function cmdBatch(dirPath) {
|
|
|
1131
1131
|
blank();
|
|
1132
1132
|
console.log(` ${D}Grade every file in a directory in one shot. Pro only.${R}`);
|
|
1133
1133
|
blank();
|
|
1134
|
-
console.log(` ${WH}${B}Pro ($
|
|
1134
|
+
console.log(` ${WH}${B}Pro ($9/mo): unlimited analyses · JSON/HTML export · bulk mode · CI integration${R}`);
|
|
1135
1135
|
blank();
|
|
1136
|
-
console.log(` ${MG}${B}→ Get Pro ($
|
|
1136
|
+
console.log(` ${MG}${B}→ Get Pro ($9/mo, cancel anytime): ${CY}${UPGRADE_LINKS.free}${R}`);
|
|
1137
1137
|
blank();
|
|
1138
1138
|
console.log(` ${D}After checkout — 2 steps to unlock:${R}`);
|
|
1139
1139
|
console.log(` ${D} 1. Get your key: ${CY}https://content-grade.onrender.com/my-license${R}`);
|
|
@@ -1346,7 +1346,7 @@ function cmdStart() {
|
|
|
1346
1346
|
info(` EmailForge — ${url}/email-forge`);
|
|
1347
1347
|
info(` AudienceDecoder — ${url}/audience`);
|
|
1348
1348
|
blank();
|
|
1349
|
-
info(`Free tier: 5 runs/day. Pro:
|
|
1349
|
+
info(`Free tier: 5 runs/day. Pro: unlimited ($9/mo) → ${UPGRADE_LINKS.free}`);
|
|
1350
1350
|
info(`Press Ctrl+C to stop`);
|
|
1351
1351
|
blank();
|
|
1352
1352
|
openBrowser(url);
|
|
@@ -1621,7 +1621,7 @@ function cmdHelp() {
|
|
|
1621
1621
|
console.log(` ${B}PRICING${R}`);
|
|
1622
1622
|
blank();
|
|
1623
1623
|
console.log(` Free 5 runs/day $0`);
|
|
1624
|
-
console.log(` Pro Unlimited analyses
|
|
1624
|
+
console.log(` Pro Unlimited analyses $9/mo (cancel anytime)`);
|
|
1625
1625
|
console.log(` Business Unlimited analyses $29/mo`);
|
|
1626
1626
|
console.log(` Team Unlimited analyses $79/mo`);
|
|
1627
1627
|
blank();
|
package/dist/landing.html
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@type": "Offer",
|
|
37
37
|
"price": "0",
|
|
38
38
|
"priceCurrency": "USD",
|
|
39
|
-
"description": "Free:
|
|
39
|
+
"description": "Free: 5 runs per day, reset daily. Pro: $9/mo, unlimited. Business: $49/mo, unlimited. Team: $199/mo, unlimited + shared workspace."
|
|
40
40
|
},
|
|
41
41
|
"featureList": [
|
|
42
42
|
"Headline analyzer with framework-based scoring",
|
|
@@ -1196,7 +1196,7 @@
|
|
|
1196
1196
|
<div class="step">
|
|
1197
1197
|
<div class="step-num">3</div>
|
|
1198
1198
|
<h3>Launch the full dashboard</h3>
|
|
1199
|
-
<p>Start the web interface to access all 6 tools — HeadlineGrader, PageRoast, AdScorer, ThreadGrader, EmailForge, and AudienceDecoder. Free tier:
|
|
1199
|
+
<p>Start the web interface to access all 6 tools — HeadlineGrader, PageRoast, AdScorer, ThreadGrader, EmailForge, and AudienceDecoder. Free tier: 5 analyses per day, reset daily.</p>
|
|
1200
1200
|
<div class="step-code">npx content-grade start</div>
|
|
1201
1201
|
</div>
|
|
1202
1202
|
</div>
|
|
@@ -1210,7 +1210,7 @@
|
|
|
1210
1210
|
<div class="section-eyebrow">Pricing</div>
|
|
1211
1211
|
<h2>Stop guessing if your content is good.</h2>
|
|
1212
1212
|
<p class="pricing-subhead" style="font-size:20px; font-weight:600; color:var(--fg); margin-bottom:8px;">Pick a plan. Grade everything.</p>
|
|
1213
|
-
<p class="pricing-lead">
|
|
1213
|
+
<p class="pricing-lead">5 runs per day — free. No credit card, no signup, no API key required.</p>
|
|
1214
1214
|
</div>
|
|
1215
1215
|
|
|
1216
1216
|
<div class="pricing-grid">
|
|
@@ -1220,7 +1220,7 @@
|
|
|
1220
1220
|
<div class="plan-period">forever · no signup required</div>
|
|
1221
1221
|
<a href="https://www.npmjs.com/package/content-grade" class="plan-cta">Install free →</a>
|
|
1222
1222
|
<ul class="plan-features">
|
|
1223
|
-
<li><span class="check">✓</span> <strong>
|
|
1223
|
+
<li><span class="check">✓</span> <strong>5 runs per day</strong> — enough to build the habit before you commit</li>
|
|
1224
1224
|
<li><span class="check">✓</span> Access all 6 tools: HeadlineGrader, PageRoast, AdScorer, ThreadGrader, EmailForge, AudienceDecoder</li>
|
|
1225
1225
|
<li><span class="check">✓</span> Core scores: Readability, Clarity, SEO Signal, Engagement potential</li>
|
|
1226
1226
|
<li><span class="check">✓</span> No credit card. No signup. No API key.</li>
|
|
@@ -1230,8 +1230,8 @@
|
|
|
1230
1230
|
<div class="plan featured">
|
|
1231
1231
|
<div class="plan-badge">Most popular</div>
|
|
1232
1232
|
<div class="plan-name">PRO</div>
|
|
1233
|
-
<div class="plan-price">$
|
|
1234
|
-
<div class="plan-period">Unlimited
|
|
1233
|
+
<div class="plan-price">$9<span>/mo</span></div>
|
|
1234
|
+
<div class="plan-period">Unlimited runs · billed monthly · cancel anytime</div>
|
|
1235
1235
|
<a href="https://buy.stripe.com/4gM14p87GeCh9vn9ks8k80a" class="plan-cta" target="_blank" rel="noopener">Upgrade to Pro →</a>
|
|
1236
1236
|
<div style="font-size:13px; color:var(--muted); margin-bottom:12px;">Used by content teams grading 50+ pieces per week.</div>
|
|
1237
1237
|
<ul class="plan-features">
|
|
@@ -1310,7 +1310,7 @@
|
|
|
1310
1310
|
<details>
|
|
1311
1311
|
<summary>Do I need an Anthropic API key or a paid Claude account?</summary>
|
|
1312
1312
|
<div class="faq-answer">
|
|
1313
|
-
No API key required. ContentGrade runs on <strong>Claude CLI</strong> — install it for free from claude.ai/code and log in with a Claude account. A free Claude account is sufficient for the free tier (
|
|
1313
|
+
No API key required. ContentGrade runs on <strong>Claude CLI</strong> — install it for free from claude.ai/code and log in with a Claude account. A free Claude account is sufficient for the free tier (5 analyses per day, reset daily).<br /><br />
|
|
1314
1314
|
There's no per-query Anthropic billing. You're not routing calls through the API console or accumulating usage charges. Claude CLI handles authentication locally, which is also why your content never leaves your machine.
|
|
1315
1315
|
</div>
|
|
1316
1316
|
</details>
|
|
@@ -1356,7 +1356,7 @@
|
|
|
1356
1356
|
<details>
|
|
1357
1357
|
<summary>What counts as an analysis?</summary>
|
|
1358
1358
|
<div class="faq-answer">
|
|
1359
|
-
One run of any tool on any single piece of content. Grading a headline = 1 analysis. Roasting a landing page = 1 analysis. Running <code>--bulk</code> on a folder of 20 posts = 20 analyses. The Free tier gives you
|
|
1359
|
+
One run of any tool on any single piece of content. Grading a headline = 1 analysis. Roasting a landing page = 1 analysis. Running <code>--bulk</code> on a folder of 20 posts = 20 analyses. The Free tier gives you 5 per day — Pro and above are unlimited.
|
|
1360
1360
|
</div>
|
|
1361
1361
|
</details>
|
|
1362
1362
|
|
package/package.json
CHANGED