sahin.io

All skills and agents

page-angel-guides-reports

The long-form angel investing reports and guides on sahin.io/angel-investments (State of Angel Investing 2026 and 2025, Angel Investor Guide, Angel Investor vs VC, Angel Investing Returns, Angel Investor Networks, Angel Investing Tax Benefits, Pre-Seed vs Seed). Use when building, rebuilding or changing any of these React article pages, their YAML copy or their computed portfolio figures.

Source file
.claude/skills/page-angel-guides-reports/SKILL.md
Routes covered
/state-of-angel-investing-2026/state-of-angel-investing-2025/angel-investor-guide/angel-investor-vs-vc/angel-investing-returns/angel-investor-networks/angel-investing-tax-benefits/pre-seed-vs-seed

Angel guides and reports

Routes

URL (https://sahin.io/angel-investments/...) Manifest kind React kind Props builder Copy
state-of-angel-investing-2026 legacyFeature (menu) stateOfAngel stateOfAngel.ts state-of-angel-investing-2026.yaml
state-of-angel-investing-2025 reactPage stateOfAngel2025 stateOfAngel2025.ts state-of-angel-investing-2025.yaml
angel-investor-guide legacyFeature (menu) angelGuide angelGuide.ts angel-investor-guide.yaml
angel-investor-vs-vc legacyFeature (menu) angelVsVc angelVsVc.ts angel-investor-vs-vc.yaml
angel-investing-returns reactPage angelReturns angelReturns.ts angel-returns.yaml
angel-investor-networks reactPage angelNetworks angelNetworks.ts angel-networks.yaml
angel-investing-tax-benefits reactPage angelTax angelTax.ts angel-tax.yaml
pre-seed-vs-seed reactPage preSeedVsSeed preSeedVsSeed.ts pre-seed-vs-seed.yaml
  • 8 routes, all index. Builders live in server/publicPages/, copy in content/pages/.
  • Menu pages (2026 report, guide, vs VC) come from content/shared/navigation.yaml → LEGACY_MENU_PAGES (shared/publicNavigation.ts) and render the static shell with renderLegacyFeaturePage(); they map to React in reactPageForRoute() (server/publicReactPages.ts).
  • The other five are SINGLE_PAGES entries in server/reactPageRoutes.ts, static shell by renderReactShellPage().
  • Render path: React body for all eight (scripts/generate-static.ts).
  • Not to be confused with the Markdown guides at https://sahin.io/angel-investments/guides/{slug} (page-editorial). content/guides/angel-investor-vs-vc.md and pre-seed-vs-seed.md are drafts; if approved they would get /guides/... paths, not these.

Files

  • Components: client/src/publicPages/{StateOfAngel,StateOfAngel2025,AngelGuide,AngelVsVc,AngelReturns,AngelNetworks,AngelTax,PreSeedVsSeed}Page.tsx with matching *Types.ts; registered in types.ts, components.client.ts, components.server.ts.
  • CSS: client/src/publicPages/styles/{stateOfAngel,stateOfAngel2025,angelGuide,angelVsVc,angelReturns,angelNetworks,angelTax,preSeedVsSeed}.css, imported from client/src/index.css.
  • Shared guide block model: server/publicPages/guideContent.ts (YAML shape of a long-form article and conversion to typed blocks; used by returns, tax, vs VC, networks, pre-seed vs seed).
  • The 2025 report reuses the 2026 report's block model and renderer.
  • Data: ctx.companies, sourced company values via sourced() in server/publicReactPages.ts, public status, year founded from the enriched research records.
  • Meta descriptions for menu pages: content/pages/recovery-surfaces.yaml and the menu entry (RECOVERY_SURFACE_BY_PATH, MENU_DESCRIPTION_FEATURES in server/seoRouteManifest.ts).

Sections on the page

  • 2026 report: byline, executive summary, table of contents, ten numbered sections with stat tiles and tables; the portfolio section is computed from the current portfolio.
  • 2025 report: key finding, headline stats, executive summary, cohort table (by year founded), sector analysis, largest companies, strategy insights, methodology, about the author, resources.
  • Guide: sections, portfolio numbers, FAQ list (faqs.heading, faqs.items).
  • Returns / tax / vs VC / networks / pre-seed vs seed: hero, typed article blocks (paragraphs, tables, callouts, lists), related guides limited to routes that exist.

SEO

  • Title and description: meta in each YAML (<x>PageMeta) for SINGLE_PAGES; menu pages use the navigation title and the menu or recovery-surface description.
  • Canonical https://sahin.io/angel-investments/<path>; JSON-LD via buildPageGraph() (CollectionPage plus BreadcrumbList; menu pages add an ItemList of context links).
  • All indexable: sitemap, llms files, IndexNow. Query targeting: server/keyword-[redacted].test.ts.

Rules

  • Every word in YAML; code only computes numbers and fills {placeholders} (page-content-yaml).
  • Industry figures are authored copy; portfolio figures are computed from the portfolio (portfolio-counts-single-source). Company values are cited per company, never summed.
  • Never state when, how much or on what terms Sahin invested (private-data-boundary). The single portfolio return figure, if shown, only from data/portfolio-performance.yaml, never per company.
  • Links resolve only to routes in the current manifest.

Tests

server/content-in-yaml.test.ts, server/keyword-[redacted].test.ts, server/public-link-graph.test.ts, server/public-company-value.test.ts, server/public-content-policy.test.ts, server/seo-route-manifest.test.ts.

Rebuild from scratch

  1. Write the page YAML in content/pages/ (meta, hero, sections or blocks, FAQ, related links); run node scripts/sync-site-copy-module.mjs.
  2. Write the props builder in server/publicPages/ with loadPageContent(CONTENT_FILE, SHAPE); reuse guideContent.ts for block articles; compute portfolio numbers from ctx.
  3. Add types, component, registry entries and CSS (new-react-page, theme-system).
  4. Wire it: SINGLE_PAGES in server/reactPageRoutes.ts, or for a menu page a content/shared/navigation.yaml entry plus a branch in reactPageForRoute().
  5. deploy-gate, then ui-before-after, then ship-to-production.