Software engineering, thoughtful design, and AI that can act.
An open-source portfolio built with native web standards, an Apple-inspired interface, and an agentic assistant. Explore the work, inspect the systems, or run the entire project locally.
![]() |
![]() |
| Light. Clear and spacious. | Dark. Focused and precise. |
Existing screenshots of the actual website. Live counters, music, and navigation can change.
Experience · Architecture · Run locally · Quality · Contributing · Documentation · Contact
This repository is the source for Mangesh Raut’s public portfolio: professional background, projects, engineering case studies, publications, and writing, alongside the services that power AssistMe and the site’s integrations.
| Surface | What you can explore |
|---|---|
| Portfolio | Background, skills, experience, education, projects, publications, awards, recommendations, certifications, résumé, and contact |
| Projects | GitHub repository cards, real README screenshots, repository facts, filters, and detailed previews |
| Systems | Architecture, engineering workflows, case studies, and technical decisions |
| Monitor | Service health, operational telemetry, and runtime diagnostics |
| Writing | 18 articles across January–September 2026, with two articles per month, source references, and credited media |
| Travel | Interactive travel atlas, route views, location stories, and a globe loaded on request |
| Uses | Development tools, hardware, AI workflow, and the stack behind the site |
| Changelog | Releases, fixes, model attribution, and verified commit links |
AssistMe connects conversation to the website. It supports streaming responses, Markdown, syntax-highlighted code, mathematical notation, attachments, voice interfaces, conversation memory, and browser-side WebMCP actions for navigating and retrieving portfolio information.
- Grounded answers: portfolio context is assembled from repository data and site knowledge.
- Tools: browser actions are implemented in agentic-actions.js.
- Model routing: provider selection is configured in the backend and Worker; the FastAPI router uses the configured OpenRouter primary model. The live Worker routes by task and input capability, using Nemotron Ultra for reasoning, Nemotron Lightning for quick turns, North Mini Code for code, and compatible Gemma/Omni models for media. Catalog capabilities refresh hourly.
- Offline development: the local FastAPI backend provides canned portfolio answers when
OPENROUTER_API_KEYis absent. Real model responses require provider credentials.
Model availability and integration behavior depend on runtime configuration. See the API guide for routes, environments, and differences between deployments.
Repository cards use GitHub metadata and available README screenshots. Repositories without a suitable screenshot can show a clearly labeled conceptual illustration. Coverage counts are dated snapshots, documented in the repository screenshot audit and asset manifest.
Blog media is traced to original publishers where available, with visible credits and a documented conceptual fallback. The media audit and source manifest record provenance and verification.
Direct Outreach includes live analog clocks for New York, London, Mumbai, Tokyo, Sydney, and Paris, using IANA timezones with daylight-saving handling. Three clocks are shown initially, with the other three available through View more. Calendar events show five compact cards by default and expand into a bounded scrolling panel; personal reminders can be reviewed, saved in the browser, and exported as one-time calendar copies.
Today’s Panchang is sourced from Kalnirnay. A scheduled workflow checks the official publication hourly, using a dated cache key to avoid yesterday’s cached response. The frontend checks the snapshot every 15 minutes while visible and displays only values dated today in India. If fresh values are unavailable, it hides stale data and links to the official calendar.
Source limitation: the October 2 local fetch returned verified current values, but Kalnirnay returned HTTP 403 to GitHub’s hosted runner. The scheduled workflow reports that refusal as a warning; a successful workflow does not guarantee fresh data. Automatic daily ingestion remains dependent on the publisher permitting the runner’s requests. See the contact calendar implementation notes.
The interface follows an Apple-inspired visual language: system typography, restrained spacing, blue primary actions, solid white neutral surfaces in light mode, and solid black neutral surfaces in dark mode. Borders define cards and grouped controls; category and brand icons retain their colors. Shared design rules include visible keyboard focus, circular red close controls, reduced-motion support, accessible contrast, and layouts without horizontal overflow.
The design system defines the tokens and component behavior. This is an independent portfolio; it is not an Apple product or an Apple-affiliated project.
flowchart TD
Visitor[Browser · HTML / CSS / JavaScript]
Pages[GitHub Pages · static portfolio]
Worker[Cloudflare Worker · active edge API]
Local[FastAPI · local and optional Vercel backend]
Models[OpenRouter · configured model providers]
Services[GitHub / media / calendar integrations]
Build[esbuild + asset generators]
CI[GitHub Actions · checks and deployment]
Visitor --> Pages
Visitor --> Worker
Visitor --> Local
Worker --> Models
Local --> Models
Worker --> Services
Local --> Services
Build --> CI
CI --> Pages
GitHub Pages serves the production frontend. The active Cloudflare Worker provides edge API services. FastAPI powers local development and the optional Vercel deployment path. Static hosting does not execute Python; API requests use the configured service endpoint.
| Layer | Implementation | Source |
|---|---|---|
| Interface | Semantic HTML, vanilla CSS, native JavaScript ES modules | src/ |
| Styling | CSS custom properties, system font stacks, Tailwind v4 build output | src/assets/css/ |
| Build | esbuild, generated blog pages, metadata, icons, and optimized assets | scripts/build/ |
| Edge services | Cloudflare Worker | workers/assistme-chat/ |
| Python services | FastAPI, route modules, model routing, and integrations | api/ |
| Rich responses | Marked, DOMPurify, syntax highlighting, and KaTeX | package.json |
| Verification | pytest, Playwright, accessibility checks, and Lighthouse | tests/ |
| Delivery | GitHub Actions, Pages, and separate Worker deployment | .github/workflows/ |
The frontend has no React, Angular, Vue, or Svelte runtime. Tailwind is used during the build; component styling lives in vanilla CSS rather than utility classes in HTML.
Repository map
src/ Frontend pages, ES modules, styles, media, and public data
api/ FastAPI application, routes, model router, and integrations
workers/assistme-chat/ Cloudflare edge API
scripts/ Build, development, QA, security, and deployment tooling
tests/api/ Python API tests
tests/e2e/ Browser user journeys and broader regression coverage
docs/ Design, architecture, API guides, and audit evidence
.github/workflows/ CI, publication, monitoring, and data synchronization
dist/ Generated production output; ignored by Git
See STRUCTURE.md for the complete directory guide.
Prerequisites: Git, Node.js >=22 <27 (Node 22 recommended), Python 3.12+, and
uv. The repository’s .nvmrc selects Node 22.
git clone https://github.com/mangeshraut712/mangeshrautarchive.git
cd mangeshrautarchive
npm ci
uv venv --python 3.12 venv
uv pip install --python venv/bin/python -r requirements.txt -r requirements-dev.txt
npx playwright install chromium
npm run doctor:strict
npm run dev| Local service | Address |
|---|---|
| Portfolio | http://127.0.0.1:4000 |
| API health | http://127.0.0.1:8001/api/health |
| Interactive API documentation | http://127.0.0.1:8001/api/docs |
Use venv as the environment directory: the development backend detects its Python interpreter.
Stop the development server with Ctrl+C. To run the configured Desktop Chrome tests, install
Google Chrome; the Playwright configuration explicitly selects its chrome channel.
A local demo does not require API credentials. For real services, copy .env.example to an ignored
local environment file and fill only the integrations you intend to use.
OPENROUTER_API_KEYenables real model responses in FastAPI.OPENROUTER_MODELoptionally selects the backend model.- GitHub, music, health, and calendar services have their own configuration requirements.
- Google Calendar booking and the local Apple/Outlook
.icsfallback have different behavior; consult the API guide before configuring them.
Never commit environment files, credentials, or private calendar data. Browser fallback reminders and exported calendar files do not grant access to an Apple account.
| Command | Purpose |
|---|---|
npm run dev |
Start frontend and FastAPI development services |
npm run dev:frontend |
Run the frontend with the local API proxy |
npm run dev:backend |
Run FastAPI independently |
npm run doctor:strict |
Validate repository layout and stack constraints |
npm run check |
ESLint, Stylelint, anti-slop checks, and formatting |
npm test |
Run API tests, worker tests, and critical Playwright journeys |
npm run test:worker |
Run Cloudflare Worker multimodal routing and stream boundary tests |
npm run test:tester-army |
Run 23 deterministic Tester Army journeys across Chromium and WebKit (46 tests) |
npm run test:tester-army:ci |
Run 23 deterministic Tester Army journeys on desktop Chromium for CI |
npm run test:e2e:all |
Run the broader Playwright suite across 16 configured browser projects |
npm run security-check |
Scan source files for exposed secrets and credentials |
npm run build |
Generate production output in dist/ |
npm run qa:surfaces |
Smoke-check configured deployment surfaces |
npm run qa:postdeploy |
Check configured host availability and commit parity |
The October 3, 2026 release passed 185 API tests, 10 Worker routing/stream boundary tests, 14 critical Chrome journeys, and 23 Tester Army journeys (46 browser checks across desktop Chromium and mobile WebKit). ESLint, Stylelint, formatting, the secret scan, and the production build passed locally. The matching deployment workflow passed its quality, Lighthouse (100/100/100/100), Pages publication, and deployment verification gates. These are dated results for that release, not guarantees about every browser or future deployment.
Responsive review covered Home, Systems, Travel, Monitor, Uses, and Changelog at desktop and phone widths in both themes, with no horizontal overflow in the reviewed states. The deployed contact card was checked for current Panchang values and category icon colors. Share-card alignment and AssistMe’s composer and viewport bounds were also reviewed. This does not claim the broader 16-project browser suite passed. The October 1 site audit preserves earlier review scope.
- Run the required local gates:
npm run check,npm test,npm run security-check, andnpm run build. - Commit reviewed changes with a conventional commit message and update release attribution.
- Push
main; verify the matching GitHub Actions runs and Pages publication finish successfully. - Check the deployed routes and asset version. A passing local build alone does not prove deployment.
GitHub Pages is the primary public host. Vercel is an optional deployment path; its live availability must be checked separately. Worker changes follow their dedicated deployment workflow.
Read CONTRIBUTING.md, AGENTS.md, and the relevant design or architecture guide before making changes. Keep fixes focused, preserve the native web stack, and add realistic browser coverage when user behavior changes. Use the four local release gates above before submitting.
Run npm run test:tester-army with Node 22.12+ after npx playwright install chromium webkit.
The pinned e2e@0.16.0 and @e2e-dev/web@0.11.2 suite runs 23 journeys on desktop Chromium
and mobile WebKit without a model or API key. The runner starts the frontend on a free port and cleans
up its own process. Use E2E_APP_URL for an existing local server. See
the coverage manifest for assertions and external-service limits.
The JavaScript config is selected explicitly because upstream automatic discovery uses TypeScript filenames.
Tester Army contribution: GPT-6.1 Sol / Codex; purpose: deterministic browser journeys and coverage boundaries. Reasoning mode and token usage: unavailable. Independent verification uses GPT-6 Luna / Codex.
Mangesh Raut maintains this portfolio with contributions from Codex, Claude Code, Google Antigravity, Cursor, and GitHub Copilot. Shipped changes record the exposed agent/model family, engineering purpose, and verified commit in the changelog.
| Current contribution | Attribution |
|---|---|
| Coding agent | Gemini 3.8 Flash, in Google Antigravity IDE |
| Purpose | Resolve all 6 GitHub CodeQL Security and Quality code scanning alerts, redesign AssistMe Privacy & Settings as an in-widget Apple HIG view with grouped inset cards, in-widget navigation, and responsive touch controls, fix contact page desktop card alignment and column balance, Hero Music Card live listening integration, and WebMCP agentic actions suite upgrade |
| Exact model variant, reasoning mode, token usage | unavailable |
| Portfolio chatbot model | Configured separately in api/model_router.py and Worker configuration; each live response reports the actual serving model |
AssistMe verification — October 3, 2026: GPT-6 / Codex in Codex desktop; purpose: live multimodal verification, accurate model labels, billing provenance, and responsive chatbot reliability. Exact variant, reasoning mode, and token usage: unavailable.
AssistMe on GitHub Pages uses the Cloudflare Worker at
https://assistme-chat.mangeshraut712.workers.dev. The frontend checks /api/chat/health
and sends chat requests to /api/chat on that host. An unavailable AI provider falls back to
explicitly labeled local answers. Interrupted streams discard the failed attempt before trying
another model; provider token usage is retained when supplied, and estimates remain labeled.
The chat window uses the available area below navigation, with a scrolling transcript and a
reachable composer. The deployed-host browser regression covers routing, fallback resets, and
final-frame metadata in Chrome and Safari. It is included in the 14-journey critical Chrome
release gate; Safari is also checked separately when changing this path.
Coding attribution in historical entries is contributor-reported in commit messages. A verified commit link confirms the repository reference; it does not authenticate the actual model runtime. Missing model, tool, reasoning, or token records are not inferred. See the changelog attribution audit.
Previous contributor records are preserved in Development history, with dated context for superseded implementations.
Provider credentials belong in backend or deployment secret stores. Public calendar endpoints expose sanitized availability, while integration setup and private account data require protected server configuration. Optional integrations and analytics should be reviewed before deploying your own copy.
Report vulnerabilities through SECURITY.md. See .env.example for the configuration template. Replace personal profile data, contact destinations, OAuth settings, and analytics identifiers when adapting this repository.
| Guide | Purpose |
|---|---|
| Documentation index | Start here for deeper implementation notes |
| Design system | Visual tokens, components, accessibility, and responsive behavior |
| Architecture practices | Module boundaries, engineering conventions, and release discipline |
| Repository structure | Directory map and ownership |
| Tester Army manifest | Tester Army deterministic browser journey coverage and boundaries |
| API guide | Routes, integrations, environments, and runtime differences |
| Site audit | October 2026 visual and functional verification |
| Screenshot coverage | Dated repository image coverage and fallback rules |
| Blog media audit | Original-source media and provenance |
| Development history | Preserved contributor attribution and historical decisions |
| Design audit skills | Apple HIG critique, responsive audit, and animation motion skills |
The repository’s original code is released under the MIT License. Third-party images, logos, music artwork, and publisher media retain their respective rights; consult the source credits before reuse. Citation metadata is provided in CITATION.cff.
Mangesh Raut · Website · GitHub · LinkedIn · Email
The live text primary is Nemotron 3 Ultra free. OpenRouter's live catalog reports zero prompt and completion token prices. An authenticated inference probe returned HTTP 200, the exact requested model ID, and zero cost. Nemotron Super remains the next free fallback. Ultra is text-only; image requests retain the existing free vision chain. Local/server environment overrides remain explicit.
NVIDIA's model release documents 550B total and 55B active parameters, released June 4, 2026. Availability and free-tier limits depend on the provider. Coding agent: GPT-6 / Codex in Codex desktop; exact variant, reasoning mode, and token usage: unavailable.
The live Worker refreshes the OpenRouter model catalog hourly and filters models by the inputs required by each request. New models become fallback candidates only when their advertised capabilities match. Safety classifiers, embeddings, and rerankers are excluded from conversation routing. The browser cannot select arbitrary upstream models.
| Input or feature | Current behavior | Verification |
|---|---|---|
| Text and reasoning | Nemotron Ultra with compatible free recovery | Live streamed reply verified |
| Short turns | Gemma 4, Apodex Mini, then compatible free recovery | Live document question verified |
| Programming | Cohere North Mini Code, then Ultra | Live JavaScript reply verified |
| Images and short videos | Gemma 4 first; compatible Omni/Qwen recovery | Live image and MP4 description verified |
| PDF and text files | Explicit free Cloudflare PDF parser / bounded UTF-8 text | Live order-number extraction verified |
| Audio files | Omni/Inkling; compatible Gemini 3.8 recovery before Auto | October 3: Gemini 3.8 Flash via Google AI Studio BYOK transcribed the sample |
| Dictation and read-aloud | Browser speech features; cloud TTS when funded | Cloud TTS returned HTTP 402; device support depends on browser and OS |
| Paid Auto Router | Low-cost recovery after free candidates fail | Free-only Auto test returned no matching candidates |
| Fusion | Deep text research/comparison, gated by server config and positive balance | Current account returned HTTP 402; no successful Fusion inference claimed |
| Image/video generation | Not connected to this chat interface | No generated-asset claims or fabricated image URLs |
Two attachments per turn are supported: images up to 1.2 MB, audio/video/PDF up to 3 MB per file, and text/Markdown/CSV/JSON up to 75 KB. Files are uploaded only when the message is sent; their contents are source material rather than instructions. Failed media processing never falls back to an invented description. Regeneration retains the selected turn's files during the open session.
Streaming records the concrete answering model, provider, generation ID, supplied usage/cost, finish reason, and routing task. The main reply stays readable; technical details are collapsed. Stopping cancels upstream work. Unsupported or interrupted streams recover without concatenating answers from different models. Token estimates remain labeled.
Auto Router selects models by task. Fusion runs a panel and analyst in addition to the outer request, so it is reserved for deep text comparisons and requires credits. A free model ID does not guarantee access: the observed Omni audio minimum was $0.50 and video minimum $1.00; Gemma video succeeded without that balance. These provider restrictions may change.
Regression coverage: 185 API tests, 10 Worker routing/stream boundary tests, and 14 critical Chrome journeys. The attachment journey also runs in Safari. October 3 live checks confirmed text, code, image, video, PDF, and audio processing. Audio recovered through Auto to Gemini 3.8 Flash using Google AI Studio BYOK. OpenRouter reported a zero charge and a provider-side inference cost of $0.002493 for the sample; a zero OpenRouter charge does not prove that BYOK inference is free. A longer conversation caused Auto to return HTTP 402; direct compatible Gemini 3.8 fallback restored the same audio request, so audio now tries that route before Auto. Cloud TTS remains unavailable and Fusion has no successful inference evidence. Coding agent: GPT-6 / Codex in Codex desktop; purpose: live multimodal verification, honest billing metadata, and responsive chatbot review. Exact variant, reasoning mode, and token usage: unavailable.

