Deploy URLTargetCommit / RefStatusDate & TimeAction
Back to Dashboard

statesmen-ai

View detailed registry info, git integration pathways, and the full deployment timeline for this application.

Project Specifications

Framework
Next.js
Production Link
https://statesmen-ai.vercel.app ↗
Git Integration
githubpradhankukiran/statesmen-ai ↗
Host Registry ID
prj_JoyorxuDGKJpxmP4pInAGLKzstaX
Open Production Application ↗

Deployment Timeline

Deploy URLTargetCommit / RefStatusDate & TimeAction
statesmen-jc37b64fp-pradhankukiran-projects.vercel.appprod

"fix(ui): apply view transition directly to images and bypass loading skeleton"

Branch: main

ReadyMay 14, 2026, 11:17 AMInspector ↗
statesmen-g3pqsuh3m-pradhankukiran-projects.vercel.appprod

"fix(ui): smooth out person card view transition morph"

Branch: main

ReadyMay 14, 2026, 11:11 AMInspector ↗
statesmen-9am3mnwqx-pradhankukiran-projects.vercel.appprod

"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

ReadyMay 12, 2026, 03:33 PMInspector ↗
statesmen-1s5pafban-pradhankukiran-projects.vercel.appprod

"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

ReadyMay 12, 2026, 03:23 PMInspector ↗
statesmen-2wwyvcsgh-pradhankukiran-projects.vercel.appprod

"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

ReadyMay 12, 2026, 03:16 PMInspector ↗
statesmen-oonxopskz-pradhankukiran-projects.vercel.appprod

"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

ReadyMay 12, 2026, 03:02 PMInspector ↗
statesmen-8h0jfcfsg-pradhankukiran-projects.vercel.appprod

"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

ReadyMay 11, 2026, 07:15 PMInspector ↗
statesmen-im1rz56tt-pradhankukiran-projects.vercel.appprod

"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

ReadyMay 11, 2026, 06:37 PMInspector ↗
statesmen-l25p63vra-pradhankukiran-projects.vercel.appprod

"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

ReadyMay 11, 2026, 06:28 PMInspector ↗
statesmen-k95d7n69o-pradhankukiran-projects.vercel.appprod

"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

ReadyMay 11, 2026, 05:30 PMInspector ↗
statesmen-jz6jvrxhu-pradhankukiran-projects.vercel.appprod

"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

ReadyMay 11, 2026, 03:53 PMInspector ↗
statesmen-inleq3jef-pradhankukiran-projects.vercel.appprod

"fix(build): cap maxDuration at 300s for Vercel hobby plan"

Branch: main

ReadyMay 9, 2026, 05:33 PMInspector ↗
statesmen-hi6djooep-pradhankukiran-projects.vercel.appprod

"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

ReadyMay 9, 2026, 05:25 PMInspector ↗
statesmen-7d1xx4xhc-pradhankukiran-projects.vercel.appprod

"fix(llm): disable AI SDK internal retries in extract + merge The Vercel AI SDK retries generateObject up to 3 times by default. In race mode (5 models firing in parallel) those retries are counterproductive: - they waste rate-limit quota on the same already-throttled upstream provider - they take seconds each, pushing toward Vercel's 60s function timeout - the race itself is the retry mechanism — having retries inside the racer just delays detection of a stuck model Setting maxRetries: 0 makes each model get exactly one shot; if it fails, the race immediately moves on to whoever returns first. Same change in merger for symmetry — its own fallback list handles retry at a higher level."

Branch: main

ReadyMay 8, 2026, 12:27 PMInspector ↗
statesmen-m0jwdjnag-pradhankukiran-projects.vercel.appprod

"chore: gitignore .vercel and .env*.local (Vercel CLI side-effects)"

Branch: main

ReadyMay 8, 2026, 12:19 PMInspector ↗
statesmen-hjuj6faoi-pradhankukiran-projects.vercel.appprod

"feat(build): align build progress page with brutalist design system The build page was still wrapped in soft Card chrome with a smaller type scale and rounded-full progress bar. Now matches the rest of the app: - Card wrapper dropped; plain max-w-3xl container - Headline bumped to text-4xl sm:text-5xl (page-level scale) - Header pill aligned to canonical px-3 py-1 text-xs format - Step list reframed inside a rounded-md border-2 border-foreground panel with divide-y-2 between rows - Progress bar rebuilt: rounded-md border-2 border-foreground bg-background frame, bg-brand fill (was rounded-full bg-muted) - Error block hardened to border-2 border-destructive - Retry button uses the same brutalist primary pattern as ChatCTA - Loading skeleton mirrors the new layout exactly All recently-added live UX (elapsed counter, per-step durations, rotating extract hints, pulse dot) preserved verbatim. Try-again now also resets the elapsed counter via startBuild's setElapsedMs(0)."

Branch: main

ReadyMay 7, 2026, 10:33 PMInspector ↗
statesmen-r2w14iftt-pradhankukiran-projects.vercel.appprod

"fix(api): raise maxDuration on build and chat routes Vercel Hobby plan's default function timeout was killing in-flight OpenRouter calls before the model finished thinking. Free-tier models can take 60-120s per call; with 5-model fallback × extract+merge stages the cold-build pipeline can legitimately run 5+ minutes. - /api/persona/build → maxDuration=300 (Hobby Fluid Compute caps at 800) - /api/chat → maxDuration=60 (Groq streams fast; headroom for slow first-token)"

Branch: main

ReadyMay 7, 2026, 10:24 PMInspector ↗
statesmen-a5b4nfhbe-pradhankukiran-projects.vercel.appprod

"feat(build-progress): make the page feel alive during slow LLM phases The single-chunk extract step can sit on 'Analysing chunk 1/1…' for 60-120 seconds on free-tier OpenRouter while the model thinks. With no movement on the page, users assume the build is stuck. Adds: - Elapsed wall-clock counter in the header (mm:ss, ticks every second with a pulse dot) - Per-step duration shown next to each step — a live ticker for the active step, settled value once it completes - Rotating sub-hint under the active extract step ('Extracting vocabulary…', 'Identifying rhetorical devices…', etc.) on a 4.5s rotation, so the page visibly moves during the wait - Header copy bumped to mention 2-3 min worst case on free tier"

Branch: main

ReadyMay 7, 2026, 10:20 PMInspector ↗
statesmen-86yxooufx-pradhankukiran-projects.vercel.appprod

"fix(cache): treat 'does not exist' Blob errors as cache miss"

Branch: main

ReadyMay 7, 2026, 10:11 PMInspector ↗
statesmen-5pgequ87h-pradhankukiran-projects.vercel.appprod

"fix(cache): treat 'does not exist' Blob errors as cache miss The Vercel Blob SDK throws Error messages of the form 'The requested blob does not exist.' when head() targets a missing object. The cache layer was only matching 'not found', so production status checks were 500ing instead of returning {status: missing} on a cold cache. Broaden the regex to cover both phrasings."

Branch: main

ReadyMay 7, 2026, 10:10 PMInspector ↗