From 1e61798c131e94ff4340b892739fb637d2573fb9 Mon Sep 17 00:00:00 2001 From: David Kifer Date: Thu, 23 Jul 2026 12:18:47 -0400 Subject: [PATCH] Add Work Environment & Location designation (Remote, Hybrid, Onsite) across Profile, Autonomous Engine, and Job Feeds --- .app.pid | 2 +- src/components/AutonomousEngine.tsx | 32 +++++++++++++++++++++++ src/components/JobFeeds.tsx | 40 ++++++++++++++++++++++++----- src/data/mockData.ts | 3 ++- src/types.ts | 1 + 5 files changed, 70 insertions(+), 8 deletions(-) diff --git a/.app.pid b/.app.pid index 9478f2b..8bd435a 100644 --- a/.app.pid +++ b/.app.pid @@ -1 +1 @@ -271040 +271577 diff --git a/src/components/AutonomousEngine.tsx b/src/components/AutonomousEngine.tsx index 80e6f12..153e603 100644 --- a/src/components/AutonomousEngine.tsx +++ b/src/components/AutonomousEngine.tsx @@ -248,6 +248,38 @@ export const AutonomousEngine: React.FC = ({ + {/* Preferred Locations & Work Type (Remote / Hybrid / Onsite) */} +
+ +
+ {['Remote', 'Hybrid', 'Onsite'].map((type) => { + const workTypes = criteria.preferredWorkTypes || ['Remote', 'Hybrid']; + const isSelected = workTypes.includes(type as any); + return ( + + ); + })} +
+

Designates work environment preferences for autonomous matching.

+
+ {/* Excluded Companies */}
diff --git a/src/components/JobFeeds.tsx b/src/components/JobFeeds.tsx index fe17d42..aca82ef 100644 --- a/src/components/JobFeeds.tsx +++ b/src/components/JobFeeds.tsx @@ -27,6 +27,7 @@ export const JobFeeds: React.FC = ({ }) => { const [searchTerm, setSearchTerm] = useState(''); const [selectedPlatform, setSelectedPlatform] = useState('ALL'); + const [selectedWorkType, setSelectedWorkType] = useState('ALL'); const [minMatch, setMinMatch] = useState(0); const [appliedFeedIds, setAppliedFeedIds] = useState([]); const [isFetchingFeeds, setIsFetchingFeeds] = useState(false); @@ -43,7 +44,6 @@ export const JobFeeds: React.FC = ({ const filteredFeeds = displayFeeds.filter(feed => { const term = searchTerm.toLowerCase().trim(); - if (!term && selectedPlatform === 'ALL' && minMatch === 0) return true; const titleMatch = (feed.title || '').toLowerCase().includes(term); const companyMatch = (feed.company || '').toLowerCase().includes(term); @@ -54,9 +54,22 @@ export const JobFeeds: React.FC = ({ const matchesSearch = !term || titleMatch || companyMatch || locationMatch || platformMatchStr || descMatch || skillsMatch; const matchesPlatform = selectedPlatform === 'ALL' || feed.platform === selectedPlatform; + + // Work Type / Remote Status Filter + const feedLoc = (feed.location || '').toLowerCase(); + const feedDesc = (feed.description || '').toLowerCase(); + let matchesWorkType = true; + if (selectedWorkType === 'Remote') { + matchesWorkType = feedLoc.includes('remote') || feedDesc.includes('remote'); + } else if (selectedWorkType === 'Hybrid') { + matchesWorkType = feedLoc.includes('hybrid') || feedDesc.includes('hybrid'); + } else if (selectedWorkType === 'Onsite') { + matchesWorkType = !feedLoc.includes('remote') && !feedDesc.includes('remote'); + } + const matchesMatch = (feed.estimatedMatch ?? 80) >= minMatch; - return matchesSearch && matchesPlatform && matchesMatch; + return matchesSearch && matchesPlatform && matchesWorkType && matchesMatch; }); const handleFetchLiveFeeds = async () => { @@ -125,8 +138,22 @@ export const JobFeeds: React.FC = ({ />
- {/* Platform & Match Threshold */} -
+ {/* Platform & Work Type & Match Threshold */} +
+ + {/* Work Type Filter Dropdown */} + + + {/* Platform Dropdown */}