Senior Python Engineer — Computational Geometry / CAD Parsing (Remote, Full-Time, US time)

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

TYPE OF WORK

Full Time

SALARY

$500-$1,500

HOURS PER WEEK

TBD

DATE UPDATED

Jun 24, 2026

JOB OVERVIEW

Senior Python Engineer — Computational Geometry / CAD Parsing (Remote, Full-Time)

We are a construction-technology company turning architectural drawings into structured 3D building models. We're hiring a senior Python engineer to own the core of that pipeline: ingesting real-world CAD and turning it into clean, structured geometry.

This is a deep technical role, not a web or drafting role. You'll be the engineer on the hardest, most valuable part of our product.

What you'll do
- Parse messy real-world DWG/DXF files — inconsistent layers, non-standard conventions, dirty geometry — and normalize them into a clean internal representation
- Build robust geometry processing: closing rooms into polygons, resolving walls and openings, handling gaps, overlaps, and duplicates
- Develop the 2D?3D reconstruction logic: cross-referencing plans and elevations to recover heights and assemble structured 3D model JSON
- Generate output into Revit (via pyRevit) and DXF as editable, native objects
- Write code that handles *messy* input gracefully — this job is about real files, not clean test cases

What we're looking for
- Strong Python, with real computational-geometry experience (polygon/boolean operations, spatial reasoning)
- Hands-on CAD parsing: `ezdxf`, `shapely`, or clear equivalent experience
- Comfort working with imperfect, inconsistent real-world data and making it usable
- Big plus: Revit API / pyRevit experience (this could make you our entire core team for v1)
- Pragmatic, ships working code, comfortable with ambiguity
- Good written English; reliable daily communication

Not required: web/frontend, C#, or machine-learning/CV experience. This is a geometry and CAD-parsing role.

Logistics
- Remote, full-time (~40 hrs/week), long-term
- 9-5 US Pacific Time for daily check-ins
- We use ---------- (camera + screen share), Hubstaff for time tracking, Wise for payment
- Rate: $800-$1,500 depending on experience, stepped structure with a performance-based increase after the first proven month. This is a senior specialist role — please apply accordingly.

How to apply
1. Send your resume and a short note on the most complex geometry or CAD-parsing problem you've personally solved.
2. Include a brief Loom video (camera on, no script) walking through that problem in your own words.
3. Start your application with the word **KEYSTONE** so we know you read this in full.

Applications without the keyword or the video will not be reviewed.

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0012
Controller Execution Time ( Jobseekers / Job )  0.0171
Total Execution Time  0.0198
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,512,064 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Senior-Python-Engineer-Computational-Geometry-CAD-Parsing-Remote-Full-Time-US-time-1675506
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0080 seconds)  (Hide)
0.0004   SELECT *
                                
FROM exrates
                                WHERE rate_name 
= 'USD-PHP' 
0.0005   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1675506
 LIMIT 1 
0.0004   SELECT *
FROM `employers`
WHERE `employer_id` = 911596
 LIMIT 1 
0.0009   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `misc` ON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1675506
AND `misc`.`id` IS NULL 
0.0008   SELECT e.business_name, e.logo, e.website, e.rebill_date, e.date_added member_date, hits, DATEDIFF('2026-09-24',ej.date_added) duration_days, DATEDIFF('2026-09-24',e.rebill_date) duration_rebill, ej.*, e.deactivate FROM employers e, employer_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-09-24',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != 1 AND ej.deleted = 0 AND job_id = '1675506' 
0.0004   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1675506 
0.0011   UPDATE employer_jobs SET hit_counts = '***Jun-24-2026=259***Jun-25-2026=97***Jun-26-2026=59***Jun-27-2026=4***Jun-28-2026=8***Jun-29-2026=10***Jun-30-2026=4***Jul-01-2026=4***Jul-02-2026=4***Jul-03-2026=8***Jul-04-2026=2***Jul-07-2026=2***Jul-08-2026=2***Jul-10-2026=4***Jul-11-2026=1***Jul-12-2026=1***Jul-15-2026=2***Jul-17-2026=3***Jul-18-2026=2***Jul-20-2026=2***Jul-21-2026=1***Jul-23-2026=3***Jul-24-2026=1***Jul-25-2026=10***Jul-26-2026=18***Jul-27-2026=12***Jul-28-2026=11***Jul-29-2026=12***Jul-30-2026=11***Jul-31-2026=14***Aug-01-2026=15***Aug-02-2026=15***Aug-03-2026=11***Aug-04-2026=11***Aug-05-2026=13***Aug-06-2026=6***Aug-07-2026=16***Aug-08-2026=23***Aug-09-2026=21***Aug-10-2026=19***Aug-11-2026=20***Aug-12-2026=18***Aug-13-2026=23***Aug-14-2026=19***Aug-15-2026=22***Aug-16-2026=24***Aug-17-2026=23***Aug-18-2026=24***Aug-19-2026=24***Aug-20-2026=23***Aug-21-2026=27***Aug-22-2026=22***Aug-23-2026=23***Aug-24-2026=22***Aug-25-2026=24***Aug-26-2026=20***Aug-27-2026=3***Aug-28-2026=2***Aug-29-2026=1***Aug-30-2026=1***Aug-31-2026=1***Sep-03-2026=2***Sep-10-2026=1***Sep-11-2026=1***Sep-12-2026=1***Sep-13-2026=1***Sep-15-2026=5***Sep-16-2026=2***Sep-17-2026=1***Sep-18-2026=1***Sep-19-2026=1***Sep-24-2026=2' WHERE job_id= '1675506'  
0.0006   UPDATE employer_jobs SET monthly_hits = '***Jun-2026=441***Jul-2026=130***Aug-2026=516***Sep-2026=18' WHERE job_id= '1675506'  
0.0012   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id = '' AND job_id = '1675506' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1675506 
0.0004   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '911596'
AND `date_added` >= '2022-06-08' 
0.0005   select * from teasers 
0.0003   SELECT * FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)