Improve Customer Data Upload guidance with clearer instructions

- Add tooltip explaining what data improves persona accuracy
- Add "What data should I upload?" section with bullet list
- Update "What's included in the personas?" section with revised copy
- Add PowerPoint support to allowed file types
- Make FieldTooltip example prop optional for simpler tooltips

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
michael 2025-12-02 08:26:45 -06:00
parent e5aa05739e
commit e10a569bc2
3 changed files with 69 additions and 29 deletions

View file

@ -131,9 +131,11 @@ export default function AssetUploader({
'text/*': 'Text files',
'application/msword': 'Word docs',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'Word docs',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'Excel files'
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'Excel files',
'application/vnd.ms-powerpoint': 'PowerPoint',
'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'PowerPoint'
};
return allowedTypes.map(type => typeMap[type] || type).filter((v, i, a) => a.indexOf(v) === i);
};

View file

@ -240,47 +240,81 @@ export default function AIRecruiterForm({ onSubmit, isGenerating }: AIRecruiterF
<div className="space-y-6">
<div className="space-y-2">
{/* Custom Label with Tooltip */}
<h3 className="text-lg font-semibold text-foreground flex items-center gap-1.5">
Customer Data Upload
<FieldTooltip
content="Additional information about your target audience improves the accuracy of the personas generated. You can upload anything from segmentations to transcripts or even existing pen portraits"
/>
</h3>
<p className="text-muted-foreground">
Upload existing customer data to create more realistic and accurate synthetic personas. This helps the AI understand your target audience better.
</p>
<AssetUploader
focusGroupId={undefined} // No backend upload for persona creation
focusGroupId={undefined}
disabled={isGenerating}
maxAssets={5}
maxFileSize={10}
allowedTypes={['application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'text/*', 'image/*']}
label="Customer Data Upload"
description="Upload existing customer data to create more realistic and accurate synthetic personas. This helps the AI understand your target audience better."
allowedTypes={[
'application/pdf',
'application/msword',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'application/vnd.ms-powerpoint',
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'text/*',
'image/*'
]}
label=""
description=""
enableRenaming={false}
onFilesChange={(files) => {
setCurrentFiles(files);
setUploadedFiles(files.length > 0 ? createFileList(files) : null);
}}
/>
<p className="text-xs text-muted-foreground">
Supports PDF, Word docs, Excel files, text files, and images
</p>
</div>
{/* What data should I upload? */}
<div className="space-y-2">
<h3 className="font-sf font-medium">
What data <em>should</em> I upload?
</h3>
<p className="text-sm text-muted-foreground">
LLMs work well with large amounts of unstructured information. The more information you give the AI about your target audience, the more precise the personas.
</p>
<ul className="space-y-1 text-sm text-muted-foreground list-disc list-inside">
<li>Customer surveys</li>
<li>Interviews or transcripts</li>
<li>Customer journey maps or personas from previous research</li>
<li>Support chat logs</li>
<li>Social media audience insights</li>
</ul>
</div>
<div className="bg-muted/30 p-4 rounded-lg border border-border">
<div className="flex items-center mb-2">
<FileText className="h-5 w-5 text-muted-foreground mr-2" />
<h3 className="font-sf font-medium">What's included?</h3>
<h3 className="font-sf font-medium">What's included in the personas?</h3>
</div>
<ul className="space-y-2 text-sm text-muted-foreground">
<li className="flex items-center">
<CheckCircle2 className="h-4 w-4 text-green-500 mr-2" />
Demographic profiles based on your brief
Demographic profiles based on your audience brief
</li>
<li className="flex items-center">
<CheckCircle2 className="h-4 w-4 text-green-500 mr-2" />
Personality traits and behavioral patterns
Contextual "life scenarios" linked to your research objectives
</li>
<li className="flex items-center">
<CheckCircle2 className="h-4 w-4 text-green-500 mr-2" />
Personality traits and behavioural patterns
</li>
<li className="flex items-center">
<CheckCircle2 className="h-4 w-4 text-green-500 mr-2" />
Consumer preferences and interests
</li>
<li className="flex items-center">
<CheckCircle2 className="h-4 w-4 text-green-500 mr-2" />
Review and refine capabilities
</li>
</ul>
</div>
</div>

View file

@ -9,7 +9,7 @@ import {
interface FieldTooltipProps {
content: string
example: string
example?: string
}
export function FieldTooltip({ content, example }: FieldTooltipProps) {
@ -27,17 +27,21 @@ export function FieldTooltip({ content, example }: FieldTooltipProps) {
</PopoverTrigger>
<PopoverContent className="w-80" sideOffset={5}>
<p className="text-sm text-foreground">{content}</p>
<button
type="button"
onClick={() => setShowExample(!showExample)}
className="text-sm text-primary hover:underline mt-3 font-medium"
>
{showExample ? "Hide example" : "Show example"}
</button>
{showExample && (
<div className="mt-3 p-3 bg-muted rounded-md text-sm text-muted-foreground italic">
{example}
</div>
{example && (
<>
<button
type="button"
onClick={() => setShowExample(!showExample)}
className="text-sm text-primary hover:underline mt-3 font-medium"
>
{showExample ? "Hide example" : "Show example"}
</button>
{showExample && (
<div className="mt-3 p-3 bg-muted rounded-md text-sm text-muted-foreground italic">
{example}
</div>
)}
</>
)}
</PopoverContent>
</Popover>