divejobs.padi.com · full documentation

PADI Job Board

390
Active Jobs
6,346
Employers
4,262+
Total in DB
27
Languages
Access Public PADI Member Employer Admin Both
🔍 Job Discovery & Search
📋
Job listing page
  • Browse all jobs with pagination
  • Sort: recent, featured, A–Z, most viewed
  • Records per page (10–200)
  • RSS feed for job alerts
Public
🔎
Filter & search
  • Filter by sector / job category
  • Filter by job type (full-time, freelance…)
  • Filter by date posted
  • Keyword search
Public
🗺️
Map-based search
  • Interactive Google Maps overlay
  • Radius filter (miles)
  • Country / state / city filter
  • Map zoom level control
Public
🔔
Job alerts
  • Email alerts: daily or weekly
  • Alert by category / keyword
  • RSS feed subscription
PADI Member
👤 Candidate Features
🧑
Profile management
  • Public / private toggle
  • Profile photo + cover image
  • Bio / professional description
  • Languages spoken
  • Social media links
  • Profile never expires
PADI Member
📄
CV manager
  • Upload and store resume / CV
  • Multiple CVs on account
  • Attach CV when applying
PADI Member
📨
Job applications
  • One-click apply (logged in)
  • Track applied jobs
  • Shortlist status visibility
  • Teaching jobs: PADI Pro only
  • Non-teaching: open to all
PADI Member
🔑
Authentication
  • PADI SSO (account.padi.com)
  • No separate registration needed
  • Email activation flow
  • Password reset via email
Both Roles
🏢 Employer Features
🏪
Company profile
  • Business name + description
  • Logo + cover image upload
  • Social media links
  • Team size + location
Employer
📝
Job posting
  • Post multiple jobs simultaneously
  • 27 languages supported
  • Job type, sector, location fields
  • Featured job option
  • Auto-archive after 90 days
Employer
👥
Candidate management
  • View all applicants per job
  • Shortlist candidates
  • Contact via email
  • Browse candidate directory
Employer
📊
Employer dashboard
  • Application stats per job
  • Activity feed for posts
  • Email notification per application
  • Shortlist management
Employer
⚙️ Platform & Infra
🛡️
Role-based access
  • Public: browse jobs + employers
  • Teaching jobs: PADI Pro only
  • Candidate listing: employers only
  • Post jobs: PADI Retail members only
Admin
🌍
Internationalisation
  • UI in 27 languages
  • Arabic, Chinese (simp+trad), Hindi
  • Malay, Thai, Tagalog included
  • WPML compatible
Both Roles
📰
Content / blog
  • Scuba Jobs Blog (blog.padi.com)
  • Career advice articles
  • Divemaster vs MSD quiz
Public
⚙️
Tech stack
  • WPBakery page builder
  • WP Job Search (eyecix) plugin
  • Redux theme options panel
  • Google Maps API + PADI SSO
Admin
Phase 1 — Discovery (No Login)
01
Land on divejobs.padi.com
Homepage shows job listing with map. No login needed to browse. Can see job count, featured jobs, categories in nav.
Public access
02
Browse / filter jobs
Filter by category (Teaching, Boat Crew, etc.), location via map, date posted, job type. Sort by recent / featured / most viewed.
No login required
03
Click on a job listing
Job detail page shows title, description, employer info, location, sector, posted date. Apply button visible but gated.
Gate: Login to apply
Phase 2 — Login (PADI SSO)
04
Click "Sign In" → redirect to account.padi.com
OAuth redirect with client_id=41kt34lc5rhkuc54o6o0m6e4ad. Redirect URI back to divejobs.padi.com after auth.
PADI SSO OAuth
05
Account Activation (first time)
New users get email with activation code. Must enter email + code before accessing the job board. Existing PADI members skip this.
One-time gate
06
Returned to divejobs as logged-in user
Session established. Role determined: PADI Pro member vs general member. Teaching jobs visible to Pro only.
Role auto-assigned from PADI DB
Phase 3 — Profile Setup
07
Complete Candidate Profile
Add photo, cover image, bio, languages spoken, social links. Toggle public/private. Profile never expires — stays searchable by employers.
08
Upload CV / Resume
Upload one or more CVs to account. Choose which CV to attach per application. Stored in WP media library.
Phase 4 — Apply & Track
09
Apply to Job
One-click apply button on job detail page. Select CV to attach. Application submitted — employer gets email notification. Application recorded in candidate dashboard.
Teaching jobs: PADI Pro membership required
10
Track Application Status
Candidate dashboard shows all applied jobs. Can see if employer has shortlisted. No in-app messaging — contact happens via email.
11
Set up Job Alerts
Subscribe to daily/weekly email alerts by category or keyword. Also available as RSS feed. Alerts continue even after landing a job — no auto-off.
Email + RSS
⚠️ Key Friction Points in Candidate Journey:
1. No in-app messaging — all communication goes via email after apply.
2. Teaching / Guiding jobs gated behind PADI Pro membership — non-members see "Not Allowed" page.
3. Candidate listing completely hidden from non-employers — even logged-in divers cannot browse other candidates.
4. No mobile app — fully web-based only.
Phase 1 — Onboarding
01
Eligibility Check
Only PADI Retail & Resort members can post jobs. Dive centers must be registered in PADI's global database. Non-PADI operators cannot post.
Hard gate: PADI membership required
02
Login via PADI SSO
Same OAuth flow as candidates. account.padi.com assigns employer role based on PADI member type. No separate employer registration.
PADI SSO OAuth
03
Build Company Profile
Add business name, description, logo, cover image, team size, location (country + city), social media links. This becomes the public employer page.
Auto-searchable after save
Phase 2 — Post a Job
04
Create Job Listing
Fill: job title, sector (Teaching/Boat Crew/etc.), job type (full-time/seasonal/freelance), location, salary, description. Choose language (27 available).
05
Featured Job Option
Mark job as "featured" to appear at top of listings and on map with priority pin. Featured jobs have higher visibility in search results.
06
Publish
Job goes live immediately on listing + map. Appears in category pages. Job auto-archives after 90 days — employer must manually renew to keep active.
Auto-expires: 90 days
Phase 3 — Manage Applications
07
Receive Applications
Each application triggers an email to employer. Applicant name, profile link, and attached CV come in. Applications listed in Employer Dashboard under each job.
Email notification automatic
08
Review & Shortlist
View applicant profiles and CVs from dashboard. Mark candidates as shortlisted. Shortlist visible to candidate in their own dashboard.
09
Contact Candidate
Click applicant name/email to initiate contact. No in-app chat — moves to external email. No offer/rejection workflow in system.
No in-app messaging
Phase 4 — Proactive Hiring
10
Browse Candidate Directory
Employers can browse the candidate listing (hidden from public). Filter by sector, location, skills. Candidate listing page shows profiles with public/private setting respected.
Employers only
11
Unsolicited Candidate Outreach
Find a candidate via directory → click profile → contact via email. No formal invitation/interest system. All tracking must be done externally.
12
Mark Job Filled / Renew
Mark job as "filled" to remove from active listings. Or let it auto-archive at 90 days. No hire confirmation workflow or analytics on successful hires.
⚠️ Key Gaps in Employer Workflow:
1. No in-app messaging or offer system — everything exits to email after initial contact.
2. No hire tracking or success analytics — PADI doesn't know if a job was successfully filled.
3. Non-PADI dive centers cannot post — significant lock-in, potential barrier for small operators.
4. No bulk job management — each job managed individually.
Legend Full access Partial / conditions No access
Feature / Action Anonymous
Visitor
Logged-in
Diver
PADI Pro
Member
PADI Retail/
Employer
PADI Admin
Job Browsing
Browse job listings
Search & filter jobs
View job detail page
View map with job pins
View Teaching / Guiding jobs
Subscribe to RSS / alerts
Candidate Actions
Apply for non-teaching jobs
Apply for teaching / guiding jobs
Create candidate profile
Upload / manage CVs
Track application status
View own shortlist status
Employer Actions
View candidate directory
Post job listings
View applicants for own jobs
Shortlist candidates
Mark job as filled
Create company profile
Admin / Platform
Moderate / remove posts
Configure plugin settings
Access WP admin dashboard
Set featured jobs
WP Job Search (eyecix) — Core Shortcodes
Job Listing with Map (used on homepage)
[jobsearch_jobs_listing job_top_map="yes" job_top_map_height="480" job_top_map_zoom="12" job_top_search="yes" job_top_search_view="advance" job_filters_count="yes" job_pagination="yes" job_per_page="10" job_order="DESC" job_orderby="date" job_short_counter="9538" ]
Employer Listing with Map
[jobsearch_employer_listing emp_top_map="yes" emp_top_map_height="480" emp_top_search="yes" emp_top_search_view="advance" employer_filters_loc="yes" employer_filters_date="yes" employer_filters_sector="yes" employer_per_page="10" employer_loc_listing="country,city" employer_short_counter="9538" ]
WP_postmeta — Key Custom Fields (wp_postmeta table)
Meta KeyDescriptionValuesPost Type
jobsearch_field_job_publish_dateJob publish date (used for ordering)Unix timestampjob
jobsearch_field_job_filledIs the job position filled?"on" / not existsjob
jobsearch_field_job_featuredFeatured job flag"on" / not existsjob
jobsearch_job_employer_statusEmployer approval status"approved" / "pending"job
jobsearch_field_job_locationJob location stringText (city, country)job
jobsearch_field_job_latLatitude for map pinFloatjob
jobsearch_field_job_lngLongitude for map pinFloatjob
jobsearch_field_job_typeJob type taxonomyfull-time / part-time / freelance / seasonaljob
jobsearch_field_job_salary_minSalary range minimumIntegerjob
jobsearch_field_job_salary_maxSalary range maximumIntegerjob
jobsearch_field_job_deadlineApplication deadlineDate stringjob
jobsearch_field_emp_company_nameEmployer company nameTextemployer
jobsearch_field_emp_logoCompany logo attachment IDInteger (WP attachment)employer
jobsearch_field_emp_team_sizeTeam size range"1-100" / "101-200" etc.employer
jobsearch_field_cand_cvCandidate CV attachment IDInteger (WP attachment)candidate
jobsearch_field_cand_profile_visibilityProfile public/private"public" / "private"candidate
WP Taxonomies (wp_terms table)
🏷️
job_sector
  • 1. Teaching / Guiding
  • 2. Photo / Video
  • 3. Office / Shop
  • 4. Boat Crew
  • 5. PADI Headquarters
  • 6. Other Jobs
🏷️
job_type
  • Full-time
  • Part-time
  • Freelance / Contract
  • Seasonal
  • Internship
🏷️
employer_team_size
  • 1–100 Members
  • 101–200 Members
  • 201–300 Members
  • 301–400 Members
  • 401–500 Members
Custom Post Types (wp_posts table)
📌
post_type: job
  • post_title = Job title
  • post_content = Job description
  • post_author = employer user ID
  • post_status = publish / draft
  • 4,262+ total records in DB
🏢
post_type: employer
  • One record per dive center
  • 6,346 total employers in DB
  • Linked to WP user via post_author
  • Geo-coded for map display
👤
post_type: candidate
  • One record per PADI member
  • Linked to WP user account
  • CV stored as WP attachment
  • Visibility: public / private flag
Context: PADI's main www.padi.com is already on Drupal 10. The Job Board (divejobs.padi.com) is a separate WordPress + WP Job Search instance. This tab covers what it would take to migrate the Job Board into the Drupal ecosystem — either as a subsite or integrated into the main PADI Drupal install.
Content Type Mapping: WordPress → Drupal
WordPress (WP Job Search)
Custom Post Type: job
post_title, post_content, jobsearch_field_* meta keys
Drupal 10
Content Type: job_posting
Fields: title, body, field_job_sector, field_job_type, field_location (Geofield), field_salary, field_deadline, field_featured
Low effort — standard node
WordPress
Custom Post Type: employer
Company name, logo, location, team size, social links
Drupal 10
Content Type: employer_profile
+ Profile module (profile2) or separate content type with user reference. Geofield for location map.
Medium effort — user + node relationship
WordPress
Custom Post Type: candidate
CV attachment, public/private flag, PADI Pro status
Drupal 10
Profile (user profile fields) or Content Type: candidate_profile
+ File field for CV. User roles: padi_pro, padi_diver. Profile module recommended.
Medium effort — profile + file management
WordPress Taxonomy
job_sector, job_type
6 sectors, 5 job types, hierarchical
Drupal Taxonomy
Vocabularies: job_sector, job_type
Direct 1:1 mapping. Drupal taxonomy → entity reference field on job_posting node.
Low effort — direct taxonomy mapping
WordPress
WP Job Search Applications (postmeta)
Applicant user ID → job post ID relationship stored in postmeta
Drupal 10
Custom Entity: job_application
Entity with fields: applicant (user ref), job (node ref), status (shortlisted/applied), cv_attachment, applied_date
High effort — custom entity needed
WordPress SSO
PADI OAuth (account.padi.com)
client_id=41kt34lc5rhkuc54o6o0m6e4ad, redirect_uri based
Drupal 10
OpenID Connect module or Social Auth
openid_connect module supports generic OAuth2/OIDC. Same client_id reused. Role mapping: PADI Pro → Drupal role padi_pro.
Medium effort — module config + role mapping
WordPress Plugin
WPBakery shortcodes for listing pages
[jobsearch_jobs_listing] with 15+ attributes for filtering, map, pagination
Drupal 10
Views module + Geofield Map
Views replaces all shortcodes. Exposed filters = search/filter UI. Geofield + Leaflet or Google Maps module for map display.
High effort — Views config is complex
Required Drupal Modules
📦
Core requirements
  • Views (core) — replaces shortcodes
  • Entity API — custom job_application entity
  • File / Media — CV uploads
  • Taxonomy — job_sector, job_type
  • User / Roles — PADI Pro, employer roles
📦
Contrib modules
  • openid_connect — PADI SSO
  • geofield + geofield_map — location + map
  • leaflet or google_map_field
  • profile — candidate/employer profiles
  • facets — filter sidebar
  • search_api + solr (optional)
⚒️
Custom development
  • Custom job_application entity
  • PADI membership role sync hook
  • 90-day auto-archive cron job
  • CV attach flow on application
  • Email notification system
  • Employer shortlist UI
Data Migration Steps
01
Export WordPress data
Use WP All Export or direct MySQL dump of wp_posts, wp_postmeta, wp_terms, wp_users tables. Export jobs, employers, candidates, applications separately as CSV/JSON.
Tool: WP All Export Pro + WP Migrate DB
02
Map & transform fields
Map jobsearch_field_* meta keys to Drupal field_* names. Transform lat/lng into Geofield WKT format. Map WP taxonomy term IDs to Drupal vocabulary terms.
Most complex step
03
Build Drupal Migrate plugins
Write custom migrate plugins using Drupal's Migrate API. migrate_source_csv for flat data. Custom process plugins for geo, role, and relationship mapping.
Drupal Migrate API (core)
04
Migrate users first
WP users → Drupal users. Match on email. Assign roles (padi_pro, employer, diver). Since PADI SSO is used, actual passwords don't need migration — users will SSO-login fresh.
05
Migrate content nodes
Employers first (referenced by jobs), then job_posting nodes, then candidate_profile nodes. Migrate media (CVs, logos) via file migration with path rewriting.
06
Migrate applications
Applications are in postmeta — requires joining wp_posts + wp_postmeta. Create custom job_application entities in Drupal. Most complex migration step due to relational nature.
High effort — custom entity creation
07
Rebuild Views & UI
Replace WPBakery shortcodes with Drupal Views. Configure exposed filters, map display, pagination, sorting. Set up Facets for sidebar filters. Configure permissions per role.
08
Redirect & DNS cutover
Set up 301 redirects for all old WP job URLs (e.g. /job/french-speaking-dive-instructor/ → Drupal equivalent). Update divejobs.padi.com DNS. Keep WP live in parallel for 30 days minimum.
Redirect module + DNS change
⚠️ Key Migration Risks:
1. 6,346 employer records + 4,262 jobs — large dataset, thorough testing needed.
2. PADI SSO re-integration — OAuth client_id must be re-registered or updated for new domain/app.
3. No in-built job board module in Drupal 10 — everything built from Views + custom entities (more flexible but more dev effort).
4. Google Maps API key — needs to be transferred to new Drupal module (Geofield Map / Leaflet).
5. URL structure change — SEO risk if old job URLs are not 301-redirected properly.
Effort Summary
🟢
Low effort (1–2 weeks)
  • Taxonomy migration (sectors, types)
  • Basic job_posting content type setup
  • User + role migration (SSO users)
  • Media / file migration (CVs, logos)
~2 weeks dev
🟡
Medium effort (2–4 weeks)
  • Employer profile content type + geo
  • Candidate profile + CV attach flow
  • PADI SSO re-integration (openid_connect)
  • Email notification system
~3 weeks dev
🔴
High effort (4–8 weeks)
  • Custom job_application entity
  • Views rebuild (map + filters + pagination)
  • Shortlist / dashboard UI
  • 90-day auto-archive cron
  • Full URL redirect mapping
~6 weeks dev