From 788de8cc05cc63d86e66bb41bfe3d7ef78fc851a Mon Sep 17 00:00:00 2001 From: RaviTejaKNTS Date: Fri, 23 Oct 2026 11:04:24 +0530 Subject: [PATCH 1/8] Add the ad network requirements checker and Publisher tools catalog - New /ad-network-requirements-checker tool: niche and pageviews in, a ranked shortlist of 3 to 5 ad networks to apply to out. - New Publisher tools catalog holding both ad network tools. - Ad network directory: researched joining rules for all networks. - Shared combo box now filters options as people type. Co-Authored-By: Claude Opus 5.5 --- app/(site)/(catalogs)/[slug]/content/index.ts | 3 + .../content/publisher-tools/article.mdx | 13 + .../[slug]/content/publisher-tools/intro.mdx | 1 + .../[slug]/content/adapex/article.mdx | 22 +- .../[slug]/content/adapex/intro.mdx | 2 +- .../[slug]/content/adapex/joining.mdx | 4 +- .../ad-networks/[slug]/content/adapex/pay.mdx | 2 +- .../[slug]/content/adapex/rules.mdx | 4 +- .../[slug]/content/adapex/service.mdx | 2 +- .../[slug]/content/aditude/article.mdx | 25 +- .../[slug]/content/aditude/intro.mdx | 2 +- .../[slug]/content/aditude/joining.mdx | 4 +- .../[slug]/content/aditude/pay.mdx | 2 +- .../[slug]/content/aditude/rules.mdx | 2 +- .../[slug]/content/aditude/service.mdx | 2 +- .../[slug]/content/adnimation/article.mdx | 24 +- .../[slug]/content/adnimation/intro.mdx | 2 +- .../[slug]/content/adnimation/joining.mdx | 6 +- .../[slug]/content/adnimation/pay.mdx | 4 +- .../[slug]/content/adnimation/rules.mdx | 4 +- .../[slug]/content/adnimation/service.mdx | 4 +- .../[slug]/content/adpushup/article.mdx | 22 +- .../[slug]/content/adpushup/intro.mdx | 2 +- .../[slug]/content/adpushup/joining.mdx | 4 +- .../[slug]/content/adpushup/pay.mdx | 4 +- .../[slug]/content/adpushup/rules.mdx | 2 +- .../[slug]/content/adpushup/service.mdx | 2 +- .../amazon-publisher-services/article.mdx | 22 +- .../amazon-publisher-services/intro.mdx | 2 +- .../amazon-publisher-services/joining.mdx | 4 +- .../content/amazon-publisher-services/pay.mdx | 4 +- .../amazon-publisher-services/rules.mdx | 2 +- .../amazon-publisher-services/service.mdx | 2 +- .../content/anymind-anymanager/article.mdx | 18 +- .../content/anymind-anymanager/intro.mdx | 2 +- .../content/anymind-anymanager/joining.mdx | 4 +- .../[slug]/content/anymind-anymanager/pay.mdx | 2 +- .../content/anymind-anymanager/rules.mdx | 2 +- .../content/anymind-anymanager/service.mdx | 2 +- .../content/buysellads-carbon-ads/article.mdx | 24 +- .../content/buysellads-carbon-ads/intro.mdx | 2 +- .../content/buysellads-carbon-ads/joining.mdx | 4 +- .../content/buysellads-carbon-ads/pay.mdx | 4 +- .../content/buysellads-carbon-ads/rules.mdx | 4 +- .../content/buysellads-carbon-ads/service.mdx | 2 +- .../[slug]/content/clickio/article.mdx | 22 +- .../[slug]/content/clickio/intro.mdx | 2 +- .../[slug]/content/clickio/joining.mdx | 6 +- .../[slug]/content/clickio/pay.mdx | 4 +- .../[slug]/content/clickio/rules.mdx | 2 +- .../[slug]/content/concert/article.mdx | 20 +- .../[slug]/content/concert/intro.mdx | 2 +- .../[slug]/content/concert/joining.mdx | 2 +- .../[slug]/content/concert/pay.mdx | 2 +- .../[slug]/content/concert/rules.mdx | 2 +- .../[slug]/content/concert/service.mdx | 2 +- .../[slug]/content/ethicalads/article.mdx | 22 +- .../[slug]/content/ethicalads/intro.mdx | 2 +- .../[slug]/content/ethicalads/joining.mdx | 4 +- .../[slug]/content/ethicalads/pay.mdx | 2 +- .../[slug]/content/ethicalads/rules.mdx | 4 +- .../[slug]/content/ethicalads/service.mdx | 2 +- .../[slug]/content/ezoic/article.mdx | 18 +- .../[slug]/content/ezoic/intro.mdx | 2 +- .../[slug]/content/ezoic/joining.mdx | 4 +- .../ad-networks/[slug]/content/ezoic/pay.mdx | 4 +- .../[slug]/content/ezoic/rules.mdx | 2 +- .../[slug]/content/ezoic/service.mdx | 2 +- .../[slug]/content/freestar/article.mdx | 23 +- .../[slug]/content/freestar/intro.mdx | 2 +- .../[slug]/content/freestar/joining.mdx | 6 +- .../[slug]/content/freestar/pay.mdx | 2 +- .../[slug]/content/freestar/rules.mdx | 2 +- .../[slug]/content/geniee-ssp/article.mdx | 20 +- .../[slug]/content/geniee-ssp/intro.mdx | 2 +- .../[slug]/content/geniee-ssp/joining.mdx | 4 +- .../[slug]/content/geniee-ssp/pay.mdx | 4 +- .../[slug]/content/geniee-ssp/rules.mdx | 6 +- .../[slug]/content/geniee-ssp/service.mdx | 2 +- .../[slug]/content/google-adsense/article.mdx | 16 +- .../[slug]/content/google-adsense/intro.mdx | 2 +- .../[slug]/content/google-adsense/joining.mdx | 4 +- .../[slug]/content/google-adsense/pay.mdx | 4 +- .../[slug]/content/google-adsense/rules.mdx | 2 +- .../[slug]/content/google-adsense/service.mdx | 2 +- .../[slug]/content/infolinks/article.mdx | 20 +- .../[slug]/content/infolinks/intro.mdx | 2 +- .../[slug]/content/infolinks/joining.mdx | 4 +- .../[slug]/content/infolinks/pay.mdx | 4 +- .../[slug]/content/infolinks/rules.mdx | 4 +- .../[slug]/content/infolinks/service.mdx | 2 +- .../content/journey-by-mediavine/article.mdx | 32 +- .../content/journey-by-mediavine/intro.mdx | 2 +- .../content/journey-by-mediavine/joining.mdx | 4 +- .../content/journey-by-mediavine/pay.mdx | 4 +- .../content/journey-by-mediavine/rules.mdx | 2 +- .../content/journey-by-mediavine/service.mdx | 2 +- .../[slug]/content/media-net/article.mdx | 22 +- .../[slug]/content/media-net/intro.mdx | 2 +- .../[slug]/content/media-net/joining.mdx | 6 +- .../[slug]/content/media-net/pay.mdx | 2 +- .../[slug]/content/media-net/rules.mdx | 4 +- .../[slug]/content/media-net/service.mdx | 2 +- .../[slug]/content/mediavine/article.mdx | 22 +- .../[slug]/content/mediavine/intro.mdx | 2 +- .../[slug]/content/mediavine/joining.mdx | 4 +- .../[slug]/content/mediavine/pay.mdx | 4 +- .../[slug]/content/mediavine/rules.mdx | 4 +- .../[slug]/content/mediavine/service.mdx | 4 +- .../[slug]/content/mgid/article.mdx | 18 +- .../ad-networks/[slug]/content/mgid/intro.mdx | 2 +- .../[slug]/content/mgid/joining.mdx | 2 +- .../ad-networks/[slug]/content/mgid/pay.mdx | 4 +- .../ad-networks/[slug]/content/mgid/rules.mdx | 4 +- .../[slug]/content/mgid/service.mdx | 2 +- .../content/monetizemore-pubguru/article.mdx | 19 +- .../content/monetizemore-pubguru/intro.mdx | 2 +- .../content/monetizemore-pubguru/joining.mdx | 4 +- .../content/monetizemore-pubguru/pay.mdx | 6 +- .../content/monetizemore-pubguru/rules.mdx | 2 +- .../[slug]/content/monumetric/article.mdx | 20 +- .../[slug]/content/monumetric/intro.mdx | 2 +- .../[slug]/content/monumetric/joining.mdx | 4 +- .../[slug]/content/monumetric/pay.mdx | 4 +- .../[slug]/content/monumetric/rules.mdx | 2 +- .../[slug]/content/monumetric/service.mdx | 2 +- .../[slug]/content/newor-media/article.mdx | 22 +- .../[slug]/content/newor-media/intro.mdx | 2 +- .../[slug]/content/newor-media/joining.mdx | 4 +- .../[slug]/content/newor-media/pay.mdx | 4 +- .../[slug]/content/newor-media/rules.mdx | 4 +- .../[slug]/content/newor-media/service.mdx | 2 +- .../[slug]/content/nitropay/article.mdx | 20 +- .../[slug]/content/nitropay/intro.mdx | 2 +- .../[slug]/content/nitropay/joining.mdx | 4 +- .../[slug]/content/nitropay/pay.mdx | 4 +- .../[slug]/content/nitropay/rules.mdx | 2 +- .../[slug]/content/nitropay/service.mdx | 2 +- .../[slug]/content/opti-digital/article.mdx | 20 +- .../[slug]/content/opti-digital/intro.mdx | 2 +- .../[slug]/content/opti-digital/joining.mdx | 4 +- .../[slug]/content/opti-digital/pay.mdx | 6 +- .../[slug]/content/opti-digital/rules.mdx | 2 +- .../[slug]/content/opti-digital/service.mdx | 2 +- .../[slug]/content/playwire/article.mdx | 23 +- .../[slug]/content/playwire/intro.mdx | 2 +- .../[slug]/content/playwire/joining.mdx | 6 +- .../[slug]/content/playwire/pay.mdx | 2 +- .../[slug]/content/playwire/rules.mdx | 2 +- .../[slug]/content/playwire/service.mdx | 2 +- .../[slug]/content/pubfuture/article.mdx | 24 +- .../[slug]/content/pubfuture/intro.mdx | 2 +- .../[slug]/content/pubfuture/joining.mdx | 4 +- .../[slug]/content/pubfuture/pay.mdx | 2 +- .../[slug]/content/pubfuture/rules.mdx | 2 +- .../[slug]/content/pubfuture/service.mdx | 2 +- .../[slug]/content/pubgalaxy/article.mdx | 18 +- .../[slug]/content/pubgalaxy/intro.mdx | 2 +- .../[slug]/content/pubgalaxy/joining.mdx | 7 +- .../[slug]/content/pubgalaxy/pay.mdx | 2 +- .../[slug]/content/pubgalaxy/rules.mdx | 2 +- .../[slug]/content/pubgalaxy/service.mdx | 2 +- .../[slug]/content/publift/article.mdx | 20 +- .../[slug]/content/publift/intro.mdx | 2 +- .../[slug]/content/publift/joining.mdx | 6 +- .../[slug]/content/publift/pay.mdx | 4 +- .../[slug]/content/publift/rules.mdx | 2 +- .../[slug]/content/publift/service.mdx | 2 +- .../[slug]/content/publir/article.mdx | 22 +- .../[slug]/content/publir/intro.mdx | 2 +- .../[slug]/content/publir/joining.mdx | 2 +- .../ad-networks/[slug]/content/publir/pay.mdx | 6 +- .../[slug]/content/publir/rules.mdx | 2 +- .../[slug]/content/publir/service.mdx | 4 +- .../content/publisher-collective/article.mdx | 20 +- .../content/publisher-collective/intro.mdx | 2 +- .../content/publisher-collective/joining.mdx | 4 +- .../content/publisher-collective/pay.mdx | 4 +- .../content/publisher-collective/rules.mdx | 4 +- .../content/publisher-collective/service.mdx | 2 +- .../[slug]/content/pubnation/article.mdx | 16 +- .../[slug]/content/pubnation/intro.mdx | 2 +- .../[slug]/content/pubnation/joining.mdx | 2 +- .../[slug]/content/pubnation/pay.mdx | 2 +- .../[slug]/content/pubnation/rules.mdx | 2 +- .../[slug]/content/pubnation/service.mdx | 2 +- .../[slug]/content/pubpower/article.mdx | 18 +- .../[slug]/content/pubpower/intro.mdx | 2 +- .../[slug]/content/pubpower/joining.mdx | 6 +- .../[slug]/content/pubpower/pay.mdx | 4 +- .../[slug]/content/pubpower/rules.mdx | 4 +- .../[slug]/content/pubpower/service.mdx | 2 +- .../[slug]/content/raptive/article.mdx | 23 +- .../[slug]/content/raptive/intro.mdx | 2 +- .../[slug]/content/raptive/joining.mdx | 4 +- .../[slug]/content/raptive/pay.mdx | 2 +- .../[slug]/content/raptive/rules.mdx | 2 +- .../[slug]/content/raptive/service.mdx | 2 +- .../[slug]/content/refinery89/article.mdx | 20 +- .../[slug]/content/refinery89/intro.mdx | 2 +- .../[slug]/content/refinery89/joining.mdx | 4 +- .../[slug]/content/refinery89/pay.mdx | 4 +- .../[slug]/content/refinery89/rules.mdx | 2 +- .../[slug]/content/refinery89/service.mdx | 4 +- .../[slug]/content/revcontent/article.mdx | 18 +- .../[slug]/content/revcontent/intro.mdx | 2 +- .../[slug]/content/revcontent/joining.mdx | 2 +- .../[slug]/content/revcontent/pay.mdx | 4 +- .../[slug]/content/revcontent/rules.mdx | 2 +- .../[slug]/content/revcontent/service.mdx | 2 +- .../[slug]/content/setupad/article.mdx | 28 +- .../[slug]/content/setupad/intro.mdx | 2 +- .../[slug]/content/setupad/joining.mdx | 4 +- .../[slug]/content/setupad/pay.mdx | 4 +- .../[slug]/content/setupad/rules.mdx | 2 +- .../[slug]/content/setupad/service.mdx | 2 +- .../[slug]/content/she-media/article.mdx | 22 +- .../[slug]/content/she-media/intro.mdx | 2 +- .../[slug]/content/she-media/joining.mdx | 6 +- .../[slug]/content/she-media/pay.mdx | 4 +- .../[slug]/content/she-media/rules.mdx | 4 +- .../[slug]/content/she-media/service.mdx | 2 +- .../[slug]/content/snack-media/article.mdx | 22 +- .../[slug]/content/snack-media/intro.mdx | 2 +- .../[slug]/content/snack-media/joining.mdx | 4 +- .../[slug]/content/snack-media/pay.mdx | 4 +- .../[slug]/content/snack-media/rules.mdx | 4 +- .../[slug]/content/snack-media/service.mdx | 2 +- .../[slug]/content/sovrn/article.mdx | 22 +- .../[slug]/content/sovrn/intro.mdx | 2 +- .../[slug]/content/sovrn/joining.mdx | 4 +- .../ad-networks/[slug]/content/sovrn/pay.mdx | 4 +- .../[slug]/content/sovrn/rules.mdx | 2 +- .../[slug]/content/sovrn/service.mdx | 2 +- .../[slug]/content/sparteo/article.mdx | 20 +- .../[slug]/content/sparteo/intro.mdx | 2 +- .../[slug]/content/sparteo/joining.mdx | 2 +- .../[slug]/content/sparteo/pay.mdx | 2 +- .../[slug]/content/sparteo/rules.mdx | 2 +- .../[slug]/content/sparteo/service.mdx | 4 +- .../[slug]/content/taboola/article.mdx | 20 +- .../[slug]/content/taboola/intro.mdx | 2 +- .../[slug]/content/taboola/joining.mdx | 4 +- .../[slug]/content/taboola/pay.mdx | 2 +- .../[slug]/content/taboola/rules.mdx | 4 +- .../[slug]/content/taboola/service.mdx | 2 +- .../[slug]/content/teads/article.mdx | 20 +- .../[slug]/content/teads/intro.mdx | 2 +- .../[slug]/content/teads/joining.mdx | 4 +- .../ad-networks/[slug]/content/teads/pay.mdx | 4 +- .../[slug]/content/teads/rules.mdx | 2 +- .../[slug]/content/teads/service.mdx | 2 +- .../[slug]/content/the-moneytizer/article.mdx | 18 +- .../[slug]/content/the-moneytizer/intro.mdx | 2 +- .../[slug]/content/the-moneytizer/joining.mdx | 4 +- .../[slug]/content/the-moneytizer/pay.mdx | 2 +- .../[slug]/content/the-moneytizer/rules.mdx | 4 +- .../[slug]/content/the-moneytizer/service.mdx | 2 +- .../[slug]/content/venatus/article.mdx | 16 +- .../[slug]/content/venatus/intro.mdx | 2 +- .../[slug]/content/venatus/joining.mdx | 4 +- .../[slug]/content/venatus/pay.mdx | 2 +- .../[slug]/content/venatus/rules.mdx | 2 +- .../[slug]/content/venatus/service.mdx | 2 +- .../ad-networks/[slug]/network-details.tsx | 40 +- .../(directories)/ad-networks/[slug]/page.tsx | 9 +- .../ad-networks/content/article.mdx | 17 +- .../(directories)/ad-networks/join-rules.ts | 11 +- .../ad-networks/network-facts.ts | 90 +- app/(site)/(directories)/ad-networks/page.tsx | 4 +- ...-network-requirements-checker-from-url.tsx | 12 + .../ad-network-requirements-checker-tool.tsx | 384 ++ ...ad-network-requirements-checker.module.css | 280 + .../content/article.mdx | 34 + .../content/intro.mdx | 1 + .../content/usage.mdx | 12 + .../layout.tsx | 6 + .../ad-network-requirements-checker/page.tsx | 27 + .../recommendation-card.tsx | 303 + app/ui/ad-networks/details.module.css | 12 + .../ad-network-requirements-checker.spec.json | 11 + .../art/ad-network-requirements-checker.svg | 26 + app/ui/art/ad-network-requirements-checker.ts | 28 + app/ui/art/publisher-tools.spec.json | 11 + app/ui/art/publisher-tools.svg | 20 + app/ui/art/publisher-tools.ts | 22 + app/ui/controls.tsx | 4 +- .../recommendation-model.md | 596 ++ .../research.md | 234 + .../tool-spec.md | 412 ++ content_docs/ad-networks/brief.md | 32 +- .../recommendation-profiles-a.json | 5270 +++++++++++++++++ .../recommendation-profiles-b.json | 4949 ++++++++++++++++ content_docs/ad-networks/research/adapex.md | 90 +- content_docs/ad-networks/research/aditude.md | 88 +- .../ad-networks/research/adnimation.md | 94 +- content_docs/ad-networks/research/adpushup.md | 93 +- .../research/amazon-publisher-services.md | 90 +- .../research/anymind-anymanager.md | 88 +- .../research/buysellads-carbon-ads.md | 90 +- content_docs/ad-networks/research/clickio.md | 101 +- content_docs/ad-networks/research/concert.md | 86 +- .../ad-networks/research/ethicalads.md | 93 +- content_docs/ad-networks/research/ezoic.md | 95 +- content_docs/ad-networks/research/freestar.md | 94 +- .../ad-networks/research/geniee-ssp.md | 92 +- .../ad-networks/research/google-adsense.md | 93 +- .../ad-networks/research/infolinks.md | 94 +- .../research/journey-by-mediavine.md | 106 +- .../ad-networks/research/media-net.md | 93 +- .../ad-networks/research/mediavine.md | 103 +- content_docs/ad-networks/research/mgid.md | 96 +- .../research/monetizemore-pubguru.md | 96 +- .../ad-networks/research/monumetric.md | 98 +- .../ad-networks/research/newor-media.md | 104 +- content_docs/ad-networks/research/nitropay.md | 39 +- .../ad-networks/research/opti-digital.md | 39 +- content_docs/ad-networks/research/playwire.md | 45 +- .../ad-networks/research/pubfuture.md | 40 +- .../ad-networks/research/pubgalaxy.md | 39 +- content_docs/ad-networks/research/publift.md | 41 +- content_docs/ad-networks/research/publir.md | 35 +- .../research/publisher-collective.md | 41 +- .../ad-networks/research/pubnation.md | 35 +- content_docs/ad-networks/research/pubpower.md | 44 +- content_docs/ad-networks/research/raptive.md | 39 +- .../ad-networks/research/refinery89.md | 41 +- .../ad-networks/research/revcontent.md | 40 +- content_docs/ad-networks/research/setupad.md | 39 +- .../ad-networks/research/she-media.md | 39 +- .../ad-networks/research/snack-media.md | 37 +- content_docs/ad-networks/research/sovrn.md | 42 +- content_docs/ad-networks/research/sparteo.md | 38 +- content_docs/ad-networks/research/taboola.md | 40 +- content_docs/ad-networks/research/teads.md | 40 +- .../ad-networks/research/the-moneytizer.md | 39 +- content_docs/ad-networks/research/venatus.md | 41 +- content_docs/publisher-tools/brief.md | 32 + lib/ad-network-requirements/engine.ts | 287 + lib/ad-network-requirements/estimate.ts | 46 + lib/ad-network-requirements/page-data.ts | 34 + lib/ad-network-requirements/profile-facts.ts | 50 + lib/ad-network-requirements/profiles.ts | 68 + lib/ad-network-requirements/types.ts | 64 + lib/ad-networks-types.ts | 2 +- lib/card-art.ts | 4 + lib/registered-site-pages.json | 1 + .../ad-network-requirements-checker/ready.sql | 3 + scripts/stack127/marker-art/figures.mjs | 27 +- scripts/stack127/marker-art/icons.mjs | 21 + .../engine.test.mjs | 302 + 351 files changed, 16485 insertions(+), 1838 deletions(-) create mode 100644 app/(site)/(catalogs)/[slug]/content/publisher-tools/article.mdx create mode 100644 app/(site)/(catalogs)/[slug]/content/publisher-tools/intro.mdx create mode 100644 app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker-from-url.tsx create mode 100644 app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker-tool.tsx create mode 100644 app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker.module.css create mode 100644 app/(site)/(tools)/ad-network-requirements-checker/content/article.mdx create mode 100644 app/(site)/(tools)/ad-network-requirements-checker/content/intro.mdx create mode 100644 app/(site)/(tools)/ad-network-requirements-checker/content/usage.mdx create mode 100644 app/(site)/(tools)/ad-network-requirements-checker/layout.tsx create mode 100644 app/(site)/(tools)/ad-network-requirements-checker/page.tsx create mode 100644 app/(site)/(tools)/ad-network-requirements-checker/recommendation-card.tsx create mode 100644 app/ui/art/ad-network-requirements-checker.spec.json create mode 100644 app/ui/art/ad-network-requirements-checker.svg create mode 100644 app/ui/art/ad-network-requirements-checker.ts create mode 100644 app/ui/art/publisher-tools.spec.json create mode 100644 app/ui/art/publisher-tools.svg create mode 100644 app/ui/art/publisher-tools.ts create mode 100644 content_docs/ad-network-requirements-checker/recommendation-model.md create mode 100644 content_docs/ad-network-requirements-checker/research.md create mode 100644 content_docs/ad-network-requirements-checker/tool-spec.md create mode 100644 content_docs/ad-networks/recommendation-profiles-a.json create mode 100644 content_docs/ad-networks/recommendation-profiles-b.json create mode 100644 content_docs/publisher-tools/brief.md create mode 100644 lib/ad-network-requirements/engine.ts create mode 100644 lib/ad-network-requirements/estimate.ts create mode 100644 lib/ad-network-requirements/page-data.ts create mode 100644 lib/ad-network-requirements/profile-facts.ts create mode 100644 lib/ad-network-requirements/profiles.ts create mode 100644 lib/ad-network-requirements/types.ts create mode 100644 scripts/ad-network-requirements-checker/ready.sql create mode 100644 tests/pages/ad-network-requirements-checker/engine.test.mjs diff --git a/app/(site)/(catalogs)/[slug]/content/index.ts b/app/(site)/(catalogs)/[slug]/content/index.ts index 3c37f306..7a152ff2 100644 --- a/app/(site)/(catalogs)/[slug]/content/index.ts +++ b/app/(site)/(catalogs)/[slug]/content/index.ts @@ -8,6 +8,8 @@ import HostingCloudToolsIntro from "./hosting-cloud-tools/intro.mdx"; import KdpToolsArticle from "./kdp-tools/article.mdx"; import KdpToolsIntro from "./kdp-tools/intro.mdx"; import ProductivityToolsIntro from "./productivity-tools/intro.mdx"; +import PublisherToolsArticle from "./publisher-tools/article.mdx"; +import PublisherToolsIntro from "./publisher-tools/intro.mdx"; import SaasToolsArticle from "./saas-tools/article.mdx"; import SaasToolsIntro from "./saas-tools/intro.mdx"; import StorageToolsArticle from "./storage-tools/article.mdx"; @@ -21,6 +23,7 @@ export const catalogContent: Record