TidyLinker.com
TypeScript
Pull Request Merged
PR #126 merged: feat: shareable public job pages + re-notify cleaners on job update
Summary
Two features Adele requested:
Shareable public job pages:
- New public route
/jobs/{jobPosting}— no login required - Only shows open jobs (404 for draft/cancelled/completed)
- Full OG meta tags for Facebook/social sharing (title, description, image, twitter cards)
- Share button with copy-to-clipboard
- Shows services, masked postcode, property details, schedule, budget type
- CTA sidebar: "Sign up as a cleaner" / "Post a job"
- Uses landing header/footer layout
Re-notify cleaners on job update:
- When a job is edited and saved, matching cleaners are notified again
- New
RenotifyMatchingCleanerslistener handlesJobUpdatedevent - Matching logic extracted to
NotifyMatchingCleaners::notifyMatching()static method (shared, not duplicated) - Same criteria: services, location, service area radius
Also confirmed: DBS is NOT required for cleaner visibility — only ID + RTW. Already correct in scopeSearchable().
Note: OG image at /images/tidylinker-og.png (1200x630) needs creating separately.
Test plan
- Visit
/jobs/{uid}as guest — job page renders with details - Draft/cancelled jobs return 404
- Postcode is masked (CB1 2AB shows as CB1)
- Copy the URL and paste in Facebook — OG tags render title + description
- Edit a job as a client — matching cleaners receive notification
- Share button copies URL to clipboard
+533
additions
-2
deletions
7
files changed