SaaS Signal is a Next.js 14 App Router publication and directory for B2B SaaS and AI tool buyers. It ships 100 programmatic reports, comparison tables, calculators, trust pages, and direct-sold sponsor placements signed by Miles McQueen.
- Install dependencies with
pnpm install. - Copy
.env.exampleto.env.local. - Set
NEXT_PUBLIC_SITE_URLto your local or production origin. - Add Supabase credentials after provisioning.
- Run
pnpm dev.
If Supabase credentials are absent, the app uses the bundled typed dataset so build and local preview still work.
Set NEXT_PUBLIC_DATA_SOURCE=supabase only after running the latest supabase/seed.sql. Leave it as bundled for the polished built-in dataset.
- Create a Supabase project.
- Open the SQL editor and run
supabase/schema.sql. - Run
supabase/seed.sqlto insert the 100 directory rows. - Copy the project URL and anon key into
.env.localand Vercel project settings. - Run
pnpm buildto verify static generation.
- Push the project to GitHub.
- Import the repo in Vercel.
- Add
NEXT_PUBLIC_SITE_URL,NEXT_PUBLIC_SUPABASE_URL,NEXT_PUBLIC_SUPABASE_ANON_KEY, andNEXT_PUBLIC_PUBLISHER_EMAILin Vercel project settings. - Deploy to production.
- Add the production domain to Google Search Console and submit
/sitemap.xml.
SaaS Signal now ships with:
/sitemap.xmlfor search discovery./feed.xmlfor RSS readers, syndication, and monitoring tools.- A public IndexNow key at
/saas-signal-2026-indexnow-key.txt. pnpm submit:indexnowto notify Bing after publishing.- Related-report links on every programmatic page.
TRAFFIC-PLAYBOOK.mdwith the 24-hour launch steps, weekly publishing rhythm, and outreach scripts.
After every production deploy, run:
NEXT_PUBLIC_SITE_URL=https://saassignalreport.com pnpm submit:indexnowThis project does not use AdSense. It is wired for direct SaaS sponsorships and affiliate-ready placements that can go live as soon as an advertiser pays and supplies an approved URL.
Edit only lib/ads.ts to change the default sponsor creative. For a fast campaign, set these public environment variables in Vercel:
NEXT_PUBLIC_SPONSOR_HEADER_BANNER_TITLE="Your sponsor headline"
NEXT_PUBLIC_SPONSOR_HEADER_BANNER_URL="https://sponsor.example"
NEXT_PUBLIC_SPONSOR_SIDEBAR_STICKY_TITLE="Your sidebar offer"
NEXT_PUBLIC_SPONSOR_SIDEBAR_STICKY_URL="https://sponsor.example"
NEXT_PUBLIC_SPONSOR_IN_CONTENT_INLINE_TITLE="Your in-report offer"
NEXT_PUBLIC_SPONSOR_IN_CONTENT_INLINE_URL="https://sponsor.example"Keep AD_SLOT_DIMENSIONS unchanged unless the sponsor contract changes, because those dimensions reserve space before hydration and protect CLS.
The site includes About, Contact, Advertise, Privacy, and Terms pages. Update NEXT_PUBLIC_PUBLISHER_EMAIL before launch so sponsor and correction requests go to Miles McQueen.
The dataset source lives in lib/data.ts, and the SQL seed mirrors the same category and use-case matrix. Add categories or use cases there, then run pnpm build; the prebuild script validates row count, quick-answer length, comparison row count, and calculator formula discriminants.
Run these before shipping changes:
pnpm test
pnpm typecheck
pnpm lint
pnpm build