Skip to content

Latest commit

 

History

History
1359 lines (1213 loc) · 55 KB

File metadata and controls

1359 lines (1213 loc) · 55 KB
layout page
full-width true
<style> /* Portfolio-specific styles */ .portfolio-section { margin: 3rem 0; } .portfolio-header { text-align: center; margin-bottom: 2rem; } .portfolio-header h2 { font-size: 2rem; font-weight: 700; color: #2c3e50; position: relative; display: inline-block; padding-bottom: 0.5rem; } .portfolio-header h2::after { content: ''; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 60px; height: 3px; background: linear-gradient(90deg, #ff7b00 0%, #e65100 100%); border-radius: 2px; } /* Project Cards */ .project-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 1.5rem; padding: 1rem 0; } .project-card { background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%); border-radius: 16px; padding: 1.5rem; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); border: 1px solid rgba(255, 123, 0, 0.1); position: relative; overflow: hidden; } .project-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, #ff7b00 0%, #e65100 50%, #ffab40 100%); } .project-card:hover { transform: translateY(-8px); box-shadow: 0 12px 40px rgba(255, 123, 0, 0.2); } .project-card h3 { color: #2c3e50; margin-bottom: 0.75rem; font-size: 1.25rem; font-weight: 600; } .project-card p { color: #5a6c7d; font-size: 0.95rem; line-height: 1.6; margin-bottom: 1rem; } .project-tags { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1rem; } .tag { background: linear-gradient(135deg, #ff7b00 0%, #e65100 100%); color: white; padding: 0.25rem 0.75rem; border-radius: 20px; font-size: 0.75rem; font-weight: 500; letter-spacing: 0.5px; } .tag.secondary { background: linear-gradient(135deg, #74b9ff 0%, #0984e3 100%); } .tag.accent { background: linear-gradient(135deg, #fd79a8 0%, #e84393 100%); } .project-link { display: inline-flex; align-items: center; gap: 0.5rem; color: #ff7b00; text-decoration: none; font-weight: 500; transition: color 0.2s; } .project-link:hover { color: #e65100; } /* Open Source Contributions */ .contribution-list { display: flex; flex-direction: column; gap: 1rem; } .contribution-item { display: flex; align-items: flex-start; gap: 1rem; padding: 1.25rem; background: #ffffff; border-radius: 12px; box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06); border-left: 4px solid #ff7b00; transition: all 0.3s ease; } .contribution-item:hover { box-shadow: 0 4px 20px rgba(255, 123, 0, 0.15); border-left-color: #e65100; } .contribution-icon { width: 48px; height: 48px; border-radius: 12px; background: linear-gradient(135deg, #ff7b00 0%, #e65100 100%); display: flex; align-items: center; justify-content: center; color: white; font-weight: bold; font-size: 1.25rem; flex-shrink: 0; } .contribution-content h4 { margin: 0 0 0.25rem 0; color: #2c3e50; font-size: 1rem; } .contribution-content p { margin: 0; color: #5a6c7d; font-size: 0.9rem; } .contribution-content a { color: #ff7b00; text-decoration: none; } .contribution-content a:hover { text-decoration: underline; } /* Skills Section - Option 3: Deep Orange */ .skills-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem; } .skill-category { background: linear-gradient(135deg, #c45000 0%, #b34700 50%, #e65100 100%); border-radius: 12px; padding: 1.5rem; box-shadow: 0 8px 24px rgba(196, 80, 0, 0.3); transition: all 0.3s ease; } .skill-category:hover { transform: translateY(-4px); box-shadow: 0 12px 32px rgba(196, 80, 0, 0.4); } .skill-category h4 { color: #ffd93d; margin-bottom: 1rem; font-size: 1rem; display: flex; align-items: center; gap: 0.5rem; text-shadow: 1px 1px 2px rgba(0,0,0,0.2); } .skill-list { display: flex; flex-wrap: wrap; gap: 0.5rem; } .skill-item { background: rgba(255, 255, 255, 0.2); color: #ffffff; padding: 0.35rem 0.75rem; border-radius: 6px; font-size: 0.85rem; transition: all 0.2s; } .skill-item:hover { background: rgba(255, 255, 255, 0.35); color: #ffd93d; } /* Quote section */ .quote-section { text-align: center; padding: 3rem 2rem; background: linear-gradient(135deg, #c45000 0%, #b34700 50%, #e65100 100%); border-radius: 20px; margin: 3rem 0; color: white; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2); } .quote-section blockquote { font-size: 1.8rem; font-weight: 600; font-style: normal; margin-bottom: 1rem; border: none; padding: 0.5rem 1rem; text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); letter-spacing: 0.05em; position: relative; min-height: 2.5em; } .sanskrit-quote { display: block; position: relative; } .typewriter-text { display: inline-block; border-right: 3px solid white; animation: blink 0.7s step-end infinite; white-space: nowrap; overflow: hidden; } @keyframes blink { 0%, 100% { border-color: white; } 50% { border-color: transparent; } } .quote-section cite { font-size: 1rem; opacity: 1; display: block; margin-top: 0.5rem; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); } /* Contact CTA */ .contact-cta { text-align: center; padding: 2rem; background: #f8f9fa; border-radius: 16px; margin-top: 2rem; } .contact-cta h3 { color: #2c3e50; margin-bottom: 1rem; } .cta-buttons { display: flex; justify-content: center; gap: 1rem; flex-wrap: wrap; } .cta-btn { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1.5rem; border-radius: 8px; text-decoration: none; font-weight: 500; transition: all 0.3s; } .cta-btn.primary { background: linear-gradient(135deg, #ff7b00 0%, #e65100 100%); color: white; } .cta-btn.primary:hover { transform: translateY(-2px); box-shadow: 0 4px 15px rgba(255, 123, 0, 0.4); } .cta-btn.secondary { background: white; color: #ff7b00; border: 2px solid #ff7b00; } .cta-btn.secondary:hover { background: #ff7b00; color: white; } /* Carousel Styles */ .carousel-section { margin: 3rem 0; overflow: hidden; } .carousel-container { position: relative; width: 100%; overflow: hidden; padding: 1rem 0; } .carousel-track { display: flex; gap: 1.5rem; animation: scroll 80s linear infinite alternate; width: max-content; } .carousel-track:hover { animation-play-state: paused; } @keyframes scroll { from { transform: translateX(0); } to { transform: translateX(calc(-100% + 100vw)); } } /* Option 3: Deep Orange for Merged Cards */ .merged-card { flex-shrink: 0; width: 320px; background: linear-gradient(135deg, #c45000 0%, #b34700 50%, #e65100 100%); border-radius: 16px; padding: 1.5rem; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: 0 8px 24px rgba(196, 80, 0, 0.3); } .merged-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, #ffab40 0%, #ffd93d 100%); } .merged-card::after { content: '✓ MERGED'; position: absolute; top: 12px; right: 12px; background: linear-gradient(135deg, #ffd93d 0%, #ffab40 100%); color: #7a3300; font-size: 0.65rem; font-weight: 700; padding: 0.25rem 0.5rem; border-radius: 4px; letter-spacing: 0.5px; } .merged-card:hover { transform: translateY(-4px) scale(1.02); box-shadow: 0 20px 40px rgba(196, 80, 0, 0.4); } .merged-card-icon { width: 50px; height: 50px; border-radius: 12px; background: rgba(255, 255, 255, 0.2); display: flex; align-items: center; justify-content: center; font-size: 1.5rem; margin-bottom: 1rem; } .merged-card h4 { color: #ffffff; font-size: 1rem; font-weight: 600; margin: 0 0 0.5rem 0; line-height: 1.3; text-shadow: 1px 1px 2px rgba(0,0,0,0.2); } .merged-card .repo-name { color: #ffd93d; font-size: 0.8rem; font-weight: 500; margin-bottom: 0.75rem; display: flex; align-items: center; gap: 0.5rem; } .merged-card .repo-name svg { width: 14px; height: 14px; } .merged-card p { color: rgba(255, 255, 255, 0.9); font-size: 0.85rem; line-height: 1.5; margin: 0 0 1rem 0; } .merged-card-tags { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 1rem; } .merged-tag { background: rgba(255, 255, 255, 0.2); color: #ffffff; padding: 0.2rem 0.5rem; border-radius: 4px; font-size: 0.7rem; font-weight: 500; } .merged-card-link { display: inline-flex; align-items: center; gap: 0.4rem; color: #ffd93d; text-decoration: none; font-size: 0.85rem; font-weight: 500; transition: all 0.2s; } .merged-card-link:hover { color: #ffffff; gap: 0.6rem; } /* Option 1: Dark + Orange Accents for Ongoing Cards */ .ongoing-card { flex-shrink: 0; width: 320px; background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%); border-radius: 16px; padding: 1.5rem; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .ongoing-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, #ff7b00 0%, #e65100 50%, #ffab40 100%); } .ongoing-card:hover { transform: translateY(-4px) scale(1.02); box-shadow: 0 20px 40px rgba(255, 123, 0, 0.2); } .ongoing-card .merged-card-icon { background: linear-gradient(135deg, rgba(255, 123, 0, 0.2) 0%, rgba(230, 81, 0, 0.2) 100%); } .ongoing-card h4 { color: #ffffff; font-size: 1rem; font-weight: 600; margin: 0 0 0.5rem 0; line-height: 1.3; } .ongoing-card .repo-name { color: #ff7b00; font-size: 0.8rem; font-weight: 500; margin-bottom: 0.75rem; display: flex; align-items: center; gap: 0.5rem; } .ongoing-card .repo-name svg { width: 14px; height: 14px; } .ongoing-card p { color: #a0aec0; font-size: 0.85rem; line-height: 1.5; margin: 0 0 1rem 0; } .ongoing-card .merged-tag { background: rgba(255, 123, 0, 0.2); color: #ffab40; } .ongoing-card .merged-card-link { color: #ff7b00; } .ongoing-card .merged-card-link:hover { color: #ffab40; } .carousel-controls { display: flex; justify-content: center; gap: 0.5rem; margin-top: 1.5rem; } .carousel-dot { width: 8px; height: 8px; border-radius: 50%; background: #cbd5e0; border: none; cursor: pointer; transition: all 0.3s; } .carousel-dot.active, .carousel-dot:hover { background: linear-gradient(135deg, #ff7b00 0%, #e65100 100%); transform: scale(1.2); } .merged-stats { display: flex; justify-content: center; gap: 3rem; margin-top: 2rem; padding: 1.5rem; background: linear-gradient(135deg, rgba(255, 123, 0, 0.05) 0%, rgba(230, 81, 0, 0.08) 100%); border-radius: 12px; } .stat-item { text-align: center; } .stat-number { font-size: 2.5rem; font-weight: 700; background: linear-gradient(135deg, #ff7b00 0%, #e65100 50%, #c45000 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .stat-label { color: #5a6c7d; font-size: 0.85rem; margin-top: 0.25rem; } @media (max-width: 768px) { .project-grid { grid-template-columns: 1fr; } .contribution-item { flex-direction: column; text-align: center; } .contribution-icon { margin: 0 auto; } .merged-card { width: 280px; } .merged-stats { gap: 1.5rem; flex-wrap: wrap; } .stat-number { font-size: 2rem; } } </style>

Merged Contributions

vercel/next.js

Cache Handler file:// URL Fix

Handle file:// URLs from import.meta.resolve in cache handler path.

TypeScript Framework
View PR #90370 →
  <div class="merged-card">
    <div class="merged-card-icon">🦀</div>
    <div class="repo-name">
      <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
      astral-sh/ruff
    </div>
    <h4>Fix Stack Overflow in ANN401</h4>
    <p>Fix stack overflow on quoted annotations with escape sequences.</p>
    <div class="merged-card-tags">
      <span class="merged-tag">Rust</span>
      <span class="merged-tag">Linter</span>
    </div>
    <a href="https://github.com/astral-sh/ruff/pull/23912" class="merged-card-link" target="_blank">View PR #23912 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🐳</div>
    <div class="repo-name">
      <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
      moby/moby
    </div>
    <h4>Fix Goroutine Leak in TestRingLogger</h4>
    <p>Fixed goroutine leak in Docker daemon ring logger test.</p>
    <div class="merged-card-tags">
      <span class="merged-tag">Go</span>
      <span class="merged-tag">Docker</span>
    </div>
    <a href="https://github.com/moby/moby/pull/51854" class="merged-card-link" target="_blank">View PR #51854 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🐼</div>
    <div class="repo-name">
      <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
      pandas-dev/pandas
    </div>
    <h4>PyArrow Dtype Retention Test</h4>
    <p>Add test for groupby.var() pyarrow dtype retention.</p>
    <div class="merged-card-tags">
      <span class="merged-tag">Python</span>
      <span class="merged-tag">Data</span>
    </div>
    <a href="https://github.com/pandas-dev/pandas/pull/63704" class="merged-card-link" target="_blank">View PR #63704 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🦖</div>
    <div class="repo-name">
      <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
      facebook/docusaurus
    </div>
    <h4>Markdown File Path Links</h4>
    <p>Add support for Markdown file path links in pages plugin.</p>
    <div class="merged-card-tags">
      <span class="merged-tag">TypeScript</span>
      <span class="merged-tag">Docs</span>
    </div>
    <a href="https://github.com/facebook/docusaurus/pull/11666" class="merged-card-link" target="_blank">View PR #11666 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🤖</div>
    <div class="repo-name">
      <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
      OpenHands/OpenHands
    </div>
    <h4>Dismissible Error Banner UX</h4>
    <p>Improved frontend error banner with dismiss and expand functionality.</p>
    <div class="merged-card-tags">
      <span class="merged-tag">TypeScript</span>
      <span class="merged-tag">React</span>
      <span class="merged-tag">UX</span>
    </div>
    <a href="https://github.com/OpenHands/OpenHands/pull/12354" class="merged-card-link" target="_blank">View PR #12354 →</a>
  </div>
  
  <div class="merged-card">
    <div class="merged-card-icon">🧪</div>
    <div class="repo-name">
      <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
      tox-dev/tox
    </div>
    <h4>Fix misleading ENVDIR reference</h4>
    <p>Aligned devenv docs with the actual CLI parameter to avoid confusion.</p>
    <div class="merged-card-tags">
      <span class="merged-tag">Python</span>
      <span class="merged-tag">Docs</span>
      <span class="merged-tag">CLI</span>
    </div>
    <a href="https://github.com/tox-dev/tox/pull/3670" class="merged-card-link" target="_blank">
      View PR #3670 →
    </a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🔧</div>
    <div class="repo-name">
      <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
      jd/tenacity
    </div>
    <h4>Fix wait_chain docstring syntax</h4>
    <p>Repaired the example to prevent syntax errors when copied by users.</p>
    <div class="merged-card-tags">
      <span class="merged-tag">Python</span>
      <span class="merged-tag">Docs</span>
      <span class="merged-tag">Resilience</span>
    </div>
    <a href="https://github.com/jd/tenacity/pull/548" class="merged-card-link" target="_blank">
      View PR #548 →
    </a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">📦</div>
    <div class="repo-name">
      <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
      pnpm/pnpm
    </div>
    <h4>Show workspace versions on mismatch</h4>
    <p>Improved workspace resolution hints to speed up monorepo troubleshooting.</p>
    <div class="merged-card-tags">
      <span class="merged-tag">JavaScript</span>
      <span class="merged-tag">CLI</span>
      <span class="merged-tag">Monorepo</span>
    </div>
    <a href="https://github.com/pnpm/pnpm/pull/10466" class="merged-card-link" target="_blank">
      View PR #10466 →
    </a>
  </div>
  
  <div class="merged-card">
    <div class="merged-card-icon">🔥</div>
    <div class="repo-name">
      <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
      infiniflow/ragflow
    </div>
    <h4>Chunk Retrieval Fix</h4>
    <p>Ensure deleted chunks are not returned in retrieval results.</p>
    <div class="merged-card-tags">
      <span class="merged-tag">Python</span>
      <span class="merged-tag">RAG</span>
      <span class="merged-tag">Backend</span>
    </div>
    <a href="https://github.com/infiniflow/ragflow/pull/12546" class="merged-card-link" target="_blank">
      View PR #12546 →
    </a>
  </div>
  
  <div class="merged-card">
    <div class="merged-card-icon">🎯</div>
    <div class="repo-name">
      <svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
      optuna/optuna
    </div>
    <h4>Replace .format() with f-strings</h4>
    <p>Modernized string formatting in codebase using Python f-strings for better readability.</p>
    <div class="merged-card-tags">
      <span class="merged-tag">Python</span>
      <span class="merged-tag">ML</span>
      <span class="merged-tag">Refactor</span>
    </div>
    <a href="https://github.com/optuna/optuna/pull/6412" class="merged-card-link" target="_blank">View PR #6412 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🗄️</div>
    <div class="repo-name"><svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> lancedb/lancedb</div>
    <h4>Float16/64 & Uint8 Vector Queries</h4>
    <p>Support Float16, Float64, and Uint8 vector queries in Node.js SDK.</p>
    <div class="merged-card-tags"><span class="merged-tag">TypeScript</span><span class="merged-tag">VectorDB</span></div>
    <a href="https://github.com/lancedb/lancedb/pull/3193" class="merged-card-link" target="_blank">View PR #3193 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🐳</div>
    <div class="repo-name"><svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> docker/model-runner</div>
    <h4>Expose Richer Model Metadata</h4>
    <p>Expose richer model metadata in the v1/models API endpoint.</p>
    <div class="merged-card-tags"><span class="merged-tag">Go</span><span class="merged-tag">Docker</span><span class="merged-tag">AI</span></div>
    <a href="https://github.com/docker/model-runner/pull/721" class="merged-card-link" target="_blank">View PR #721 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🍱</div>
    <div class="repo-name"><svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> bentoml/BentoML</div>
    <h4>SQLite Concurrency Fix</h4>
    <p>Resolve 'database is locked' errors under high concurrency with WAL mode.</p>
    <div class="merged-card-tags"><span class="merged-tag">Python</span><span class="merged-tag">ML</span><span class="merged-tag">Backend</span></div>
    <a href="https://github.com/bentoml/BentoML/pull/5558" class="merged-card-link" target="_blank">View PR #5558 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🔍</div>
    <div class="repo-name"><svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> deepset-ai/haystack</div>
    <h4>DocumentCleaner Features</h4>
    <p>Add strip_whitespaces and replace_regexes to DocumentCleaner.</p>
    <div class="merged-card-tags"><span class="merged-tag">Python</span><span class="merged-tag">RAG</span></div>
    <a href="https://github.com/deepset-ai/haystack/pull/10400" class="merged-card-link" target="_blank">View PR #10400 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🦙</div>
    <div class="repo-name"><svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> run-llama/llama_index</div>
    <h4>vLLM Server Mode</h4>
    <p>Add OpenAI-like server mode for VllmServer integration.</p>
    <div class="merged-card-tags"><span class="merged-tag">Python</span><span class="merged-tag">LLM</span></div>
    <a href="https://github.com/run-llama/llama_index/pull/20537" class="merged-card-link" target="_blank">View PR #20537 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">💰</div>
    <div class="repo-name"><svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> BerriAI/litellm</div>
    <h4>Cache Prefix Extraction Fix</h4>
    <p>Fix extract_cacheable_prefix to handle string content with cache_control.</p>
    <div class="merged-card-tags"><span class="merged-tag">Python</span><span class="merged-tag">LLM</span></div>
    <a href="https://github.com/BerriAI/litellm/pull/19266" class="merged-card-link" target="_blank">View PR #19266 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">📓</div>
    <div class="repo-name"><svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> marimo-team/marimo</div>
    <h4>SQL f-string Parsing Fix</h4>
    <p>Fix SQL f-string placeholder causing parsing errors in interval expressions.</p>
    <div class="merged-card-tags"><span class="merged-tag">Python</span><span class="merged-tag">Notebook</span></div>
    <a href="https://github.com/marimo-team/marimo/pull/7881" class="merged-card-link" target="_blank">View PR #7881 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🛡️</div>
    <div class="repo-name"><svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> aquasecurity/trivy</div>
    <h4>Go 1.26 Version Format Fix</h4>
    <p>Handle Go 1.26 GOEXPERIMENT version format change.</p>
    <div class="merged-card-tags"><span class="merged-tag">Go</span><span class="merged-tag">Security</span></div>
    <a href="https://github.com/aquasecurity/trivy/pull/10351" class="merged-card-link" target="_blank">View PR #10351 →</a>
  </div>

  <div class="merged-card">
    <div class="merged-card-icon">🕉️</div>
    <div class="repo-name"><svg viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> kmadathil/sanskrit_parser</div>
    <h4>72x Performance Speedup</h4>
    <p>LRU caching and optimized parsing pipeline for Sanskrit morphological analysis.</p>
    <div class="merged-card-tags"><span class="merged-tag">Python</span><span class="merged-tag">NLP</span><span class="merged-tag">Sanskrit</span></div>
    <a href="https://github.com/kmadathil/sanskrit_parser/pull/189" class="merged-card-link" target="_blank">View PR #189 →</a>
  </div>
</div>
42
PRs Merged
50
Ongoing PRs
5
Languages
80+
Repos Contributed

🔥 Ongoing Contributions

🧠
stanfordnlp/dspy

Cost Tracking

Add cost tracking with budget constraints for LLM calls.

PythonAI
View PR #9207 →
🔗
langchain-ai/langchain

vLLM Fix

Handle null choices from model_dump() for vLLM compatibility.

PythonLLM
View PR #34791 →
vitejs/vite

HTML Path Fix

Handle trailing slash in htmlPath for relative URL pre-transform.

TypeScriptBuild
View PR #21429 →
🍱
bentoml/BentoML

src-layout Support

Native support for src-layout projects during bentoml build.

PythonML
View PR #5555 →
🔧
conda/conda

Type Hints for common/io

Add type hints to conda/common/io module.

PythonCLI
View PR #15773 →
🐘
grafana/grafana

Validation Error Details

Include validation error details in 4xx API responses.

GoObservability
View PR #118681 →
📦
moby/buildkit

Platform-Suffixed Config Keys

Support platform-suffixed config keys in container image exporter.

GoDocker
View PR #6544 →
🦕
denoland/deno

DENO_INSTALL_ROOT Fix

Use DENO_INSTALL_ROOT directly without appending bin.

RustRuntime
View PR #32280 →
🔎
meilisearch/meilisearch

Streaming Document Retrieval

Implement streaming for document retrieval to avoid OOM crashes.

RustSearch
View PR #6171 →
🔬
microsoft/TypeScript

JSON.rawJSON Lib Types

Add lib types for JSON.rawJSON, JSON.isRawJSON, and reviver context.

TypeScriptStdlib
View PR #63248 →

🚀 Featured Projects

        <div class="project-card">
  <h3>दीर्घायु (Dīrghayu) - DNA Analysis</h3>
  <p>India-First Longevity Genomics Platform for Whole Genome Analysis with AI-powered health insights.</p>
  <div class="project-tags">
    <span class="tag">MedTech</span>
    <span class="tag secondary">Biopython</span>
    <span class="tag accent">Genomics</span>
    <span class="tag accent">DNA Mapping and Analysis</span>
  </div>
  <a href="https://github.com/VedantMadane/dirghayu" class="project-link">
    Map My DNA for Hereditary Risks
  </a>
</div>

    <div class="project-card">
  <h3>वेदयुत्  (vedyut) - Sanskrit Grammar Parser</h3>
  <p>High-performance Sanskrit NLP toolkit with Rust core + Python bindings using FastAPI REST API which is LLM-ready.</p>
  <div class="project-tags">
    <span class="tag">NLP</span>
    <span class="tag secondary">Sanskrit</span>
    <span class="tag accent">Computational Linguistics</span>
  </div>
  <a href="https://github.com/VedantMadane/vedyut" class="project-link">
    Generate Language →
  </a>
</div>

    <div class="project-card">
  <h3>महाभारत (Mahābhārata) NLP Pipeline</h3>
  <p>A comprehensive NLP pipeline for processing and analyzing the Sanskrit epic Mahābhārata. Features text preprocessing, morphological analysis, and semantic search capabilities.</p>
  <div class="project-tags">
    <span class="tag">Sanskrit</span>
    <span class="tag secondary">NLP</span>
    <span class="tag accent">Python</span>
  </div>
  <a href="https://vedantmadane.github.io/maha/poster" class="project-link">
    View Project →
  </a>
</div>

<div class="project-card">
  <h3>Real-time Face Detection</h3>
  <p>Browser-based multi-face detection system using WebRTC and TensorFlow.js. Detects and tracks multiple faces in real-time with bounding boxes.</p>
  <div class="project-tags">
    <span class="tag">TensorFlow.js</span>
    <span class="tag secondary">WebRTC</span>
    <span class="tag accent">Real-time</span>
  </div>
  <a href="https://vedantmadane.github.io/mkcl/camera/detect/#/" class="project-link">
    Try Demo →
  </a>
</div>

<div class="project-card">
  <h3>Posture Detection System</h3>
  <p>AI-powered posture analysis tool that helps users maintain proper sitting posture. Uses pose estimation to provide real-time feedback.</p>
  <div class="project-tags">
    <span class="tag">Pose Estimation</span>
    <span class="tag secondary">AI</span>
    <span class="tag accent">Health Tech</span>
  </div>
  <a href="https://vedantmadane.github.io/mkcl/camera/posture/" class="project-link">
    Launch App →
  </a>
</div>

<div class="project-card">
  <h3>Telecom Analytics Dashboard</h3>
  <p>Data visualization dashboard for telecom sector analytics, featuring interactive charts and real-time data processing capabilities.</p>
  <div class="project-tags">
    <span class="tag">Data Viz</span>
    <span class="tag secondary">Analytics</span>
    <span class="tag accent">Vue.js</span>
  </div>
  <a href="https://vedantmadane.github.io/telecom/" class="project-link">
    Explore →
  </a>
</div>

<div class="project-card">
  <h3>दानव (Dānav) - Sanskrit Game</h3>
  <p>An educational game that teaches Sanskrit vocabulary through interactive gameplay. Combines language learning with entertainment.</p>
  <div class="project-tags">
    <span class="tag">EdTech</span>
    <span class="tag secondary">Sanskrit</span>
    <span class="tag accent">Game Dev</span>
  </div>
  <a href="https://vedantmadane.github.io/krida/danav/" class="project-link">
    Play Game →
  </a>
</div>

<div class="project-card">
  <h3>पक्षी (Pakshī) - Bird Identification</h3>
  <p>An interactive web application for identifying Indian bird species using machine learning. Built with modern web technologies and computer vision models.</p>
  <div class="project-tags">
    <span class="tag">ML</span>
    <span class="tag secondary">Computer Vision</span>
    <span class="tag accent">JavaScript</span>
  </div>
  <a href="https://vedantmadane.github.io/pakshi/" class="project-link">
    Play Now →
  </a>
</div>

🛠️ Technical Skills

💻 Languages

Python JavaScript TypeScript Go Rust SQL
<div class="skill-category">
  <h4>🧠 AI/ML</h4>
  <div class="skill-list">
    <span class="skill-item">PyTorch</span>
    <span class="skill-item">TensorFlow</span>
    <span class="skill-item">scikit-learn</span>
    <span class="skill-item">spaCy</span>
    <span class="skill-item">Hugging Face</span>
    <span class="skill-item">LangChain</span>
  </div>
</div>

<div class="skill-category">
  <h4>🌐 Web</h4>
  <div class="skill-list">
    <span class="skill-item">React</span>
    <span class="skill-item">Vue.js</span>
    <span class="skill-item">Node.js</span>
    <span class="skill-item">FastAPI</span>
    <span class="skill-item">WebRTC</span>
    <span class="skill-item">REST APIs</span>
  </div>
</div>

<div class="skill-category">
  <h4>🔧 Tools & Infra</h4>
  <div class="skill-list">
    <span class="skill-item">Docker</span>
    <span class="skill-item">Git</span>
    <span class="skill-item">Linux</span>
    <span class="skill-item">CI/CD</span>
    <span class="skill-item">PostgreSQL</span>
    <span class="skill-item">Redis</span>
  </div>
</div>

<div class="skill-category">
  <h4>📖 NLP & Languages</h4>
  <div class="skill-list">
    <span class="skill-item">Sanskrit</span>
    <span class="skill-item">Hindi</span>
    <span class="skill-item">Marathi</span>
    <span class="skill-item">Russian</span>
    <span class="skill-item">Morphological Analysis</span>
    <span class="skill-item">Text Processing</span>
  </div>
</div>

<div class="skill-category">
  <h4>📊 Data</h4>
  <div class="skill-list">
    <span class="skill-item">Pandas</span>
    <span class="skill-item">Polars</span>
    <span class="skill-item">NumPy</span>
    <span class="skill-item">Dask</span>
    <span class="skill-item">Data Visualization</span>
    <span class="skill-item">ETL Pipelines</span>
  </div>
</div>
— What exists here may be found elsewhere; what does not exist here exists nowhere.
<script> (function() { const quotes = [ 'यत् इह अस्ति तत् अन्यत्र यत् न अस्ति न तत् क्वचित्', 'यद् इह अस्ति तद् अन्यत्र यद् न अस्ति न तद् क्वचित्', 'यदिह अस्ति तदन्यत्र यद्न अस्ति न तद्क्वचित्', 'यदिहास्ति तदन्यत्र यद्नास्ति न तद्क्वचित्' ]; // Split into grapheme clusters for proper Devanagari handling function toGraphemes(str) { if (typeof Intl !== 'undefined' && Intl.Segmenter) { return [...new Intl.Segmenter().segment(str)].map(s => s.segment); } // Fallback: split by spaces and treat each word as unit return str.split(/(\s+)/).filter(s => s.length > 0); } let quoteIndex = 0; let charIndex = 0; let isDeleting = false; let currentGraphemes = []; const element = document.getElementById('sanskrit-typewriter'); const typeSpeed = 100; const deleteSpeed = 50; const pauseTime = 2000; function typeWriter() { if (currentGraphemes.length === 0) { currentGraphemes = toGraphemes(quotes[quoteIndex]); } if (isDeleting) { charIndex--; element.textContent = currentGraphemes.slice(0, charIndex).join(''); } else { charIndex++; element.textContent = currentGraphemes.slice(0, charIndex).join(''); } let delay = isDeleting ? deleteSpeed : typeSpeed; if (!isDeleting && charIndex === currentGraphemes.length) { delay = pauseTime; isDeleting = true; } else if (isDeleting && charIndex === 0) { isDeleting = false; quoteIndex = (quoteIndex + 1) % quotes.length; currentGraphemes = toGraphemes(quotes[quoteIndex]); delay = 500; } setTimeout(typeWriter, delay); } if (element) { typeWriter(); } })(); </script>

Let's Build Something Together

Interested in collaborating on open source, NLP or Sanskrit computational linguistics?