I’m thrilled to share my project for TamboHack: ChatPortfolio (aka Cursor for Portfolio) — a smart, minimalitistic AI Portfolio built with Tambo AI, Next.js & TypeScript.
Before you read any further, check out the demo:
(Link to the code: fudailzafar/tambo-hack)
You can see the live demo here: tambohack.vercel.app
🛠 What it Does?
ChatPortfolio translates your English into a shareable Portfolio — which you can customize it. Ask it stuff like:
- “Change my name to Steve Jobs.”
- “Enable Dark Mode.”
- “Change my skills to a full stack dev role and update my font to Times New Roman.”
It understands your query, dynamically pulling from multiple components & updates your portfolio!
Step 1: Create Your Tambo App (Yay!)
Start off building this by creating a new Tambo App (The Best AI Orchestration tool out there)
npx tambo create-app my-personal-portfolio
cd my-personal-portfolio
npx tambo init
Once you're done with the initial setup, you can delete a couple files.
rm src/components/ui/card-data.tsx src/services/population-stats.ts
rm src/app/interactables/settings-panel.tsx
Step 2: Add the initial data and UI components
Add the below portfolio-interactable.tsx
in the same place where you've deleted the settings-panel.tsx
.
import { useState } from "react";
import { withInteractable } from "@tambo-ai/react";
import { z } from "zod";
import Portfolio from "./portfolio";
import { DATA as initialData } from "@/data/resume";
// Define schema for portfolio data (simplified for demo)
const portfolioSchema = z.object({
name: z.string(),
description: z.string(),
summary: z.string(),
skills: z.array(z.string()),
projects: z.array(
// ...
There are a couple of other components which have to added for the custom UI. You can find them here --> fudailzafar/tambo-hack
Step 3: Add Magic UI components for making beautiful UI!
Using the following code, add Magic UI components so that you can implement beautiful UI.
npx shadcn@latest add "https://magicui.design/r/blur-fade"
npx shadcn@latest add "https://magicui.design/r/dock"
npx shadcn@latest add "https://magicui.design/r/blur-fade-text"
Step 4: Main Portfolio component
Add the following code for your main portfolio component:
import { Separator } from "@/components/ui/separator";
import { ModeToggle } from "@/components/mode-toggle";
import { HomeIcon } from "lucide-react";
import { useEffect } from "react";
import { useTheme } from "next-themes";
const BLUR_FADE_DELAY = 0.04;
export default function Portfolio({ data }: { data?: any }) {
const safeData = data ?? defaultData;
const { theme, setTheme } = useTheme();
// Sync theme from props
useEffect(() => {
if (safeData.theme && safeData.theme !== theme) {
setTheme(safeData.theme);
}
}, [safeData.theme, theme, setTheme]);
// Portfolio-only font and color styles
const portfolioFont = safeData.font ? { fontFamily: safeData.font } : {};
const portfolioColor = safeData.color ? { color: safeData.color } : {};
const portfolioTextStyle = { ...portfolioFont, ...portfolioColor };
return (
// ...
Step 5: Integrate your components into Tambo!
The last thing is to integrate your portfolio components into Tambo. Add the following lines of code in your src\app\interactables\components\portfolio-interactable.tsx
Embed the following code in the end of your component, or just copy from the repo: fudailzafar/tambo-hack
const InteractablePortfolio = withInteractable(PortfolioInteractableBase, {
componentName: "Portfolio",
description: "Portfolio interactable with AI chatbox",
propsSchema: portfolioSchema,
});
export function PortfolioInteractable() {
const [portfolioData, setPortfolioData] = useState(initialData);
// Handler for AI updates
const handlePropsUpdate = (newProps: any) => {
setPortfolioData((prev: any) => ({ ...prev, ...newProps }));
console.log("Portfolio updated from Tambo:", newProps);
};
return (
<InteractablePortfolio
{...portfolioData}
onPropsUpdate={handlePropsUpdate}
/>
);
}
Then visit localhost:3000 to see it live locally.
The End
And yes, that's it, if the app doesn't work after this step-by-step guide, I'm sorry, my coding skills aren't the same as my writing skills. You can clone the repo using the following commands:
git clone https://github.com/fudailzafar/tambo-hack.git
And change your .env.local files to Tambo API.
Thank you for reading! If you have feedback, ideas, or want to contribute, let me know! 😊
Top comments (0)