Project overview
We’re building a web tool that lets users design a fence plan directly on top of Google Maps: draw fence runs, place gates, add posts and accessories, and get a live measurement/estimate. We need an experienced frontend developer to build the drawing and interaction engine — the core mechanics of the map editor itself.
This is a well-specified, self-contained module. You’ll receive:
- A detailed written specification covering every interaction rule (drawing, snapping, joints, angles, closed loops, gates, sliding gates, fence gaps, posts, terrain notation, hotkeys, undo/redo), including a data-model reference and pseudocode for the key mechanics.
- A working interactive HTML/SVG reference build (vanilla JS, no framework) that demonstrates every scenario live — you’ll be able to click through it to see exactly how each interaction should behave before writing any production code.
- A set of acceptance-test scenarios that define “done” for each feature.
What you’ll build
- A React + TypeScript implementation of the reference build’s drawing engine, rendering an SVG overlay synced to a real Google Maps instance (the reference build itself runs on an abstract SVG canvas, not real map coordinates — wiring it up to actual geo-coordinates is part of this task).
- Full interaction logic: drawing fence runs point-by-point with live metric dimensions, magnetic snapping/joining/disjoining between runs, 90°/exact-angle joints, closed loops, swing and sliding gates, real fence gaps around obstacles, automatic and manual posts, site objects (house, tree, pool, etc.), terrain markers (raked/step-down).
- A single-step undo/redo history covering every action (move, join, disjoin, length edit, gap creation).
- Keyboard shortcuts that work regardless of keyboard layout (physical key codes, not typed characters).
Tech stack
- React + TypeScript
- Google Maps JavaScript API (e.g.
@vis.gl/react-google-mapsor the official loader) with a custom overlay for the SVG layer - SVG for all geometry, handles, and contextual UI (not Canvas — the spec relies on individual hit-areas, readable rotated text, and DOM-level interactivity)
- Pointer Events API for unified mouse/touch/stylus handling, with a deliberate drag threshold (~4—7px) before a click becomes a drag
- State management of your choice — the reference build implements undo/redo as simple JSON snapshots per action, which is an acceptable pattern to follow rather than a full architectural rewrite
Approach we’re looking for
The reference build already contains working, battle-tested logic for every interaction (snapping, joining, dimensioning, gate geometry). We’re not looking for a ground-up redesign — we want that logic ported and typed, then wired to real map coordinates. A pragmatic port that keeps the proven imperative core close to the reference implementation is preferred over a full idiomatic React rewrite; this keeps cost and timeline down without sacrificing correctness.
What’s out of scope
- Pricing and quote calculations (handled separately)
- Product/catalog data sourcing (handled separately)
- Final visual styling of buttons, panels, and typography (comes from separate design files; you’re implementing behavior, not pixel-perfect skinning)
- Backend, auth, and project storage — a REST backend already exists; you’ll only need to call a save/load endpoint
Requirements
- Strong React + TypeScript experience, comfortable with complex, deeply-nested client-side state
- Prior experience with the Google Maps JavaScript API (custom overlays, coordinate projection)
- Solid SVG skills: manual geometry math (distance, projection onto a segment, angle calculation), not just static SVG markup
- Experience building drag-and-drop interactions from scratch with Pointer Events (not just wrapping a pre-built library)
- Ability to read a detailed written spec precisely and flag ambiguities rather than guessing
Nice to have
- Experience building CAD-like or diagram/floor-plan editors (snapping, joints, dimension lines)
- Familiarity with undo/redo history design for interactive editors
What to include in your application
Please review the specification and reference build, then share:
- Your estimated hours (or a range) for the full scope described above
- Any parts of the spec you’d flag as higher-risk or likely to take longer than expected
- Whether you’d suggest descoping anything (e.g. sliding gates, fence gaps, terrain notation, site objects) to fit a tighter budget, and the estimated impact on hours
Deliverables & acceptance
Work is considered complete when all acceptance-test scenarios from the specification pass on both mouse and touch input, with no console errors and no orphaned data references after delete/split operations.
Відгукнутись на вакансію