Ahmad Asfour - CS @ Georgia Tech / builder / always learning

I build things at the intersection of AI, data, and the real world.

From 3D tree models and plant phenotyping to content moderation and recommendation systems, I like projects where there's a clear before/after. The world is slightly less confusing once the thing exists.

I go deep: understanding the math, the data, the full pipeline. Not just the shiny demo.

Currently into →

Reading

NeRF papers & 3D reconstruction

Tinkering

Point cloud processing pipelines

Following

Fantasy Football chaos

Planning

Next hiking route (maybe Colorado?)

Projects

Things I've built (and what I learned)

Less emphasis on buzzwords. More on: problem → approach → what actually worked (and what didn't).

Point Cloud Deep Learning for Automated Peach Tree Pruning

End-to-end LiDAR + 3D deep learning system that learns expert dormant pruning directly from before/after point clouds and outputs robot-ready pruning plans, matching expert pruning within ~2.5% volume error.

Point Transformer v3PyTorchTreeQSMOpen3D+7
  • Trained a Point Transformer v3 model that achieves 0.86 F1 (0.81 precision, 0.91 recall) while keeping mean pruned-branch volume error to just 2.5% on held-out trees.
  • Recovered 92.5% of expert pruning locations with only ~1–2 extra cuts per tree on average; many of those extras were validated by horticulture experts as genuinely useful cuts.
  • Among the first systems to learn pruning behavior directly from before/after LiDAR scans without manual branch annotations or hard-coded pruning rules.

Fixing TreeQSM Outputs with Skeletonization

Recently I've worked a lot with a software called TreeQSM which is used to extract structural traits from 3D Point Clouds of trees. It's great at extracting QSM traits from forest-style trees, but it breaks down on open-vase architectures (topology, branch IDs, order, and parent/child links don’t reflect reality). I built a post-processing tool that reconstructs a clean directed skeleton from TreeQSM cylinders and rewrites the cylinder topology (parent/branch/extension/position) using classic graph algorithms, so downstream trait extraction stays meaningful.

PythonTreeQSMNetworkXNumPy+2
  • Recovered consistent parent/child topology and branch grouping on open-vase trees (≈90% agreement with expected structure in internal validation).
  • Made TreeQSM cylinder outputs usable across multiple research workflows by exporting a cleaned CSV with corrected topology fields + visualizations for QA.

SpendWise — Instagram Content Analytics + AI Insights

An end-to-end Instagram analytics platform that turns raw account + hashtag data into dashboards, sentiment trends, and AI-generated strategy recommendations. It combines owned-account performance tracking with competitive hashtag intelligence, backed by an automated scraping pipeline and a secure multi-tenant database.

Next.jsTypeScriptTailwindshadcn/ui+6
  • Unified three analytics pillars (my content performance, hashtag competitive intel, and comment sentiment) into one consistent dashboard experience.
  • Automated recurring data collection with n8n + Apify, turning manual tracking into a repeatable pipeline (snapshots, dedupe, incremental updates).
  • Designed a secure multi-tenant backend using Supabase Auth + Row-Level Security so each user only accesses their own analytics and tracked assets.

GenoCLIP: Using 3D Point Clouds to Enhance Deep Learning Genomic Selection

CLIP-style dual encoder that uses LiDAR-derived 3D tree architecture as privileged supervision to shape genotype embeddings. Trains SNP ↔ 3D alignment contrastively, then predicts architecture traits from SNPs only at inference—improving geometry-sensitive genomic prediction in a small-n, ultra-high-p regime.

PythonPyTorchscikit-learnXGBoost+8
  • Built a paired genotype↔3D dataset for peach architecture: ~131k SNPs across 122 trees plus LiDAR point clouds.
  • Mean branch angle prediction: GenoCLIP achieved MAE 6.8 and PCC 0.644, outperforming genotype-only DPCFormer (MAE 7.4, PCC 0.591) and approaching the strongest classical baseline RF (MAE 6.7, PCC 0.68).
  • Branch count prediction: GenoCLIP improved MAE vs DPCFormer (43.9 vs 48.0) while remaining competitive in correlation (PCC 0.4408 vs 0.4567); RF remained the best small-n baseline (MAE 40.2, PCC 0.445).

Gitours – LLM-Powered GitHub CodeTour Generator

Automated tool that takes any GitHub repo URL, statically analyzes code structure and relationships, then uses OpenAI to generate ready-to-run VS Code CodeTour files for instant onboarding.

PythonFlaskReactOpenAI API+3
  • Generates structured .tour files in ~3 minutes for small-to-medium repos, eliminating manual onboarding doc creation
  • Static itemization engine tracks where symbols are defined/used, enabling LLM to follow real execution flows instead of alphabetical file lists
  • Dual interface: CLI (main.py) for quick generation and React + Flask web UI for non-technical users

Want to chat?

I'm open to interesting problems.

If you're working on something at the intersection of AI, data, and real-world systems, especially if there's a learning curve involved, I'd be interested to hear about it.