Skip to content

content/digital-product

Digital Product Factory — Reddit research to sellable digital product with PDF, landing page, and distribution.

Category: content
Source: workflows/content/digital_product.py

FieldTypeDefaultDescription
min_quality_scorenumber6.0Min PDF quality score (1-10)
niche_overridestring""Override auto-detected niche
platformsstring[]
price_rangestring"$19-$29"Target price for positioning
product_typestring"guide"Product format
qualitystring"standard"Quality/cost preset
regenerateobjectWhen set, this run is a regeneration. Workflows may read direction / keep / extra_instructions to modulate prompts; the engine persists parent_run_id and parent_variant_index as run lineage columns.
tone_modestring"conversational"
topicstring""Topic or niche, e.g. ‘AI security for founders’
variantsinteger1Number of independent variant executions (1–10). When > 1, the engine runs the workflow N times with different sampling, producing N outputs.

No schema defined.

research_reddit → select_audience → lock_brand_voice → refine_problems → generate_hooks → design_solution → structure_pdf → generate_pdf_content_v1 → quality_gate_pdf → generate_pdf_content_v2 → generate_pdf_design → merge_product_assets → render_pdf → generate_landing_page → generate_gumroad_page → generate_social_visuals → generate_distribution → generate_email_sequence → merge_gtm_assets → package_output
TaskDescription
research_redditSearch Reddit for real problems, frustrations, and emotional language around the topic.
select_audienceIdentify the highest-value, most monetizable audience segment from Reddit data.
lock_brand_voiceDefine and lock a brand voice guide that all downstream content tasks use.
refine_problemsExtract and refine problems from Reddit data into sellable pain points.
generate_hooksGenerate 20-40 high-conversion hooks using existing hook generation infrastructure.
design_solutionDesign the product’s value architecture — the transformation it delivers.
structure_pdfCreate a detailed PDF outline based on the solution framework.
generate_pdf_content_v1Generate full V1 PDF content section by section, maintaining coherence.
quality_gate_pdfEvaluate V1 content quality. Fails below threshold to trigger retry.
generate_pdf_content_v2Expand V1 into a premium V2 with case studies, worksheets, and bonus content.
generate_pdf_designGenerate a visual design system and CSS stylesheet for the PDF.
merge_product_assetsMerge product creation branches: content (Branch A) + design (Branch B).
render_pdfRender markdown content + design system into production-quality PDF.
generate_landing_pageGenerate a conversion-optimized, SEO-ready landing page as self-contained HTML.
generate_gumroad_pageGenerate Gumroad-ready product page copy.
generate_social_visualsGenerate social media visual assets — cover, social cards, carousel slides.
generate_distributionGenerate a full social media text distribution pack.
generate_email_sequenceGenerate a 5-email launch sequence.
merge_gtm_assetsMerge go-to-market branches into a single dict.
package_outputBundle all outputs into a .tar.gz archive and save as a single artifact.

Save the YAML below as my-run.yaml, edit the values, and run with the CLI or POST it to the API. Required fields are uncommented; optional knobs are documented above the input: block — copy any line under input: and uncomment to set.

workflow: content/digital-product
# Optional fields — copy any line(s) under `input:` and uncomment to set:
# Min PDF quality score (1-10)
# min_quality_score: 6.0
#
# Override auto-detected niche
# niche_override: ""
#
# platforms: []
#
# Target price for positioning
# price_range: $19-$29
#
# Product format
# product_type: guide
#
# Quality/cost preset
# quality: standard
#
# tone_mode: conversational
#
# Topic or niche, e.g. 'AI security for founders'
# topic: ""
#
input: {}

Run it locally:

Terminal window
fab-workflow --from-file my-run.yaml

Or submit over the wire — the same file is the request body:

Terminal window
curl -X POST 'https://gofabric.dev/v1/workflows/runs?name=content/digital-product' \
-H 'Authorization: Bearer fab_xxx' \
-H 'content-type: application/yaml' \
--data-binary @my-run.yaml

Every workflow also accepts the universal WorkflowInput fields — variants (1–10 fan-out) and regenerate (creative-direction hints with run lineage). See Run-specs (YAML / TOML / JSON) for the full top-level shape (metadata, priority, bundle, parent, etc.).

  • Last user task package_output has no Pydantic return type — workflow output schema is null. Declare a WorkflowOutput subclass and pass it to Flow(output=…) for a strict contract.
  • Task merge_product_assets has no Pydantic types — contract is opaque to consumers.
  • Task merge_gtm_assets has no Pydantic types — contract is opaque to consumers.