GP
GP Gurpreet
Singh Panesar
Email → Open to full-time roles

Full stack engineer — AI integration & industrial automation

Gurpreet Singh
Panesar

I build production systems that remove expensive manual work from engineering and construction firms — CAD processing, document intelligence, and on-premise LLM pipelines. Nine years across full-stack development, AI integration, and embedded systems.

9 Years across full-stack, AI integration & embedded systems
3 Production systems currently running for Metro Vancouver clients
60% Debugging time cut by a tool built at Samsung R&D

01 — Systems in production

Three things currently running for clients

Client source code is under NDA, so these describe the problem, the constraints, and the architecture rather than implementation detail. Happy to walk through any of them in depth.

01

AI Document Manager

Mainland Engineering · Go · PostgreSQL · Ollama (Qwen2.5-VL) · PySide6 · Gmail API · SMB

The problem

An engineering firm receives project documents through three channels — physical scans, email attachments, and direct uploads. Every document had to be opened, identified, and manually filed to the correct project folder on their server. Staff time went to filing rather than engineering, and misfiled documents surfaced weeks later during project reviews.

The constraint that shaped the design

The documents are confidential architectural drawings. Sending them to a cloud AI API was not acceptable to the client, which ruled out the obvious approach. Everything had to run on the client's own infrastructure.

What I built

A Go service that ingests documents from all three channels, reads them with a locally hosted vision-language model, extracts the project number and civic address, and files them automatically to the correct location on the firm's SMB server.

  • Local inference layer. Ollama running Qwen2.5-VL on-premise. I specified and deployed the supporting GPU hardware for continuous 24/7 operation.
  • Extraction reliability. Local vision models hallucinate on handwritten markups and bleed context across pages in multi-page sets. Resolving this — rather than accepting first-pass output — was the majority of the engineering effort and the difference between a demo and a production system.
  • Email ingestion. Gmail pipeline with cross-mailbox deduplication using RFC 5322 message IDs and SHA-256 content hashing, so a document sent to three people in the firm files once, not three times.
  • Input surfaces. A PySide6 desktop scanning application and a web upload portal, so office staff feed the pipeline without touching the backend.
  • Filing logic. Built around Canadian and BC-specific civic addressing conventions, which are inconsistent enough that naive string matching fails.
Result

Documents now file themselves on arrival. Confidential drawings never leave the client's network.

02

CAD Frame Design Extractor

Dritech Floors and Ceilings · Python · ezdxf · AutoCAD DXF

The problem

Structural drawings communicate frame assemblies as tag numbers — a wall, post, or hold-down is labelled, and the actual specification lives in a schedule table elsewhere in the drawing set. To understand what a single frame is, a crew member cross-references the tag against the schedule and mentally assembles the result. That took around 20 minutes per frame, and it is exactly the kind of interpretive work where errors turn into rework on site.

The hard part

Real-world drawing sets put every floor in a single AutoCAD Model Space. There is no structural separation between floor one and floor three — they are geometry in the same coordinate space, distinguished only by convention. Any tool that wants per-floor data has to work out where one floor ends and the next begins.

I solved this by detecting viewport boundaries to isolate each floor region, then aligning the isolated regions against the drawing's structural grid lines so members can be referenced consistently across floors.

What I built

A Python pipeline built on ezdxf that reads DXF drawings and:

  • Extracts per-floor frame geometry automatically, removing manual takeoff from the workflow.
  • Parses member tags and schedule tables into a structured data model.
  • Resolves wall, post, and hold-down callouts to their assembly definitions.
  • Feeds an interactive viewer where the crew selects a member and sees the frame design render immediately.
Floor-plan viewer showing a full DXF import with per-unit room labels, square footage, and a layer panel for doors, glass, grid, and walls
Full floor import — 11,770 entities across 187 layers, with per-unit room labels and takeoffs resolved automatically.
Beam info panel for a selected wall opening, showing header and post materials, bay dimensions, and cripple spacing
A member selected in the viewer — header size, post build-up, and bay dimensions resolved from the tag in place of a schedule lookup.
Result

Roughly 20 minutes of manual interpretation per frame reduced to a single click. In daily production use.

03

Analog Telephony & AI Note-Taking System

Asterisk · Python (ARI) · Raspberry Pi · Gemini API · Ollama (Gemma 3)

The problem

A client running legacy analog phone lines had no record of customer calls beyond whatever people wrote down afterwards. Commercial call-recording products assume VoIP infrastructure they did not have, and off-the-shelf transcription handled only English — their calls are multilingual.

What I built

An end-to-end recording and summarization pipeline on commodity hardware.

  • Telephony layer. Asterisk on a Raspberry Pi, bridging analog lines into a software-controllable system. A custom Python application drives call handling through the Asterisk REST Interface rather than dialplan scripting.
  • Multi-device routing. Asterisk PJSIP configured for simultaneous ringing across devices, with WebRTC support.
  • Transcription. Gemini API for speech-to-text across multiple languages — the capability that off-the-shelf tools could not provide.
  • Summarization. Ollama running Gemma 3 locally, condensing long call transcripts into structured summaries. Kept local so conversation content stays on the client's premises.
Result

Legacy analog lines now produce searchable, summarized call records without replacing the phone system.

02 — Approach

How I work

AI-native delivery

Coding agents in the build loop, AI-generated test environments as a gate before every client release, and evaluation of model output for correctness rather than accepting it at face value. Architecture and code-quality decisions stay mine, corrected as I go.

Full ownership

For each of the systems above I handled requirements, architecture, implementation, infrastructure, deployment, and ongoing support. No handoffs.

Constraint-first design

The most interesting decisions in this work came from constraints, not features — confidentiality ruling out cloud APIs, legacy hardware ruling out VoIP products, drawing conventions ruling out naive parsing.

03 — Background

Technical background

Languages

GoPythonC/C++DartSQLJavaScript

AI / ML

Self-hosted LLM & vision-model deployment (Ollama)Gemini APIOCR & document extractionSpeech-to-textRAG pipelines

Backend

PostgreSQLREST APIsWebSocketsDockerLinuxsystemd

Frontend & mobile

FlutterReact / VitePySide6 (Qt)

Infra

CloudflareOracle CloudGPU inference hardwareSelf-hosted deployment

Domain

CAD / DXF automation (ezdxf, AutoCAD)Asterisk VoIPPCB designFirmwareIoT

Previously Lead Engineer at Samsung R&D (Tizen OS / Galaxy Watch, C++), where I built a Python log-analysis tool that cut debugging time by 60% and received Samsung's internal award for Best Automation Innovation. Before that, six years designing PCBs and writing C/C++ firmware for industrial automation.

04 — Contact

Available for full-time roles in Metro Vancouver

Client references available on request.