<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fudail Zafar</title>
    <description>The latest articles on DEV Community by Fudail Zafar (@fudailzafar).</description>
    <link>https://dev.to/fudailzafar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3495333%2Fccccbc11-c886-4b4a-8a2a-535490f05cfe.jpg</url>
      <title>DEV Community: Fudail Zafar</title>
      <link>https://dev.to/fudailzafar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fudailzafar"/>
    <language>en</language>
    <item>
      <title>Building a Portfolio while you Chat: My TamboHack Project</title>
      <dc:creator>Fudail Zafar</dc:creator>
      <pubDate>Thu, 11 Sep 2025 17:03:13 +0000</pubDate>
      <link>https://dev.to/fudailzafar/building-a-portfolio-while-you-chat-my-tambohack-project-14m3</link>
      <guid>https://dev.to/fudailzafar/building-a-portfolio-while-you-chat-my-tambohack-project-14m3</guid>
      <description>&lt;p&gt;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 &amp;amp; TypeScript.&lt;/p&gt;

&lt;p&gt;Before you read any further, check out the demo:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/gZ7OYFkH-3Y"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;(Link to the code: &lt;a href="https://github.com/fudailzafar/tambo-hack" rel="noopener noreferrer"&gt;fudailzafar/tambo-hack&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;You can see the live demo here: &lt;a href="https://tambohack.vercel.app" rel="noopener noreferrer"&gt;tambohack.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠 What it Does?
&lt;/h2&gt;

&lt;p&gt;ChatPortfolio translates your English into a shareable Portfolio — which you can customize it. Ask it stuff like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Change my name to Steve Jobs.”&lt;/li&gt;
&lt;li&gt;“Enable Dark Mode.”&lt;/li&gt;
&lt;li&gt;“Change my skills to a full stack dev role and update my font to Times New Roman.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It understands your query, dynamically pulling from multiple components &amp;amp; updates your portfolio!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create Your Tambo App (Yay!)
&lt;/h2&gt;

&lt;p&gt;Start off building this by creating a new &lt;a href="https://tambo.co" rel="noopener noreferrer"&gt;Tambo App&lt;/a&gt; (The Best AI Orchestration tool out there)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx tambo create-app my-personal-portfolio
cd my-personal-portfolio
npx tambo init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you're done with the initial setup, you can delete a couple files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rm src/components/ui/card-data.tsx src/services/population-stats.ts
rm src/app/interactables/settings-panel.tsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Add the initial data and UI components
&lt;/h2&gt;

&lt;p&gt;Add the below &lt;code&gt;portfolio-interactable.tsx&lt;/code&gt; in the same place where you've deleted the &lt;code&gt;settings-panel.tsx&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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(
// ... 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are a couple of other components which have to added for the custom UI. You can find them here --&amp;gt; &lt;a href="https://github.com/fudailzafar/tambo-hack/blob/master/src/app/interactables/components/portfolio.tsx" rel="noopener noreferrer"&gt;fudailzafar/tambo-hack&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add Magic UI components for making beautiful UI!
&lt;/h2&gt;

&lt;p&gt;Using the following code, add Magic UI components so that you can implement beautiful UI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Main Portfolio component
&lt;/h2&gt;

&lt;p&gt;Add the following code for your main portfolio component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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(() =&amp;gt; {
    if (safeData.theme &amp;amp;&amp;amp; 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 (
// ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Integrate your components into Tambo!
&lt;/h2&gt;

&lt;p&gt;The last thing is to integrate your portfolio components into Tambo. Add the following lines of code in your &lt;code&gt;src\app\interactables\components\portfolio-interactable.tsx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Embed the following code in the end of your component, or just copy from the repo: &lt;a href="https://github.com/fudailzafar/tambo-hack/blob/master/src/app/interactables/components/portfolio-interactable.tsx" rel="noopener noreferrer"&gt;fudailzafar/tambo-hack&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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) =&amp;gt; {
    setPortfolioData((prev: any) =&amp;gt; ({ ...prev, ...newProps }));
    console.log("Portfolio updated from Tambo:", newProps);
  };

  return (
    &amp;lt;InteractablePortfolio
      {...portfolioData}
      onPropsUpdate={handlePropsUpdate}
    /&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then visit &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;localhost:3000&lt;/a&gt; to see it live locally.&lt;/p&gt;

&lt;h2&gt;
  
  
  The End
&lt;/h2&gt;

&lt;p&gt;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:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/fudailzafar/tambo-hack.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And change your .env.local files to Tambo API.&lt;/p&gt;

&lt;p&gt;Thank you for reading! If you have feedback, ideas, or want to contribute, let &lt;a href="https://x.com/fudailzafar" rel="noopener noreferrer"&gt;me&lt;/a&gt; know! 😊&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
