{"id":51188126,"url":"https://github.com/eric-esoteric/eric-esoteric","last_synced_at":"2026-06-27T12:03:42.623Z","repository":{"id":367024231,"uuid":"1278942848","full_name":"eric-esoteric/eric-esoteric","owner":"eric-esoteric","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-24T08:28:15.000Z","size":4,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-24T10:28:29.156Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eric-esoteric.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-24T08:24:21.000Z","updated_at":"2026-06-24T08:28:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/eric-esoteric/eric-esoteric","commit_stats":null,"previous_names":["eric-esoteric/eric-esoteric"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/eric-esoteric/eric-esoteric","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eric-esoteric%2Feric-esoteric","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eric-esoteric%2Feric-esoteric/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eric-esoteric%2Feric-esoteric/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eric-esoteric%2Feric-esoteric/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eric-esoteric","download_url":"https://codeload.github.com/eric-esoteric/eric-esoteric/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eric-esoteric%2Feric-esoteric/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34852309,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-27T12:03:42.102Z","updated_at":"2026-06-27T12:03:42.616Z","avatar_url":"https://github.com/eric-esoteric.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eEric Esoteric\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eSoftware Developer · AI Integration · Desktop \u0026 Backend Engineering\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Python-3.10+-3670A0?style=flat\u0026logo=python\u0026logoColor=ffdd54\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Flask-API-000000?style=flat\u0026logo=flask\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/AI_Integration-Multi--Provider-00B981?style=flat\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Windows-Win32_API-0078D4?style=flat\u0026logo=windows\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Chrome-Extension-4285F4?style=flat\u0026logo=googlechrome\u0026logoColor=white\"\u003e\n\u003c/p\u003e\n\n---\n\nI build production-grade desktop software and AI-powered automation tools — the kind that handle real edge cases, recover from failures gracefully, and ship as polished executables. My projects are designed from the architecture down, not assembled from tutorials.\n\n---\n\n## What I Actually Build\n\n### Job Hunter AI — AI Recruitment Assistant\n\u003e *A full-stack desktop application that automates job search analysis end-to-end.*\n\n**The problem:** Job boards are flooded with scam postings, MLM schemes, and predatory listings. Screening them manually wastes hours. Writing tailored cover letters wastes more.\n\n**What I shipped:**\n\n- **Multi-provider AI cascade with automatic failover** — The engine tries Gemini → GPT → Claude → DeepSeek → Ollama → LM Studio in order. If one provider is down, rate-limited, or returns garbage, the next one picks up the task without losing it. Zero manual intervention required.\n\n- **5-level JSON repair pipeline** — LLMs regularly return malformed JSON. Rather than crashing or discarding results, a cascading parser strips Markdown wrappers, fixes trailing commas, corrects boolean literals, repairs broken quotes, and recovers the response. Nothing gets lost to model formatting quirks.\n\n- **Two-stage AI analysis** — Stage 1 is a hard filter: detects scam, MLM, toxic labor conditions (\u003e45h/week, unpaid overtime, mass hiring), and geographic compliance violations. Up to 60% of listings get rejected here. Stage 2 runs only on approved listings and generates a targeted cover letter matched to the actual job requirements — no templates, no filler.\n\n- **Local AI integration (Ollama / LM Studio)** — Full HTTP integration with local LLM servers. A background probe monitors server availability and reflects status in the UI in real time. `LOCAL_SAFE_PARAMS` compensate for artifacts in quantized 4-bit models. A `MIN_TOKENS_PER_SEC` metric detects stalled generations before they timeout.\n\n- **Chrome extension → Flask webhook pipeline** — A Chrome extension captures vacancy data from the browser and sends it to a local Flask API. A thread-safe queue with a 15-second rate-limit timer and a live countdown status bar manages the processing pipeline. A zombie-process killer ensures port 5000 is always clean on startup.\n\n- **HiDPI-aware windowing via Win32 API** — Child windows open at `alpha=0.0`, compute their final coordinates for the current DPI, then fade in only after the frame is fully rendered. No flickering, no position jumps. Dark title bars and custom icons set through `ctypes` Win32 calls.\n\n- **Signature-cached UI rendering** — The vacancy list computes a hash signature for each card. On update, only cards whose content changed are re-rendered. No full redraws, no visual noise.\n\n- **Animated toast notification system** — Custom slide-in notifications with color coding (cyan = success, red = alert), taskbar-aware positioning, and audio playback in a dedicated thread — all without touching system dialogs.\n\n- **Full EN/RU localization** — Every string in the interface passes through a single `jh_i18n.py` module with named variable substitution. Language switches at runtime and persists to config.\n\n- **Self-healing build system** — `build_exe.py` contains a self-healing refactor step that patches import paths before PyInstaller bundles the executable. `jh_version.py` is the single source of truth for the version string across window titles, the `.exe` VERSIONINFO metadata, and the UI.\n\n---\n\n## Engineering Approach\n\n```\nProblem → Architecture → Edge Cases → Ship\n```\n\nI don't prototype and hope. Before writing a line of code I map the failure modes:\nwhat happens when the API is down, when the model returns malformed data, when the\nuser runs on a 4K display, when the queue backs up, when a port is already in use.\nThe answers shape the design, not the other way around.\n\n---\n\n## Tech Stack\n\n| Layer | Tools |\n|---|---|\n| **Language** | Python 3.10+ |\n| **GUI** | CustomTkinter · Pillow · ctypes Win32 API |\n| **Backend** | Flask · flask-cors · threading · queue.Queue |\n| **AI Providers** | Gemini 3.5/3.0 · GPT-5 / o3 · Claude 4 · DeepSeek · Ollama · LM Studio |\n| **Resilience** | Failover Chain · Exponential Backoff · 5-level JSON parser |\n| **Browser** | Chrome Extension (Manifest V3) · Webhook integration |\n| **Build** | PyInstaller · Self-healing build scripts · Single-source versioning |\n| **Storage** | JSON / AppData · PDF import with AI text extraction |\n\n---\n\n## Custom Exception Hierarchy (example of real error handling)\n\n```python\nAIBaseError\n├── AINetworkError       # Provider unreachable\n├── AITimeoutError       # Generation stalled / MIN_TOKENS_PER_SEC breach\n├── AIRateLimitError     # 429 — route to next provider\n├── AIAuthError          # Invalid key — skip provider, alert user\n└── AILocalServerError   # Ollama / LM Studio not running\n```\n\nEach exception type triggers a specific UI response and fallback path. The UI never shows raw tracebacks — users see actionable messages. Engineers see structured logs.\n\n---\n\n## What I'm Looking For\n\nI'm open to roles where engineering quality matters — where the difference between\na working prototype and a production system is taken seriously.\n\n**Strong fit:** backend systems, AI/LLM integration, desktop application development,\ndeveloper tooling, automation infrastructure.\n\n**Available for:** full-time, contract, remote.\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"mailto:mashamasha.vishnya@gmail.com\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Email-mashamasha.vishnya%40gmail.com-EA4335?style=for-the-badge\u0026logo=gmail\u0026logoColor=white\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feric-esoteric%2Feric-esoteric","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feric-esoteric%2Feric-esoteric","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feric-esoteric%2Feric-esoteric/lists"}