| Deploy URL | Target | Commit / Ref | Status | Date & Time | Action |
|---|---|---|---|---|---|
View detailed registry info, git integration pathways, and the full deployment timeline for this application.
| Deploy URL | Target | Commit / Ref | Status | Date & Time | Action |
|---|---|---|---|---|---|
| statesmen-jc37b64fp-pradhankukiran-projects.vercel.app | prod | "fix(ui): apply view transition directly to images and bypass loading skeleton" Branch: main | Ready | May 14, 2026, 11:17 AM | Inspector ↗ |
| statesmen-g3pqsuh3m-pradhankukiran-projects.vercel.app | prod | "fix(ui): smooth out person card view transition morph" Branch: main | Ready | May 14, 2026, 11:11 AM | Inspector ↗ |
| statesmen-9am3mnwqx-pradhankukiran-projects.vercel.app | prod | "fix(llm): move supportsStructuredOutputs onto Modal provider settings Previous commit set the flag via provider.languageModel(id, config) but the openai-compatible runtime drops that config argument despite the TS types suggesting otherwise. Set it on createOpenAICompatible() instead, where the implementation actually reads it." Branch: main | Ready | May 12, 2026, 03:33 PM | Inspector ↗ |
| statesmen-1s5pafban-pradhankukiran-projects.vercel.app | prod | "fix(llm): enable structured outputs on Modal provider llama-server compiles json_schema response_format to a GBNF grammar and grammar-constrains generation, which is the only reliable way to make Qwen emit Zod-parseable JSON. Without this, prompted-JSON output failed parsing on the extract schema and the walk fell through to Groq, where free-tier TPM limits killed larger-corpus builds outright." Branch: main | Ready | May 12, 2026, 03:23 PM | Inspector ↗ |
| statesmen-2wwyvcsgh-pradhankukiran-projects.vercel.app | prod | "fix(ui): wrap GpuStatusDot setState in startTransition Poll-driven sync setState was preempting React's View Transition snapshot during navigations, aborting shared-element morphs (the card→profile portrait). Demote to transition priority so it shares ranking with the navigation itself." Branch: main | Ready | May 12, 2026, 03:16 PM | Inspector ↗ |
| statesmen-oonxopskz-pradhankukiran-projects.vercel.app | prod | "feat: route build pipeline through Modal-hosted Qwen3.6-27B Modal becomes the preferred provider for extract + merge; Groq remains as fallback and as the sole chat provider. Dedicated GPU avoids shared free-tier rate limits and the 262k context obviates chunking for most corpora. A header status dot surfaces Modal warm/cold state via a Blob-backed timestamp, so users see when a fresh build will pay the cold-start tax. - lib/models.ts: Modal provider factory, entry-based fallback list with provider tag for activity attribution - lib/extractor.ts, lib/merger.ts: recordModalActivity() on Modal success - lib/warmup-state.ts: warmup timestamp store (Blob in prod, FS in dev) - app/api/warmup, app/api/warmup/status: proxy + status routes - components/gpu-status-dot.tsx: three-state indicator, hidden on /chat/*" Branch: main | Ready | May 12, 2026, 03:02 PM | Inspector ↗ |
| statesmen-8h0jfcfsg-pradhankukiran-projects.vercel.app | prod | "feat(llm): replace OpenRouter with Groq for extract + merge Free-tier OpenRouter models share upstream provider rate limits (Venice et al.) across all users — parallel calls 429 simultaneously, and reasoning-capable models like Nemotron are too slow to fit in our per-call timeout. Groq's LPU-hosted models are fast and rate-limits are per-API-key, so the same fallback chain has actually-independent slots. Provider swap: createOpenRouter -> createGroq. Drop the reasoning providerOptions block entirely (Groq's chat models don't reason, except the deepseek-r1 distill which we don't use). API key envs renamed: OPENROUTER_API_KEY -> GROQ_API_KEY (GROQ_API_KEY was already used for chat; now reused for extract/merge too). Model env renamed: OPENROUTER_MODELS -> GROQ_MODELS. Defaults: openai/gpt-oss-120b primary, meta-llama/llama-4-scout-17b-16e-instruct fallback. Only models that support Groq's json_schema response format work with the AI SDK's generateObject — Llama 3.x and Qwen3 on Groq reject json_schema, so th" Branch: main | Ready | May 11, 2026, 07:15 PM | Inspector ↗ |
| statesmen-im1rz56tt-pradhankukiran-projects.vercel.app | prod | "fix(llm): only AbortError stops fallback walk, not TimeoutError Previous fix overcorrected — classifying TimeoutError as non-fallbackable meant a single slow model would stop the walk before any fallback was tried, defeating the purpose of the fallback list. Restore the original intent: per-attempt AbortSignal.timeout firing should bump the walk to the next model. Caller-side cancellation (AbortError on the outer signal) still stops the walk via the explicit opts.signal?.aborted check that runs before isFallbackableError. Verified end-to-end: nemotron-nano-9b-v2:free returned a valid ExtractionSchema in 28.1s on a 3-paragraph sample." Branch: main | Ready | May 11, 2026, 06:37 PM | Inspector ↗ |
| statesmen-l25p63vra-pradhankukiran-projects.vercel.app | prod | "fix(llm): use reasoning.exclude:true to keep CoT off the response Combined with enabled:false + effort:none for cross-provider coverage. The new bit is exclude:true — verified on nvidia/nemotron-nano-9b-v2:free to cut latency from 8.3s to 2.3s on a trivial response. Nemotron reasons unconditionally server-side; exclude keeps those tokens out of the streamed response so we don't pay the parse/stream latency." Branch: main | Ready | May 11, 2026, 06:28 PM | Inspector ↗ |
| statesmen-k95d7n69o-pradhankukiran-projects.vercel.app | prod | "feat(persona): structured stage logging through buildPersona One `[persona] stage: <name>` log line per pipeline transition with the slug, elapsed-ms, and stage-specific metadata: build-start, contributions-fetched, single-call-start/done, chunked-start, chunk-N-done (per chunk), merge-start/done, verify-done, render-done. A top-level try/catch funnels any throw through `console.error("[persona] build failed", { slug, elapsedMs, ...summariseError(err) })` so a single grep on the slug shows the full arc of a build (including the stage it died on) and a flat error summary suitable for log aggregators. Also adds optional `checkAborted("<stage>")` checks at each pipeline boundary so a deadline-fire or client-disconnect leaves a clean stage marker in the log before the abort propagates out via the next LLM call." Branch: main | Ready | May 11, 2026, 05:30 PM | Inspector ↗ |
| statesmen-jz6jvrxhu-pradhankukiran-projects.vercel.app | prod | "fix(llm): disable reasoning/CoT tokens on extract + merge calls Reasoning models on OpenRouter (e.g. nvidia/nemotron-3-super-120b-a12b) emit 10–50K hidden chain-of-thought tokens before the visible JSON. On free-tier throughput (~30 tok/s) this blows past the 60s per-call timeout on every cold build, walking the entire fallback chain and eventually exceeding Vercel's 300s function cap. Pass providerOptions.openrouter.reasoning.enabled = false on both generateObject calls. Extraction and merge are structured pattern-matching/synthesis tasks — reasoning adds latency without measurable quality gain. No-op on non-reasoning models, so the rest of the fallback chain is unaffected." Branch: main | Ready | May 11, 2026, 03:53 PM | Inspector ↗ |
| statesmen-inleq3jef-pradhankukiran-projects.vercel.app | prod | "fix(build): cap maxDuration at 300s for Vercel hobby plan" Branch: main | Ready | May 9, 2026, 05:33 PM | Inspector ↗ |
| statesmen-iqguv7tzu-pradhankukiran-projects.vercel.app | prod | "feat: commit remaining WIP — pipeline refactor + UI tweaks This batches the user's previously-uncommitted in-progress work so origin/main builds cleanly on Vercel. Recent commits in this session added page-level code that depended on these WIP changes (e.g. brand-yellow Button/Badge variants, extract/merge pipeline refactor in lib/) but the underlying files were never committed, causing CI build failures. - lib/extractor.ts, merger.ts, persona.ts, models.ts, prompts/* Pipeline refactor: full-corpus extraction path, model fallback walk, abort/timeout handling, verbatim verification of quotes. - lib/cache.ts: transactional artefact write (meta-as-commit-marker). - app/api/chat/route.ts, app/api/persona/build/route.ts: Updated to consume the refactored lib/ APIs. - components/person-grid.tsx, components/ui/card.tsx, components/ui/input.tsx: Small style tweaks to match the brand-anchor design system. Local 'npm run build' passes." Branch: main | Error | May 9, 2026, 05:26 PM | Inspector ↗ |
| statesmen-hi6djooep-pradhankukiran-projects.vercel.app | prod | "feat(ui): brand-yellow badge variant + redesigned base Adds the 'brand' variant (the signature yellow eyebrow pill) used by Hero.eyebrow, the 'Begin conversation' chip in chat empty-state, and elsewhere. Aligns base classes with the rest of the brand-anchor design system." Branch: main | Ready | May 9, 2026, 05:25 PM | Inspector ↗ |
| statesmen-9mu88saff-pradhankukiran-projects.vercel.app | prod | "feat(ui): brand-yellow primary variant + redesigned button base Adds the 'primary' variant (yellow brand fill, dark text, brand-hover) that the various Hero CTA buttons across the app already reference. Also tightens the base classes (gap-2, rounded-md, transition-colors, ring-2 focus) and removes shadcn defaults that didn't match the project's brand-anchor design system." Branch: main | Error | May 9, 2026, 05:24 PM | Inspector ↗ |
| statesmen-d04urql2w-pradhankukiran-projects.vercel.app | prod | "fix(person-card): h-full on Link so card stretches to grid cell Without h-full on the Link, the card sized to its natural content height — the grid cell stretched but nothing inside followed. Cards with wrapped 'Conservative' party text were taller than Labour ones. Adding h-full to Link makes it fill the cell, then Card's h-full + the yellow CardContent's flex-1 cascade properly so all 7 cards match." Branch: main | Error | May 9, 2026, 05:17 PM | Inspector ↗ |
| statesmen-p079a6evr-pradhankukiran-projects.vercel.app | prod | "fix(person-card): yellow panel grows to fill card with flex-1 Grid stretches all cards in the row to the tallest height. Without flex-1, the yellow CardContent only takes its natural text height and the remaining space shows the white card background — so cards with less text (Labour PMs) had a stubby yellow band, while Conservatives with longer 'Conservative · Commons · YYYY–YYYY' wrapped text filled the whole card." Branch: main | Error | May 9, 2026, 05:15 PM | Inspector ↗ |
| statesmen-c4os06l3i-pradhankukiran-projects.vercel.app | prod | "feat(person-card): brand-yellow bottom panel for name + meta + tagline Card content area now sits flush against the portrait with a brand-yellow fill (gap-0 py-0 on the Card so there's no card-bg strip showing between the image and the yellow band). Text colors retuned to brand-foreground for contrast on yellow." Branch: main | Error | May 9, 2026, 05:07 PM | Inspector ↗ |
| statesmen-184itf86f-pradhankukiran-projects.vercel.app | prod | "feat(landing): grid-cols-7 on lg so all 7 cards fit without scrolling On lg+ the card row uses CSS grid with 7 equal columns spanning the full viewport (with px-6 gutters), so every PM is visible at once and cards auto-size to whatever space is available. Below lg the row falls back to the horizontal scroller with fixed-width cards." Branch: main | Error | May 9, 2026, 05:00 PM | Inspector ↗ |
| statesmen-7nvpptclz-pradhankukiran-projects.vercel.app | prod | "feat(landing): center popular row inside max-w-6xl, restore card size Constrain the heading + scrolling cards to the page column instead of bleeding to viewport edges. The column's px-6 gutters now provide the breathing room from viewport edges, replacing the spacer <li> hack. Cards back to w-44 sm:w-48 md:w-52 lg:w-56 (176-224px) for readability. Inter-card gap-4 (16px) is enough now that the row no longer extends to the screen." Branch: main | Error | May 9, 2026, 04:56 PM | Inspector ↗ |