<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Cradicle Explorer</title>
    <link href="/css/bootstrap/bootstrap.min.css" rel="stylesheet">
    <style>
      .form-control-dark::placeholder {
          color: #aaa;
          opacity: 1;
      }
    </style>
    <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
    <link rel="icon" type="image/png" href="/favicon.png">


                <link href="/css/dashboard.css" rel="stylesheet">
                </head>
                <body>
                <header class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
                  <a class="navbar-brand col-md-3 col-lg-2 me-0 px-3 fs-6" href="/">Cradicle Explorer</a>
                  <button class="navbar-toggler position-absolute d-md-none collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                  </button>
                  <form method="get" action="/cgi-bin/main" style="width:100%;"><input class="form-control form-control-dark w-100 rounded-0 border-0" type="text" name="q" placeholder="Search repos" aria-label="Search"></form>
                  <div class="navbar-nav flex-row">
                    <div class="nav-item text-nowrap">
                      <a class="nav-link px-3 active" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh">ai-cv-deployment_cv</a>
                    </div>
                  </div>
                </header>
                <div class="container-fluid">
                  <div class="row">
                    <nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-dark sidebar collapse">
                      <div class="position-sticky pt-3 sidebar-sticky">
                        <ul class="nav flex-column">
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh">
                              <i class="align-text-bottom fa-solid fa-info"></i>
                              Info
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&issue=list">
                              <i class="align-text-bottom fa-solid fa-layer-group"></i>
                              Issues
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&patch=list">
                              <i class="align-text-bottom fa-solid fa-vest-patches"></i>
                              Patches
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&wallet=list">
                              <i class="align-text-bottom fa-solid fa-wallet"></i>
                              Wallets
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link active" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=.">
                              <i class="align-text-bottom fa-solid fa-code"></i>
                              Source
                            </a>
                          </li>
                        <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted text-uppercase">
                          <span></span>
                        </h6>
                        <ul class="nav flex-column mb-2">
                        
    <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-1 mb-1 text-muted text-uppercase">
      <span>Source</span>
    </h6>
    <li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=.claude"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> .claude</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=.github"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> .github</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=agents"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> agents</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=assets"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> assets</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=data"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> data</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=docs"><i class="fa-solid fa-folder-open" style="color:#f0c040;"></i> docs</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=docs%2Fplans"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> plans</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=docs%2Fresearch"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> research</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=docs%2Fsuperpowers"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> superpowers</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Fapi_integrations.md"><i class="fa-solid fa-file" style="color:#888;"></i> api_integrations.md</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Farchitecture.md"><i class="fa-solid fa-file" style="color:#888;"></i> architecture.md</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Fcontent-analysis.pdf"><i class="fa-solid fa-file" style="color:#888;"></i> content-analysis.pdf</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Fcontributing.md"><i class="fa-solid fa-file" style="color:#888;"></i> contributing.md</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Fdata_models.md"><i class="fa-solid fa-file" style="color:#888;"></i> data_models.md</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Fdeployment.md"><i class="fa-solid fa-file" style="color:#888;"></i> deployment.md</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Fgh-cli.md"><i class="fa-solid fa-file" style="color:#888;"></i> gh-cli.md</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Findex.md"><i class="fa-solid fa-file" style="color:#888;"></i> index.md</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Fprompt_construction.md"><i class="fa-solid fa-file" style="color:#888;"></i> prompt_construction.md</a></li><li><a class="nav-link py-0 active" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Fscript_reference.md"><i class="fa-solid fa-file" style="color:#888;"></i> script_reference.md</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Ftesting.md"><i class="fa-solid fa-file" style="color:#888;"></i> testing.md</a></li><li><a class="nav-link py-0" style="padding-left:32px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=docs%2Fworkflows.md"><i class="fa-solid fa-file" style="color:#888;"></i> workflows.md</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=prompts"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> prompts</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=src"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> src</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=tests"><i class="fa-solid fa-folder" style="color:#f0c040;"></i> tests</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=.gitignore"><i class="fa-solid fa-file" style="color:#888;"></i> .gitignore</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=.nojekyll"><i class="fa-solid fa-file" style="color:#888;"></i> .nojekyll</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=.pre-commit-config.yaml"><i class="fa-solid fa-file" style="color:#888;"></i> .pre-commit-config.yaml</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=AGENTS.md"><i class="fa-solid fa-file" style="color:#888;"></i> AGENTS.md</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=CLAUDE.md"><i class="fa-solid fa-file" style="color:#888;"></i> CLAUDE.md</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=CNAME"><i class="fa-solid fa-file" style="color:#888;"></i> CNAME</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=README.md"><i class="fa-solid fa-file" style="color:#888;"></i> README.md</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=apple-touch-icon.png"><i class="fa-solid fa-file" style="color:#888;"></i> apple-touch-icon.png</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=favicon.ico"><i class="fa-solid fa-file" style="color:#888;"></i> favicon.ico</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=favicon.svg"><i class="fa-solid fa-file" style="color:#888;"></i> favicon.svg</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=index.html"><i class="fa-solid fa-file" style="color:#888;"></i> index.html</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=jsdoc.json"><i class="fa-solid fa-file" style="color:#888;"></i> jsdoc.json</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=manifest.json"><i class="fa-solid fa-file" style="color:#888;"></i> manifest.json</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=mkdocs.yml"><i class="fa-solid fa-file" style="color:#888;"></i> mkdocs.yml</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=package-lock.json"><i class="fa-solid fa-file" style="color:#888;"></i> package-lock.json</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=package.json"><i class="fa-solid fa-file" style="color:#888;"></i> package.json</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=robots.txt"><i class="fa-solid fa-file" style="color:#888;"></i> robots.txt</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=sitemap.xml"><i class="fa-solid fa-file" style="color:#888;"></i> sitemap.xml</a></li><li><a class="nav-link py-0" style="padding-left:16px;" href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&file=watch-me-work.html"><i class="fa-solid fa-file" style="color:#888;"></i> watch-me-work.html</a></li>
    
                        </ul>
                      </div>
                    </nav>
                <main class="col-md-9 ms-sm-auto col-lg-10">
                  <div class="container px-1 py-3">
        
<div class="mb-2" style="font-size:1.1rem;"><a href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=.">/</a> <a href="/cgi-bin/repo?id=zWdbdfZhiUTmm1Rm4UfT2X5TFEPh&source=docs">docs</a> / script_reference.md</div>
        <div class="list-group">
        <div class="list-group-item">
        <div class="mb-2" style="font-weight:bold;"><i class="fa-solid fa-file"></i> script_reference.md</div>
        <pre style="margin:0; font-size:0.85rem; overflow-x:auto; color:#fafafa;"><span style="color:#666; user-select:none;">  1</span>  # Script Reference
<span style="color:#666; user-select:none;">  2</span>  
<span style="color:#666; user-select:none;">  3</span>  This section provides an overview of the main JavaScript and Python classes and their key methods used throughout the AI-enhanced CV system. For more detailed API documentation, please refer to the [JSDoc-generated HTML documentation](jsdoc_output/index.html) for JavaScript components.
<span style="color:#666; user-select:none;">  4</span>  
<span style="color:#666; user-select:none;">  5</span>  ## JavaScript Components
<span style="color:#666; user-select:none;">  6</span>  
<span style="color:#666; user-select:none;">  7</span>  ### `ActivityAnalyzer` (`.github/scripts/activity-analyzer.js`)
<span style="color:#666; user-select:none;">  8</span>  
<span style="color:#666; user-select:none;">  9</span>  **Role**: Responsible for collecting and analyzing GitHub activity data to generate professional metrics.
<span style="color:#666; user-select:none;"> 10</span>  
<span style="color:#666; user-select:none;"> 11</span>  ### Key Methods:
<span style="color:#666; user-select:none;"> 12</span>  
<span style="color:#666; user-select:none;"> 13</span>  *   `analyze()`: Runs the comprehensive activity analysis pipeline.
<span style="color:#666; user-select:none;"> 14</span>  *   `analyzeUserProfile()`: Analyzes basic user profile statistics.
<span style="color:#666; user-select:none;"> 15</span>  *   `analyzeRepositories()`: Analyzes user repositories with detailed metrics.
<span style="color:#666; user-select:none;"> 16</span>  *   `analyzeActivityPatterns()`: Analyzes activity patterns and contribution consistency.
<span style="color:#666; user-select:none;"> 17</span>  *   `calculateProfessionalMetrics()`: Calculates comprehensive professional development metrics.
<span style="color:#666; user-select:none;"> 18</span>  *   `analyzeSkillProficiency()`: Analyzes skill proficiency based on language usage and project complexity.
<span style="color:#666; user-select:none;"> 19</span>  
<span style="color:#666; user-select:none;"> 20</span>  ### `ClaudeApiClient` (`.github/scripts/claude-enhancer.js`)
<span style="color:#666; user-select:none;"> 21</span>  
<span style="color:#666; user-select:none;"> 22</span>  **Role**: Provides an enhanced HTTP client for interacting with the Claude API, including caching and token optimization.
<span style="color:#666; user-select:none;"> 23</span>  
<span style="color:#666; user-select:none;"> 24</span>  ### Key Methods:
<span style="color:#666; user-select:none;"> 25</span>  
<span style="color:#666; user-select:none;"> 26</span>  *   `makeRequest(messages, options, sourceContent)`: Makes a Claude API request with caching and token tracking.
<span style="color:#666; user-select:none;"> 27</span>  *   `httpRequest(url, options, maxRetries, retryDelay)`: HTTP request wrapper with retry logic and exponential backoff.
<span style="color:#666; user-select:none;"> 28</span>  *   `generateCacheKey(requestPayload, sourceContent)`: Generates a content-aware cache key for request deduplication.
<span style="color:#666; user-select:none;"> 29</span>  *   `getCachedResponse(cacheKey)`: Retrieves a cached response.
<span style="color:#666; user-select:none;"> 30</span>  *   `cacheResponse(cacheKey, response)`: Caches an API response.
<span style="color:#666; user-select:none;"> 31</span>  *   `getUsageStats()`: Returns token usage statistics.
<span style="color:#666; user-select:none;"> 32</span>  
<span style="color:#666; user-select:none;"> 33</span>  ### `CVContentEnhancer` (`.github/scripts/claude-enhancer.js`)
<span style="color:#666; user-select:none;"> 34</span>  
<span style="color:#666; user-select:none;"> 35</span>  **Role**: Orchestrates the multi-stage AI enhancement pipeline for professional CV content.
<span style="color:#666; user-select:none;"> 36</span>  
<span style="color:#666; user-select:none;"> 37</span>  ### Key Methods:
<span style="color:#666; user-select:none;"> 38</span>  
<span style="color:#666; user-select:none;"> 39</span>  *   `enhance()`: Runs the comprehensive CV content enhancement pipeline.
<span style="color:#666; user-select:none;"> 40</span>  *   `enhanceProfessionalSummary(cvData, activityMetrics)`: Enhances the professional summary with AI optimization.
<span style="color:#666; user-select:none;"> 41</span>  *   `enhanceSkillsSection(cvData, activityMetrics)`: Enhances the skills section with proficiency analysis.
<span style="color:#666; user-select:none;"> 42</span>  *   `enhanceExperience(cvData, activityMetrics)`: Enhances experience descriptions.
<span style="color:#666; user-select:none;"> 43</span>  *   `enhanceProjects(cvData, activityMetrics)`: Enhances project descriptions with impact analysis.
<span style="color:#666; user-select:none;"> 44</span>  *   `generateStrategicInsights(cvData, activityMetrics)`: Generates strategic career insights.
<span style="color:#666; user-select:none;"> 45</span>  
<span style="color:#666; user-select:none;"> 46</span>  ### `CVGenerator` (`.github/scripts/cv-generator.js`)
<span style="color:#666; user-select:none;"> 47</span>  
<span style="color:#666; user-select:none;"> 48</span>  **Role**: Compiles all CV data sources into a production-ready website with verified GitHub metrics integration.
<span style="color:#666; user-select:none;"> 49</span>  
<span style="color:#666; user-select:none;"> 50</span>  ### Key Methods:
<span style="color:#666; user-select:none;"> 51</span>  
<span style="color:#666; user-select:none;"> 52</span>  *   `generate()`: Runs the complete CV website generation pipeline with GitHub data integration.
<span style="color:#666; user-select:none;"> 53</span>  *   `loadDataSources()`: Loads and validates all data sources including activity data, CV data, and AI enhancements.
<span style="color:#666; user-select:none;"> 54</span>  *   `validateActivityData()`: Validates and sanitizes GitHub activity metrics for data integrity.
<span style="color:#666; user-select:none;"> 55</span>  *   `updateGitHubMetrics(htmlContent)`: Replaces placeholder metrics with verified GitHub data.
<span style="color:#666; user-select:none;"> 56</span>  *   `updateStructuredDataWithGitHubSkills(htmlContent)`: Enhances structured data with GitHub-verified skills.
<span style="color:#666; user-select:none;"> 57</span>  *   `calculateCredibilityScore(summary, professionalMetrics)`: Calculates data integrity score based on GitHub metrics completeness.
<span style="color:#666; user-select:none;"> 58</span>  
<span style="color:#666; user-select:none;"> 59</span>  ### GitHub Data Integration Features:
<span style="color:#666; user-select:none;"> 60</span>  
<span style="color:#666; user-select:none;"> 61</span>  *   **Real-time Metrics**: Displays actual GitHub commit counts, activity scores, and contribution data
<span style="color:#666; user-select:none;"> 62</span>  *   **Data Validation**: Comprehensive validation and sanitization of all GitHub metrics
<span style="color:#666; user-select:none;"> 63</span>  *   **Fallback Mechanisms**: Graceful degradation when GitHub data is unavailable
<span style="color:#666; user-select:none;"> 64</span>  *   **Credibility Scoring**: Transparency scoring based on data verification and completeness
<span style="color:#666; user-select:none;"> 65</span>  *   **Skills Enhancement**: Structured data enhanced with GitHub-verified programming languages
<span style="color:#666; user-select:none;"> 66</span>  *   `generateHTML()`: Generates the HTML file with dynamic content.
<span style="color:#666; user-select:none;"> 67</span>  *   `processHTMLTemplate(htmlContent)`: Processes the HTML template with dynamic data.
<span style="color:#666; user-select:none;"> 68</span>  *   `copyAssets()`: Copies assets to the output directory.
<span style="color:#666; user-select:none;"> 69</span>  *   `generateSitemap()`: Generates `sitemap.xml`.
<span style="color:#666; user-select:none;"> 70</span>  *   `generateRobotsTxt()`: Generates `robots.txt`.
<span style="color:#666; user-select:none;"> 71</span>  *   `generateManifest()`: Generates web manifest.
<span style="color:#666; user-select:none;"> 72</span>  *   `generateGitHubPagesFiles()`: Generates GitHub Pages specific files.
<span style="color:#666; user-select:none;"> 73</span>  *   `generatePDF()`: Generates a high-quality PDF from the generated HTML.
<span style="color:#666; user-select:none;"> 74</span>  
<span style="color:#666; user-select:none;"> 75</span>  ### `CVApplication` (`assets/script.js`)
<span style="color:#666; user-select:none;"> 76</span>  
<span style="color:#666; user-select:none;"> 77</span>  **Role**: The main application controller for the interactive frontend of the CV.
<span style="color:#666; user-select:none;"> 78</span>  
<span style="color:#666; user-select:none;"> 79</span>  ### Key Methods:
<span style="color:#666; user-select:none;"> 80</span>  
<span style="color:#666; user-select:none;"> 81</span>  *   `init()`: Initializes the application.
<span style="color:#666; user-select:none;"> 82</span>  *   `setupEventListeners()`: Sets up event listeners for user interactions.
<span style="color:#666; user-select:none;"> 83</span>  *   `setupNavigationSystem()`: Sets up the navigation system.
<span style="color:#666; user-select:none;"> 84</span>  *   `setupThemeToggle()`: Sets up theme toggle functionality.
<span style="color:#666; user-select:none;"> 85</span>  *   `loadApplicationData()`: Loads application data from various sources.
<span style="color:#666; user-select:none;"> 86</span>  *   `initializeLiveStats()`: Initializes live statistics display.
<span style="color:#666; user-select:none;"> 87</span>  *   `updateLiveStats()`: Updates live statistics in the header.
<span style="color:#666; user-select:none;"> 88</span>  *   `initializeContentSections()`: Initializes content sections.
<span style="color:#666; user-select:none;"> 89</span>  *   `navigateToSection(sectionId)`: Navigates to a specific section.
<span style="color:#666; user-select:none;"> 90</span>  *   `toggleTheme()`: Toggles theme between dark and light.
<span style="color:#666; user-select:none;"> 91</span>  *   `refreshLiveData()`: Refreshes live data.
<span style="color:#666; user-select:none;"> 92</span>  
<span style="color:#666; user-select:none;"> 93</span>  ## Python Components
<span style="color:#666; user-select:none;"> 94</span>  
<span style="color:#666; user-select:none;"> 95</span>  ### `ConfigManager` (`src/python/config_manager/config_manager.py`)
<span style="color:#666; user-select:none;"> 96</span>  
<span style="color:#666; user-select:none;"> 97</span>  **Role**: Manages application configurations from `.ini` files and environment variables.
<span style="color:#666; user-select:none;"> 98</span>  
<span style="color:#666; user-select:none;"> 99</span>  ### Key Methods:
<span style="color:#666; user-select:none;">100</span>  
<span style="color:#666; user-select:none;">101</span>  *   `__init__(config_file=None)`: Initializes the ConfigManager, optionally loading from a file.
<span style="color:#666; user-select:none;">102</span>  *   `get(section, option, default=None)`: Retrieves a configuration value, prioritizing environment variables.
<span style="color:#666; user-select:none;">103</span>  *   `get_int(section, option, default=None)`: Retrieves an integer configuration value.
<span style="color:#666; user-select:none;">104</span>  *   `get_boolean(section, option, default=None)`: Retrieves a boolean configuration value.
<span style="color:#666; user-select:none;">105</span>  
<span style="color:#666; user-select:none;">106</span>  ### `DataValidator` (`src/python/data_validation/data_validator.py`)
<span style="color:#666; user-select:none;">107</span>  
<span style="color:#666; user-select:none;">108</span>  **Role**: Provides static methods for common data validation tasks.
<span style="color:#666; user-select:none;">109</span>  
<span style="color:#666; user-select:none;">110</span>  ### Key Methods:
<span style="color:#666; user-select:none;">111</span>  
<span style="color:#666; user-select:none;">112</span>  *   `is_not_empty(value, field_name=&quot;Value&quot;)`: Checks if a value is not None and not empty.
<span style="color:#666; user-select:none;">113</span>  *   `is_type(value, expected_type, field_name=&quot;Value&quot;)`: Checks if a value is of the expected type.
<span style="color:#666; user-select:none;">114</span>  *   `is_in_range(value, min_val, max_val, field_name=&quot;Value&quot;)`: Checks if a numeric value is within a specified range.
<span style="color:#666; user-select:none;">115</span>  *   `matches_regex(value, pattern, field_name=&quot;Value&quot;)`: Checks if a string matches a regex pattern.
<span style="color:#666; user-select:none;">116</span>  *   `is_email(value, field_name=&quot;Email&quot;)`: Checks if a string is a valid email format.
<span style="color:#666; user-select:none;">117</span>  *   `is_url(value, field_name=&quot;URL&quot;)`: Checks if a string is a valid URL format.
<span style="color:#666; user-select:none;">118</span>  
<span style="color:#666; user-select:none;">119</span>  ### Logging Utilities (`src/python/utils/logging_utils.py`)
<span style="color:#666; user-select:none;">120</span>  
<span style="color:#666; user-select:none;">121</span>  **Role**: Provides functions for setting up and managing application logging.
<span style="color:#666; user-select:none;">122</span>  
<span style="color:#666; user-select:none;">123</span>  ### Key Functions:
<span style="color:#666; user-select:none;">124</span>  
<span style="color:#666; user-select:none;">125</span>  *   `setup_logger(name, log_file, level=logging.INFO)`: Sets up a logger that writes to a file and the console.
<span style="color:#666; user-select:none;">126</span>  
<span style="color:#666; user-select:none;">127</span>  ### `MetricsCollector` (`src/python/utils/logging_utils.py`)
<span style="color:#666; user-select:none;">128</span>  
<span style="color:#666; user-select:none;">129</span>  **Role**: A simple class to collect and store application metrics.
<span style="color:#666; user-select:none;">130</span>  
<span style="color:#666; user-select:none;">131</span>  ### Key Methods:
<span style="color:#666; user-select:none;">132</span>  
<span style="color:#666; user-select:none;">133</span>  *   `__init__()`: Initializes the MetricsCollector.
<span style="color:#666; user-select:none;">134</span>  *   `collect(name, value)`: Collects a single metric.
<span style="color:#666; user-select:none;">135</span>  *   `get_metrics()`: Returns all collected metrics.
<span style="color:#666; user-select:none;">136</span>  *   `save_metrics(file_path)`: Saves the collected metrics to a JSON file.
<span style="color:#666; user-select:none;">137</span>  
<span style="color:#666; user-select:none;">138</span>  ### External API Wrappers (`src/python/api_wrappers/external_apis.py`)
<span style="color:#666; user-select:none;">139</span>  
<span style="color:#666; user-select:none;">140</span>  **Role**: Provides wrappers for interacting with third-party APIs (e.g., firmographics, funding data).
<span style="color:#666; user-select:none;">141</span>  
<span style="color:#666; user-select:none;">142</span>  ### Key Classes:
<span style="color:#666; user-select:none;">143</span>  
<span style="color:#666; user-select:none;">144</span>  *   `AbstractApiWrapper`: Wrapper for the Abstract API for firmographics data.
<span style="color:#666; user-select:none;">145</span>      *   `get_company_info(domain)`: Fetches company information by domain.
<span style="color:#666; user-select:none;">146</span>  *   `IntellizenceApiWrapper`: Wrapper for the Intellizence Startup Funding Dataset API.
<span style="color:#666; user-select:none;">147</span>      *   `get_funding_data(query_params=None)`: Fetches funding data based on query parameters.
</pre>
        </div>
        </div>

</div>
</main>
</div>
</div>


</body>
</html>

