Back to Research

Automated Research Pipeline Spec (Nightly)

The exact nightly order from X bookmark selection to live research post, LinkedIn publication, and founder email notification.

Hero image for Automated Research Pipeline Spec (Nightly)
Rogier MullerMarch 3, 20262 min read

Automated Research Pipeline Spec

name: research_nightly_pipeline
schedule_utc: '0 8 * * *'
goal: 'X bookmark -> scored candidate -> humanized article -> live /research -> LinkedIn post -> founders email'
linkedin_safety_rule: 'NEVER POST FROM A PERSONAL PROFILE. ALWAYS POST ONLY TO THE CURSORWORKSHOP ORGANIZATION PAGE.'

steps:
  - id: 1_fetch_and_score
    input: 'X bookmarks via Bird CLI'
    output:
      - 'docs/nautilus/data/live/X-bookmarks.live.scored.csv'
      - 'docs/nautilus/data/live/X-bookmarks.live.scored.json'
    gate: 'requires X_AUTH_TOKEN + X_CT0'

  - id: 2_select_best_candidate
    rule: 'highest unselected candidate with relevance >= 65'
    output:
      - 'docs/nautilus/data/state/X-bookmarks.next-research-candidate.json'

  - id: 3_build_article_package
    includes:
      - 'article draft'
      - 'humanizer pass'
      - 'style-locked custom hero image generation + QA retries'
      - 'linkedin snippet generation'
      - 'cost accounting from API usage'
    gate:
      - 'custom hero image is required before package is valid'
    output:
      - 'docs/nautilus/data/outbox/<timestamp>-<slug>/article.mdx'
      - 'docs/nautilus/data/outbox/<timestamp>-<slug>/image.png'
      - 'docs/nautilus/data/outbox/<timestamp>-<slug>/linkedin.txt'
      - 'docs/nautilus/data/outbox/<timestamp>-<slug>/package.json'

  - id: 4_apply_to_site
    output:
      - 'content/editorials/<slug>.mdx'
      - 'public/images/editorials/<slug>.png'
      - 'src/components/ResearchList.tsx (image map)'
    result:
      - '/research/<slug> renders that same custom image as hero'
      - 'open graph + twitter metadata use that same image'

  - id: 5_commit_and_push
    branch: 'main'
    trigger: 'GitHub Actions Vercel Production Deployment'

  - id: 6_wait_until_live
    check: 'GET https://www.cursorworkshop.com/research/<slug> returns 200'
    timeout_ms: 1800000

  - id: 7_post_linkedin
    action: 'LinkedIn API organization-page post with article URL'
    output:
      - 'LinkedIn post URL'
    gate: 'requires LinkedIn auth secrets'

  - id: 8_send_founder_email
    provider: 'Resend API'
    recipients:
      - 'contact@rogyr.com'
      - 'vasilis@vasilistsolis.com'
    format_html: 'barebones'
    body_template:
      - 'Article and LI posted on {datetime}'
      - '- X bookmark used: {x_bookmark_url}'
      - '- Research page: {research_url}'
      - '- Linkedin: {linkedin_url}'
      - '- cost it took to generate all of this {estimated_generation_cost_usd}'

failure_policy:
  - 'If no candidate passes threshold: skip publish.'
  - 'If /research URL never goes live in time: fail distribution step.'
  - 'If LinkedIn post fails: do not send completion email.'

Want to learn more about Cursor?

We offer enterprise training and workshops to help your team become more productive with AI-assisted development.

Contact Us