{
	"$schema": "https://ui.shadcn.com/schema/registry-item.json",
	"name": "app-02",
	"type": "registry:block",
	"description": "A persona generator app with structured outputs.",
	"dependencies": ["ai", "@ai-sdk/openai", "zod"],
	"registryDependencies": [
		"dialog",
		"button",
		"input",
		"textarea",
		"label",
		"scroll-area",
		"form",
		"skeleton",
		"card",
		"avatar"
	],
	"files": [
		{
			"path": "./src/registry/blocks/app-02/page.tsx",
			"content": "\"use client\";\n\nimport { experimental_useObject as useObject } from \"@ai-sdk/react\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { z } from \"zod\";\nimport { Button } from \"@/components/ui/button\";\nimport { Dialog, DialogContent } from \"@/components/ui/dialog\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { PersonaDisplay } from \"@/registry/blocks/app-02/components/persona-display\";\nimport { getRandomExample } from \"@/registry/blocks/app-02/lib/example-businesses\";\nimport {\n\tformSchema,\n\tProductPersonaSchema,\n\tUserPersonaSchema,\n} from \"@/registry/blocks/app-02/lib/persona\";\n\ntype FormData = z.infer<typeof formSchema>;\n\nexport default function PersonaGenerator() {\n\tconst [showDialog, setShowDialog] = useState(false);\n\n\tconst {\n\t\tregister,\n\t\thandleSubmit,\n\t\tformState: { errors },\n\t\treset,\n\t} = useForm<FormData>({\n\t\tresolver: zodResolver(formSchema),\n\t});\n\n\tconst { object, submit, isLoading } = useObject({\n\t\tapi: \"/api/ai/persona\",\n\t\tschema: z.object({\n\t\t\tuserPersona: UserPersonaSchema,\n\t\t\tproductPersona: ProductPersonaSchema,\n\t\t}),\n\t});\n\n\tconst onSubmit = async (data: FormData) => {\n\t\tsetShowDialog(true);\n\t\tsubmit(data);\n\t};\n\n\tconst handleRandomize = () => {\n\t\tconst example = getRandomExample();\n\t\treset(example);\n\t};\n\n\treturn (\n\t\t<div className=\"max-w-3xl mx-auto p-6 space-y-8\">\n\t\t\t<div className=\"space-y-4 text-center\">\n\t\t\t\t<h4 className=\"text-3xl font-bold tracking-tight\">\n\t\t\t\t\tAI Persona Generator\n\t\t\t\t</h4>\n\t\t\t\t<p className=\"text-lg text-muted-foreground max-w-2xl mx-auto\">\n\t\t\t\t\tGenerate detailed user and product personas for your\n\t\t\t\t\tbusiness using AI. Fill in the details below or try a random\n\t\t\t\t\texample to get started.\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div className=\"flex justify-end\">\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tonClick={handleRandomize}\n\t\t\t\t\tclassName=\"group\"\n\t\t\t\t>\n\t\t\t\t\t<span className=\"mr-2 group-hover:animate-spin\">🎲</span>\n\t\t\t\t\tTry Random Example\n\t\t\t\t</Button>\n\t\t\t</div>\n\n\t\t\t<div className=\"bg-card border rounded-lg p-6\">\n\t\t\t\t<form onSubmit={handleSubmit(onSubmit)} className=\"space-y-6\">\n\t\t\t\t\t<div className=\"grid gap-6 sm:grid-cols-2\">\n\t\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t\t<Label htmlFor=\"businessName\">Business Name</Label>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tid=\"businessName\"\n\t\t\t\t\t\t\t\t{...register(\"businessName\")}\n\t\t\t\t\t\t\t\tplaceholder=\"Enter your business name\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{errors.businessName && (\n\t\t\t\t\t\t\t\t<p className=\"text-sm text-destructive\">\n\t\t\t\t\t\t\t\t\t{errors.businessName.message}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t\t<Label htmlFor=\"industry\">Industry</Label>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tid=\"industry\"\n\t\t\t\t\t\t\t\t{...register(\"industry\")}\n\t\t\t\t\t\t\t\tplaceholder=\"e.g., Tech, Healthcare, Finance\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{errors.industry && (\n\t\t\t\t\t\t\t\t<p className=\"text-sm text-destructive\">\n\t\t\t\t\t\t\t\t\t{errors.industry.message}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<Label htmlFor=\"targetAudience\">Target Audience</Label>\n\t\t\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\tDescribe your ideal customers including their age,\n\t\t\t\t\t\t\toccupation, interests, and needs.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\tid=\"targetAudience\"\n\t\t\t\t\t\t\t{...register(\"targetAudience\")}\n\t\t\t\t\t\t\tplaceholder=\"e.g., Young professionals aged 25-35 working in tech, interested in personal development...\"\n\t\t\t\t\t\t\tclassName=\"h-24\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{errors.targetAudience && (\n\t\t\t\t\t\t\t<p className=\"text-sm text-destructive\">\n\t\t\t\t\t\t\t\t{errors.targetAudience.message}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<Label htmlFor=\"productDescription\">\n\t\t\t\t\t\t\tProduct Description\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\tDescribe what your product or service does and the\n\t\t\t\t\t\t\tmain problems it solves.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\tid=\"productDescription\"\n\t\t\t\t\t\t\t{...register(\"productDescription\")}\n\t\t\t\t\t\t\tplaceholder=\"e.g., A mobile app that helps users track their daily habits and build better routines...\"\n\t\t\t\t\t\t\tclassName=\"h-24\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{errors.productDescription && (\n\t\t\t\t\t\t\t<p className=\"text-sm text-destructive\">\n\t\t\t\t\t\t\t\t{errors.productDescription.message}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<Button type=\"submit\" className=\"w-full\">\n\t\t\t\t\t\tGenerate Personas\n\t\t\t\t\t</Button>\n\t\t\t\t</form>\n\t\t\t</div>\n\n\t\t\t<Dialog open={showDialog} onOpenChange={setShowDialog}>\n\t\t\t\t<DialogContent className=\"w-[95vw] max-w-4xl lg:max-w-6xl h-[90vh] overflow-y-auto\">\n\t\t\t\t\t<PersonaDisplay object={object} isLoading={isLoading} />\n\t\t\t\t</DialogContent>\n\t\t\t</Dialog>\n\t\t</div>\n\t);\n}\n",
			"type": "registry:page",
			"target": "app/persona/page.tsx"
		},
		{
			"path": "./src/registry/blocks/app-02/route.ts",
			"content": "// src/registry/blocks/persona-generator/route.ts\nimport { openai } from \"@ai-sdk/openai\";\nimport { streamObject } from \"ai\";\nimport { z } from \"zod\";\nimport {\n\tProductPersonaSchema,\n\tUserPersonaSchema,\n} from \"@/registry/blocks/app-02/lib/persona\";\n\nexport async function POST(req: Request) {\n\tconst { businessName, industry, targetAudience, productDescription } =\n\t\tawait req.json();\n\n\tconst result = streamObject({\n\t\tmodel: openai(\"gpt-4-turbo\"),\n\t\tsystem: `\n<persona_generation_rules>\n  <general_rules>\n    - Generate BOTH user and product personas based on the business details provided\n    - Use realistic but fictional details\n    - Include relevant emojis in appropriate fields\n    - Ensure personas are aligned with the business context\n    - Make the personas complementary - the user persona should be an ideal customer for the product persona\n  </general_rules>\n\n</persona_generation_rules>`,\n\t\tprompt: `Business Name: ${businessName}\n\t\t\tIndustry: ${industry}\n\t\t\tTarget Audience: ${targetAudience}\n\t\t\tProduct Description: ${productDescription}`,\n\t\tschema: z.object({\n\t\t\tuserPersona: UserPersonaSchema,\n\t\t\tproductPersona: ProductPersonaSchema,\n\t\t}),\n\t});\n\n\treturn result.toTextStreamResponse();\n}\n",
			"type": "registry:page",
			"target": "app/api/ai/persona/route.ts"
		},
		{
			"path": "./src/registry/blocks/app-02/components/persona-display.tsx",
			"content": "import type { DeepPartial } from \"ai\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { DialogHeader, DialogTitle } from \"@/components/ui/dialog\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { cn } from \"@/lib/utils\";\nimport type {\n\tProductPersona,\n\tUserPersona,\n} from \"@/registry/blocks/app-02/lib/persona\";\n\nfunction DisplayField({\n\tlabel,\n\tvalue,\n\tisLoading,\n\tclassName,\n}: {\n\tlabel: string;\n\tvalue?: string | number;\n\tisLoading: boolean;\n\tclassName?: string;\n}) {\n\treturn (\n\t\t<div className={cn(\"space-y-1\", className)}>\n\t\t\t<p className=\"text-sm font-medium text-muted-foreground\">{label}</p>\n\t\t\t{isLoading && value === undefined ? (\n\t\t\t\t<Skeleton className=\"h-4 w-full\" />\n\t\t\t) : isLoading || value !== undefined ? (\n\t\t\t\t<p className=\"text-sm\">{value}</p>\n\t\t\t) : (\n\t\t\t\t<p className=\"text-sm\">-</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport function PersonaDisplay({\n\tobject,\n\tisLoading,\n}: {\n\tobject?: {\n\t\tuserPersona?: DeepPartial<UserPersona>;\n\t\tproductPersona?: DeepPartial<ProductPersona>;\n\t};\n\tisLoading: boolean;\n}) {\n\tconst { userPersona, productPersona } = object || {};\n\n\tconst getUserAvatar = (name?: string, gender?: string) => {\n\t\tif (!name || !gender) {\n\t\t\treturn \"\";\n\t\t}\n\t\tconst baseUrl = \"https://avatar.iran.liara.run/public\";\n\t\treturn `${baseUrl}/${gender === \"male\" ? \"boy\" : \"girl\"}?username=${encodeURIComponent(name)}`;\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-col\">\n\t\t\t<DialogHeader className=\"mb-8\">\n\t\t\t\t<DialogTitle className=\"text-2xl font-bold text-center\">\n\t\t\t\t\tHere are your Generated Personas\n\t\t\t\t</DialogTitle>\n\t\t\t</DialogHeader>\n\n\t\t\t<div className=\"grid gap-8 md:grid-cols-2 h-full\">\n\t\t\t\t<div className=\"flex flex-col space-y-3 h-full\">\n\t\t\t\t\t<h4 className=\"text-xl font-semibold text-center flex-none\">\n\t\t\t\t\t\tUser Persona\n\t\t\t\t\t</h4>\n\t\t\t\t\t<Card className=\"flex-1 flex flex-col\">\n\t\t\t\t\t\t<CardHeader className=\"flex flex-row items-center gap-4 flex-none\">\n\t\t\t\t\t\t\t<Avatar className=\"h-16 w-16\">\n\t\t\t\t\t\t\t\t<AvatarImage\n\t\t\t\t\t\t\t\t\tsrc={getUserAvatar(\n\t\t\t\t\t\t\t\t\t\tuserPersona?.name,\n\t\t\t\t\t\t\t\t\t\tuserPersona?.demographics?.gender,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\talt={userPersona?.name || \"User\"}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<AvatarFallback>\n\t\t\t\t\t\t\t\t\t{userPersona?.name\n\t\t\t\t\t\t\t\t\t\t?.split(\" \")\n\t\t\t\t\t\t\t\t\t\t.map((n) => n[0])\n\t\t\t\t\t\t\t\t\t\t.join(\"\")}\n\t\t\t\t\t\t\t\t</AvatarFallback>\n\t\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t\t\t<div className=\"space-y-1\">\n\t\t\t\t\t\t\t\t<CardTitle>\n\t\t\t\t\t\t\t\t\t{userPersona?.name || \"User Persona\"}\n\t\t\t\t\t\t\t\t</CardTitle>\n\t\t\t\t\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{userPersona?.role || \"Loading role...\"}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</CardHeader>\n\t\t\t\t\t\t<CardContent className=\"grid gap-4 flex-1\">\n\t\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-4\">\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Age\"\n\t\t\t\t\t\t\t\t\tvalue={userPersona?.age}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Location\"\n\t\t\t\t\t\t\t\t\tvalue={userPersona?.demographics?.location}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Gender\"\n\t\t\t\t\t\t\t\t\tvalue={userPersona?.demographics?.gender}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Education\"\n\t\t\t\t\t\t\t\t\tvalue={userPersona?.demographics?.education}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\tlabel=\"Bio\"\n\t\t\t\t\t\t\t\tvalue={userPersona?.bio}\n\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\tclassName=\"col-span-2\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<div className=\"space-y-4\">\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Goals\"\n\t\t\t\t\t\t\t\t\tvalue={userPersona?.goals?.join(\"\\n\")}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Frustrations\"\n\t\t\t\t\t\t\t\t\tvalue={userPersona?.frustrations?.join(\n\t\t\t\t\t\t\t\t\t\t\"\\n\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Preferred Channels\"\n\t\t\t\t\t\t\t\t\tvalue={userPersona?.preferredChannels?.join(\n\t\t\t\t\t\t\t\t\t\t\", \",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</CardContent>\n\t\t\t\t\t</Card>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"flex flex-col space-y-3 h-full\">\n\t\t\t\t\t<h4 className=\"text-xl font-semibold text-center flex-none\">\n\t\t\t\t\t\tProduct Persona\n\t\t\t\t\t</h4>\n\t\t\t\t\t<Card className=\"flex-1 flex flex-col\">\n\t\t\t\t\t\t<CardHeader className=\"flex flex-row items-center gap-4 flex-none\">\n\t\t\t\t\t\t\t<div className=\"flex h-16 w-16 items-center justify-center rounded-full bg-muted text-4xl\">\n\t\t\t\t\t\t\t\t{productPersona?.emoji || \"\"}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"space-y-1\">\n\t\t\t\t\t\t\t\t<CardTitle>\n\t\t\t\t\t\t\t\t\t{productPersona?.productName ||\n\t\t\t\t\t\t\t\t\t\t\"Product Persona\"}\n\t\t\t\t\t\t\t\t</CardTitle>\n\t\t\t\t\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{productPersona?.category ||\n\t\t\t\t\t\t\t\t\t\t\"Loading category...\"}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</CardHeader>\n\t\t\t\t\t\t<CardContent className=\"flex flex-col gap-4 flex-1\">\n\t\t\t\t\t\t\t<div className=\"grid gap-4 content-start\">\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Target Audience\"\n\t\t\t\t\t\t\t\t\tvalue={productPersona?.targetAudience}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Key Features\"\n\t\t\t\t\t\t\t\t\tvalue={productPersona?.keyFeatures?.join(\n\t\t\t\t\t\t\t\t\t\t\"\\n\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Value Proposition\"\n\t\t\t\t\t\t\t\t\tvalue={productPersona?.valueProposition}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Pain Points Solved\"\n\t\t\t\t\t\t\t\t\tvalue={productPersona?.painPointsSolved?.join(\n\t\t\t\t\t\t\t\t\t\t\"\\n\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<DisplayField\n\t\t\t\t\t\t\t\t\tlabel=\"Pricing Model\"\n\t\t\t\t\t\t\t\t\tvalue={productPersona?.pricingModel}\n\t\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</CardContent>\n\t\t\t\t\t</Card>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n",
			"type": "registry:component"
		},
		{
			"path": "./src/registry/blocks/app-02/lib/persona.ts",
			"content": "import { z } from \"zod\";\n\n// Input form schema\nexport const formSchema = z.object({\n\tbusinessName: z.string().min(2, \"Business name is required\"),\n\tindustry: z.string().min(2, \"Industry is required\"),\n\ttargetAudience: z.string().min(10, \"Please describe your target audience\"),\n\tproductDescription: z\n\t\t.string()\n\t\t.min(20, \"Please provide more details about your product\"),\n});\n\n// User Persona Schema\nexport const UserPersonaSchema = z.object({\n\ttype: z.literal(\"user\"),\n\tname: z.string().min(2).describe(\"Full name of the user\"),\n\tage: z.number().int().positive().max(120),\n\trole: z.string().describe(\"Professional role or occupation\"),\n\tdemographics: z.object({\n\t\tlocation: z.string().describe(\"City and country\"),\n\t\tgender: z.enum([\"male\", \"female\", \"other\"]),\n\t\teducation: z.string().describe(\"Highest education level\"),\n\t}),\n\tbio: z.string().describe(\"Short biographical description\"),\n\tgoals: z.array(z.string()).min(1).describe(\"User's primary goals\"),\n\tfrustrations: z\n\t\t.array(z.string())\n\t\t.min(1)\n\t\t.describe(\"User's main frustrations\"),\n\tpreferredChannels: z\n\t\t.array(z.string())\n\t\t.describe(\"Preferred communication channels\"),\n});\n\n// Product Persona Schema\nexport const ProductPersonaSchema = z.object({\n\ttype: z.literal(\"product\"),\n\tproductName: z.string().min(2),\n\tcategory: z.string().describe(\"Product category\"),\n\ttargetAudience: z.string().describe(\"Primary target users\"),\n\tkeyFeatures: z.array(z.string()).min(3),\n\tvalueProposition: z.string().describe(\"Core value proposition\"),\n\tpainPointsSolved: z.array(z.string()).min(1),\n\tpricingModel: z.string().describe(\"e.g., Freemium, Subscription, etc.\"),\n\temoji: z.string().min(1).max(1).describe(\"Category-representing emoji\"),\n});\n\n// Type exports for TypeScript\nexport type UserPersona = z.infer<typeof UserPersonaSchema>;\nexport type ProductPersona = z.infer<typeof ProductPersonaSchema>;\n",
			"type": "registry:lib"
		},
		{
			"path": "./src/registry/blocks/app-02/lib/example-businesses.ts",
			"content": "import type { z } from \"zod\";\nimport type { formSchema } from \"@/registry/blocks/app-02/lib/persona\";\n\nexport type BusinessExample = z.infer<typeof formSchema>;\n\nexport const EXAMPLE_BUSINESSES: BusinessExample[] = [\n\t{\n\t\tbusinessName: \"EcoHarvest\",\n\t\tindustry: \"Sustainability\",\n\t\ttargetAudience:\n\t\t\t\"Environmentally conscious consumers aged 25-45, urban professionals who care about sustainable food production and want to reduce their carbon footprint through better food choices.\",\n\t\tproductDescription:\n\t\t\t\"Smart indoor garden system that allows users to grow organic vegetables and herbs year-round. Features automated climate control, LED grow lights, and a companion app for plant monitoring and care guidance.\",\n\t},\n\t{\n\t\tbusinessName: \"MindfulMinutes\",\n\t\tindustry: \"Healthcare\",\n\t\ttargetAudience:\n\t\t\t\"Busy professionals aged 30-50 who struggle with stress management and work-life balance, particularly in high-pressure corporate environments.\",\n\t\tproductDescription:\n\t\t\t\"AI-powered meditation and mindfulness app that provides personalized micro-meditation sessions and stress-reduction exercises that can be completed in under 5 minutes.\",\n\t},\n\t{\n\t\tbusinessName: \"SkillBridge\",\n\t\tindustry: \"Education\",\n\t\ttargetAudience:\n\t\t\t\"Career changers and professionals aged 25-40 looking to upskill or transition into tech careers, particularly those with limited time for traditional education.\",\n\t\tproductDescription:\n\t\t\t\"Adaptive learning platform that creates personalized tech skill development paths, combining micro-learning, practical projects, and AI-driven mentorship to help users transition into tech careers.\",\n\t},\n\t{\n\t\tbusinessName: \"PetPal\",\n\t\tindustry: \"Tech/SaaS\",\n\t\ttargetAudience:\n\t\t\t\"Pet owners aged 25-55 who work full-time and want to ensure their pets receive proper care and attention while they're away.\",\n\t\tproductDescription:\n\t\t\t\"Smart pet care management system combining IoT devices and AI to monitor, feed, and entertain pets while their owners are away, with real-time updates and emergency alerts.\",\n\t},\n\t{\n\t\tbusinessName: \"LocalFeast\",\n\t\tindustry: \"E-commerce\",\n\t\ttargetAudience:\n\t\t\t\"Food enthusiasts and busy professionals aged 25-45 who value authentic local cuisine but have limited time to discover and prepare traditional dishes.\",\n\t\tproductDescription:\n\t\t\t\"Marketplace platform connecting local home chefs with food enthusiasts, enabling the purchase of authentic, home-cooked meals with transparent sourcing and dietary information.\",\n\t},\n\t{\n\t\tbusinessName: \"SeniorTech\",\n\t\tindustry: \"Healthcare Technology\",\n\t\ttargetAudience:\n\t\t\t\"Adults aged 65+ and their caregivers who want to maintain independence while ensuring safety and well-being in their homes.\",\n\t\tproductDescription:\n\t\t\t\"Smart home monitoring system designed specifically for seniors, featuring fall detection, medication reminders, vital sign monitoring, and easy communication with family members and healthcare providers.\",\n\t},\n\t{\n\t\tbusinessName: \"KidsFinance\",\n\t\tindustry: \"Financial Education\",\n\t\ttargetAudience:\n\t\t\t\"Parents of children aged 8-16 who want to teach their kids financial literacy and money management skills in an engaging way.\",\n\t\tproductDescription:\n\t\t\t\"Gamified financial education platform that teaches children about saving, investing, and responsible spending through interactive games, challenges, and a parent-controlled digital wallet.\",\n\t},\n\t{\n\t\tbusinessName: \"ArtisanConnect\",\n\t\tindustry: \"Marketplace\",\n\t\ttargetAudience:\n\t\t\t\"Art collectors and interior designers seeking unique, handcrafted items, as well as artisans looking to reach a global market while preserving traditional craftsmanship.\",\n\t\tproductDescription:\n\t\t\t\"Digital marketplace platform that connects traditional artisans with global buyers, featuring AR visualization tools, authenticity verification, and direct artist-buyer communication.\",\n\t},\n\t{\n\t\tbusinessName: \"GreenTransit\",\n\t\tindustry: \"Transportation\",\n\t\ttargetAudience:\n\t\t\t\"Urban commuters aged 20-40 who prioritize environmental sustainability and seek efficient, eco-friendly transportation options.\",\n\t\tproductDescription:\n\t\t\t\"Electric bike and scooter sharing platform with smart routing technology, carbon footprint tracking, and rewards program for sustainable transportation choices.\",\n\t},\n\t{\n\t\tbusinessName: \"FitnessFlex\",\n\t\tindustry: \"Fitness Technology\",\n\t\ttargetAudience:\n\t\t\t\"Fitness enthusiasts aged 20-60 with varying schedules and abilities who want personalized workout experiences that adapt to their lifestyle.\",\n\t\tproductDescription:\n\t\t\t\"AI-powered fitness platform that creates adaptive workout programs combining home exercises, gym routines, and outdoor activities, with real-time form correction and progress tracking.\",\n\t},\n];\n\nexport function getRandomExample(): BusinessExample {\n\tconst randomIndex = Math.floor(Math.random() * EXAMPLE_BUSINESSES.length);\n\treturn EXAMPLE_BUSINESSES[randomIndex];\n}\n",
			"type": "registry:lib"
		}
	],
	"envVars": {
		"OPENAI_API_KEY": ""
	},
	"docs": "Get an OpenAI API key from https://platform.openai.com/ and add it to the environment variables file and run the dev server. \n\nLearn more about how to use the Vercel AI SDK https://ai-sdk.dev/docs/introduction.",
	"categories": ["app"]
}
