()
| 816 | |
| 817 | |
| 818 | def write_start_here_page() -> None: |
| 819 | cards = "\n".join(start_route_card(route) for route in START_ROUTES) |
| 820 | route_proof_cards = "\n".join( |
| 821 | f""" <a class="path-card" href="{site_path(route['href'])}"> |
| 822 | <strong>{escape_html(route['label'])}</strong> |
| 823 | <p>{escape_html(route['summary'])}</p> |
| 824 | <small>{escape_html(route['proof'])}</small> |
| 825 | </a>""" |
| 826 | for route in START_ROUTES |
| 827 | ) |
| 828 | content = f"""{frontmatter( |
| 829 | "Start Here", |
| 830 | description="Choose the right DevOps learning route before opening a project.", |
| 831 | )} |
| 832 | Use this page when you do not yet know which project to open. Pick the route |
| 833 | that matches your current goal, then move into the project cards and internal |
| 834 | lab pages. |
| 835 | |
| 836 | <div class="start-route-grid"> |
| 837 | {cards} |
| 838 | </div> |
| 839 | |
| 840 | ## Route Proof Checklist |
| 841 | |
| 842 | <div class="path-grid"> |
| 843 | {route_proof_cards} |
| 844 | </div> |
| 845 | |
| 846 | ## Before You Run Anything |
| 847 | |
| 848 | 1. Read the [credentials and cost safety guide]({site_path('/runbooks/credentials-and-cost-safety/')}). |
| 849 | 2. Prefer projects marked `Works locally: Yes` while learning a new tool. |
| 850 | 3. For cloud labs, confirm `Cleanup: Yes` or write your own destroy checklist before provisioning. |
| 851 | 4. Capture validation output and screenshots so the project becomes portfolio evidence, not only practice. |
| 852 | """ |
| 853 | path = TARGET_DOCS / "catalog" / "start-here.md" |
| 854 | path.parent.mkdir(parents=True, exist_ok=True) |
| 855 | path.write_text(content, encoding="utf-8") |
| 856 | |
| 857 | |
| 858 | def project_summary(project: dict) -> str: |
no test coverage detected