Context
The meilisearch branch on the studenthub (student-facing) repo had a parallel Meilisearch implementation. The last commit on that branch was 1554f3d — "Fix initial facet filters" (Nov 13 2025), also indicating the same facet count problem we hit on the staff app.
Once #41 and #42 are merged on the staff app, the same TypesenseService pattern should be ported to the student app so both share the same backend search infrastructure.
Depends on: #40 (backend endpoints, same /search/key and /search/search endpoints serve both apps)
Scope
1. Port TypesenseService
Copy src/app/services/typesense.service.ts from studenthub-staff (post #41 merge) into studenthub student app. The service is identical — same backend endpoints.
2. Student Search Context Differences
The student app search is job/opportunity search, not candidate search. The facets will differ:
| Facet |
Attribute |
| Job Type |
job_type |
| Work Type |
work_type (full-time, part-time, internship) |
| Location |
location.country_id |
| Industry |
industry_id |
| Company |
company_id |
| Salary Range |
salary_min, salary_max (range filter, not facet) |
| Has Deadline |
has_deadline |
Create a JobSearchService mirroring CandidateSearchService with job-specific facets and collection name from environment.
3. Geo Filter
The studenthub meilisearch branch added geo filter in commit eb6849dd — "New meilisearch geo filter". Port this to Typesense geo search syntax:
// Meilisearch geo filter
`_geoRadius(${lat}, ${lng}, ${radiusMeters})`
// Typesense equivalent
filter_by: `location.coordinates:(${lat}, ${lng}, ${radiusKm} km)`
sort_by: `location.coordinates(${lat}, ${lng}):asc`
4. Update environment files
// environment.ts
typesenseJobCollection: 'jobs'
typesenseCandidateCollection: 'candidates' // if student app also searches candidates
5. Remove Meilisearch references
- Delete
MeilisearchService from student app
- Remove
meilisearch from package.json if it was added
- Clean up any
environment.meilisearch* keys
Acceptance Criteria
Branch
Branch from master of studenthub repo. Name: feature/typesense-service
Note on Repository
This issue is tracked on studenthub-staff for cross-reference but the actual work is in the studenthub repo. Create a parallel issue there once #41 and #42 are complete and the pattern is validated.
Context
The
meilisearchbranch on the studenthub (student-facing) repo had a parallel Meilisearch implementation. The last commit on that branch was1554f3d— "Fix initial facet filters" (Nov 13 2025), also indicating the same facet count problem we hit on the staff app.Once #41 and #42 are merged on the staff app, the same
TypesenseServicepattern should be ported to the student app so both share the same backend search infrastructure.Depends on: #40 (backend endpoints, same
/search/keyand/search/searchendpoints serve both apps)Scope
1. Port TypesenseService
Copy
src/app/services/typesense.service.tsfrom studenthub-staff (post #41 merge) into studenthub student app. The service is identical — same backend endpoints.2. Student Search Context Differences
The student app search is job/opportunity search, not candidate search. The facets will differ:
job_typework_type(full-time, part-time, internship)location.country_idindustry_idcompany_idsalary_min,salary_max(range filter, not facet)has_deadlineCreate a
JobSearchServicemirroringCandidateSearchServicewith job-specific facets and collection name from environment.3. Geo Filter
The studenthub meilisearch branch added geo filter in commit
eb6849dd— "New meilisearch geo filter". Port this to Typesense geo search syntax:4. Update environment files
5. Remove Meilisearch references
MeilisearchServicefrom student appmeilisearchfrompackage.jsonif it was addedenvironment.meilisearch*keysAcceptance Criteria
TypesenseServicein student app points to same/search/keyand/search/searchbackend endpoints as staff appJobSearchServicecreated with job-specific facetsBranch
Branch from
masterof studenthub repo. Name:feature/typesense-serviceNote on Repository
This issue is tracked on studenthub-staff for cross-reference but the actual work is in the studenthub repo. Create a parallel issue there once #41 and #42 are complete and the pattern is validated.