@leadpulse/pseo-bootstrap
v0.1.0
Published
Scaffold programmatic SEO (pSEO) drafts for any product. Interactive by default, non-interactive for agents/harnesses via JSON or flags. Stdlib-only — no runtime dependencies.
Readme
@leadpulse/pseo-bootstrap
Scaffold programmatic SEO (pSEO) drafts for any product. Interactive by default, non-interactive for agents/harnesses via JSON or flags. Stdlib-only — no runtime dependencies.
What it does
Takes a product config (name, tagline, pricing, lead sources, destinations, competitors, ...) and scaffolds a starter set of draft pages that fit the LeadPulse landing-page templates:
- Integration pages (
sources × destinations) - "X vs Y" comparisons (product vs competitor)
- "Alternatives to X" (competitor alternatives hubs)
- "Best of" roundups (category roundups)
- Head-to-head pages (competitor A vs competitor B)
Drafts are scaffolding. Review, fact-check, and merge them into the target
app's live data files before deploying (see the generated NEXT-STEPS.md).
Usage
# Interactive — guided questions, defaults shown in [brackets], Enter keeps them
pnpm --filter @leadpulse/pseo-bootstrap start
# Non-interactive from a JSON file (reuse the emitted pseo.config.json)
pnpm --filter @leadpulse/pseo-bootstrap start --config ./pseo.config.json
# From stdin (harness-friendly)
cat cfg.json | pnpm --filter @leadpulse/pseo-bootstrap start --config -
# From individual flags (merged over the selected preset)
pnpm --filter @leadpulse/pseo-bootstrap start \
--name Foo --key foo --domain https://foo.app \
--sources "Webhooks,API" --destinations "CRM,Sheet" \
--roundups "Cool Stuff: cool tools" --head-to-head "Foo vs Zapier"
# Start from a reference preset
pnpm --filter @leadpulse/pseo-bootstrap start --preset gitshoutoutOutput (default ./generated, override with --out <dir>):
pseo.config.json— resolved product config (reuse with--config)pseo-drafts.ts— scaffolded draft page dataNEXT-STEPS.md— agent-facing implementation checklist
Flags, --config, and the --preset base merge in that order (flags win).
Interactive mode starts from the selected preset (default leadpulse) so
pressing Enter throughout reproduces that product's draft set.
Presets
src/presets.ts ships leadpulse and gitshoutout reference configs. Add
more for your own products.
Library usage
The same builders drive the landing app's pseo:generate script — types and
render logic live here so there is a single source of truth:
import { generateDrafts, countDrafts, renderDraftsTS } from '@leadpulse/pseo-bootstrap';
const drafts = generateDrafts(config);
const counts = countDrafts(drafts);
const ts = renderDraftsTS(config, { regenerateHint: 'pnpm --filter @leadpulse/landing pseo:generate' });See src/index.ts for the full export list.
Development
pnpm --filter @leadpulse/pseo-bootstrap lint # tsc --noEmit
pnpm --filter @leadpulse/pseo-bootstrap build # emit declarations to dist