const shahnawaz = {
name: "Shahnawaz Shaikh",
location: "Mumbai, India",
role: "Full Stack Engineer & AI Builder",
currentlyBuilding: [
"Portfolio Forge — AI resume to portfolio generator",
"Real-time collab — WebSockets + CRDT state sync",
"AI Code Reviewer — LLM-powered PR review bot",
"Headless UI Lib — Tailwind + TypeScript, zero JS",
],
stack: {
ai: ["Groq", "Gemini", "OpenAI", "LangChain"],
backend: ["Node.js", "FastAPI", "GraphQL", "Redis"],
frontend: ["React", "Next.js", "Tailwind", "Vite"],
devops: ["Docker", "GitHub Actions", "CI/CD"],
},
funFact: "I turn resumes into portfolios with AI",
openTo: "Collabs, Freelance, Full-time roles",
};Upload a resume. Get a production-ready portfolio website in seconds. 100% browser-based. Zero backend.
| Feature | Details |
|---|---|
| Multi-Provider AI | Groq (Llama 3.3 70B) · Gemini 2.0 Flash · OpenAI GPT-4o Mini · OpenRouter (Mistral 7B) |
| Key Pool Rotation | Add multiple API keys — auto-rotates on rate-limit, never blocks you |
| In-Browser Parsing | PDF.js + Mammoth.js — extracts text 100% in the browser, zero server uploads |
| 6 Design Presets | Dark Minimal · Editorial · Terminal · Glassmorphism · Bold · Clean |
| One-Click Export | Downloads a clean ZIP with separate index.html, style.css, script.js |
| 36 Unit Tests | Vitest suite — parsers, validators, file handling, typed error classes |
| Auto-Deploy | GitHub Actions CI/CD → GitHub Pages on every main push |
| Privacy-First | Keys in JS memory only — never localStorage, never a server |
Architecture Deep-Dive (click to expand)
portfolioforge/
│
├── index.html # App shell: semantic HTML + ARIA roles, zero inline styles
├── src/
│ ├── style.css # Design system via CSS custom properties (20+ variables)
│ └── app.js # All logic — vanilla ES2022, zero runtime dependencies
│ ├── STATE {} # Single source of truth: provider, keyPool[], html/css/js
│ ├── PROVIDERS {} # Per-provider config: endpoint, model, validate()
│ ├── Key Pool Engine # addKeyToPool() → markKeyRateLimited() → getNextKey()
│ ├── callWithKeyRotation() # Round-robin over keys → multi-round backoff
│ ├── extractPDF() # PDF.js page-by-page Y-coordinate text reconstruction
│ ├── extractDOCX() # Mammoth.js raw text extraction
│ ├── cleanResume() # Normalise whitespace, hard-cap at 1,800 chars
│ ├── callGemini() # Gemini-specific request format + error mapping
│ ├── parseAI() # 4-strategy: delimiters → fences → normalised → raw HTML
│ └── renderPreview() # Sandboxed srcdoc iframe with injected CSS + JS
│
├── tests/app.test.js # 36 tests across 6 describe blocks
└── .github/workflows/ci.yml # test → validate → deploy pipeline
Every claim below is directly evidenced by code in this repository.
| Signal | Evidence in Code | Depth |
|---|---|---|
| AI / Multi-Provider | 4 LLM providers, unified abstraction, prompt engineering, token budgeting | █████████░ |
| API Integration | REST calls to 4 different provider APIs, correct headers, per-provider error mapping | ████████░░ |
| Key Pool & Rate Limiting | Round-robin rotation, backoff, markKeyRateLimited(), multi-round retry |
█████████░ |
| In-Browser File Parsing | PDF.js Y-coordinate reconstruction, Mammoth.js DOCX extraction | ████████░░ |
| State Management | Vanilla STATE {} pattern — single source of truth, no framework needed |
████████░░ |
| Testing | 36-test Vitest suite: validators, parsers, file handling, typed error classes | ████████░░ |
| CI/CD | GitHub Actions: test → HTML validate → deploy to Pages on every push | █████████░ |
| Privacy / Security | Keys in JS memory only — never localStorage, never sent to a server |
█████████░ |
| CSS Architecture | Design system via 20+ CSS custom properties, 6 distinct design presets | ████████░░ |
| Error Handling | Custom RateLimitError + ParseError classes, 4-strategy HTML parser |
████████░░ |
Note: Auth, databases, Docker, TypeScript, WebSockets, and other skills listed in the Tech Stack badge section reflect my broader experience and other projects — not this specific repo, which is intentionally zero-dependency and serverless by design.
Portfolio Forge v4 ── Claude / Anthropic streaming + live generation view
Real-time collab tool ── WebSockets + CRDT-based conflict-free state sync
AI code reviewer ── GitHub Action that reviews PRs via LLM feedback
Open-source UI lib ── Headless Tailwind + TypeScript components, zero JS
"Ship it, then improve it.
Tests first on anything that has state.
If it needs a server, question why.
If it needs a framework, question harder."
| Principle | Practice |
|---|---|
| Simplicity over cleverness | Readable 10-line function beats a smart 3-liner |
| Ship early, iterate fast | Working v1 beats perfect v0 every time |
| Test behaviour, not implementation | Tests describe what, not how |
| Security by default | Keys in memory only · HTTPS always · no implicit trust |
| Zero-dependency where possible | Vanilla JS over a framework for focused tools |
| Docs are code | README, comments, and types are first-class citizens |