profile

package
v0.7.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 19, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

Package profile holds the user's personal job-search profile: who they are, what they want, and what they'll let the agents say on their behalf.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type EEO

type EEO struct {
	Gender           string `json:"gender,omitempty"`
	Race             string `json:"race,omitempty"`
	VeteranStatus    string `json:"veteran_status,omitempty"`
	DisabilityStatus string `json:"disability_status,omitempty"`
}

EEO is optional Equal Employment Opportunity self-identification. Every field is optional; values are free-form because canonical choices vary per employer.

type Education

type Education struct {
	Level        EducationLevel `json:"level,omitempty"`
	FieldOfStudy string         `json:"field_of_study,omitempty"`
	Institution  string         `json:"institution,omitempty"`
}

type EducationLevel

type EducationLevel string
const (
	EducationHighSchool EducationLevel = "high_school"
	EducationAssociate  EducationLevel = "associate"
	EducationBachelor   EducationLevel = "bachelor"
	EducationMaster     EducationLevel = "master"
	EducationPhD        EducationLevel = "phd"
)

type GoogleCreds

type GoogleCreds struct {
	ClientID     string
	ClientSecret string
}

GoogleCreds is the OAuth Desktop client identifiers the wizard collects so Google Calendar integration works out of the box. The wizard pre-fills these from whatever's already in config.json and returns whatever the user typed (empty strings == "skip").

type JobPrefs

type JobPrefs struct {
	SalaryMin         int      `json:"salary_min,omitempty"`
	SalaryMax         int      `json:"salary_max,omitempty"`
	Currency          string   `json:"currency,omitempty"`
	EarliestStart     string   `json:"earliest_start,omitempty"`
	WorkMode          WorkMode `json:"work_mode,omitempty"`
	WillingToRelocate Relocate `json:"willing_to_relocate,omitempty"`
}

JobPrefs captures the "what kind of job" answers. EarliestStart is free-form so users can write "immediate", "2 weeks", or an ISO date.

type Profile

type Profile struct {
	Name           string   `json:"name"`
	Email          string   `json:"email"`
	Phone          string   `json:"phone,omitempty"`
	Location       string   `json:"location,omitempty"`
	Headline       string   `json:"headline,omitempty"`
	Summary        string   `json:"summary,omitempty"`
	Skills         []string `json:"skills,omitempty"`
	DesiredRoles   []string `json:"desired_roles,omitempty"`
	PreferredStack []string `json:"preferred_stack,omitempty"`
	YearsOfExp     int      `json:"years_of_experience,omitempty"`
	ResumePath     string   `json:"resume_path,omitempty"`
	PortfolioURLs  []string `json:"portfolio_urls,omitempty"`
	LinkedInURL    string   `json:"linkedin_url,omitempty"`
	Tone           string   `json:"tone,omitempty"`

	// Pointer-nested so partially filled profiles serialize without empty
	// {} blocks cluttering profile.json.
	WorkAuth  *WorkAuth  `json:"work_auth,omitempty"`
	Education *Education `json:"education,omitempty"`
	JobPrefs  *JobPrefs  `json:"job_preferences,omitempty"`
	EEO       *EEO       `json:"eeo,omitempty"`
}

Profile is the user-supplied context every agent reads from. The first-run intake wizard populates it; users may also edit profile.json by hand.

func Skeleton

func Skeleton() Profile

Skeleton returns a profile pre-populated with a few hint values so users have something concrete to edit on first run.

type Relocate

type Relocate string
const (
	RelocateYes   Relocate = "yes"
	RelocateNo    Relocate = "no"
	RelocateMaybe Relocate = "maybe"
)

type WizardResult

type WizardResult struct {
	Profile Profile
	Google  GoogleCreds
}

WizardResult bundles everything the intake wizard collects. Profile fields are persisted to profile.json by the caller; the GoogleCreds half is merged into config.json. Splitting them keeps the profile package agnostic about how the caller stores credentials.

func RunWizard

func RunWizard(in Profile, gIn GoogleCreds) (WizardResult, error)

RunWizard presents the intake form, pre-filled from `in` and `gIn`. Returns a WizardResult that the caller persists. The form reads stdin and writes to stdout via bubbletea, so it requires a real TTY — tests should exercise the helper functions (splitCSV, stripEmpty*) rather than RunWizard itself.

type WorkAuth

type WorkAuth struct {
	Status                 WorkAuthStatus `json:"status,omitempty"`
	VisaType               string         `json:"visa_type,omitempty"`
	NeedsSponsorshipNow    bool           `json:"needs_sponsorship_now,omitempty"`
	NeedsSponsorshipFuture bool           `json:"needs_sponsorship_future,omitempty"`
}

type WorkAuthStatus

type WorkAuthStatus string
const (
	WorkAuthCitizen           WorkAuthStatus = "citizen"
	WorkAuthPermanentResident WorkAuthStatus = "permanent_resident"
	WorkAuthVisaHolder        WorkAuthStatus = "visa_holder"
	WorkAuthNeedSponsorship   WorkAuthStatus = "need_sponsorship"
)

type WorkMode

type WorkMode string
const (
	WorkModeRemote WorkMode = "remote"
	WorkModeHybrid WorkMode = "hybrid"
	WorkModeOnsite WorkMode = "onsite"
	WorkModeAny    WorkMode = "any"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL