Senior Three.js / WebGL Developer (3D Patio & Roof Configurator)

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Full Time

WAGE / SALARY

$735.00 - $895.00 per month

HOURS PER WEEK

30

DATE UPDATED

Jun 9, 2026

JOB OVERVIEW

We're building a browser-based 3D patio and roof configurator that lets homeowners and builders design custom patios in real time and get instant pricing. Users pick a style (flat or gable roof), set dimensions, attach the patio to a house wall, choose materials, colours, gutters, infill panels and more, and the Three.js scene updates live. The app also generates spec sheets and PDF quotes from the configured design.

The 3D side is already functional. We have working flat and gable patio builders, dynamic rafter and beam generation, house attachment, measurement labels, and a server-side rendering path for preview images. Now we want someone strong in Three.js to help us take the 3D experience to the next level.

Current stack
Three.js (WebGL) for all 3D rendering. GLB/GLTF models for houses, roof components, gutters, fascia and more. Vanilla JS with a Babel build pipeline, Express/Node backend, EJS views, Stripe for payments and Firebase for auth.
What you'll work on

Improving geometry accuracy across dynamic rafters and beams, gutters, roof pitch and wall attachment. Parametric model generation that stays correct as dimensions change. GLB model integration, materials, lighting and visual polish. Performance optimisation and clean, maintainable scene code. Fixing edge case bugs in the flat and gable builders.
You should have

Solid hands-on Three.js experience on real projects, not just demos. A good grasp of 3D math including transforms, geometry, materials and lighting. Comfort working in a vanilla JS codebase with no heavy framework. Bonus points for parametric or CAD-style modelling, GLTF/GLB authoring, and performance tuning.

How to apply

Send a short intro, links to your Three.js work or portfolio (live demos strongly preferred), and your availability and expected monthly rate. Applications without portfolio links will not be considered.

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0007
Controller Execution Time ( Jobseekers / Job )  0.0216
Total Execution Time  0.0229
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,498,008 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Senior-Threejs-WebGL-Developer-3D-Patio-Roof-Configurator-1664544
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0164 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0003   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1664544
 LIMIT 1 
0.0009   SELECT *
FROM `employers`
WHERE `employer_id` = 488446
 LIMIT 1 
0.0028   SELECT COUNT(DISTINCT t.id) as cnt
FROM 
`t_thread` `t`
INNER JOIN `t_message` `mON `t`.`id` = `m`.`thread_id`
INNER JOIN `t_message_employer` `eON `m`.`id` = `e`.`message_id`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1664544
AND `misc`.`idIS NULL 
0.0004   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-06-20',ej.date_added) duration_daysDATEDIFF('2026-06-20',e.rebill_date) duration_rebillej.*, e.deactivate FROM employers eemployer_jobs ej WHERE e.employer_id ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-06-20',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1664544' 
0.0010   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1664544 
0.0007   UPDATE employer_jobs SET hit_counts '***Jun-09-2026=723***Jun-10-2026=12***Jun-11-2026=8***Jun-12-2026=2***Jun-20-2026=1' WHERE job_id'1664544'  
0.0005   UPDATE employer_jobs SET monthly_hits '***Jun-2026=746' WHERE job_id'1664544'  
0.0015   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1664544' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1664544 
0.0073   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '488446'
AND `date_added` >= '2022-06-08' 
0.0003   select from teasers 
0.0002   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)