A production-ready Node.js CLI tool for generating digital product bundles with AI-powered content, branded PDFs, and automated packaging.
- π Interactive CLI - Inquirer-based prompts with sensible defaults
- π Progress Tracking - Real-time progress bars for all operations
- π€ AI Content Generation - OpenAI-powered content creation with retry logic
- π Branded PDFs - Puppeteer-based PDF generation with custom branding
- π¦ Automated Packaging - ZIP archives for each section and master bundle
- βοΈ Highly Configurable - Override chunks, models, colors, and more
- Node.js 20 or newer
- OpenAI API key
- pnpm (recommended) or npm
# Clone or download the project
cd neon-builder
# Install dependencies
pnpm installRun the CLI and follow the prompts:
pnpm startOn first run, you'll be prompted to enter your OpenAI API key. The key is securely stored in ~/.config/neon-builder/credentials.json for future use.
Or use the binary directly:
./src/index.jsThe CLI will prompt you for:
| Option | Description | Default |
|---|---|---|
| Root Folder | Output directory name | NeonPromptEngine |
| Model | OpenAI model to use | gpt-4 |
| Temperature | Generation creativity (0-2) | 0.7 |
| Generate PDFs | Create branded PDF files | true |
| Primary Color | Brand primary color (hex) | #00FFC8 |
| Secondary Color | Brand secondary color (hex) | #1a1a2e |
| Logo URL | URL to brand logo | - |
| Footer Text | PDF footer text | Β© Neon Prompt Engine |
Your OpenAI API key is stored securely in:
~/.config/neon-builder/credentials.json
The CLI will:
- Check for
OPENAI_API_KEYenvironment variable first - Fall back to stored credentials in
~/.config/neon-builder/ - Prompt you to enter a key if none is found
- Optionally save the key for future use
| Variable | Description |
|---|---|
OPENAI_API_KEY |
OpenAI API key (overrides stored credentials) |
NEON_MODEL |
Override default model |
NEON_OUTPUT_DIR |
Override output directory |
NEON_VERBOSE |
Enable verbose logging (true/false) |
The builder generates content for these sections:
| Section | Default Chunks | Description |
|---|---|---|
| Core Prompts | 12 | 300 strategic prompts |
| Premium Prompts | 14 | 700 advanced prompts |
| Automation | 5 | 75 automation workflows |
| Sales Pages | 5 | Funnel sales pages |
| Thank You Pages | 5 | Post-purchase pages |
| Launch Emails | 2 | Email sequences |
| Affiliate Toolkit | 4 | JV/affiliate materials |
| Branding Docs | 2 | Brand guidelines |
| JVZoo Docs | 3 | Marketplace listings |
| READMEs | 3 | Documentation files |
NeonPromptEngine/
βββ core_prompts/
β βββ chunk_01.txt
β βββ chunk_01.pdf
β βββ ...
βββ premium_prompts/
β βββ ...
βββ core_prompts.zip
βββ premium_prompts.zip
βββ NeonPromptEngine_complete.zip
neon-builder/
βββ src/
β βββ index.js # Main CLI entry point
β βββ config/
β β βββ sections.js # Section definitions
β β βββ defaults.js # Default configuration
β β βββ index.js
β βββ generators/
β β βββ content-generator.js # OpenAI integration
β β βββ pdf-generator.js # Puppeteer PDF creation
β β βββ zip-packager.js # ZIP archive creation
β β βββ index.js
β βββ prompts/
β β βββ cli-prompts.js # Inquirer prompts
β β βββ index.js
β βββ utils/
β βββ progress.js # Progress bars & logging
β βββ file-system.js # File operations
β βββ index.js
βββ test/
β βββ config/
β βββ generators/
β βββ utils/
βββ package.json
βββ vitest.config.js
βββ eslint.config.js
βββ .prettierrc
# Run all tests
pnpm test
# Run tests in watch mode
pnpm test:watch
# Run tests with coverage
pnpm test:coverage# Run ESLint
pnpm lint
# Fix ESLint issues
pnpm lint:fix
# Check formatting
pnpm format:check
# Format code
pnpm formatimport { createOpenAIClient, generateChunk, generateSection } from './generators/content-generator.js';
// Create client
const client = createOpenAIClient(process.env.OPENAI_API_KEY);
// Generate a single chunk
const content = await generateChunk(client, {
model: 'gpt-4',
temperature: 0.7,
section: sectionConfig,
chunkIndex: 0,
totalChunks: 5,
branding: brandingConfig,
});import { generateBrandedPdf, generateSectionPdfs } from './generators/pdf-generator.js';
// Generate a single PDF
await generateBrandedPdf({
content: 'Your content here',
outputPath: './output/document.pdf',
title: 'Document Title',
sectionLabel: 'Section Name',
chunkNumber: 1,
totalChunks: 5,
branding: brandingConfig,
});import { createSectionZip, createMasterZip } from './generators/zip-packager.js';
// Create section ZIP
const zipPath = await createSectionZip({
sectionId: 'core_prompts',
sectionDir: './output/core_prompts',
outputDir: './output',
});
// Create master ZIP
await createMasterZip(sectionZipPaths, './output/master.zip');| Package | Purpose |
|---|---|
openai |
OpenAI API client |
inquirer |
Interactive CLI prompts |
cli-progress |
Progress bar display |
puppeteer |
PDF generation |
jszip |
ZIP archive creation |
fs-extra |
Enhanced file operations |
| Package | Purpose |
|---|---|
vitest |
Test framework |
@vitest/coverage-v8 |
Code coverage |
eslint |
Code linting |
prettier |
Code formatting |
MIT
- Fork the repository
- Create a feature branch
- Write tests for new functionality
- Implement the feature
- Run tests and linting
- Submit a pull request
- HTML sales page templates
- React/Next.js PDF layouts
- Image generation for banners
- License key generator
- S3 upload integration
- Resume generation on API failure
- Caching system
- GUI dashboard version