SpecForge Changelog

The Evolution of Engineering Specs

2026-06-19/

Blueprint Error Surfacing Fix

Fix

Blueprint generation errors now propagate from the server with their actual message instead of being swallowed by Next.js production error sanitization. The error displayed to the user now shows what actually went wrong.

2026-05-19/

Attachments in Blueprint Generation & Draft Persistence Fix

Feature

Image attachments from the project creation form are now passed to the blueprint engine and included as multimodal content in the AI prompt.

Fix

Draft is no longer cleared on submit — it's cleared only after generation succeeds, so a failed generation doesn't lose the user's input.

2026-05-19/

Code Review Fixes — Blueprint Retry, Draft Persistence, Attachment Removal

Fix

Blueprint retry loop now appends a correction hint message instead of repeating the identical prompt, giving the model a chance to recover from deterministic parse failures.

Fix

Draft localStorage save is now skipped after form submit, preventing the useEffect from re-writing the draft that was just cleared.

Fix

Attachment removal now uses the map index instead of indexOf(), avoiding incorrect removal when object identities change across renders.

Fix

localStorage errors in the draft persistence effect are now logged instead of silently swallowed.

Fix

Unsafe string React keys (AI-generated, potentially non-unique) replaced with stable array indices in RoadmapTab and RequirementsTab.

Fix

Corrupted localStorage data is now cleared on parse failure instead of leaving the app stuck on every reload.

Refactor

Removed unused onUpdate prop from MainEditor — the tab components manage their own state updates.

2026-05-19/

Editor Migration: Editor.js → Tiptap

Feature

Replaced Editor.js with Tiptap (ProseMirror) for all rich-text modals. New editor includes a functional toolbar (H1–H4, bold, italic, inline code, lists, blockquote, code block) and full markdown round-tripping via @tiptap/markdown.

Refactor

Removed 7 @editorjs/* packages, lib/editorjs-markdown.ts, and ~80 lines of Editor.js-specific CSS. Added @tiptap/react, @tiptap/starter-kit, @tiptap/markdown, @tiptap/extension-placeholder, and @tiptap/extension-link.

2026-05-19/

Biome Lint Fixes — noNonNullAssertion, noArrayIndexKey, noLabelWithoutControl (RoadmapTab + StructureTab)

Fix

RoadmapTab: removed non-null assertion on spec.quickStart spread (added early-return guard in callback). Changed array-index keys to stable values: ph.title for roadmap phases, item for ph.items/ms.checklist strings, String(ms.sprint) for milestones, reqId for ms.deliveredReqs, risk.risk for risks, p.title for codingAgentPrompts. Added biome-ignore for editable items list in PhaseForm. Replaced <label> with <p> in Label component.

Fix

StructureTab: Changed array-index keys to stable values: route.path for routes, tech.label for static tech stack cards, s for services chips, col for table columns, id for comp.satisfies chips, c for constraints, a for assumptions. Added biome-ignore for editable lists in TechStackForm (services), TableForm (columns), and ComponentForm (satisfies). Replaced <label> with <p> in Label component.

2026-05-19/

Biome Lint Fixes — noNonNullAssertion, noArrayIndexKey, noLabelWithoutControl (BlueprintTab + RequirementsTab)

Fix

Removed non-null assertions on spec.mvpScope spreads (now constructs mvpScope object explicitly with optional-chaining fallbacks). Changed array-index keys to stable string keys: user, item, feat.name, step, assumption in BlueprintTab; nfr.category in RequirementsTab. Replaced <label> with <p> in BlueprintTab Field component (visual heading, no associated control). Added htmlFor/id pairs to all five label+control pairs in RequirementsTab (req-title, req-logic, req-priority, nfr-category, nfr-requirement).

2026-05-19/

Biome Lint Fixes — noImgElement, noStaticElementInteractions, noArrayIndexKey, useExhaustiveDependencies, noExplicitAny

Fix

Replaced <img> with Next.js <Image fill> in PreviewAttachment. Added role='region' to the drag-drop container div. Changed suggestedActions key from array index to suggestedAction.title; removed index from uploadQueue key. Wrapped adjustHeight and uploadFile in useCallback to stabilize hook dependencies. Replaced all noExplicitAny occurrences: input typed as Record<string, unknown> in geminiService runModel; reqsJson/archJson parameters typed as unknown in generateTechnicalArchitecture and generateRoadmap; catch blocks in ProjectContext changed to error: unknown with instanceof Error guards; LocalStorage migration map callbacks typed as Record<string, unknown> and unknown.

2026-05-18/

Biome Lint Fixes — noExplicitAny & noArrayIndexKey

Fix

Replaced useState<any> with useState<PricingModel | null> in BusinessView and exported PricingModel type from types.ts. Replaced all array-index keys with stable identity keys (model.name, plan, item, step.title, item.label, step.step, h.timestamp) across BusinessView.tsx and MainEditor.tsx. Removed unused onUpdate parameter from MainEditor destructuring.

2026-05-18/

Clipboard Copy Error Handling in RoadmapTab

Fix

copyToClipboard in RoadmapTab was fire-and-forget with no catch. It is now async/await with a destructive toast on failure, matching the error-handling pattern already in MainEditor.

2026-05-18/

Assumptions Section Now Visible in Editor

Fix

spec.assumptions was generated by the AI and stored in ProjectSpec but never rendered. The Assumptions section is now displayed in the Structure tab below Constraints, with editable cards and a ? badge, matching the existing section style.

2026-05-18/

Phase 1 Audit Fixes

Fix

Revision history now captures every change: initial AI generation, manual edits, and AI refinements — each with type, timestamp, and displayed metadata in the history panel.

Feature

Added Missing Assumptions section to the Blueprint tab, surfacing all AI-flagged assumptions from the generated spec.

Fix

Markdown export now includes '## App Summary' heading and '## Missing Assumptions' section, and uses '# {title} Blueprint' as the document title.

Scope

Removed PDF and DOCX export from Phase 1. Share dropdown now only exposes Copy Markdown.

Fix

Error handling hardened: localStorage save failure shows a toast, clipboard copy is properly awaited with a failure toast on error, and alert() calls replaced with the global error system.

Fix

Blueprint engine now retries once on malformed AI responses and uses a verified free-tier model ID (meta-llama/llama-3.1-8b-instruct:free).

2025-12-24/

Deep Reasoning & Chained Architecture

Architecture

Implemented 3-stage chained technical generation (Parser -> Architect -> Roadmap) ensuring rigid schema alignment.

UX

Granular real-time progress tracking mapped to 7 AI drivers and 22 descriptive loading states.

Schema

Evolution of ProjectSpec to include structured TechStack objects, Database Tables, and Component maps.

2025-12-24/

Monetization Blueprints & UI Polish

Feature

Added 'View Blueprint' for monetization models including plans, implementation Do's, and Pitfalls.

UI

Global version synchronization across Landing and Editor via shared data source.

Fix

Enhanced Dark Mode contrast for all business logic cards and hook explanations.

2025-12-24/

AI Engine: Migration to Replicate

AI

Migrated from direct Gemini API to Replicate for google/gemini-3-pro model.

Engine

Enabled Reasoning/Thinking support with configurable thinking levels (default: low).

Auth

Updated environment variable configuration to use REPLICATE_API_TOKEN.

2025-12-23/

Theme Polish & Component Refactoring

UI

Updated UI components to fully utilize theme-aware styling. Replaced hardcoded color classes with Tailwind theme variables (e.g., bg-card, text-muted-foreground) to ensure consistency across Light and Dark modes.

Fix

Minor adjustments to DOCX generation spacing.

2025-12-23/

Feature: Dark Mode Support

Theming

Integrated next-themes for seamless light/dark mode management.

UI

Added ModeToggle component to switch themes.

Styles

Modified globals.css and component classes to use CSS custom properties (bg-background, text-foreground) for dynamic theming.

Breaking

Wrapped application layout with ThemeProvider.

2025-12-23/

Feature: Document Exports

Exports

Added support for downloading project specifications as PDF (via @react-pdf/renderer) and DOCX (via docx).

UI

Implemented ProjectPDF component and docx-generator utility.

2025-12-22/

Feature: Multimodal AI Support

AI

Added support for file and image attachments in AI generation and refinement prompts.

UI

Enabled drag-and-drop and paste functionality for uploads in the landing and editor views.

Backend

Modified server actions and Gemini service to process multimodal inputs.

Breaking

ProjectSpec schema now includes an optional attachments array.

2025-12-22/

Dependency Upgrades: Next.js 16 & Tailwind v4

Build

Upgraded to Next.js v16.1.1 and React 19 (implied via Next 16 deps).

Styling

Upgraded to Tailwind CSS v4.1.18 and migrated globals.css to the new @theme configuration syntax.

UI

Migrated generic components to shadcn/ui primitives (Button, Card, Dialog, ScrollArea, Tabs, Toast).

Icons

Replaced custom icons with lucide-react.

2025-12-22/

UI Architecture: Shadcn & Theming

UI

Integrated shadcn/ui library structure and utility functions (cn merger).

Styling

Added tailwindcss-animate and configured tailwind.config.js with extended colors, border radius, and animation plugins.

Refactor

Refactored multimodal-ai-chat-input and other core components to use the new UI primitives.

2025-12-22/

Architecture: Migration to Next.js

Framework

Complete migration from Vite to Next.js (App Router).

Routing

Established file-system based routing and layout structure.

Server

Added Server Actions for project context and data handling.

Cleanup

Removed Vite configuration files (vite.config.ts, index.html) and legacy entry points.

2025-12-22/

CI/CD & Automation

CI

Integrated Gemini CLI for GitHub Workflows.

Workflows

Added automated actions for code review, issue triage, and scheduled maintenance.

2025-12-22/

Build Configuration Refinements (Vite Era)

Build

Configured Tailwind CSS and updated Vite settings for better source mapping.

Refactor

Improved geminiService.ts to isolate AI client instances.

Deps

General dependency updates and removal of unused server configs.

2025-12-21/

Initial Release

Launch

Initialized SpecForge project structure with React, TypeScript, and Vite.

Routing

Implemented client-side routing using the History API.

Core

Set up Zod schemas for project specifications.