QTQingyuan Tian

Hi, I’m

Qingyuan Tian

Engineering · Lifting · RunningExplore my top 3 projects ↓

Technologies I work with

Languages

PythonCC++C#JavaScriptTypeScriptSQLHTMLCSS

Web & backend

ReactNode.jsExpress.NETREST APIsJWT

Cloud & databases

MongoDBFirebase AuthFirestoreCloud FunctionsAWS

AI, vision & data

TensorFlowPyTorchOpenCVNumPypandasMatplotlibPaddleOCRPyMuPDFopenpyxl

Development & delivery

LinuxDockerGitGitHubPostmanChrome APIs

Engineering & orchestration

BlenderLangGraphMCPAutoCADTkinter

My top 3 projects

01 / SYNTHETIC RAILWAY SCENES
Company-sponsored capstone

Build railway scenes.
Generate training data.

Blender scenes provide controlled examples of trackside shelters for landmark detection.

PythonBlenderLangGraphMCPNumPyPyTorch

Architecture

Scene specificationTrack · shelter · sensor
Blender sceneKnown object geometry
Simulate & labelLiDAR points + object labels
Validate datasetCheck frames & geometry
Train detectorPyTorch

My LangGraph orchestration

StateGraph < SceneJob >

Turn a scene request into a checked, reproducible dataset sample.

Planner○
Builder○
Validator○
Repair○
Sensor○
Dataset○
Exporter○
Ready to buildWorkflow demo
Give the crew a scene to build.A browser visualization of your LangGraph workflow.
Scene state
The scene specification appears here after generation.
Orchestration graph
LLMPlanRequest → scene spec
→
BLENDER MCPConstructBuild one shared scene
→
PYTHON CHECKSValidateGeometry · visibility
→
WORKERSimulateLiDAR points + labels
→
PYTHON CHECKSDataset checkFrames · files · counts
→
OUTPUTExportAccepted sample
IF SCENE VALIDATION FAILS
Repair agentTarget the failed check
↶ back to Construct3 repair attempts → manual review
Routing & implementation notes
SHARED STATEjob_idseedsensor_configscene_specasset_idsvalidation_errorsattempt_countoutput_paths

Scene validation routes passing jobs to simulation. Failed geometry checks route to a repair agent, which proposes a targeted edit and returns to construction. After three repair attempts, the job stops for manual review. Dataset checks route accepted samples to export and failures to manual review.

Agents handle planning and repair; Python checks geometry and exported labels. Blender edits run serially. Save the seed and scene specification for repeatable jobs. This is my LangGraph orchestration design.

LangGraph state, nodes & conditional edges ↗

Build notes & technical detail

The problem

Trackside equipment shelters, or bungalows, are candidates for railway landmarks when GNSS is unavailable. Real recordings are costly to collect and label across different distances, viewpoints, and occlusions.

The approach

Construct synthetic railway scenes in Blender with known object geometry. Separate scene construction from point-cloud simulation, annotation export, dataset validation, and detector training.

The engineering decision

A rendered image is not a LiDAR scan. The pipeline needs an explicit sampling method, and exported points and labels must agree on coordinate frames, dimensions, and orientation.

What the work supports

Controlled variations for landmark-detection data. Detecting a shelter is one stage; associating it with a specific known landmark remains a separate localization step.

Agent orchestration

My LangGraph workflow uses a planner to create a structured scene specification, a construction agent to operate Blender, deterministic geometry and visibility checks, and a repair stage with bounded retries. Simulation and export remain code-driven workers.

Save scene specifications and seeds for reproducibility, serialize edits to a shared Blender scene, and keep related sequences together when splitting datasets. The orchestrator separates agent planning and repair from deterministic geometry checks and export.

02 / VICTORIA MARINE
Software engineering internshipVictoria Marine · Jul–Sep 2026

Automate parts lists.
Lay out ship components.

Internship tools for drawing-to-BOM extraction and AutoCAD part nesting.

PythonPyMuPDFOpenCVPaddleOCRpandasopenpyxlTkinterC#.NETAutoCADMCP

Drawing tables → master BOM

Architecture

Drawing PDFRender page regions
BOM tableDetect → split cells → OCR
Assembly titleRead title block → match value
Associate & validateParts + assembly + page
Excel master BOMRows + review warnings

Agents → AutoCAD ship parts

MCP connects my nesting engine to AutoCAD’s C#/.NET API.

Build notes & technical detail

For the CAD tool, I exposed a backtracking and dynamic-programming part-nesting engine through an MCP server integrated with the AutoCAD C#/.NET API.

The problem

Each drawing page has a local bill of materials, while the assembly name lives elsewhere in the title block. Manual transcription can lose rows, mix assemblies, or carry over an incorrect quantity.

What I built

A desktop extraction workflow that renders PDF regions, detects the BOM table, splits it into cells, reads those cells with OCR, and associates the resulting rows with the assembly title.

The engineering decisions

Dynamic cropping catches longer tables. Cell-level OCR preserves row and column structure. Page-level error handling lets the rest of a drawing set finish, and a background worker keeps the interface responsive.

The result

An assembly-aware master BOM in Excel, with source-page information and extraction warnings for review. Questionable values remain visible instead of being silently treated as correct.

Tools & implementation
Interface
Tkinter / ttk, background worker and progress queue
Geometry & layout
PyMuPDF, OpenCV, NumPy
Text extraction
PaddleOCR with field-specific cleanup and validation
Output
pandas / openpyxl

Automatic duplicate merging, hierarchical quantity multiplication, and procurement totals are outside the documented scope.

03 / GATORPLAN

Preview your courses.
Before registration.

GatorPlan lets UF students search courses, compare sections, and see their week ahead of their registration date.

ReactJavaScriptHTMLCSS
GatorPlan showing a Spring 2027 weekly schedule with three sections, eleven credits, and no conflicts
GatorPlan · Actual course-planner snapshotTry GatorPlan ↗

Architecture

ONE.UF course dataCourses & sections
Course retrievalPublic search + optional connector
Course recordsConsistent course data
Preview interfaceStudents see courses
Build notes & technical detail

The problem

Students need to see and compare their courses before their assigned registration date. GatorPlan gives them a course preview so they can prepare ahead of that date.

The build

GatorPlan connects a planning interface with UF course information. The important handoff is from the source data to course, section, and meeting records the schedule can use.

The engineering decision

Keep data interpretation at the integration boundary. A calendar should compare consistent meeting intervals rather than repeatedly decode a raw API response.

What that enables

Students can preview courses before their registration date. The preview supports preparation; enrollment happens through UF.

Architecture & scope

The live planner supports public course search and an optional browser connector for signed-in meeting times and seats. The diagram shows logical responsibilities rather than deployment topology.

More work

NOTESHARE / MERN STACKOpen NoteShare ↗

Upload notes.
Find what your course needs.

I built backend services for authentication, uploads, metadata storage, and document retrieval in a full-stack academic notes platform.

MongoDBExpressReactNode.jsAWSDockerLinux
● ● ●noteshare-snowy.vercel.app↗
∫Course notes
↑Upload
CourseNotes
Search & retrieve
Illustrative workflow · Open the live app ↗

Backend architecture

React interfaceSearch · upload · view
Express / Node.jsAuthentication & request handling
MongoDB + file handlingMetadata storage & document retrieval
Notes returnedCourse-specific study materials
My backend contribution

Built backend services for authentication, uploads, metadata storage, and document retrieval. Connected those services to React interfaces for course-specific note sharing.

The project also used AWS, Docker, Git/GitHub, Linux, and Postman.

Client-side caching, paginated retrieval, and reusable React hooks reduced initial page-load time by 33%.

BEYOND THE DESK / @YAWNIC3

Under the bar.
Out on the road.

Training log ↗
BENCH PRESS
340 bench/169.6 bodyweight
Watch the milestone ↗
BLUETOOTH / NO-HANDS SQUAT
475 → 515
5K / TEN WEEKS
START28:30
10 WEEKS<20:00

Over 8:30 faster.

HALF MARATHON
21.1 km

Completed 3 months after starting to run.

Personal gym lifts · Running milestones shared by meMore on @yawnic3 ↗