Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/frontend/components/builder/forms/additional-form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export const AdditionalForm: React.FC<AdditionalFormProps> = ({ data, onChange }
// Helper to handle array conversions (text -> string[])
const handleArrayChange = (field: keyof AdditionalInfo, value: string) => {
// Split by newlines only (preserving spaces within items)
const items = value.split('\n').filter((item) => item.trim() !== '');
const items = value.split('\n');
onChange({
...data,
[field]: items,
Expand Down
12 changes: 9 additions & 3 deletions apps/frontend/components/builder/highlighted-resume-view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,9 @@ export function HighlightedResumeView({ resumeData, keywords }: HighlightedResum
{t('resume.additional.technicalSkills')}
</div>
<div className="flex flex-wrap gap-1">
{resumeData.additional.technicalSkills.map((skill, i) => (
{resumeData.additional.technicalSkills
.filter((skill) => skill.trim() !== '')

@cubic-dev-ai cubic-dev-ai Bot Apr 26, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Section visibility checks raw array length, but rendering filters blanks, causing empty subsection headings/containers when all entries are whitespace.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/frontend/components/builder/highlighted-resume-view.tsx, line 138:

<comment>Section visibility checks raw array length, but rendering filters blanks, causing empty subsection headings/containers when all entries are whitespace.</comment>

<file context>
@@ -134,7 +134,9 @@ export function HighlightedResumeView({ resumeData, keywords }: HighlightedResum
                   <div className="flex flex-wrap gap-1">
-                    {resumeData.additional.technicalSkills.map((skill, i) => (
+                    {resumeData.additional.technicalSkills
+                    .filter((skill) => skill.trim() !== '')
+                    .map((skill, i) => (
                       <SkillTag key={i} text={skill} keywords={keywords} />
</file context>
Fix with Cubic

.map((skill, i) => (
<SkillTag key={i} text={skill} keywords={keywords} />
))}
</div>
Expand All @@ -147,7 +149,9 @@ export function HighlightedResumeView({ resumeData, keywords }: HighlightedResum
{t('resume.sections.languages')}
</div>
<div className="flex flex-wrap gap-1">
{resumeData.additional.languages.map((lang, i) => (
{resumeData.additional.languages
.filter((lang) => lang.trim() !== '')
.map((lang, i) => (
<SkillTag key={i} text={lang} keywords={keywords} />
))}
</div>
Expand All @@ -161,7 +165,9 @@ export function HighlightedResumeView({ resumeData, keywords }: HighlightedResum
{t('resume.sections.certifications')}
</div>
<ul className="list-disc list-inside space-y-1 text-sm">
{resumeData.additional.certificationsTraining.map((cert, i) => (
{resumeData.additional.certificationsTraining
.filter((cert) => cert.trim() !== '')
.map((cert, i) => (
<li key={i} className="text-ink-soft">
<HighlightedText text={cert} keywords={keywords} />
</li>
Expand Down
19 changes: 15 additions & 4 deletions apps/frontend/components/resume/resume-modern-two-column.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,9 @@ export const ResumeModernTwoColumn: React.FC<ResumeModernTwoColumnProps> = ({
<div className={baseStyles['resume-section']}>

@cubic-dev-ai cubic-dev-ai Bot Apr 26, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Filtering blanks inside the section body without updating the outer length > 0 guard can render empty section headings/containers when all entries are blank.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/frontend/components/resume/resume-modern-two-column.tsx, line 309:

<comment>Filtering blanks inside the section body without updating the outer `length > 0` guard can render empty section headings/containers when all entries are blank.</comment>

<file context>
@@ -306,7 +306,9 @@ export const ResumeModernTwoColumn: React.FC<ResumeModernTwoColumnProps> = ({
                 <h3 className={styles.sectionTitleAccent}>{headingFallbacks.certifications}</h3>
                 <ul className={`ml-4 ${baseStyles['resume-list']} ${baseStyles['resume-text-xs']}`}>
-                  {additional.certificationsTraining.map((cert, index) => (
+                  {additional.certificationsTraining
+                                     .filter((cert) => cert.trim() !== '')
+                  .map((cert, index) => (
</file context>
Fix with Cubic

<h3 className={styles.sectionTitleAccent}>{headingFallbacks.certifications}</h3>
<ul className={`ml-4 ${baseStyles['resume-list']} ${baseStyles['resume-text-xs']}`}>
{additional.certificationsTraining.map((cert, index) => (
{additional.certificationsTraining
.filter((cert) => cert.trim() !== '')
.map((cert, index) => (
<li key={index} className="flex">
<span className="mr-1.5 flex-shrink-0">•&nbsp;</span>
<span>{cert}</span>
Expand Down Expand Up @@ -371,7 +373,9 @@ export const ResumeModernTwoColumn: React.FC<ResumeModernTwoColumnProps> = ({
{headingFallbacks.skills}
</h3>
<div className="flex flex-wrap gap-1">
{additional.technicalSkills.map((skill, index) => (
{additional.technicalSkills
.filter((skill) => skill.trim() !== '')
.map((skill, index) => (
<span key={index} className={baseStyles['resume-skill-pill']}>
{skill}
</span>
Expand All @@ -390,8 +394,12 @@ export const ResumeModernTwoColumn: React.FC<ResumeModernTwoColumnProps> = ({
>
{headingFallbacks.languages}
</h3>
<p className={baseStyles['resume-text-xs']}>{additional.languages.join(' • ')}</p>
<p className={baseStyles['resume-text-xs']}>
{additional.languages.filter((language) => language.trim() !== '').join(' • ')}
</p>
</div>


)}

{/* Awards Section */}
Expand All @@ -403,7 +411,10 @@ export const ResumeModernTwoColumn: React.FC<ResumeModernTwoColumnProps> = ({
{headingFallbacks.awards}
</h3>
<ul className={baseStyles['resume-list']}>
{additional.awards.map((award, index) => (
{additional.awards

.filter((award) => award.trim() !== '')
.map((award, index) => (
<li key={index} className={baseStyles['resume-text-xs']}>
{award}
</li>
Expand Down
16 changes: 12 additions & 4 deletions apps/frontend/components/resume/resume-modern.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -396,25 +396,33 @@ const AdditionalSection: React.FC<{
{technicalSkills.length > 0 && (

@cubic-dev-ai cubic-dev-ai Bot Apr 26, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Blank-only Additional Info entries can still render an empty section/label-only row because visibility checks use raw array lengths while the new filtering only affects the displayed text.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/frontend/components/resume/resume-modern.tsx, line 399:

<comment>Blank-only Additional Info entries can still render an empty section/label-only row because visibility checks use raw array lengths while the new filtering only affects the displayed text.</comment>

<file context>
@@ -396,25 +396,33 @@ const AdditionalSection: React.FC<{
           <div className="flex">
             <span className="font-bold w-32 shrink-0">{mergedLabels.technicalSkills}</span>
-            <span>{technicalSkills.join(', ')}</span>
+            <span>{technicalSkills
+            .filter((skill) => skill.trim() !== '')
+            .join(', ')}</span>
</file context>
Fix with Cubic

<div className="flex">
<span className="font-bold w-32 shrink-0">{mergedLabels.technicalSkills}</span>
<span>{technicalSkills.join(', ')}</span>
<span>{technicalSkills
.filter((skill) => skill.trim() !== '')
.join(', ')}</span>
</div>
)}
{languages.length > 0 && (
<div className="flex">
<span className="font-bold w-32 shrink-0">{mergedLabels.languages}</span>
<span>{languages.join(', ')}</span>
<span>{languages
.filter((language) => language.trim() !== '')
.join(', ')}</span>
</div>
)}
{certificationsTraining.length > 0 && (
<div className="flex">
<span className="font-bold w-32 shrink-0">{mergedLabels.certifications}</span>
<span>{certificationsTraining.join(', ')}</span>
<span>{certificationsTraining
.filter((cert) => cert.trim() !== '')
.join(', ')}</span>
</div>
)}
{awards.length > 0 && (
<div className="flex">
<span className="font-bold w-32 shrink-0">{mergedLabels.awards}</span>
<span>{awards.join(', ')}</span>
<span>{awards
.filter((award) => award.trim() !== '')
.join(', ')}</span>
</div>
)}
</div>
Expand Down
16 changes: 12 additions & 4 deletions apps/frontend/components/resume/resume-single-column.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -394,25 +394,33 @@ const AdditionalSection: React.FC<{
{technicalSkills.length > 0 && (
<div className="flex">
<span className="font-bold w-32 shrink-0">{mergedLabels.technicalSkills}</span>
<span>{technicalSkills.join(', ')}</span>
<span>{technicalSkills

@cubic-dev-ai cubic-dev-ai Bot Apr 26, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Additional Info visibility still keys off raw array length, so blank-only entries render an empty section/rows after the new blank-item filter.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/frontend/components/resume/resume-single-column.tsx, line 397:

<comment>Additional Info visibility still keys off raw array length, so blank-only entries render an empty section/rows after the new blank-item filter.</comment>

<file context>
@@ -394,25 +394,33 @@ const AdditionalSection: React.FC<{
           <div className="flex">
             <span className="font-bold w-32 shrink-0">{mergedLabels.technicalSkills}</span>
-            <span>{technicalSkills.join(', ')}</span>
+            <span>{technicalSkills
+            .filter((skill) => skill.trim() !== '')
+            .join(', ')}</span>
</file context>
Fix with Cubic

.filter((skill) => skill.trim() !== '')
.join(', ')}</span>
</div>
)}
{languages.length > 0 && (
<div className="flex">
<span className="font-bold w-32 shrink-0">{mergedLabels.languages}</span>
<span>{languages.join(', ')}</span>
<span>{languages
.filter((language) => language.trim() !== '')
.join(', ')}</span>
</div>
)}
{certificationsTraining.length > 0 && (
<div className="flex">
<span className="font-bold w-32 shrink-0">{mergedLabels.certifications}</span>
<span>{certificationsTraining.join(', ')}</span>
<span>{certificationsTraining
.filter((cert) => cert.trim() !== '')
.join(', ')}</span>
</div>
)}
{awards.length > 0 && (
<div className="flex">
<span className="font-bold w-32 shrink-0">{mergedLabels.awards}</span>
<span>{awards.join(', ')}</span>
<span>{awards
.filter((award) => award.trim() !== '')
.join(', ')}</span>
</div>
)}
</div>
Expand Down
16 changes: 12 additions & 4 deletions apps/frontend/components/resume/resume-two-column.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,9 @@ export const ResumeTwoColumn: React.FC<ResumeTwoColumnProps> = ({
{headingFallbacks.certifications}
</h3>
<ul className={`ml-4 ${baseStyles['resume-list']} ${baseStyles['resume-text-xs']}`}>
{additional.certificationsTraining.map((cert, index) => (
{additional.certificationsTraining
.filter((cert) => cert.trim() !== '')
.map((cert, index) => (
<li key={index} className="flex">
<span className="mr-1.5 flex-shrink-0">•&nbsp;</span>
<span>{cert}</span>
Expand Down Expand Up @@ -402,7 +404,9 @@ export const ResumeTwoColumn: React.FC<ResumeTwoColumnProps> = ({
<div className={baseStyles['resume-section']}>
<h3 className={baseStyles['resume-section-title-sm']}>{headingFallbacks.skills}</h3>
<div className="flex flex-wrap gap-1">
{additional.technicalSkills.map((skill, index) => (
{additional.technicalSkills
.filter((skill) => skill.trim() !== '')
.map((skill, index) => (
<span key={index} className={baseStyles['resume-skill-pill']}>
{skill}
</span>
Expand All @@ -419,7 +423,9 @@ export const ResumeTwoColumn: React.FC<ResumeTwoColumnProps> = ({
<h3 className={baseStyles['resume-section-title-sm']}>
{headingFallbacks.languages}
</h3>
<p className={baseStyles['resume-text-xs']}>{additional.languages.join(' • ')}</p>
<p className={baseStyles['resume-text-xs']}>{additional.languages
.filter((language) => language.trim() !== '')
.join(' • ')}</p>
</div>
)}

Expand All @@ -428,7 +434,9 @@ export const ResumeTwoColumn: React.FC<ResumeTwoColumnProps> = ({
<div className={baseStyles['resume-section']}>
<h3 className={baseStyles['resume-section-title-sm']}>{headingFallbacks.awards}</h3>
<ul className={baseStyles['resume-list']}>
{additional.awards.map((award, index) => (
{additional.awards
.filter((award) => award.trim() !== '')
.map((award, index) => (
<li key={index} className={baseStyles['resume-text-xs']}>
{award}
</li>
Expand Down