Skip to content
View nina-mir's full-sized avatar
:dependabot:
studying K8s exam!
:dependabot:
studying K8s exam!
  • San Francisco, CA
  • 07:09 (UTC -12:00)

Block or report nina-mir

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
nina-mir/README.md

Nina Mir — software engineer // web / data

Jump to open source Jump to projects

 July-Oct 2026

Open-source contributions

Repository Contribution
browser-use/browser-use
#5672
merged
Stopped two LLM provider adapters from authenticating third-party endpoints with the user's OpenAI key.
ChatDeepSeek and ChatCerebras passed api_key=None into an AsyncOpenAI client pointed at api.deepseek.com and api.cerebras.ai, so the SDK fell back to OPENAI_API_KEY — sending it to a different vendor. The env vars the docs promised were never read. Audited all nine adapters to derive the discriminator (an OpenAI-SDK client at a non-OpenAI base_url), which found exactly these two and cleared the rest; reported the negative results alongside the fix.

Python OpenAI pytest
docling-project/docling
#4457
merged
Found and fixed a bug nobody had reported: numbering inside a Word text box leaked onto the paragraph holding it.
A floating text box is stored inside an anchor paragraph, but docling resolved list numbering with a descendant search (.//w:numPr) that reached into the box — so plain body text came out as a list item (issue #4456, which I filed). OOXML permits w:numPr only under w:pPr, so the search could only ever find another paragraph's numbering. Proved causality by diffing a full conversion with the lookup narrowed: exactly one line of the document changed. Minimal repro is ten lines of python-docx, not a 3 MB attachment, and doubles as the regression test. A maintainer re-verified against the source document and noted the recursive traversal it removes.

Python OOXML pytest
python-visualization/folium
3 PRs
merged
#2263 · Root-caused a bug open since 2021: GeoJSON tooltips came up empty on multi-geometry features.
The feature never reached the child layers Leaflet wraps in a FeatureGroup (issue #1520). Fix verified against all eight geometry types plus nested GeometryCollections, with a Selenium regression test.

#2274 · Upgraded Leaflet 1.9.3 → 1.9.4 at a maintainer’s request, repairing a notebook test red on main.
Leaflet 1.9.3 calls layer.getElement() unguarded and throws on nested FeatureGroups; because the failing test skipped verify_js_logs(), the uncaught error lingered in the session-scoped driver log and surfaced in whichever later test read it first — not the page CI blamed.

#2282 · Retired a documented "limitation" that two merged fixes had already made false.
Both GeoJSON guide pages still told users GeoJsonTooltip and GeoJsonPopup couldn't handle MultiPoint and sent them to hand-written JavaScript instead. Traced that claim to its origin — an outside contributor's docs addition, waved through in review, never a maintainer ruling — then verified both interaction paths rather than assuming the popup behaved like the tooltip already tested: hover and click, across all eight geometry types including a nested GeometryCollection.

Python Leaflet Selenium
7 more PRs
Repository Pull requests
browser-use/browser-use #5673 merged Repaired a model shortcut that had been returning an API error since Mistral retired the model behind it.
docling-project/docling #4129 in review Root-caused why an entire class of Word document converts with no headings at all — open since April, no diagnosis.
Comfy-Org/ComfyUI_frontend #20394 in review Made ComfyUI's icons visible again in Windows High Contrast mode — invisible across the whole UI since they were introduced.
jupyterlab/jupyterlab #19257 in review milestone 4.6.x Fixed 2.43:1 contrast text in the Debugger Variables panel — open since 2023.
#19303 in review Fixed Alt+W not closing the current tab when focus sat outside the main area — open since 2018.
mdn/browser-compat-data #30171 merged Corrected Firefox compat data for FontFaceSet iteration methods.
traceroot-ai/traceroot #1968 in review Rewrote the Vercel AI integration docs after proving the documented telemetry hook emits nothing on SDK v7.

Full write-ups for all 12 PRs → CONTRIBUTIONS.md

Also:

 July 2026

 Save Image 'n Context — Manifest V3 Chrome extension

A research tool: right-click any web image to download it and log a local citation record of its source — page URL/title, canonical URL, Open Graph metadata, alt text, figure caption, plus the nearest heading/paragraph/link via deterministic DOM heuristics.

  • Privacy-first architecture — a service worker paired with an on-demand content script using activeTab + scripting permissions; zero background access to browsing data.
  • Handles real-world messiness — lazy-loaded image attributes, duplicate-capture detection, retry logic, graceful fallbacks on restricted pages.
  • Local & exportable — up to 5,000 records live entirely in chrome.storage.local, reviewable on an options page and exportable as JSON/CSV (CSV hardened against spreadsheet formula injection).

Chrome Extension Manifest V3 JavaScript

Get it on the Chrome Web Store   Source


 June 2026 — Snarp Profanity Index


 Snarp Profanity Index — interactive dashboard

Visualizes how often different categories of profanity appear across 52 college-sports YouTube videos by a popular creator — to find out which collegiate rivalries are the most controversial linguistically.

  • The workflow — scrape audio via the YouTube API ➜ transcribe with the Whisper neural network on Hugging Face ➜ analyze transcripts to categorize terms.
  • Interactive — charts built with SVG & D3.js, plus full-text search across all transcripts.

Google Colab YouTube API Whisper Hugging Face D3.js

Live demo   Source

 Spring 2026 — Kopani


 Kopani — discovery infrastructure for independent literature

An MVP platform that indexes literary and art pieces published by independent journals without republishing copyrighted material.

  • Data pipeline — scraping, ingestion & metadata-modeling workflows normalize journal content into structured, searchable records: titles, journals, authors, translators, visual artists, genres, keywords & reading time (Gemini AI / Colab notebook).
  • Discovery experience — helps readers browse real pieces, return to the original journal sources, and (future) explore a contributor graph linking writers, artists, institutions, journals & publications.

Astro Tailwind CSS SQLite Netlify

[!TIP] Presented at the Perplexity AI Billion Dollar Pitch competition.

Live demo

 October 2025 — SF Film Locations RAG


 NLP-to-GeoPandas RAG pipeline

A full-stack RAG pipeline to chat with the Film Locations in San Francisco dataset. Completed during a DigitalOcean / Auth0 hackathon in San Francisco on Oct 18, 2025.

Gemini Python Streamlit GeoPandas SQLite Folium

Live demo   Source

 2025 — WindBorne constellation data pipeline


 Live constellation visualizations

A full-stack project ingesting data from WindBorne Systems' live constellation API, feeding two D3.js plots:

  • A world map displaying each flight trajectory over a 24-hour interval.
  • A Sankey chart showing the start/end region of each trajectory (via geonames.org and nominatim.openstreetmap.org APIs).

The project runs an automated pipeline that fetches and processes new data hourly on an Ubuntu cloud server, and uses Cloudflare Workers to edge-cache the data files.

D3.js Cloudflare Workers Ubuntu

Live demo

 Summer 2025 — Taschen-Dolmetcher.Revisited


 Multilingual language-learning web game

A web game for people learning Russian / English / German. Inspired by real events on the Eastern Front from 1941–1945, it educates users about Holocaust history through historical materials and witnesses' artworks.

React TypeScript Tailwind CSS Storybook

Play it

[!NOTE] Suggestions welcome — open an issue or email [email protected].

 Spring 2025 — The Hell of Treblinka


 Modern responsive typesetting

Typeset an important essay by Vasily Grossman — "The Hell of Treblinka" — so readers could have a modern, responsive reading experience.

Read it

Pinned Loading

  1. patient-bot patient-bot Public

    Automated QA pipeline for voice agents

    Python

  2. taschen-dolmetcher taschen-dolmetcher Public

    An open-source web-based language learning game showcasing the resilience and sacrifice of enormous number of ordinary people during the Holocaust and fighting the onslaught of German Nazi fascist …

    TypeScript

  3. save-image-n-context save-image-n-context Public

    A Chrome extension for researchers who save images from the web and need to remember where they came from.

    JavaScript

  4. kopani kopani Public

    kopani.ai

    HTML