git-paid 2.1.7 → 2.1.9
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/README.md +1 -1
- package/bin/git-paid.js +12 -1
- package/lib/auth.js +78 -23
- package/lib/directories.js +91 -90
- package/lib/engine.js +77 -24
- package/lib/fixer.js +207 -45
- package/lib/inbox.js +8 -2
- package/lib/mcp.js +1 -1
- package/lib/pseo.js +33 -33
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@ git paid https://your-app.com
|
|
|
46
46
|
| :--- | :--- | :--- |
|
|
47
47
|
| **Technical & AI Search SEO** | Hand-writing meta tags, JSON-LD, and crawler rules | Writes `robots.txt` (`OAI-SearchBot`, `PerplexityBot`, `ClaudeBot`), `sitemap.xml`, `llms.txt`, and `SoftwareApplication` JSON-LD in 1 command |
|
|
48
48
|
| **25 Structured SEO Pages** | Days of keyword research and static page coding | Pre-renders 25 `/use-cases/*`, `/compare/*`, `/calculators/*`, `/guides/*`, `/templates/*`, `/alternatives/*`, and `/checklists/*` HTML landing pages |
|
|
49
|
-
| **85-Directory Launch Kit** | Hours of repetitive copy-pasting & UTM tagging | Synthesizes Show HN / Product Hunt / directory copy
|
|
49
|
+
| **85-Directory Launch Kit** | Hours of repetitive copy-pasting & UTM tagging | Synthesizes Show HN / Product Hunt / directory copy across 74 curated directories & 11 launch communities (13 URL auto-prefilled links + 72 standalone web forms), and pings IndexNow & WebSub |
|
|
50
50
|
| **Verification Inbox (`@postbuild.dev`)** | Clutters personal inbox with 85+ confirmation emails | Provisions isolated `<slug>-<hash>@postbuild.dev`, extracts 6-digit OTPs, and surfaces confirmation links |
|
|
51
51
|
| **Self-Serve Stripe Checkout Gate** | Custom billing boilerplate | Drop-in `<CheckoutGate />` component + `/api/checkout.js` server route template |
|
|
52
52
|
|
package/bin/git-paid.js
CHANGED
|
@@ -283,14 +283,25 @@ async function runCli() {
|
|
|
283
283
|
process.exit(0);
|
|
284
284
|
}
|
|
285
285
|
|
|
286
|
+
const publishPseoToPublic = args.includes("--publish-pages");
|
|
286
287
|
const fixResult = applyLocalSeoFixes(report, {
|
|
287
288
|
cwd: process.cwd(),
|
|
288
289
|
overwritePublic: args.includes("--force"),
|
|
289
|
-
publishPseoToPublic
|
|
290
|
+
publishPseoToPublic,
|
|
290
291
|
verificationToken: license.verificationToken || ""
|
|
291
292
|
});
|
|
292
293
|
|
|
293
294
|
console.log(`\n --- Local Repository Auto-Fix (${fixResult.framework} — Licensed to ${license.email}) ---`);
|
|
295
|
+
if (Array.isArray(fixResult.overwrittenPublicFiles) && fixResult.overwrittenPublicFiles.length > 0) {
|
|
296
|
+
for (const ov of fixResult.overwrittenPublicFiles) {
|
|
297
|
+
console.log(` [OVERWRITE] Updated existing file: ${ov}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (publishPseoToPublic) {
|
|
301
|
+
console.log(
|
|
302
|
+
` [NOTICE] --publish-pages wrote 25 starter templates into ${fixResult.publicDir}/ with <meta name="robots" content="noindex" />. Customize each page and remove noindex before indexing.`
|
|
303
|
+
);
|
|
304
|
+
}
|
|
294
305
|
for (const f of fixResult.writtenFiles) {
|
|
295
306
|
console.log(` [WRITE] ${f.path.padEnd(36)} (${f.role})`);
|
|
296
307
|
}
|
package/lib/auth.js
CHANGED
|
@@ -246,6 +246,7 @@ export function upsertEntitlement({
|
|
|
246
246
|
if (cleanEmail) {
|
|
247
247
|
memoryEntitlements.set(`email:${cleanEmail}`, record);
|
|
248
248
|
memoryEntitlements.set(`email:${cleanEmail}:${plan}`, record);
|
|
249
|
+
memoryEntitlements.set(`email:${cleanEmail}:domain:${cleanDomain}`, record);
|
|
249
250
|
}
|
|
250
251
|
if (customerId) {
|
|
251
252
|
memoryEntitlements.set(`cust:${customerId}`, record);
|
|
@@ -299,18 +300,36 @@ export function updateEntitlementStatus({
|
|
|
299
300
|
return updated;
|
|
300
301
|
}
|
|
301
302
|
|
|
302
|
-
export function getEntitlement({ jti, email, customerId, plan = null } = {}) {
|
|
303
|
+
export function getEntitlement({ jti, email, customerId, plan = null, domain = null } = {}) {
|
|
304
|
+
const cleanDomain = domain
|
|
305
|
+
? String(domain)
|
|
306
|
+
.toLowerCase()
|
|
307
|
+
.trim()
|
|
308
|
+
.replace(/^https?:\/\//, "")
|
|
309
|
+
.replace(/^www\./, "")
|
|
310
|
+
.split("/")[0]
|
|
311
|
+
.split(":")[0]
|
|
312
|
+
: "";
|
|
303
313
|
if (jti && memoryEntitlements.has(`jti:${jti}`)) {
|
|
304
314
|
return memoryEntitlements.get(`jti:${jti}`);
|
|
305
315
|
}
|
|
306
316
|
if (email) {
|
|
307
317
|
const cleanEmail = String(email).toLowerCase().trim();
|
|
318
|
+
if (cleanDomain && memoryEntitlements.has(`email:${cleanEmail}:domain:${cleanDomain}`)) {
|
|
319
|
+
return memoryEntitlements.get(`email:${cleanEmail}:domain:${cleanDomain}`);
|
|
320
|
+
}
|
|
308
321
|
if (plan && memoryEntitlements.has(`email:${cleanEmail}:${plan}`)) {
|
|
309
|
-
|
|
322
|
+
const rec = memoryEntitlements.get(`email:${cleanEmail}:${plan}`);
|
|
323
|
+
if (!cleanDomain || rec.domain === cleanDomain || rec.status !== "active") {
|
|
324
|
+
return rec;
|
|
325
|
+
}
|
|
310
326
|
}
|
|
311
327
|
if (memoryEntitlements.has(`email:${cleanEmail}`)) {
|
|
312
328
|
const rec = memoryEntitlements.get(`email:${cleanEmail}`);
|
|
313
|
-
if (
|
|
329
|
+
if (
|
|
330
|
+
(!plan || !rec.plan || rec.plan === plan || rec.status === "revoked" || rec.status === "suspended") &&
|
|
331
|
+
(!cleanDomain || rec.domain === cleanDomain || rec.status !== "active")
|
|
332
|
+
) {
|
|
314
333
|
return rec;
|
|
315
334
|
}
|
|
316
335
|
}
|
|
@@ -329,8 +348,8 @@ export function getEntitlement({ jti, email, customerId, plan = null } = {}) {
|
|
|
329
348
|
return null;
|
|
330
349
|
}
|
|
331
350
|
|
|
332
|
-
export function isEntitlementRevoked({ jti, email, customerId, plan = null } = {}) {
|
|
333
|
-
const rec = getEntitlement({ jti, email, customerId, plan });
|
|
351
|
+
export function isEntitlementRevoked({ jti, email, customerId, plan = null, domain = null } = {}) {
|
|
352
|
+
const rec = getEntitlement({ jti, email, customerId, plan, domain });
|
|
334
353
|
if (!rec) return false;
|
|
335
354
|
return rec.status !== "active";
|
|
336
355
|
}
|
|
@@ -481,7 +500,7 @@ export function signLicenseToken({
|
|
|
481
500
|
domain = "postbuild.dev",
|
|
482
501
|
jti = "",
|
|
483
502
|
customerId = null,
|
|
484
|
-
emailVerified =
|
|
503
|
+
emailVerified = false,
|
|
485
504
|
ttlSeconds = 365 * 24 * 3600
|
|
486
505
|
}) {
|
|
487
506
|
const secret = requireAuthSecret();
|
|
@@ -815,7 +834,7 @@ export async function sendLicenseFulfillmentEmail({ email, licenseToken, planId,
|
|
|
815
834
|
<ol style="margin: 0; padding-left: 18px; color: #475569; font-size: 13px; line-height: 1.6;">
|
|
816
835
|
<li style="margin-bottom: 6px;"><strong>Deploy Your .zip Launch Bundle:</strong> Click <em>Download .zip</em> on your Account tab (includes <code>START_HERE.md</code>, <code>public/.well-known/postbuild-verify.txt</code>, starter HTML SEO pages, and <code>directories-85.csv</code>) and deploy to <code>${safeDomain}</code>.</li>
|
|
817
836
|
<li style="margin-bottom: 6px;"><strong>Verify Domain Ownership:</strong> ${autoVerifiedByEmail ? `Confirm your <code>@${safeDomain}</code> email once on your Account tab (or paste the license key below) to open <code>${inbox}</code>.` : `Click <em>Verify Domain Now</em> on your Account tab after deploying your bundle (or adding the meta tag / DNS TXT record) and keep it in place to unlock <code>${inbox}</code>.`}</li>
|
|
818
|
-
<li><strong>Submit
|
|
837
|
+
<li><strong>Submit Across 85 Directories & Communities:</strong> Launch links from the Dispatch tab or <code>directories-85.csv</code> using <code>${inbox}</code> — 6-digit OTPs and confirmation links arrive in your Account Inbox.</li>
|
|
819
838
|
</ol>
|
|
820
839
|
</div>
|
|
821
840
|
|
|
@@ -894,8 +913,15 @@ export async function checkStripeCustomerStatusCached(verified) {
|
|
|
894
913
|
return "active";
|
|
895
914
|
}
|
|
896
915
|
|
|
897
|
-
export async function authenticateUser({ email, token, sessionId, otpCode, challengeToken }) {
|
|
916
|
+
export async function authenticateUser({ email, token, sessionId, otpCode, challengeToken, domain: requestedDomain = "" }) {
|
|
898
917
|
const founderEmails = getFounderEmailsSet();
|
|
918
|
+
const cleanRequestedDomain = String(requestedDomain || "")
|
|
919
|
+
.toLowerCase()
|
|
920
|
+
.trim()
|
|
921
|
+
.replace(/^https?:\/\//, "")
|
|
922
|
+
.replace(/^www\./, "")
|
|
923
|
+
.split("/")[0]
|
|
924
|
+
.split(":")[0];
|
|
899
925
|
|
|
900
926
|
// 1. Verify existing pb_live_ token via HMAC-SHA256 + revocation check + 60s Stripe Customer pb_status check
|
|
901
927
|
if (token && token.startsWith("pb_live_")) {
|
|
@@ -933,12 +959,17 @@ export async function authenticateUser({ email, token, sessionId, otpCode, chall
|
|
|
933
959
|
if (!check.valid) {
|
|
934
960
|
return { ok: false, authenticated: false, error: check.error || "Invalid verification code." };
|
|
935
961
|
}
|
|
936
|
-
if (isEntitlementRevoked({ email: check.email, customerId: check.customerId, plan: check.plan })) {
|
|
962
|
+
if (isEntitlementRevoked({ email: check.email, customerId: check.customerId, plan: check.plan, domain: check.domain })) {
|
|
937
963
|
return { ok: false, authenticated: false, error: "This license entitlement has been revoked or refunded." };
|
|
938
964
|
}
|
|
939
|
-
const existingEnt = getEntitlement({
|
|
965
|
+
const existingEnt = getEntitlement({
|
|
966
|
+
email: check.email,
|
|
967
|
+
customerId: check.customerId,
|
|
968
|
+
plan: check.plan,
|
|
969
|
+
domain: check.domain
|
|
970
|
+
});
|
|
940
971
|
const plan = existingEnt?.plan || check.plan || "launch_pass";
|
|
941
|
-
const domain =
|
|
972
|
+
const domain = check.domain || existingEnt?.domain || "postbuild.dev";
|
|
942
973
|
const customerId = existingEnt?.customerId || check.customerId || null;
|
|
943
974
|
const issued = signLicenseToken({ email: check.email, plan, domain, customerId, emailVerified: true });
|
|
944
975
|
return {
|
|
@@ -988,7 +1019,7 @@ export async function authenticateUser({ email, token, sessionId, otpCode, chall
|
|
|
988
1019
|
const customerObj = session.customer && typeof session.customer === "object" ? session.customer : null;
|
|
989
1020
|
const customerId = typeof session.customer === "string" ? session.customer : customerObj?.id || null;
|
|
990
1021
|
const custStatus = customerObj?.metadata?.pb_status || "active";
|
|
991
|
-
if (custStatus !== "active" || isEntitlementRevoked({ email: custEmail, customerId, plan })) {
|
|
1022
|
+
if (custStatus !== "active" || isEntitlementRevoked({ email: custEmail, customerId, plan, domain })) {
|
|
992
1023
|
return { ok: false, authenticated: false, error: "This license entitlement has been revoked or refunded." };
|
|
993
1024
|
}
|
|
994
1025
|
const newToken = signLicenseToken({ email: custEmail, plan, domain, customerId, emailVerified: false });
|
|
@@ -1025,7 +1056,17 @@ export async function authenticateUser({ email, token, sessionId, otpCode, chall
|
|
|
1025
1056
|
let isExplicitlyRevoked = false;
|
|
1026
1057
|
let anyCustomerHadPbStatus = false;
|
|
1027
1058
|
|
|
1028
|
-
|
|
1059
|
+
// Review 10 Finding 4: Skip Stripe customer loop for operator emails so test purchases (e.g. cal.com) never hijack operator sign-in
|
|
1060
|
+
if (founderEmails.has(cleanEmail) && (!cleanRequestedDomain || cleanRequestedDomain === "postbuild.dev")) {
|
|
1061
|
+
hasActivePurchase = true;
|
|
1062
|
+
resolvedPlan = "studio_monthly";
|
|
1063
|
+
resolvedDomain = "postbuild.dev";
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
const localEnt = !hasActivePurchase
|
|
1067
|
+
? getEntitlement({ email: cleanEmail, domain: cleanRequestedDomain || null }) ||
|
|
1068
|
+
getEntitlement({ email: cleanEmail })
|
|
1069
|
+
: null;
|
|
1029
1070
|
if (localEnt && (localEnt.status === "revoked" || localEnt.status === "suspended")) {
|
|
1030
1071
|
isExplicitlyRevoked = true;
|
|
1031
1072
|
} else if (localEnt && localEnt.status === "active") {
|
|
@@ -1039,26 +1080,31 @@ export async function authenticateUser({ email, token, sessionId, otpCode, chall
|
|
|
1039
1080
|
try {
|
|
1040
1081
|
const customers = await stripe.customers.list({ email: cleanEmail, limit: 10 });
|
|
1041
1082
|
if (Array.isArray(customers?.data)) {
|
|
1083
|
+
const activeCustomers = [];
|
|
1042
1084
|
for (const cust of customers.data) {
|
|
1043
1085
|
const pbStatus = cust.metadata?.pb_status;
|
|
1044
1086
|
if (pbStatus) {
|
|
1045
1087
|
anyCustomerHadPbStatus = true;
|
|
1046
1088
|
}
|
|
1047
|
-
if (pbStatus === "revoked" || pbStatus === "suspended") {
|
|
1048
|
-
// Do not break early in case a legitimate active customerId exists for this email
|
|
1049
|
-
continue;
|
|
1050
|
-
}
|
|
1051
|
-
if (pbStatus === "cancelled") {
|
|
1089
|
+
if (pbStatus === "revoked" || pbStatus === "suspended" || pbStatus === "cancelled") {
|
|
1052
1090
|
continue;
|
|
1053
1091
|
}
|
|
1054
1092
|
if (!pbStatus || pbStatus === "active") {
|
|
1055
|
-
|
|
1056
|
-
resolvedCustomerId = cust.id;
|
|
1057
|
-
resolvedPlan = cust.metadata?.pb_plan || "launch_pass";
|
|
1058
|
-
resolvedDomain = cust.metadata?.pb_domain || "postbuild.dev";
|
|
1059
|
-
break;
|
|
1093
|
+
activeCustomers.push(cust);
|
|
1060
1094
|
}
|
|
1061
1095
|
}
|
|
1096
|
+
const matchedCust =
|
|
1097
|
+
(cleanRequestedDomain
|
|
1098
|
+
? activeCustomers.find(
|
|
1099
|
+
(c) => String(c.metadata?.pb_domain || "").toLowerCase().trim() === cleanRequestedDomain
|
|
1100
|
+
)
|
|
1101
|
+
: null) || activeCustomers[0];
|
|
1102
|
+
if (matchedCust) {
|
|
1103
|
+
hasActivePurchase = true;
|
|
1104
|
+
resolvedCustomerId = matchedCust.id;
|
|
1105
|
+
resolvedPlan = matchedCust.metadata?.pb_plan || "launch_pass";
|
|
1106
|
+
resolvedDomain = matchedCust.metadata?.pb_domain || "postbuild.dev";
|
|
1107
|
+
}
|
|
1062
1108
|
}
|
|
1063
1109
|
} catch {}
|
|
1064
1110
|
|
|
@@ -1071,7 +1117,16 @@ export async function authenticateUser({ email, token, sessionId, otpCode, chall
|
|
|
1071
1117
|
s.payment_status !== "unpaid" &&
|
|
1072
1118
|
(s.customer_details?.email || s.customer_email || "").toLowerCase().trim() === cleanEmail
|
|
1073
1119
|
);
|
|
1120
|
+
const domainMatchedSession = cleanRequestedDomain
|
|
1121
|
+
? matchingSessions.find(
|
|
1122
|
+
(s) =>
|
|
1123
|
+
String(s.client_reference_id || s.metadata?.target_domain || "")
|
|
1124
|
+
.toLowerCase()
|
|
1125
|
+
.trim() === cleanRequestedDomain
|
|
1126
|
+
)
|
|
1127
|
+
: null;
|
|
1074
1128
|
const preferred =
|
|
1129
|
+
domainMatchedSession ||
|
|
1075
1130
|
matchingSessions.find((s) => s.mode === "payment" || s.metadata?.plan_id === "launch_pass") ||
|
|
1076
1131
|
matchingSessions[0];
|
|
1077
1132
|
if (preferred) {
|
package/lib/directories.js
CHANGED
|
@@ -1,101 +1,102 @@
|
|
|
1
|
-
// Complete 85-
|
|
1
|
+
// Complete 85-Entry Launch Database for Postbuild (postbuild.dev)
|
|
2
|
+
// Comprises 74 Curated Software, AI & Business Directories + 11 Launch Communities.
|
|
2
3
|
// Every entry points to a direct submission form path or native URL-prefillable launch endpoint (zero root homepages or dead domains).
|
|
3
4
|
|
|
4
5
|
export const DIRECTORIES = [
|
|
5
|
-
// Tier 1: Flagship
|
|
6
|
-
{ id: "dir-01", name: "Hacker News (Show HN)", url: "https://news.ycombinator.com/submit", dr: 92, category: "Developer Community", authType: "URL Prefill + Account", autoSubmit: false, prefillMode: "url_params" },
|
|
7
|
-
{ id: "dir-02", name: "Reddit r/SideProject", url: "https://www.reddit.com/r/SideProject/submit", dr: 91, category: "Launch
|
|
8
|
-
{ id: "dir-03", name: "Product Hunt", url: "https://www.producthunt.com/posts/new", dr: 91, category: "Launch
|
|
9
|
-
{ id: "dir-04", name: "BetaList", url: "https://betalist.com/submissions/new", dr: 76, category: "Early Adopters", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
10
|
-
{ id: "dir-05", name: "SaaSHub", url: "https://www.saashub.com/submit", dr: 77, category: "Software Directory", authType: "OTP (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
11
|
-
{ id: "dir-06", name: "AlternativeTo", url: "https://alternativeto.net/add-application/", dr: 86, category: "Software Discovery", authType: "OTP (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
12
|
-
{ id: "dir-07", name: "There's An AI For That", url: "https://theresanaiforthat.com/submit/", dr: 82, category: "AI Directory", authType: "OTP (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
13
|
-
{ id: "dir-08", name: "FutureTools.io", url: "https://futuretools.io/submit-a-tool", dr: 75, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
14
|
-
{ id: "dir-09", name: "Indie Hackers Launch", url: "https://www.indiehackers.com/new-post", dr: 81, category: "
|
|
15
|
-
{ id: "dir-10", name: "Toolify.ai", url: "https://www.toolify.ai/submit", dr: 74, category: "AI Directory", authType: "Direct Form + Email", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
16
|
-
{ id: "dir-11", name: "G2 Software", url: "https://www.g2.com/products/new", dr: 90, category: "B2B Software", authType: "Work Email (
|
|
17
|
-
{ id: "dir-12", name: "Reddit r/indiehackers", url: "https://www.reddit.com/r/indiehackers/submit", dr: 91, category: "
|
|
18
|
-
{ id: "dir-13", name: "SourceForge", url: "https://sourceforge.net/create/", dr: 91, category: "
|
|
19
|
-
{ id: "dir-14", name: "Slashdot Submission", url: "https://slashdot.org/submission", dr: 89, category: "Developer Community", authType: "URL Prefill Form", autoSubmit: true, prefillMode: "url_params" },
|
|
20
|
-
{ id: "dir-15", name: "StackShare", url: "https://stackshare.io/submit", dr: 82, category: "Developer Stack", authType: "GitHub / Email", autoSubmit: false, prefillMode: "clipboard_form" },
|
|
6
|
+
// Tier 1: Flagship Directories & Launch Boards (1-15)
|
|
7
|
+
{ id: "dir-01", name: "Hacker News (Show HN)", url: "https://news.ycombinator.com/submit", dr: 92, category: "Developer Community", authType: "URL Prefill + Account", autoSubmit: false, prefillMode: "url_params", listingType: "community", pricing: "Free", communityRule: "Use 'Show HN:' prefix and explain the technical architecture in the first comment." },
|
|
8
|
+
{ id: "dir-02", name: "Reddit r/SideProject", url: "https://www.reddit.com/r/SideProject/submit", dr: 91, category: "Launch Community", authType: "URL Prefill + Account", autoSubmit: false, prefillMode: "url_params", listingType: "community", pricing: "Free", communityRule: "Post in 1–2 subreddits max per week; never cross-post identical links on the same day." },
|
|
9
|
+
{ id: "dir-03", name: "Product Hunt", url: "https://www.producthunt.com/posts/new", dr: 91, category: "Launch Directory", authType: "OAuth / Magic Link", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
10
|
+
{ id: "dir-04", name: "BetaList", url: "https://betalist.com/submissions/new", dr: 76, category: "Early Adopters", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
11
|
+
{ id: "dir-05", name: "SaaSHub", url: "https://www.saashub.com/submit", dr: 77, category: "Software Directory", authType: "OTP (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
12
|
+
{ id: "dir-06", name: "AlternativeTo", url: "https://alternativeto.net/add-application/", dr: 86, category: "Software Discovery", authType: "OTP (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
13
|
+
{ id: "dir-07", name: "There's An AI For That", url: "https://theresanaiforthat.com/submit/", dr: 82, category: "AI Directory", authType: "OTP (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
14
|
+
{ id: "dir-08", name: "FutureTools.io", url: "https://futuretools.io/submit-a-tool", dr: 75, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
15
|
+
{ id: "dir-09", name: "Indie Hackers Launch", url: "https://www.indiehackers.com/new-post", dr: 81, category: "Founder Community", authType: "Email Link", autoSubmit: false, prefillMode: "clipboard_form", listingType: "community", pricing: "Free", communityRule: "Share a genuine build milestone or lesson learned rather than promotional copy." },
|
|
16
|
+
{ id: "dir-10", name: "Toolify.ai", url: "https://www.toolify.ai/submit", dr: 74, category: "AI Directory", authType: "Direct Form + Email", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
17
|
+
{ id: "dir-11", name: "G2 Software", url: "https://www.g2.com/products/new", dr: 90, category: "B2B Software", authType: "Work Email (Your Domain)", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
18
|
+
{ id: "dir-12", name: "Reddit r/indiehackers", url: "https://www.reddit.com/r/indiehackers/submit", dr: 91, category: "Founder Community", authType: "URL Prefill + Account", autoSubmit: false, prefillMode: "url_params", listingType: "community", pricing: "Free", communityRule: "Check subreddit self-promotion guidelines; space out Reddit posts by several days." },
|
|
19
|
+
{ id: "dir-13", name: "SourceForge", url: "https://sourceforge.net/create/", dr: 91, category: "Software Directory", authType: "OTP (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
20
|
+
{ id: "dir-14", name: "Slashdot Submission", url: "https://slashdot.org/submission", dr: 89, category: "Developer Community", authType: "URL Prefill Form", autoSubmit: true, prefillMode: "url_params", listingType: "community", pricing: "Free", communityRule: "Best suited for open-source releases, developer tools, or technical benchmarks." },
|
|
21
|
+
{ id: "dir-15", name: "StackShare", url: "https://stackshare.io/submit", dr: 82, category: "Developer Stack", authType: "GitHub / Email", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
21
22
|
|
|
22
|
-
// Tier 2: Developer,
|
|
23
|
-
{ id: "dir-16", name: "DevHunt", url: "https://devhunt.org/login", dr: 68, category: "Developer Tools", authType: "GitHub / Email", autoSubmit: false, prefillMode: "clipboard_form" },
|
|
24
|
-
{ id: "dir-17", name: "OpenAlternative", url: "https://openalternative.co/submit", dr: 66, category: "Open Source", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
25
|
-
{ id: "dir-18", name: "
|
|
26
|
-
{ id: "dir-19", name: "Lobste.rs", url: "https://lobste.rs/stories/new", dr: 76, category: "Developer Community", authType: "URL Prefill + Account", autoSubmit: false, prefillMode: "url_params" },
|
|
27
|
-
{ id: "dir-20", name: "Awesome Indie (GitHub)", url: "https://github.com/mezod/awesome-indie/issues/new", dr: 96, category: "
|
|
28
|
-
{ id: "dir-21", name: "
|
|
29
|
-
{ id: "dir-22", name: "Dev.to Launch Post", url: "https://dev.to/new", dr: 88, category: "Developer
|
|
30
|
-
{ id: "dir-23", name: "Hashnode Launch Story", url: "https://hashnode.com/create/story", dr: 84, category: "Developer
|
|
31
|
-
{ id: "dir-24", name: "
|
|
32
|
-
{ id: "dir-25", name: "
|
|
33
|
-
{ id: "dir-26", name: "
|
|
34
|
-
{ id: "dir-27", name: "
|
|
35
|
-
{ id: "dir-28", name: "Selfh.st", url: "https://selfh.st/submit/", dr: 62, category: "Self-Hosted / Dev", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
36
|
-
{ id: "dir-29", name: "
|
|
37
|
-
{ id: "dir-30", name: "TerminalTrove", url: "https://terminaltrove.com/submit/", dr: 58, category: "CLI & Terminal", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
23
|
+
// Tier 2: Developer, Open-Source & B2B Directories (16-30)
|
|
24
|
+
{ id: "dir-16", name: "DevHunt", url: "https://devhunt.org/login", dr: 68, category: "Developer Tools", authType: "GitHub / Email", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
25
|
+
{ id: "dir-17", name: "OpenAlternative", url: "https://openalternative.co/submit", dr: 66, category: "Open Source", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
26
|
+
{ id: "dir-18", name: "Awesome OSS Alternatives", url: "https://github.com/RunaCapital/awesome-oss-alternatives/issues/new", dr: 96, category: "Open Source", authType: "URL Prefill Issue", autoSubmit: false, prefillMode: "url_params", listingType: "directory", pricing: "Free" },
|
|
27
|
+
{ id: "dir-19", name: "Lobste.rs", url: "https://lobste.rs/stories/new", dr: 76, category: "Developer Community", authType: "URL Prefill + Account", autoSubmit: false, prefillMode: "url_params", listingType: "community", pricing: "Free", communityRule: "Requires an existing Lobste.rs member account; use the 'show' tag for your own work." },
|
|
28
|
+
{ id: "dir-20", name: "Awesome Indie (GitHub)", url: "https://github.com/mezod/awesome-indie/issues/new", dr: 96, category: "Indie Directory", authType: "URL Prefill Issue", autoSubmit: false, prefillMode: "url_params", listingType: "directory", pricing: "Free" },
|
|
29
|
+
{ id: "dir-21", name: "Awesome Generative AI", url: "https://github.com/steven2358/awesome-generative-ai/issues/new", dr: 96, category: "AI Directory", authType: "URL Prefill Issue", autoSubmit: false, prefillMode: "url_params", listingType: "directory", pricing: "Free" },
|
|
30
|
+
{ id: "dir-22", name: "Dev.to Launch Post", url: "https://dev.to/new", dr: 88, category: "Developer Community", authType: "Account Session", autoSubmit: false, prefillMode: "clipboard_form", listingType: "community", pricing: "Free", communityRule: "Publish a technical build-log or tutorial rather than a short link post." },
|
|
31
|
+
{ id: "dir-23", name: "Hashnode Launch Story", url: "https://hashnode.com/create/story", dr: 84, category: "Developer Community", authType: "Account Session", autoSubmit: false, prefillMode: "clipboard_form", listingType: "community", pricing: "Free", communityRule: "Write an engineering article explaining how you built the product." },
|
|
32
|
+
{ id: "dir-24", name: "SpotSaaS Directory", url: "https://www.spotsaas.com/get-listed", dr: 64, category: "SaaS Directory", authType: "Direct Form + Email", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
33
|
+
{ id: "dir-25", name: "SelectedFirms Directory", url: "https://selectedfirms.co/get-listed", dr: 67, category: "B2B Directory", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
34
|
+
{ id: "dir-26", name: "B2B Stack Directory", url: "https://www.b2bstack.com.br/cadastrar-solucao", dr: 63, category: "B2B Software", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
35
|
+
{ id: "dir-27", name: "AITools.inc Directory", url: "https://aitools.inc/submit", dr: 62, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
36
|
+
{ id: "dir-28", name: "Selfh.st Directory", url: "https://selfh.st/submit/", dr: 62, category: "Self-Hosted / Dev", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
37
|
+
{ id: "dir-29", name: "Active Search Results", url: "https://www.activesearchresults.com/addwebsite.php", dr: 65, category: "Web Directory", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
38
|
+
{ id: "dir-30", name: "TerminalTrove", url: "https://terminaltrove.com/submit/", dr: 58, category: "CLI & Terminal", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
38
39
|
|
|
39
|
-
// Tier 3: Indie Launch &
|
|
40
|
-
{ id: "dir-31", name: "Uneed.best", url: "https://www.uneed.best/submit-a-tool", dr: 64, category: "Indie Launch", authType: "Magic Link (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
41
|
-
{ id: "dir-32", name: "
|
|
42
|
-
{ id: "dir-33", name: "TinyLaunch", url: "https://www.tinylaunch.com/submit", dr: 54, category: "Indie Launch", authType: "Direct Form + Email", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
43
|
-
{ id: "dir-34", name: "Launching Next", url: "https://www.launchingnext.com/submit/", dr: 67, category: "Startup Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
44
|
-
{ id: "dir-35", name: "SideProjectors", url: "https://www.sideprojectors.com/project/submit", dr: 62, category: "Side Projects", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
45
|
-
{ id: "dir-36", name: "StartupBase", url: "https://startupbase.io/submit", dr: 61, category: "Startup Directory", authType: "OTP (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
46
|
-
{ id: "dir-37", name: "Peerlist Launchpad", url: "https://peerlist.io/launchpad", dr: 74, category: "Maker
|
|
47
|
-
{ id: "dir-38", name: "
|
|
48
|
-
{ id: "dir-39", name: "Fazier", url: "https://fazier.com/launch", dr: 56, category: "Indie Launch", authType: "Magic Link (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
49
|
-
{ id: "dir-40", name: "Reddit r/SaaS", url: "https://www.reddit.com/r/SaaS/submit", dr: 91, category: "SaaS
|
|
50
|
-
{ id: "dir-41", name: "
|
|
51
|
-
{ id: "dir-42", name: "
|
|
52
|
-
{ id: "dir-43", name: "StartupBuffer", url: "https://startupbuffer.com/site/submit", dr: 60, category: "Startup Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
53
|
-
{ id: "dir-44", name: "StartupStash", url: "https://startupstash.com/add-listing/", dr: 72, category: "Startup
|
|
54
|
-
{ id: "dir-45", name: "KillerStartups", url: "https://killerstartups.com/submit-startup/", dr: 71, category: "Startup
|
|
55
|
-
{ id: "dir-46", name: "
|
|
56
|
-
{ id: "dir-47", name: "
|
|
57
|
-
{ id: "dir-48", name: "NoCodeList", url: "https://nocodelist.co/submit", dr: 57, category: "Modern Software", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
58
|
-
{ id: "dir-49", name: "X / Twitter Launch Post", url: "https://x.com/intent/tweet", dr: 94, category: "Launch Social", authType: "URL Prefill Intent", autoSubmit: false, prefillMode: "url_params" },
|
|
59
|
-
{ id: "dir-50", name: "Bluesky Launch Post", url: "https://bsky.app/intent/compose", dr: 88, category: "Launch Social", authType: "URL Prefill Intent", autoSubmit: false, prefillMode: "url_params" },
|
|
40
|
+
// Tier 3: Indie Launch, SMB & Business Directories (31-50)
|
|
41
|
+
{ id: "dir-31", name: "Uneed.best", url: "https://www.uneed.best/submit-a-tool", dr: 64, category: "Indie Launch", authType: "Magic Link (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
42
|
+
{ id: "dir-32", name: "Better Business Bureau (BBB)", url: "https://www.bbb.org/get-listed", dr: 93, category: "Business Directory", authType: "Work Email (Your Domain)", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
43
|
+
{ id: "dir-33", name: "TinyLaunch", url: "https://www.tinylaunch.com/submit", dr: 54, category: "Indie Launch", authType: "Direct Form + Email", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
44
|
+
{ id: "dir-34", name: "Launching Next", url: "https://www.launchingnext.com/submit/", dr: 67, category: "Startup Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
45
|
+
{ id: "dir-35", name: "SideProjectors", url: "https://www.sideprojectors.com/project/submit", dr: 62, category: "Side Projects", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
46
|
+
{ id: "dir-36", name: "StartupBase", url: "https://startupbase.io/submit", dr: 61, category: "Startup Directory", authType: "OTP (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
47
|
+
{ id: "dir-37", name: "Peerlist Launchpad", url: "https://peerlist.io/launchpad", dr: 74, category: "Maker Directory", authType: "OTP (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
48
|
+
{ id: "dir-38", name: "Alignable Business Network", url: "https://www.alignable.com/biz_users/sign_up", dr: 84, category: "SMB Directory", authType: "Work Email (Your Domain)", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
49
|
+
{ id: "dir-39", name: "Fazier", url: "https://fazier.com/launch", dr: 56, category: "Indie Launch", authType: "Magic Link (@postbuild.dev)", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
50
|
+
{ id: "dir-40", name: "Reddit r/SaaS", url: "https://www.reddit.com/r/SaaS/submit", dr: 91, category: "SaaS Community", authType: "URL Prefill + Account", autoSubmit: false, prefillMode: "url_params", listingType: "community", pricing: "Free", communityRule: "Follow r/SaaS self-promotion rules; include problem solved, stack, and lessons." },
|
|
51
|
+
{ id: "dir-41", name: "Bark Service Directory", url: "https://www.bark.com/en/us/sellers/create/", dr: 81, category: "Business Directory", authType: "Direct Form + Email", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
52
|
+
{ id: "dir-42", name: "MerchantCircle Directory", url: "https://www.merchantcircle.com/signup", dr: 79, category: "Local & SMB", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
53
|
+
{ id: "dir-43", name: "StartupBuffer", url: "https://startupbuffer.com/site/submit", dr: 60, category: "Startup Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
54
|
+
{ id: "dir-44", name: "StartupStash", url: "https://startupstash.com/add-listing/", dr: 72, category: "Startup Directory", authType: "Direct Form + Email", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
55
|
+
{ id: "dir-45", name: "KillerStartups", url: "https://killerstartups.com/submit-startup/", dr: 71, category: "Startup Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
56
|
+
{ id: "dir-46", name: "Thumbtack Pro Directory", url: "https://www.thumbtack.com/pro", dr: 87, category: "Business Directory", authType: "Direct Form + Email", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
57
|
+
{ id: "dir-47", name: "Entireweb Free Submission", url: "https://www.entireweb.com/free_submission/", dr: 73, category: "Web Directory", authType: "Direct Form + Email", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
58
|
+
{ id: "dir-48", name: "NoCodeList", url: "https://nocodelist.co/submit", dr: 57, category: "Modern Software", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
59
|
+
{ id: "dir-49", name: "X / Twitter Launch Post", url: "https://x.com/intent/tweet", dr: 94, category: "Launch Social", authType: "URL Prefill Intent", autoSubmit: false, prefillMode: "url_params", listingType: "community", pricing: "Free", communityRule: "Attach a 30-second product demo video or screenshot before posting." },
|
|
60
|
+
{ id: "dir-50", name: "Bluesky Launch Post", url: "https://bsky.app/intent/compose", dr: 88, category: "Launch Social", authType: "URL Prefill Intent", autoSubmit: false, prefillMode: "url_params", listingType: "community", pricing: "Free", communityRule: "Add a screenshot and tag relevant builder feeds." },
|
|
60
61
|
|
|
61
62
|
// Tier 4: AI, Agent & MCP Directories (51-70)
|
|
62
|
-
{ id: "dir-51", name: "TopAI.tools", url: "https://topai.tools/submit", dr: 69, category: "AI Directory", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
63
|
-
{ id: "dir-52", name: "ToolPilot.ai", url: "https://www.toolpilot.ai/pages/submit-your-ai-tool", dr: 58, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
64
|
-
{ id: "dir-53", name: "Easy With AI", url: "https://easywithai.com/submit-tool/", dr: 66, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
65
|
-
{ id: "dir-54", name: "FindMyAITool", url: "https://findmyaitool.com/submit-tool", dr: 61, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
66
|
-
{ id: "dir-55", name: "Insidr.ai", url: "https://www.insidr.ai/submit-tools/", dr: 65, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
67
|
-
{ id: "dir-56", name: "AI Valley", url: "https://aivalley.ai/submit-tool/", dr: 57, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
68
|
-
{ id: "dir-57", name: "The Rundown Supertools", url: "https://www.therundown.ai/submit", dr: 78, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
69
|
-
{ id: "dir-58", name: "AITools.fyi (Tally Form)", url: "https://tally.so/r/2EkV4g", dr: 62, category: "AI Directory", authType: "URL Prefill Form", autoSubmit: true, prefillMode: "url_params" },
|
|
70
|
-
{ id: "dir-59", name: "Awesome AI Tools (GitHub)", url: "https://github.com/mahseema/awesome-ai-tools/issues/new", dr: 96, category: "AI Directory", authType: "URL Prefill Issue", autoSubmit: false, prefillMode: "url_params" },
|
|
71
|
-
{ id: "dir-60", name: "AIxploria", url: "https://www.aixploria.com/en/featured-on-aixploria/", dr: 71, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
72
|
-
{ id: "dir-61", name: "SaaS AI Tools", url: "https://saasaitools.com/join/", dr: 59, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
73
|
-
{ id: "dir-62", name: "AI Agents Directory", url: "https://aiagentsdirectory.com/submit-agent", dr: 60, category: "AI Agents", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
74
|
-
{ id: "dir-63", name: "AI Agents List", url: "https://aiagentslist.com/submit", dr: 56, category: "AI Agents", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
75
|
-
{ id: "dir-64", name: "AI Tools Directory", url: "https://aitoolsdirectory.com/submit-tool", dr: 63, category: "AI Directory", authType: "Direct Form + Email", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
76
|
-
{ id: "dir-65", name: "
|
|
77
|
-
{ id: "dir-66", name: "BasedTools", url: "https://www.basedtools.ai/submit", dr: 54, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
78
|
-
{ id: "dir-67", name: "Tap4 AI", url: "https://tap4.ai/submit/", dr: 58, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
79
|
-
{ id: "dir-68", name: "PulseMCP Directory", url: "https://pulsemcp.com/submit", dr: 61, category: "MCP & Agents", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
80
|
-
{ id: "dir-69", name: "
|
|
81
|
-
{ id: "dir-70", name: "MCP.so Directory", url: "https://mcp.so/submit?type=server", dr: 64, category: "MCP & Agents", authType: "GitHub / Form", autoSubmit: false, prefillMode: "clipboard_form" },
|
|
63
|
+
{ id: "dir-51", name: "TopAI.tools", url: "https://topai.tools/submit", dr: 69, category: "AI Directory", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
64
|
+
{ id: "dir-52", name: "ToolPilot.ai", url: "https://www.toolpilot.ai/pages/submit-your-ai-tool", dr: 58, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
65
|
+
{ id: "dir-53", name: "Easy With AI", url: "https://easywithai.com/submit-tool/", dr: 66, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
66
|
+
{ id: "dir-54", name: "FindMyAITool", url: "https://findmyaitool.com/submit-tool", dr: 61, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
67
|
+
{ id: "dir-55", name: "Insidr.ai", url: "https://www.insidr.ai/submit-tools/", dr: 65, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
68
|
+
{ id: "dir-56", name: "AI Valley", url: "https://aivalley.ai/submit-tool/", dr: 57, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
69
|
+
{ id: "dir-57", name: "The Rundown Supertools", url: "https://www.therundown.ai/submit", dr: 78, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
70
|
+
{ id: "dir-58", name: "AITools.fyi (Tally Form)", url: "https://tally.so/r/2EkV4g", dr: 62, category: "AI Directory", authType: "URL Prefill Form", autoSubmit: true, prefillMode: "url_params", listingType: "directory", pricing: "Free + Paid" },
|
|
71
|
+
{ id: "dir-59", name: "Awesome AI Tools (GitHub)", url: "https://github.com/mahseema/awesome-ai-tools/issues/new", dr: 96, category: "AI Directory", authType: "URL Prefill Issue", autoSubmit: false, prefillMode: "url_params", listingType: "directory", pricing: "Free" },
|
|
72
|
+
{ id: "dir-60", name: "AIxploria", url: "https://www.aixploria.com/en/featured-on-aixploria/", dr: 71, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free + Paid" },
|
|
73
|
+
{ id: "dir-61", name: "SaaS AI Tools", url: "https://saasaitools.com/join/", dr: 59, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
74
|
+
{ id: "dir-62", name: "AI Agents Directory", url: "https://aiagentsdirectory.com/submit-agent", dr: 60, category: "AI Agents", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
75
|
+
{ id: "dir-63", name: "AI Agents List", url: "https://aiagentslist.com/submit", dr: 56, category: "AI Agents", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
76
|
+
{ id: "dir-64", name: "AI Tools Directory", url: "https://aitoolsdirectory.com/submit-tool", dr: 63, category: "AI Directory", authType: "Direct Form + Email", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
77
|
+
{ id: "dir-65", name: "SoMuch Web Directory", url: "https://www.somuch.com/submit-links/", dr: 64, category: "Web Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
78
|
+
{ id: "dir-66", name: "BasedTools", url: "https://www.basedtools.ai/submit", dr: 54, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
79
|
+
{ id: "dir-67", name: "Tap4 AI", url: "https://tap4.ai/submit/", dr: 58, category: "AI Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
80
|
+
{ id: "dir-68", name: "PulseMCP Directory", url: "https://pulsemcp.com/submit", dr: 61, category: "MCP & Agents", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
81
|
+
{ id: "dir-69", name: "Anoox Social Directory", url: "https://www.anoox.com/add_for_indexing_free.php", dr: 63, category: "Web Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
82
|
+
{ id: "dir-70", name: "MCP.so Directory", url: "https://mcp.so/submit?type=server", dr: 64, category: "MCP & Agents", authType: "GitHub / Form", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
82
83
|
|
|
83
|
-
// Tier 5: SaaS, B2B & Landing Showcase Directories (71-85)
|
|
84
|
-
{ id: "dir-71", name: "SaaSWorthy", url: "https://www.saasworthy.com/offerings", dr: 74, category: "SaaS Directory", authType: "Work Email (
|
|
85
|
-
{ id: "dir-72", name: "GetApp / Capterra", url: "https://www.capterra.com/vendors/sign-up", dr: 90, category: "B2B Software", authType: "Work Email (
|
|
86
|
-
{ id: "dir-73", name: "SoftwareSuggest", url: "https://www.softwaresuggest.com/vendors", dr: 76, category: "SaaS Directory", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
87
|
-
{ id: "dir-74", name: "GoodFirms", url: "https://www.goodfirms.co/get-listed", dr: 84, category: "Software Directory", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
88
|
-
{ id: "dir-75", name: "TrustRadius", url: "https://www.trustradius.com/vendor", dr: 85, category: "B2B Software", authType: "Work Email (
|
|
89
|
-
{ id: "dir-76", name: "Serchen", url: "https://www.serchen.com/get-listed", dr: 68, category: "Cloud & SaaS", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
90
|
-
{ id: "dir-77", name: "Crunchbase Add Company", url: "https://www.crunchbase.com/add-new", dr: 91, category: "Startup Directory", authType: "Work Email (
|
|
91
|
-
{ id: "dir-78", name: "Feedough Startups", url: "https://www.feedough.com/submit-your-startup/", dr: 69, category: "Startup
|
|
92
|
-
{ id: "dir-79", name: "
|
|
93
|
-
{ id: "dir-80", name: "
|
|
94
|
-
{ id: "dir-81", name: "
|
|
95
|
-
{ id: "dir-82", name: "Landingfolio", url: "https://www.landingfolio.com/submit", dr: 72, category: "Landing Design", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
96
|
-
{ id: "dir-83", name: "Minimal Gallery", url: "https://minimal.gallery/submit/", dr: 68, category: "Landing Design", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
97
|
-
{ id: "dir-84", name: "Land-book", url: "https://land-book.com/submit", dr: 73, category: "Landing Design", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" },
|
|
98
|
-
{ id: "dir-85", name: "OnePageLove", url: "https://onepagelove.com/submit", dr: 79, category: "Landing Showcase", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form" }
|
|
84
|
+
// Tier 5: SaaS, B2B, Web & Landing Showcase Directories (71-85)
|
|
85
|
+
{ id: "dir-71", name: "SaaSWorthy", url: "https://www.saasworthy.com/offerings", dr: 74, category: "SaaS Directory", authType: "Work Email (Your Domain)", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
86
|
+
{ id: "dir-72", name: "GetApp / Capterra", url: "https://www.capterra.com/vendors/sign-up", dr: 90, category: "B2B Software", authType: "Work Email (Your Domain)", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
87
|
+
{ id: "dir-73", name: "SoftwareSuggest", url: "https://www.softwaresuggest.com/vendors", dr: 76, category: "SaaS Directory", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
88
|
+
{ id: "dir-74", name: "GoodFirms", url: "https://www.goodfirms.co/get-listed", dr: 84, category: "Software Directory", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
89
|
+
{ id: "dir-75", name: "TrustRadius", url: "https://www.trustradius.com/vendor", dr: 85, category: "B2B Software", authType: "Work Email (Your Domain)", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
90
|
+
{ id: "dir-76", name: "Serchen", url: "https://www.serchen.com/get-listed", dr: 68, category: "Cloud & SaaS", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
91
|
+
{ id: "dir-77", name: "Crunchbase Add Company", url: "https://www.crunchbase.com/add-new", dr: 91, category: "Startup Directory", authType: "Work Email (Your Domain)", autoSubmit: false, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
92
|
+
{ id: "dir-78", name: "Feedough Startups", url: "https://www.feedough.com/submit-your-startup/", dr: 69, category: "Startup Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
93
|
+
{ id: "dir-79", name: "Jayde B2B Directory", url: "https://www.jayde.com/submit.html", dr: 66, category: "B2B Directory", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
94
|
+
{ id: "dir-80", name: "ExactSeek Directory", url: "https://www.exactseek.com/add.html", dr: 64, category: "Web Directory", authType: "Email Verification", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
95
|
+
{ id: "dir-81", name: "ScrubTheWeb Directory", url: "https://scrubtheweb.com/addurl.html", dr: 61, category: "Web Directory", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
96
|
+
{ id: "dir-82", name: "Landingfolio", url: "https://www.landingfolio.com/submit", dr: 72, category: "Landing Design", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
97
|
+
{ id: "dir-83", name: "Minimal Gallery", url: "https://minimal.gallery/submit/", dr: 68, category: "Landing Design", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
98
|
+
{ id: "dir-84", name: "Land-book", url: "https://land-book.com/submit", dr: 73, category: "Landing Design", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" },
|
|
99
|
+
{ id: "dir-85", name: "OnePageLove", url: "https://onepagelove.com/submit", dr: 79, category: "Landing Showcase", authType: "Direct Form", autoSubmit: true, prefillMode: "clipboard_form", listingType: "directory", pricing: "Free" }
|
|
99
100
|
];
|
|
100
101
|
|
|
101
102
|
export function buildPrefilledDirectoryUrl(dir, launchKit) {
|