Add Equal Employment Opportunity (EEO) legal declarations card for Veteran, Disability, Clearance & Work Authorization

This commit is contained in:
2026-07-23 12:08:57 -04:00
parent 186779fbbd
commit a9344cc4db
5 changed files with 147 additions and 6 deletions
+1 -1
View File
@@ -1 +1 @@
267794
268711
+101 -1
View File
@@ -19,7 +19,8 @@ import {
Zap,
RefreshCw,
AlertCircle,
Server
Server,
ShieldCheck
} from 'lucide-react';
interface ProfileSettingsProps {
@@ -345,6 +346,105 @@ export const ProfileSettings: React.FC<ProfileSettingsProps> = ({
</div>
</div>
{/* Equal Employment Opportunity (EEO) & Legal Self-Identification Declarations */}
<div className="lg:col-span-3 p-6 rounded-2xl bg-slate-900 border border-slate-800 shadow-xl space-y-4">
<div className="flex items-center justify-between pb-3 border-b border-slate-800">
<h3 className="text-sm font-bold text-white flex items-center gap-2">
<ShieldCheck className="w-4 h-4 text-emerald-400" /> Voluntary EEO, Veteran, Disability & Legal Declarations
</h3>
<span className="text-[10px] text-slate-400 font-mono">Used for Auto-Filling Application Questions</span>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 text-xs">
{/* Veteran Status */}
<div>
<label className="block font-semibold text-slate-300 mb-1">Veteran Status</label>
<select
value={profile.eeoDeclarations?.veteranStatus || 'NOT_VETERAN'}
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, veteranStatus: e.target.value })}
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
>
<option value="NOT_VETERAN">I am not a protected veteran</option>
<option value="PROTECTED_VETERAN">I identify as one or more of the classifications of protected veteran</option>
<option value="PREFER_NOT_TO_SAY">I decline to disclose / Prefer not to say</option>
</select>
</div>
{/* Disability Status */}
<div>
<label className="block font-semibold text-slate-300 mb-1">Disability Status</label>
<select
value={profile.eeoDeclarations?.disabilityStatus || 'NO_DISABILITY'}
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, disabilityStatus: e.target.value })}
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
>
<option value="NO_DISABILITY">No, I do not have a disability</option>
<option value="YES_DISABILITY">Yes, I have a disability (or previously had a disability)</option>
<option value="PREFER_NOT_TO_SAY">I decline to disclose / Prefer not to say</option>
</select>
</div>
{/* Work Authorization */}
<div>
<label className="block font-semibold text-slate-300 mb-1">Work Authorization</label>
<select
value={profile.eeoDeclarations?.workAuthorization || 'US_CITIZEN'}
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, workAuthorization: e.target.value })}
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
>
<option value="US_CITIZEN">US Citizen / Authorized to work for any employer</option>
<option value="PERMANENT_RESIDENT">Permanent Resident (Green Card Holder)</option>
<option value="VISA_SPONSORSHIP_REQUIRED">Require Visa Sponsorship</option>
</select>
</div>
{/* Visa Sponsorship Question */}
<div>
<label className="block font-semibold text-slate-300 mb-1">Will you now or in the future require visa sponsorship?</label>
<select
value={profile.eeoDeclarations?.requiresSponsorshipNowOrFuture ? 'YES' : 'NO'}
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, requiresSponsorshipNowOrFuture: e.target.value === 'YES' })}
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
>
<option value="NO">No</option>
<option value="YES">Yes</option>
</select>
</div>
{/* Security Clearance Level */}
<div>
<label className="block font-semibold text-slate-300 mb-1">Security Clearance Level</label>
<select
value={profile.eeoDeclarations?.clearanceLevel || 'NONE'}
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, clearanceLevel: e.target.value })}
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
>
<option value="NONE">None / Not Active</option>
<option value="SECRET">Secret Clearance</option>
<option value="TOP_SECRET">Top Secret (TS)</option>
<option value="TS_SCI">TS/SCI</option>
</select>
</div>
{/* Gender */}
<div>
<label className="block font-semibold text-slate-300 mb-1">Gender Identification</label>
<select
value={profile.eeoDeclarations?.gender || 'MALE'}
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, gender: e.target.value })}
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
>
<option value="MALE">Male</option>
<option value="FEMALE">Female</option>
<option value="NON_BINARY">Non-Binary / Other</option>
<option value="PREFER_NOT_TO_SAY">I decline to disclose</option>
</select>
</div>
</div>
</div>
{/* Master Professional Summary & Technical Skills */}
<div className="lg:col-span-2 p-6 rounded-2xl bg-slate-900 border border-slate-800 shadow-xl space-y-5">
+26 -3
View File
@@ -67,9 +67,12 @@ export const WalkthroughTailor: React.FC<WalkthroughTailorProps> = ({
fullName: userProfile.fullName || 'David Kifer',
email: userProfile.email || 'dkifer19@gmail.com',
phone: userProfile.phone || '(555) 019-2831',
linkedin: userProfile.linkedin || 'https://linkedin.com/in/david-kifer',
yearsExperience: '8+ Years',
workAuthorization: 'US Citizen / Authorized',
linkedin: userProfile.linkedinUrl || 'https://linkedin.com/in/david-kifer',
yearsExperience: '10+ Years',
workAuthorization: userProfile.eeoDeclarations?.workAuthorization || 'US Citizen / Authorized',
veteranStatus: userProfile.eeoDeclarations?.veteranStatus === 'PROTECTED_VETERAN' ? 'Protected Veteran' : 'Not a Veteran',
disabilityStatus: userProfile.eeoDeclarations?.disabilityStatus === 'YES_DISABILITY' ? 'Yes, Disability' : 'No Disability',
clearanceLevel: userProfile.eeoDeclarations?.clearanceLevel || 'None',
tailoredBulletsText: '',
customCoverLetterText: ''
});
@@ -525,6 +528,26 @@ export const WalkthroughTailor: React.FC<WalkthroughTailorProps> = ({
className="w-full bg-slate-900 border border-slate-800 rounded-xl px-3 py-2 text-slate-100 focus:border-amber-400 focus:outline-none"
/>
</div>
<div>
<label className="block text-slate-400 mb-1 font-semibold">Veteran Status Declaration</label>
<input
type="text"
value={surfingFormData.veteranStatus}
onChange={(e) => setSurfingFormData({ ...surfingFormData, veteranStatus: e.target.value })}
className="w-full bg-slate-900 border border-slate-800 rounded-xl px-3 py-2 text-slate-100 focus:border-amber-400 focus:outline-none"
/>
</div>
<div>
<label className="block text-slate-400 mb-1 font-semibold">Disability Status Declaration</label>
<input
type="text"
value={surfingFormData.disabilityStatus}
onChange={(e) => setSurfingFormData({ ...surfingFormData, disabilityStatus: e.target.value })}
className="w-full bg-slate-900 border border-slate-800 rounded-xl px-3 py-2 text-slate-100 focus:border-amber-400 focus:outline-none"
/>
</div>
</div>
<div>
+9
View File
@@ -12,6 +12,15 @@ export const INITIAL_USER_PROFILE: UserProfile = {
experience: [],
skills: [],
education: [],
eeoDeclarations: {
veteranStatus: 'NOT_VETERAN',
disabilityStatus: 'NO_DISABILITY',
gender: 'MALE',
ethnicity: 'WHITE',
workAuthorization: 'US_CITIZEN',
requiresSponsorshipNowOrFuture: false,
clearanceLevel: 'NONE'
},
autoApplyCriteria: {
enabled: false,
targetRoles: [],
+10 -1
View File
@@ -105,7 +105,16 @@ export interface UserProfile {
year: string;
}[];
// Autonomous settings
// Equal Employment Opportunity (EEO) & Legal Declarations
eeoDeclarations?: {
veteranStatus: 'NOT_VETERAN' | 'PROTECTED_VETERAN' | 'PREFER_NOT_TO_SAY';
disabilityStatus: 'NO_DISABILITY' | 'YES_DISABILITY' | 'PREFER_NOT_TO_SAY';
gender: 'MALE' | 'FEMALE' | 'NON_BINARY' | 'PREFER_NOT_TO_SAY';
ethnicity: 'WHITE' | 'HISPANIC' | 'BLACK' | 'ASIAN' | 'TWO_OR_MORE' | 'PREFER_NOT_TO_SAY';
workAuthorization: 'US_CITIZEN' | 'PERMANENT_RESIDENT' | 'VISA_SPONSORSHIP_REQUIRED' | 'NEED_SPONSORSHIP';
requiresSponsorshipNowOrFuture: boolean;
clearanceLevel?: 'NONE' | 'SECRET' | 'TOP_SECRET' | 'TS_SCI';
};
autoApplyCriteria: {
enabled: boolean;
targetRoles: string[];