Reports¶
Generate customizable reports summarizing open source activity for stakeholders.
Creating a Report¶
- Navigate to Reports in the main menu
- Configure your report:
- Date Range: 7, 30, 90 days, or custom
- Organizations: All or select specific ones
- Sections: Choose what to include
- Click Generate Report
Report Sections¶
Activity Summary¶
Overview of activity across selected organizations:
- Total commits, PRs, and issues
- Comparison with previous period
- Activity trend chart
Health Scores¶
Repository health analysis:
- Average health score by organization
- Repositories with declining health
- Top healthy repositories
- Health score distribution
Top Repositories¶
Most active repositories:
- By commits
- By pull requests
- By contributors
Contributors¶
Contributor analysis:
- Most active contributors
- New contributors
- Internal vs external breakdown
- Bot activity
Pull Requests¶
Pull request summary:
- Open PRs by repository
- Merge rate and time
- PRs requiring attention
- Stale PR report
Issues¶
Issue tracking:
- Open issues by repository
- Close rate
- Most active issue discussions
AI Summaries¶
When an LLM is configured (see Configuration → AI Summaries), each report includes an AI-generated executive summary at the top of the page.
- Automatic: generated alongside the report itself.
- Best-effort: if the LLM call fails the report is still saved without a summary, and nothing blocks report generation.
- Regeneratable: use the Regenerate button on the report detail page to ask for a fresh summary (e.g. after switching models or tuning prompts).
- Included in emails: scheduled report emails embed the summary at the top, so recipients see the takeaways without opening the dashboard.
If LLM_API_KEY is not set the AI Summary section does not appear and
no calls are made. The feature is entirely optional.
Export Formats¶
Markdown¶
Export as Markdown for:
- GitHub/GitLab wikis
- Documentation sites
- Email as plain text
# Download via API
curl http://localhost:8000/api/reports/generate \
-H "Authorization: Bearer $TOKEN" \
-d '{"format": "markdown", "days": 30}' \
-o report.md
PDF¶
Export as PDF for:
- Executive summaries
- Printed reports
- Email attachments
Note
PDF export requires WeasyPrint to be installed.
Scheduling Reports¶
A saved template can email itself on a cadence:
- Build the report you want in Reports > New report
- Tick Save as template and give it a name
- Choose a frequency: daily, weekly or monthly
- Add recipients, comma-separated
- Generate
Both a frequency and at least one recipient are required. A template carrying only one of them is saved without a schedule, since a half-scheduled report would generate and go nowhere.
How the cadence works¶
A pass runs every morning at 08:00 UTC and sends the templates whose cadence has come round: daily after a day, weekly after seven, monthly after thirty, each counted from that template's last send. There is no time-of-day or day-of-week choice, because 08:00 UTC is when the pass runs.
Sending requires SMTP to be configured (see Configuration). The email carries the rendered report and its AI summary when one is available.
Weekly digest¶
The common shape for a stakeholder update:
| Setting | Value |
|---|---|
| Frequency | Weekly |
| Sections | Activity, Health, Contributors |
| Recipients | The people who ask you for it |
Reports are emailed as HTML. PDF is a manual download from the report page; email carries HTML.
Planned
A time-of-day and day-of-week choice, per-recipient formats, and report delivery to chat destinations alongside email.
Customization¶
Custom Date Ranges¶
For custom periods:
- Select "Custom" from the date range dropdown
- Enter start and end dates
- Generate report
Organization Filtering¶
Create focused reports:
- All organizations: Executive overview
- Single organization: Team-specific report
- Comparison: Multiple organizations side-by-side
Section Selection¶
Choose relevant sections:
| Audience | Recommended Sections |
|---|---|
| Executives | Activity Summary, Health Scores |
| Engineering Leads | Health, PRs, Top Repositories |
| Community Managers | Contributors, Issues |
| OSPO | All sections |
API Access¶
Generate reports programmatically:
import httpx
client = httpx.Client(
base_url="http://localhost:8000/api",
headers={"Authorization": f"Bearer {token}"}
)
# Generate report
response = client.post("/reports/generate", json={
"days": 30,
"format": "markdown",
"sections": ["activity", "health", "contributors"],
"organization_ids": ["uuid1", "uuid2"] # Optional
})
report = response.json()
print(report["content"])
Email Delivery¶
Send reports via API:
response = client.post("/reports/send", json={
"days": 30,
"format": "pdf",
"recipients": ["team@example.com", "manager@example.com"],
"subject": "Weekly OSPO Report"
})
Report Templates¶
Save common configurations as templates:
- Configure your report settings
- Click Save as Template
- Name your template (e.g., "Weekly Executive Summary")
- Reuse by selecting from the template dropdown
Best Practices¶
For Executives¶
- Focus on trends and health scores
- Include month-over-month comparisons
- Highlight significant changes
- Keep it concise (1-2 pages)
For Engineering Teams¶
- Include detailed PR and issue data
- Show individual repository health
- List action items
- Weekly frequency
For OSPOs¶
- Track contributor diversity
- Monitor external contributions
- Compare with industry benchmarks
- Include all organizations