From 5bc1261af77107d7c56ea5a332ac793d7bafb541 Mon Sep 17 00:00:00 2001 From: anusbutt Date: Tue, 18 Aug 2026 18:52:37 +0500 Subject: [PATCH] feat(portfolio): swap TaskMate for Irha Beauty, move TaskMate to more projects --- src/content/projects.ts | 238 +++++++++++++++++++++------------------- tests/homepage.spec.ts | 4 +- 2 files changed, 126 insertions(+), 116 deletions(-) diff --git a/src/content/projects.ts b/src/content/projects.ts index 03daf9c..30c1b36 100644 --- a/src/content/projects.ts +++ b/src/content/projects.ts @@ -1,115 +1,125 @@ -export interface Project { - name: string; - problem: string; - description: string; - techStack: string[]; - githubUrl?: string; - websiteUrl?: string; - websiteLabel?: string; - featured?: boolean; -} - -export const projects: Project[] = [ - { - name: "GraphKeeper", - problem: - "Coding agents lose durable context, and opaque summaries make remembered claims difficult to trust.", - description: - "Built and maintain a Git-native memory layer for coding agents. Evidence-backed claims, explicit provenance, append-only corrections, and repository validation make project knowledge durable, auditable, and safer to reuse across sessions.", - techStack: [ - "TypeScript CLI", - "Agent memory", - "Evidence & provenance", - "Git-native storage", - "Codex", - "Claude Code", - ], - githubUrl: "https://github.com/anusbutt/Graph_Keeper", - websiteUrl: "https://www.npmjs.com/package/graphkeeper", - websiteLabel: "View npm package", - featured: true, - }, - { - name: "TaskMate", - problem: - "Task apps still make users translate intent into manual form and list operations.", - description: - "Built a full-stack AI task manager where authenticated users create, update, complete, and delete tasks through natural language. A Next.js client and FastAPI/PostgreSQL backend orchestrate an AI agent whose MCP tools execute scoped task actions.", - techStack: [ - "Next.js", - "TypeScript", - "FastAPI", - "PostgreSQL", - "JWT auth", - "AI agents", - "MCP tools", - ], - githubUrl: "https://github.com/anusbutt/taskmate", - websiteUrl: "https://evolution-of-todo-coral.vercel.app/", - }, - { - name: "Omniveer Duct Lead Qualifier", - problem: - "Service businesses lose ready-to-book leads when repetitive qualification waits on a human reply.", - description: - "Built an applied AI workflow that responds to inbound duct-cleaning leads, gathers job details, checks fit and availability, and moves qualified conversations toward booking—with human takeover for exceptions.", - techStack: [ - "AI agents", - "Python", - "FastAPI", - "Next.js", - "PostgreSQL", - "Workflow automation", - ], - websiteUrl: "https://www.omniveer.com/lead-qualification-agent", - websiteLabel: "View case study", - }, - { - name: "RAG-Powered Interactive Robotics Textbook", - problem: - "Static learning content cannot answer follow-up questions without losing source context.", - description: - "Built and deployed an interactive textbook with a RAG assistant that embeds and retrieves course content from Qdrant, returns source-grounded answers with lesson citations, and serves the experience through Docusaurus and FastAPI.", - techStack: [ - "RAG", - "Cohere embeddings", - "Qdrant", - "FastAPI", - "Docusaurus", - "Source citations", - ], - githubUrl: - "https://github.com/anusbutt/Physical-AI-Humanoid-Robotics-Textbook", - websiteUrl: - "https://anusbutt.github.io/Physical-AI-Humanoid-Robotics-Textbook/", - }, - { - name: "Agent Replay", - problem: - "AI agent failures are difficult to reproduce, explain, and retest without replaying real-world side effects.", - description: - "Built an agent observability and verification system that records execution, traces failures, and forks runs from the failing step with sandboxed tool calls to test a fix. It spans a Python SDK, FastAPI/PostgreSQL backend, and Next.js debugging dashboard.", - techStack: [ - "Python SDK", - "FastAPI", - "PostgreSQL", - "Next.js", - "Agent observability", - "Replay & verification", - ], - githubUrl: "https://github.com/anusbutt/agent-replay", - websiteUrl: "https://agent-replay-phi.vercel.app/", - }, -]; - -export const moreProjects: Project[] = [ - { - name: "Prospector", - problem: - "AI-assisted research and outreach can fabricate details or act before a human has reviewed the result.", - description: - "An evidence-grounded Python CLI for company research, citation-validated drafting, and approval-gated outreach.", - techStack: ["Python CLI", "AI tool use", "Evidence validation", "Human approval"], - githubUrl: "https://github.com/anusbutt/Prospector", - }, +export interface Project { + name: string; + problem: string; + description: string; + techStack: string[]; + githubUrl?: string; + websiteUrl?: string; + websiteLabel?: string; + featured?: boolean; +} + +export const projects: Project[] = [ + { + name: "GraphKeeper", + problem: + "Coding agents lose durable context, and opaque summaries make remembered claims difficult to trust.", + description: + "Built and maintain a Git-native memory layer for coding agents. Evidence-backed claims, explicit provenance, append-only corrections, and repository validation make project knowledge durable, auditable, and safer to reuse across sessions.", + techStack: [ + "TypeScript CLI", + "Agent memory", + "Evidence & provenance", + "Git-native storage", + "Codex", + "Claude Code", + ], + githubUrl: "https://github.com/anusbutt/Graph_Keeper", + websiteUrl: "https://www.npmjs.com/package/graphkeeper", + websiteLabel: "View npm package", + featured: true, + }, + { + name: "Irha Beauty", + problem: + "Beauty brands need an elegant storefront that turns product discovery into effortless checkout.", + description: + "Built and shipped a full-stack e-commerce experience for Irha Beauty with category browsing, product detail pages, cart, wishlist, and account flows, all in a refined nature-inspired design.", + techStack: ["Next.js", "TypeScript", "Tailwind CSS", "E-commerce"], + websiteUrl: "https://www.irhapk.com", + websiteLabel: "View site", + }, + { + name: "Omniveer Duct Lead Qualifier", + problem: + "Service businesses lose ready-to-book leads when repetitive qualification waits on a human reply.", + description: + "Built an applied AI workflow that responds to inbound duct-cleaning leads, gathers job details, checks fit and availability, and moves qualified conversations toward booking—with human takeover for exceptions.", + techStack: [ + "AI agents", + "Python", + "FastAPI", + "Next.js", + "PostgreSQL", + "Workflow automation", + ], + websiteUrl: "https://www.omniveer.com/lead-qualification-agent", + websiteLabel: "View case study", + }, + { + name: "RAG-Powered Interactive Robotics Textbook", + problem: + "Static learning content cannot answer follow-up questions without losing source context.", + description: + "Built and deployed an interactive textbook with a RAG assistant that embeds and retrieves course content from Qdrant, returns source-grounded answers with lesson citations, and serves the experience through Docusaurus and FastAPI.", + techStack: [ + "RAG", + "Cohere embeddings", + "Qdrant", + "FastAPI", + "Docusaurus", + "Source citations", + ], + githubUrl: + "https://github.com/anusbutt/Physical-AI-Humanoid-Robotics-Textbook", + websiteUrl: + "https://anusbutt.github.io/Physical-AI-Humanoid-Robotics-Textbook/", + }, + { + name: "Agent Replay", + problem: + "AI agent failures are difficult to reproduce, explain, and retest without replaying real-world side effects.", + description: + "Built an agent observability and verification system that records execution, traces failures, and forks runs from the failing step with sandboxed tool calls to test a fix. It spans a Python SDK, FastAPI/PostgreSQL backend, and Next.js debugging dashboard.", + techStack: [ + "Python SDK", + "FastAPI", + "PostgreSQL", + "Next.js", + "Agent observability", + "Replay & verification", + ], + githubUrl: "https://github.com/anusbutt/agent-replay", + websiteUrl: "https://agent-replay-phi.vercel.app/", + }, +]; + +export const moreProjects: Project[] = [ + { + name: "TaskMate", + problem: + "Task apps still make users translate intent into manual form and list operations.", + description: + "Built a full-stack AI task manager where authenticated users create, update, complete, and delete tasks through natural language. A Next.js client and FastAPI/PostgreSQL backend orchestrate an AI agent whose MCP tools execute scoped task actions.", + techStack: [ + "Next.js", + "TypeScript", + "FastAPI", + "PostgreSQL", + "JWT auth", + "AI agents", + "MCP tools", + ], + githubUrl: "https://github.com/anusbutt/taskmate", + websiteUrl: "https://evolution-of-todo-coral.vercel.app/", + }, + { + name: "Prospector", + problem: + "AI-assisted research and outreach can fabricate details or act before a human has reviewed the result.", + description: + "An evidence-grounded Python CLI for company research, citation-validated drafting, and approval-gated outreach.", + techStack: ["Python CLI", "AI tool use", "Evidence validation", "Human approval"], + githubUrl: "https://github.com/anusbutt/Prospector", + }, ]; \ No newline at end of file diff --git a/tests/homepage.spec.ts b/tests/homepage.spec.ts index a67ea93..057333a 100644 --- a/tests/homepage.spec.ts +++ b/tests/homepage.spec.ts @@ -61,7 +61,7 @@ test("homepage positioning and responsive layout", async ({ page }, testInfo) => .allTextContents(); expect(projectNames).toEqual([ "GraphKeeper", - "TaskMate", + "Irha Beauty", "Omniveer Duct Lead Qualifier", "RAG-Powered Interactive Robotics Textbook", "Agent Replay", @@ -78,7 +78,7 @@ test("homepage positioning and responsive layout", async ({ page }, testInfo) => await expect(page.getByText("More projects", { exact: true })).toBeVisible(); await expect( page.locator('#projects article[data-project-tier="more"] h3'), - ).toHaveText("Prospector"); + ).toHaveText(["TaskMate", "Prospector"]); await expect(page.getByText("Nestaro Pilot", { exact: true })).toHaveCount(0); await page.screenshot({ path: testInfo.outputPath("projects.png"), fullPage: true });