Claude
Skills
Sign in
Back

builderpulse-daily-intelligence

Included with Lifetime
$97 forever

```markdown

Writing & Docs

What this skill does

```markdown
---
name: builderpulse-daily-intelligence
description: AI-powered daily build intelligence for indie hackers — aggregates 300+ signals from HN, GitHub, Product Hunt, HuggingFace, Google Trends, and Reddit into actionable "what to build today" reports.
triggers:
  - "what should I build today"
  - "show me today's builderpulse report"
  - "find trending build opportunities"
  - "what are indie hackers building right now"
  - "analyze signals from hacker news and github"
  - "generate a builder intelligence report"
  - "what problems can I build in 2 hours"
  - "find underserved markets from trending topics"
---

# BuilderPulse Daily Intelligence

> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.

BuilderPulse aggregates 300+ signals daily from Hacker News, GitHub Trending, Product Hunt, HuggingFace, Google Trends, and Reddit to surface actionable build opportunities for indie hackers and solo builders. Every morning it publishes a structured report (in English and Chinese) answering: _"What should you build today?"_ — including a flagship "2-hour build" idea, trend analysis, and a 20-question intelligence brief.

---

## How It Works

The project is a **GitHub repository as a publishing platform**:

- Daily Markdown reports are committed to `en/YYYY/YYYY-MM-DD.md` and `zh/YYYY/YYYY-MM-DD.md`
- An RSS feed is available via GitHub's commit atom feed: `../../commits/main.atom`
- Reports reference signals sourced from 10+ platforms and synthesised by AI
- The README always shows the latest report with badge links

---

## Consuming Reports Programmatically

### Fetch Today's Report via GitHub Raw API

```python
import httpx
from datetime import date

REPO = "BuilderPulse/BuilderPulse"
TODAY = date.today().strftime("%Y-%m-%d")
YEAR = date.today().strftime("%Y")

url = f"https://raw.githubusercontent.com/{REPO}/main/en/{YEAR}/{TODAY}.md"

response = httpx.get(url)
if response.status_code == 200:
    report_md = response.text
    print(report_md[:2000])  # preview first 2000 chars
else:
    print(f"No report yet for {TODAY} (status {response.status_code})")
```

### Fetch via GitHub Contents API (with metadata)

```python
import httpx
import base64
import os

GITHUB_TOKEN = os.environ["GITHUB_TOKEN"]  # optional, increases rate limit
REPO = "BuilderPulse/BuilderPulse"
TODAY = "2026-04-16"
YEAR = "2026"

headers = {"Authorization": f"Bearer {GITHUB_TOKEN}"} if GITHUB_TOKEN else {}

url = f"https://api.github.com/repos/{REPO}/contents/en/{YEAR}/{TODAY}.md"
resp = httpx.get(url, headers=headers)
data = resp.json()

content = base64.b64decode(data["content"]).decode("utf-8")
print(content)
```

### Subscribe to RSS / Atom Feed

```
https://github.com/BuilderPulse/BuilderPulse/commits/main.atom
```

Parse with any RSS library:

```python
import feedparser

feed = feedparser.parse(
    "https://github.com/BuilderPulse/BuilderPulse/commits/main.atom"
)

for entry in feed.entries[:5]:
    print(entry.title)
    print(entry.link)
    print(entry.updated)
    print("---")
```

---

## Navigating the Report Archive

### Directory Structure

```
BuilderPulse/BuilderPulse
├── README.md                  ← always current, links to today
├── en/
│   ├── index.md               ← full English archive index
│   └── 2026/
│       ├── 2026-04-16.md
│       ├── 2026-04-15.md
│       └── ...
└── zh/
    ├── index.md               ← full Chinese archive index
    └── 2026/
        ├── 2026-04-16.md
        └── ...
```

### List All Available Reports

```python
import httpx
import os

GITHUB_TOKEN = os.environ["GITHUB_TOKEN"]
REPO = "BuilderPulse/BuilderPulse"
YEAR = "2026"

headers = {"Authorization": f"Bearer {GITHUB_TOKEN}"}
url = f"https://api.github.com/repos/{REPO}/contents/en/{YEAR}"

resp = httpx.get(url, headers=headers)
files = resp.json()

report_dates = sorted([f["name"].replace(".md", "") for f in files if f["name"].endswith(".md")])
print(f"Available reports: {len(report_dates)}")
for d in report_dates[-7:]:  # last 7
    print(f"  {d} → https://github.com/{REPO}/blob/main/en/{YEAR}/{d}.md")
```

---

## Parsing Report Structure

A BuilderPulse report follows a consistent Markdown schema you can parse:

```python
import re

def parse_builderpulse_report(markdown: str) -> dict:
    """Extract key sections from a BuilderPulse daily report."""
    result = {}

    # Extract the headline summary (bold line near top)
    headline = re.search(r"\*\*Today: (.+?)\*\*", markdown)
    if headline:
        result["headline"] = headline.group(1)

    # Extract the 2-hour build idea
    build_idea = re.search(r"💡 \*\*If you had 2 hours, (.+?)\*\*", markdown)
    if build_idea:
        result["two_hour_build"] = build_idea.group(1)

    # Extract all H2/H3 section headings (signal categories)
    sections = re.findall(r"^#{2,3} (.+)$", markdown, re.MULTILINE)
    result["sections"] = sections

    # Extract all URLs referenced
    urls = re.findall(r"\(https?://[^\)]+\)", markdown)
    result["urls"] = [u.strip("()") for u in urls]

    # Extract signal source mentions
    sources = ["Hacker News", "GitHub", "Product Hunt", "HuggingFace",
               "Google Trends", "Reddit"]
    result["sources_mentioned"] = [s for s in sources if s in markdown]

    return result


# Usage
with open("2026-04-16.md") as f:
    md = f.read()

report = parse_builderpulse_report(md)
print(report["two_hour_build"])
# → "build a self-hosted social media scheduler deployable on a $10/month VPS for small agencies"
```

---

## Building a Personal Daily Digest Agent

Use BuilderPulse as a data source for your own AI-enhanced workflow:

```python
import httpx
import base64
import os
from datetime import date
from anthropic import Anthropic

GITHUB_TOKEN = os.environ["GITHUB_TOKEN"]
ANTHROPIC_API_KEY = os.environ["ANTHROPIC_API_KEY"]

def fetch_todays_report() -> str:
    today = date.today()
    year = today.strftime("%Y")
    day = today.strftime("%Y-%m-%d")
    repo = "BuilderPulse/BuilderPulse"

    headers = {"Authorization": f"Bearer {GITHUB_TOKEN}"}
    url = f"https://api.github.com/repos/{repo}/contents/en/{year}/{day}.md"
    resp = httpx.get(url, headers=headers)

    if resp.status_code != 200:
        raise ValueError(f"No report for {day}")

    data = resp.json()
    return base64.b64decode(data["content"]).decode("utf-8")


def personalize_digest(report: str, your_skills: str, your_interests: str) -> str:
    client = Anthropic()

    message = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": f"""Here is today's BuilderPulse report:

{report}

My skills: {your_skills}
My interests: {your_interests}

Based on this report, give me:
1. The top 3 build opportunities most relevant to me
2. Why each one fits my skills/interests
3. A concrete first step I could take today
Keep it under 300 words.""",
            }
        ],
    )
    return message.content[0].text


# Run it
report = fetch_todays_report()
digest = personalize_digest(
    report,
    your_skills="Python, React, solo developer",
    your_interests="developer tools, SaaS, automation"
)
print(digest)
```

---

## Setting Up a Daily Notification Bot

### GitHub Actions — Daily Slack/Discord Alert

```yaml
# .github/workflows/daily-digest.yml
name: Daily BuilderPulse Digest

on:
  schedule:
    - cron: "0 8 * * *"   # 8 AM UTC every day
  workflow_dispatch:

jobs:
  fetch-and-notify:
    runs-on: ubuntu-latest
    steps:
      - name: Fetch today's BuilderPulse report
        id: fetch
        run: |
          TODAY=$(date +%Y-%m-%d)
          YEAR=$(date +%Y)
          URL="https://raw.githubusercontent.com/BuilderPulse/BuilderPulse/main/en/${YEAR}/${TODAY}.md"
          CONTENT=$(curl -sf "$URL" || echo "NO_REPORT")
          echo "content<<EOF" >> $GITHUB_OUTPUT
          echo "$CONTENT" | head -30 >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT
          echo "date=

Related in Writing & Docs