Add internal link checker and update workflows

Introduced a new script `check-internal-links.py` to validate internal file links in markdown files. Updated the `quality-assurance.yml` workflow to include the internal link check. Removed references to the deleted `financial-analyzer.md` file across documentation and related prompts.
This commit is contained in:
xixu-me committed 2025-06-01 22:50:04 +08:00
1 parent 22c331ed00
commit 512fee1ee3
8 files changed
+219 -418

No files matched your search

+15 -1
View File
@@ -19,7 +19,6 @@ jobs:
config: .markdownlint.json
files: "**/*.md"
ignore: "node_modules"
template-compliance:
runs-on: ubuntu-latest
name: Template Compliance Check
@@ -35,3 +34,18 @@ jobs:
run: |
python scripts/check-template-compliance.py
continue-on-error: true
internal-links:
runs-on: ubuntu-latest
name: Internal File Link Check
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.9"
- name: Check internal file links
run: |
python scripts/check-internal-links.py --verbose
-1
View File
@@ -94,7 +94,6 @@ Streamline business operations with AI assistance for strategy, analysis, and pr
| **[Proposal Writer](business/proposal-writer.md)** | Create compelling business proposals and bids | Client proposals, project estimates, partnerships |
| **[Strategic Planner](business/strategic-planner.md)** | Develop comprehensive business strategies | Business planning, competitive analysis, growth strategies |
| **[Market Analysis](business/market-analysis.md)** | Analyze markets, competitors, and opportunities | Market research, competitive intelligence, business development |
| **[Financial Analyzer](business/financial-analyzer.md)** | Financial analysis and business metrics evaluation | Financial planning, investment analysis, budget review |
| **[Xianyu Product Description](business/xianyu-product-description.md)** | Create compelling product descriptions for Xianyu marketplace | E-commerce listings, second-hand sales, marketplace optimization |
### 📊 Analysis
-1
View File
@@ -18,7 +18,6 @@ This directory contains prompts for business and professional applications.
- `proposal-writer.md` - Create compelling business proposals and bids
- `strategic-planner.md` - Develop comprehensive business strategies
- `market-analysis.md` - Analyze markets, competitors, and opportunities
- `financial-analyzer.md` - Financial analysis and business metrics evaluation
- `xianyu-product-description.md` - Create effective Xianyu marketplace listings
## Business Applications
-410
View File
@@ -1,410 +0,0 @@
# Financial Analyzer
## Description
This prompt helps you analyze financial data, create financial models, evaluate investment opportunities, and provide insights for financial decision-making and business performance assessment.
## Usage
Perfect for financial planning, investment analysis, budgeting, financial reporting, valuation models, risk assessment, and making data-driven financial decisions for businesses and investments.
## Prompt
```markdown
You are an expert financial analyst with deep expertise in financial modeling, valuation, and investment analysis. I need comprehensive financial analysis to support important financial decisions.
**Analysis Type:**
- Analysis purpose: [INVESTMENT_DECISION/BUSINESS_VALUATION/FINANCIAL_PLANNING/PERFORMANCE_ANALYSIS]
- Focus area: [PROFITABILITY/CASH_FLOW/VALUATION/RISK_ASSESSMENT/BUDGETING]
- Time horizon: [SHORT_TERM/ANNUAL/MULTI_YEAR_PROJECTION]
- Decision context: [ACQUISITION/FUNDING/STRATEGIC_PLANNING/OPERATIONAL_IMPROVEMENT]
**Financial Data Available:**
- Historical financials: [YEARS_OF_DATA_AVAILABLE]
- Revenue data: [REVENUE_FIGURES_AND_TRENDS]
- Cost structure: [MAJOR_COST_CATEGORIES]
- Balance sheet items: [KEY_ASSETS_AND_LIABILITIES]
- Cash flow information: [OPERATING/INVESTING/FINANCING_FLOWS]
**Analysis Requirements:**
- Industry: [RELEVANT_INDUSTRY_FOR_BENCHMARKING]
- Company size: [REVENUE_RANGE_OR_EMPLOYEE_COUNT]
- Growth stage: [STARTUP/GROWTH/MATURE/DECLINING]
- Risk factors: [KEY_RISKS_TO_CONSIDER]
- Benchmarks needed: [INDUSTRY_PEERS_OR_STANDARDS]
**Specific Questions:**
- [CUSTOM_FINANCIAL_QUESTION_1]
- [CUSTOM_FINANCIAL_QUESTION_2]
- [CUSTOM_FINANCIAL_QUESTION_3]
Please provide comprehensive financial analysis including:
1. **Executive Summary:**
- Key financial health indicators
- Major findings and concerns
- Investment recommendation or strategic insights
- Risk assessment summary
2. **Financial Performance Analysis:**
- Revenue analysis and growth trends
- Profitability analysis (gross, operating, net margins)
- Efficiency ratios (ROA, ROE, asset turnover)
- Liquidity analysis (current ratio, quick ratio, cash conversion)
- Leverage analysis (debt ratios, interest coverage)
3. **Financial Modeling:**
- Historical trend analysis and drivers
- Forward-looking projections (3-5 years)
- Scenario analysis (best case, base case, worst case)
- Sensitivity analysis for key variables
- Break-even analysis where applicable
4. **Valuation Analysis:**
- Multiple valuation approaches (DCF, comparables, precedent transactions)
- Key valuation drivers and assumptions
- Valuation range and target price/value
- Peer comparison and industry multiples
5. **Cash Flow Analysis:**
- Operating cash flow quality and sustainability
- Capital expenditure requirements and efficiency
- Free cash flow generation and uses
- Working capital management analysis
- Cash runway and funding requirements
6. **Risk Assessment:**
- Financial risk factors and mitigation strategies
- Market and operational risks
- Competitive position and market share trends
- Regulatory and macroeconomic risks
- Stress testing and downside scenarios
7. **Recommendations:**
- Strategic financial priorities
- Investment decision recommendations
- Operational improvements for financial performance
- Capital structure optimization
- Key performance metrics to monitor
Include supporting charts, ratios, and benchmarks where relevant, with clear methodology and assumptions stated.
```
## Example Input
```markdown
Analysis purpose: Investment decision for potential acquisition
Focus area: Comprehensive financial and valuation analysis
Time horizon: 5-year projection with exit scenario
Decision context: Private equity acquisition of profitable SaaS company
Historical financials: 3 years of audited financials available
Revenue data: $15M ARR, growing 35% annually, 85% recurring revenue
Cost structure: 60% gross margin, 25% S&M, 15% R&D, 12% G&A
Balance sheet: $8M cash, minimal debt, $5M in deferred revenue
Cash flow: Generating $3M annual free cash flow, improving margins
Industry: B2B SaaS software
Company size: $15M revenue, 75 employees
Growth stage: Growth stage, expanding market share
Risk factors: Competitive market, customer concentration, talent retention
Specific questions:
- What's the fair valuation range for this acquisition?
- What are the key value creation opportunities?
- What financial risks should we be most concerned about?
```
## Example Output
```markdown
# SaaS Company Financial Analysis & Valuation
## Executive Summary
**Investment Recommendation: PROCEED with acquisition at $45-55M valuation**
**Key Findings:**
- **Strong Growth**: 35% ARR growth with improving unit economics
- **Quality Revenue**: 85% recurring, low churn (<5% annually)
- **Path to Profitability**: Already FCF positive with expanding margins
- **Scalable Model**: High gross margins (60%) with operating leverage potential
**Primary Value Creation Opportunities:**
1. **Margin Expansion**: Potential to reach 75%+ gross margins through pricing optimization
2. **Sales Efficiency**: CAC payback period can improve from 18 to 12 months
3. **Market Expansion**: Addressable market growing 25% annually
**Key Risks**: Customer concentration (top 10 = 45% revenue), competitive pressures, talent retention in growth phase
---
## Financial Performance Analysis
### Revenue Analysis
**Historical Growth:**
- 2021: $8.1M ARR (+28% YoY)
- 2022: $11.2M ARR (+38% YoY)
- 2023: $15.1M ARR (+35% YoY)
**Revenue Quality Metrics:**
- **Recurring Revenue**: 85% (industry avg: 75-80%)
- **Net Revenue Retention**: 112% (strong expansion)
- **Gross Revenue Retention**: 95% (low churn)
- **Average Contract Value**: $18K annually (+15% YoY)
### Profitability Analysis
```
2021 2022 2023 Trend
Revenue $8.1M $11.2M $15.1M +35% CAGR
Gross Profit $4.7M $6.5M $9.1M +39% CAGR
Gross Margin 58% 58% 60% Improving
EBITDA ($0.5M) $0.8M $2.3M Strong
EBITDA Margin -6% 7% 15% +21pp
Net Income ($1.1M) $0.2M $1.8M Positive
```
**Efficiency Ratios:**
- **Rule of 40**: 50% (35% growth + 15% EBITDA margin) - Excellent
- **CAC Payback**: 18 months (target: <12 months)
- **LTV/CAC Ratio**: 4.2x (healthy, target: >3.0x)
### Liquidity & Leverage
- **Current Ratio**: 3.2x (strong liquidity position)
- **Cash**: $8.1M (16 months runway at current burn)
- **Debt/Equity**: 0.1x (minimal leverage)
- **Interest Coverage**: 25x+ (minimal interest expense)
---
## Financial Modeling & Projections
### Base Case 5-Year Projections
```
Year 2024E 2025E 2026E 2027E 2028E
ARR $20.4M $26.0M $32.5M $39.0M $44.9M
Growth Rate 35% 27% 25% 20% 15%
Gross Margin 62% 65% 68% 70% 72%
EBITDA Margin 18% 22% 26% 28% 30%
FCF $4.2M $6.8M $10.1M $12.8M $15.2M
```
### Key Assumptions
- **Revenue Growth**: Decelerating but healthy (35% → 15% by 2028)
- **Gross Margin Expansion**: Pricing optimization and scale effects
- **OpEx Scaling**: 75% variable with revenue (improving efficiency)
- **Capital Requirements**: Minimal CapEx, working capital neutral
### Scenario Analysis
**Bull Case** (+25% revenue, +500bp margins): $75M+ valuation
**Base Case** (model above): $50M valuation
**Bear Case** (-20% revenue, -300bp margins): $35M valuation
---
## Valuation Analysis
### DCF Valuation: $48-52M
**Key Assumptions:**
- **Discount Rate**: 12% (risk-adjusted for private SaaS)
- **Terminal Growth**: 3% (conservative for mature SaaS)
- **Terminal EBITDA Margin**: 35% (industry leaders)
- **FCF Projection**: $53M cumulative 5-year FCF
### Comparable Company Analysis: $45-55M
**Public SaaS Multiples (Revenue):**
- High-growth (>30%): 8-12x revenue
- Mid-growth (15-30%): 5-8x revenue
- **Target Multiple**: 3.0-3.7x revenue (growth-adjusted)
**Peer Comparison:**
- **HubSpot** (larger, more mature): 12x revenue, 40% growth
- **Freshworks** (similar size): 6x revenue, 25% growth
- **Target Range**: 3.2x revenue = $48M valuation
### Precedent Transactions: $42-58M
**Recent SaaS Acquisitions:**
- Similar size/growth: 2.5-4.0x revenue multiples
- Strategic premium: +15-25% vs. financial buyer
- **Range**: 2.8-3.8x revenue
### Valuation Summary
```
Method Low High Midpoint
DCF Analysis $48M $52M $50M
Comparable Companies $45M $55M $50M
Precedent Transactions $42M $58M $50M
Weighted Average $45M $55M $50M
```
---
## Cash Flow Analysis
### Operating Cash Flow Quality
- **Cash Conversion**: 95%+ of EBITDA converts to cash
- **Working Capital**: Positive from deferred revenue
- **Seasonality**: Minimal (subscription model)
- **Predictability**: High visibility from recurring revenue
### Capital Requirements
- **CapEx**: <2% of revenue (mostly IT equipment)
- **R&D Investment**: 15% of revenue (product development)
- **Sales & Marketing**: 25% of revenue (customer acquisition)
### Free Cash Flow Generation
```
Year 2024E 2025E 2026E 2027E 2028E
OCF $4.5M $7.2M $10.6M $13.4M $15.9M
CapEx ($0.3M) ($0.4M) ($0.5M) ($0.6M) ($0.7M)
FCF $4.2M $6.8M $10.1M $12.8M $15.2M
FCF Margin 21% 26% 31% 33% 34%
```
---
## Risk Assessment
### Financial Risks
**Medium Risk:**
- **Customer Concentration**: Top 10 customers = 45% revenue
- **Competitive Pressure**: Well-funded competitors entering market
- **Growth Sustainability**: Can the 35% growth rate be maintained?
**Low Risk:**
- **Cash Position**: Strong balance sheet, 16+ months runway
- **Revenue Quality**: High recurring, low churn, strong retention
- **Unit Economics**: Proven LTV/CAC ratios and payback periods
### Operational Risks
- **Talent Retention**: Key developers and sales team retention critical
- **Product Development**: Need continued innovation in competitive market
- **Scalability**: Systems and processes must scale with growth
### Market Risks
- **Economic Downturn**: SaaS resilient but SMB customers vulnerable
- **Market Saturation**: TAM growing but competitive intensity increasing
- **Technology Disruption**: AI/automation could change competitive landscape
### Stress Testing
**Downside Scenario**: 20% revenue decline, 500bp margin compression
- **Impact**: Valuation drops to $35M (-30%)
- **Mitigation**: Strong cash position provides 2+ year runway
---
## Investment Recommendations
### Strategic Priorities Post-Acquisition
**1. Sales & Marketing Optimization** (6-12 months)
- Improve CAC payback from 18 to 12 months
- Implement account-based marketing for enterprise segment
- **Target**: 40% improvement in sales efficiency
**2. Pricing Strategy Enhancement** (3-6 months)
- Value-based pricing to improve gross margins to 70%+
- Introduce premium tiers with advanced features
- **Target**: 500bp gross margin improvement
**3. Product Development Acceleration** (12-18 months)
- AI/automation features to differentiate from competitors
- Enterprise features to move upmarket
- **Target**: 20%+ improvement in win rates vs. competitors
**4. Market Expansion** (18-24 months)
- Geographic expansion to European markets
- Adjacent vertical markets with similar workflows
- **Target**: 25% of revenue from new markets by Year 3
### Financial Targets (5-Year)
- **Revenue**: $45M ARR (15% CAGR)
- **EBITDA Margin**: 30%+ (vs. 15% current)
- **Enterprise Value**: $100M+ (2.0x multiple expansion)
- **IRR Target**: 25%+ for PE investment
### Key Metrics to Monitor
- **Growth**: Monthly ARR, net new ARR, logo retention
- **Efficiency**: CAC payback, LTV/CAC, magic number
- **Quality**: NPS, churn rate, expansion revenue
- **Profitability**: Gross margin, EBITDA margin, FCF conversion
#### Recommended Acquisition Price Range: $45-55M
#### Target IRR: 25-30% over 5-year hold period
#### Exit Multiple Assumption: 4-5x revenue at 15-20% growth rates
```
## Variations
### Investment Due Diligence
Focus on comprehensive financial analysis for investment decisions, including risk assessment, valuation models, and return projections.
### Business Performance Review
Analyze ongoing business performance, identify improvement opportunities, and create action plans for financial optimization.
### Budget Planning & Forecasting
Develop detailed financial budgets, forecasts, and variance analysis for operational planning and performance tracking.
## Tips
- Always provide multiple valuation methods and cross-check results for reasonableness
- Include sensitivity analysis to understand how changes in key assumptions affect outcomes
- Use industry benchmarks and peer comparisons to validate analysis and assumptions
- Clearly state methodology, assumptions, and limitations of the analysis
- Focus on cash flow generation and sustainability rather than just accounting profits
## Related Prompts
- [Market Analysis](./market-analysis.md) - For understanding market dynamics affecting financials
- [Strategic Planner](./strategic-planner.md) - For translating financial insights into strategy
- [Data Interpreter](../analysis/data-interpreter.md) - For analyzing financial datasets
## Tags
`financial-analysis` `valuation` `financial-modeling` `investment-analysis` `due-diligence` `budgeting` `financial-planning` `risk-assessment`
-1
View File
@@ -336,7 +336,6 @@ Focus on emerging technologies, disruptions, and innovation trends that could im
## Related Prompts
- [Strategic Planner](./strategic-planner.md) - For developing business strategies
- [Financial Analyzer](./financial-analyzer.md) - For financial modeling and analysis
- [Research Synthesizer](../analysis/research-synthesizer.md) - For processing research data
## Tags
-1
View File
@@ -392,7 +392,6 @@ Create recovery plans for struggling businesses, including cost reduction, reven
## Related Prompts
- [Market Analysis](./market-analysis.md) - For understanding market dynamics
- [Financial Analyzer](./financial-analyzer.md) - For financial modeling and projections
- [Goal Setter](../productivity/goal-setter.md) - For setting and tracking objectives
## Tags
+181
View File
@@ -0,0 +1,181 @@
#!/usr/bin/env python3
"""
Internal file link checker for the prompt library.
This script validates internal file links (relative paths) while ignoring external HTTP(S) links.
"""
import argparse
import re
import sys
from pathlib import Path
def find_markdown_files(root_path: Path) -> list[Path]:
"""Find all markdown files in the repository."""
return list(root_path.rglob("*.md"))
def extract_internal_links(content: str, file_path: Path) -> list[tuple[str, int, str]]:
"""
Extract internal file links from markdown content.
Returns list of tuples: (link_text, line_number, link_target)
"""
internal_links = []
lines = content.split("\n")
# Patterns for different markdown link formats
patterns = [
# [text](path) - standard markdown links
r"\[([^\]]*)\]\(([^)]+)\)",
# [text]: path - reference-style links
r"^\s*\[([^\]]+)\]:\s*(.+)$",
]
for line_num, line in enumerate(lines, 1):
for pattern in patterns:
matches = re.finditer(pattern, line, re.MULTILINE)
for match in matches:
link_text = match.group(1)
link_target = match.group(2).strip()
# Skip HTTP(S) links
if link_target.startswith(("http://", "https://")):
continue
# Skip mailto links
if link_target.startswith("mailto:"):
continue
# Skip fragment-only links (anchors within same page)
if link_target.startswith("#"):
continue
# Remove fragment part from file links
clean_target = link_target.split("#")[0]
# Skip empty targets
if not clean_target:
continue
internal_links.append((link_text, line_num, clean_target))
return internal_links
def resolve_relative_path(source_file: Path, target_path: str) -> Path:
"""Resolve a relative path from the source file's directory."""
source_dir = source_file.parent
# Handle different path formats
if target_path.startswith("./"):
target_path = target_path[2:]
elif target_path.startswith("../"):
# Keep the ../ for proper resolution
pass
return (source_dir / target_path).resolve()
def check_file_links(root_path: Path, verbose: bool = False) -> tuple[int, int]:
"""
Check all internal file links in markdown files.
Returns tuple: (total_links_checked, broken_links_count)
"""
markdown_files = find_markdown_files(root_path)
total_links = 0
broken_links = 0
print(f"🔍 Checking internal file links in {len(markdown_files)} markdown files...")
for md_file in markdown_files:
try:
content = md_file.read_text(encoding="utf-8")
internal_links = extract_internal_links(content, md_file)
if verbose and internal_links:
print(f"\n📄 {md_file.relative_to(root_path)}")
for link_text, line_num, link_target in internal_links:
total_links += 1
# Resolve the target path
try:
resolved_path = resolve_relative_path(md_file, link_target)
# Check if the target file exists
if not resolved_path.exists():
broken_links += 1
print(
f"❌ BROKEN LINK in {md_file.relative_to(root_path)}:{line_num}"
)
print(f" Link text: '{link_text}'")
print(f" Target: '{link_target}'")
print(f" Resolved to: {resolved_path}")
print()
elif verbose:
print(f" ✅ Line {line_num}: '{link_text}' → {link_target}")
except Exception as e:
broken_links += 1
print(
f"❌ ERROR resolving link in "
f"{md_file.relative_to(root_path)}:{line_num}"
)
print(f" Link text: '{link_text}'")
print(f" Target: '{link_target}'")
print(f" Error: {e}")
print()
except Exception as e:
print(f"❌ ERROR reading file {md_file.relative_to(root_path)}: {e}")
continue
return total_links, broken_links
def main():
"""Main function."""
parser = argparse.ArgumentParser(
description="Check internal file links in markdown files"
)
parser.add_argument(
"--root",
type=Path,
default=Path.cwd(),
help="Root directory to scan (default: current directory)",
)
parser.add_argument(
"--verbose",
"-v",
action="store_true",
help="Show all links checked, not just broken ones",
)
args = parser.parse_args()
if not args.root.exists():
print(f"❌ Root directory does not exist: {args.root}")
return 1
print("🔗 Internal File Link Checker")
print("=" * 40)
print(f"Root directory: {args.root.absolute()}")
print()
total_links, broken_links = check_file_links(args.root, args.verbose)
print("=" * 40)
print("📊 Results:")
print(f" Total internal links checked: {total_links}")
print(f" Broken links found: {broken_links}")
if broken_links == 0:
print("🎉 All internal file links are valid!")
return 0
else:
print(f"❌ Found {broken_links} broken internal file links")
return 1
if __name__ == "__main__":
sys.exit(main())
+23 -3
View File
@@ -33,6 +33,27 @@ def run_markdown_lint():
return True
def run_internal_link_check():
"""Run internal file link checker."""
print("🔍 Running internal file link checks...")
try:
result = subprocess.run(
["python", "scripts/check-internal-links.py"],
capture_output=True,
text=True,
cwd=Path.cwd(),
)
print(result.stdout)
if result.stderr:
print(result.stderr)
return result.returncode == 0
except Exception as e:
print(f"❌ Internal link check failed: {e}")
return False
def run_template_compliance():
"""Run template compliance checker."""
print("🔍 Running template compliance checks...")
@@ -114,12 +135,11 @@ def check_directory_structure():
def main():
"""Run all validation checks."""
print("🚀 Prompt Library Validation Suite")
print("=" * 40)
checks = [
print("=" * 40) checks = [
check_required_files,
check_directory_structure,
run_template_compliance,
run_internal_link_check,
run_markdown_lint,
]