export interface Company { id: number; name: string; location?: string; source?: string; recruiterName?: string; recruiterEmail?: string; recruiterLinkedIn?: string; lastContactedAt?: string; nextContactAt?: string; pipelineStage?: string; } export interface JobApplication { id: number; jobTitle: string; company: Company; companyId?: number; status: string; dateApplied: string; location?: string; salary?: string; nextAction?: string; followUpAt?: string; feedbackRequestedAt?: string; responseReceived: boolean; responseDate?: string; description?: string; translatedDescription?: string; descriptionLanguage?: string; tags?: string; // JSON array string deadline?: string; notes?: string; coverLetterText?: string; recruiterMessageDraft?: string | null; jobUrl?: string; shortSummary?: string; fullSummary?: string | null; tailoredCvText?: string | null; tailoredCvUpdatedAt?: string | null; hasResume?: boolean; hasCoverLetter?: boolean; hasPortfolio?: boolean; hasOtherAttachment?: boolean; daysSince: number; isDeleted?: boolean; deletedAt?: string; needsFollowUp?: boolean; followUpReason?: string; } export interface CandidateFitChannelGuidance { cv: string[]; coverLetter: string[]; interview: string[]; recruiterMessage: string[]; } export interface CandidateFit { matchSummary: string; fitLevel: string; matchScore: number; strengths: string[]; gaps: string[]; mention: string[]; avoid: string[]; cvImprovements: string[]; missingKeywords: string[]; interviewPrep: string[]; tailoredPitch: string; guidance: CandidateFitChannelGuidance; coverLetterDraft?: string | null; recruiterMessageDraft?: string | null; } export interface FocusPlanResponse { immediatePriorities: string[]; cvBulletIdeas: string[]; proofPointsToLeadWith: string[]; coverLetterAngles: string[]; followUpApproach: string[]; strategicSummary: string; } export interface InterviewPrepResponse { summary: string; talkingPoints: string[]; likelyQuestions: string[]; weakSpots: string[]; } export interface ReadinessResponse { score: number; level: string; completed: string[]; missing: string[]; reminders: string[]; } export interface ApplicationPackageResponse { tailoredCvText: string; coverLetterDraft?: string | null; applicationAnswerDraft?: string | null; recruiterMessageDraft?: string | null; keyPoints: string[]; attachmentSignals: string[]; attachmentFilesUsed: string[]; coverLetterVariants: string[]; recruiterMessageVariants: string[]; } export interface SaveApplicationDraftsRequest { coverLetterText?: string | null; notes?: string | null; recruiterMessageDraft?: string | null; } export interface CorrespondenceMessage { id: number; jobApplicationId: number; from: string; content: string; subject?: string; channel?: string; date: string; } export interface GmailStatus { connected: boolean; gmailAddress?: string; connectedAt?: string; lastSyncedAt?: string; } export interface GmailMessageSummary { id: string; threadId: string; subject: string; from: string; to: string; date?: string; snippet: string; } export interface JobImportResult { title?: string; company?: string; location?: string; description?: string; translatedDescription?: string; language?: string; tags: string[]; sourceUrl: string; deadline?: string; success: boolean; parser?: string; error?: string; }