Version history and feature updates for this portfolio — shipped features, fixes, and experiments, logged by release.
Complete profile pack system: ZIP-based snapshots covering all 68 DB tables, transactional restore with checkpoint/rollback, contract validation, admin UI with dry-run preview, and version history. Ships with two built-in profiles: karanveer (owner) and maya (demo).
Squashed 41 incremental Drizzle migrations into a single 0000_baseline.sql for a clean install experience. Full smoke test on empty DB confirmed all API routes healthy.
Portfolio AI assistant upgraded with semantic search over blog posts (Qdrant), live DB query tools, streaming UI with tool-call visibility, and a funnel-event tracking system for conversation analytics.
Complete admin panel covering blog posts, projects, skills, timeline, testimonials, AMA, decisions log, roadmap, build updates, changelog, garden notes, thoughts, links, and site settings — all editable without touching code.
Audited all 78 admin mutation routes and replaced revalidateTag(tag, 'max') calls (silently broken in Next.js 16) with bustTag() using inline CacheLifeConfig. All content now invalidates correctly on save.
Added a guided setup wizard for new deployments: creates the admin account, configures site identity, and walks through first-time profile installation. The site locks to /setup until the wizard completes.
Full blog system with MDX rendering, auto-generated table of contents, series grouping, reading time, post reactions, and versioned changelogs per post. 31 posts migrated from static files.
Booking availability API with timezone support, work-hours rules, advance-notice limits, and a public-facing availability badge that shows open-to-work status.
Real-time status page that polls configured services and displays uptime history. Configurable via admin UI, no code changes needed to add/remove services.
Site-wide maintenance mode toggle in the admin navbar. Unauthenticated visitors see a maintenance page; authenticated admins pass through. APIs return 503 with Retry-After headers.