{
  "notes": [
    {
      "slug": "my-model-had-no-accuracy-number",
      "title": "My model had no accuracy number, so I measured it",
      "date": "2026-11-11",
      "summary": "The ClaimLens NLI model was published with no benchmark behind it. On 3,000 VitaminC test pairs it scores 65.8 percent against 59.4 for a same-size zero-shot model (65.77 against 59.43 unrounded, a 6.3-point gain), and the evaluation found the app had swapped two of its three labels.",
      "description": "The ClaimLens NLI model scores 65.8 percent on 3,000 VitaminC test pairs, against 59.4 percent for same-size zero-shot NLI. Measuring it also exposed a swapped label map.",
      "project": "claimlens",
      "og": "notes",
      "url": "https://zulfaqarhafez.com/notes/my-model-had-no-accuracy-number"
    },
    {
      "slug": "the-fix-that-cost-tokens",
      "title": "The fix that cost tokens",
      "date": "2026-10-13",
      "summary": "TraceRazor measured its own patch on 12 live coding runs and found it raised token use by 5.6 percent instead of cutting it. What the rerun gate caught, what changed, and why a second round centred on zero was the right answer.",
      "description": "TraceRazor measured its own patch on 12 live coding runs and found it raised token use by 5.6 percent. What the rerun gate caught and what changed.",
      "project": "tracerazor",
      "url": "https://zulfaqarhafez.com/notes/the-fix-that-cost-tokens"
    },
    {
      "slug": "what-the-pond-teaches",
      "title": "What the pond teaches about re-identification",
      "date": "2026-10-13",
      "summary": "The koi pond on the home page is a toy with real failure modes: a noisy detector, a confirmation gate, a tracker that loses IDs under occlusion, and a count that drifts up, which re-identification cuts by about four fifths.",
      "description": "The home-page koi pond is a toy tracker with real failure modes: a noisy detector, a confirmation gate, lost IDs, and a count that drifts up over time.",
      "project": "ldc-cv-intern",
      "url": "https://zulfaqarhafez.com/notes/what-the-pond-teaches"
    },
    {
      "slug": "pre-registering-a-no",
      "title": "Pre-registering a no",
      "date": "2026-10-13",
      "summary": "OsciWriting fixed one rule before the decision run: if judged substitutability missed a 70 percent bar, the answer was Abandon. It came in at 12.8 to 15.3 percent. What was locked in advance, what was not, and why the verdict holds either way.",
      "description": "OsciWriting fixed its decision rule before the run: miss a 70 percent bar and the answer is Abandon. Judged substitutability came in at 12.8 to 15.3 percent.",
      "project": "osciwriting",
      "url": "https://zulfaqarhafez.com/notes/pre-registering-a-no"
    },
    {
      "slug": "why-one-pass-never-certifies-an-agent",
      "title": "Why one pass never certifies an agent",
      "date": "2026-10-13",
      "summary": "Assay gates its verdicts at pass^k on held-out probes. The arithmetic behind that rule, what a deterministic demo can and cannot show, and why a mean of 0.80 across categories still failed.",
      "description": "Assay certifies a category only if every one of k held-out trials clears the bar. The arithmetic behind pass^k, and what a deterministic demo can show.",
      "project": "assay",
      "url": "https://zulfaqarhafez.com/notes/why-one-pass-never-certifies-an-agent"
    }
  ],
  "site": "https://zulfaqarhafez.com",
  "mcp": "https://zulfaqarhafez.com/api/mcp",
  "profile": {
    "name": "Zulfaqar Hafez",
    "headline": "Applied AI Engineer",
    "location": "Singapore",
    "email": "zulfaqarhafez@gmail.com",
    "links": {
      "site": "https://zulfaqarhafez.com",
      "github": "https://github.com/ZulfaqarHafez",
      "linkedin": "https://www.linkedin.com/in/zulfaqar-hafez",
      "huggingface": "https://huggingface.co/Zulfhagez"
    },
    "thesis": "I build computer vision, agentic systems, and civic products for field data, evaluation, and handover.",
    "bio": "At LDC, I research field-video systems. At People's Association, I build public-facing AI. I work from evidence and model behavior through handover.",
    "summary": "Final-year Applied AI student, AI Researcher at Louis Dreyfus Company and $20,000 Sparks Fund recipient, focused on production computer vision and agentic AI. Deployed field-video counting on Azure GPU inference, and quantised a PPE detector to int8 ONNX (held-out mAP50 0.455 vs 0.461 fp32) small enough to run in a browser tab.",
    "focus": [
      "Production computer vision",
      "Agentic AI and RAG",
      "Civic technology",
      "Agent evaluation"
    ],
    "graduation": "2027",
    "headline_stats": [
      {
        "label": "Production vision",
        "value": "Count once",
        "detail": "Traced over-counting to duplicate tracks and cut it by about three quarters at the hardest site, then gave every count a ±2 range."
      },
      {
        "label": "Data stewardship",
        "value": "7 annotated datasets",
        "detail": "Led annotation across seven datasets, built a 10,000+ image dataset with a human-verified test set, and kept camera and site leakage out of validation."
      },
      {
        "label": "Civic product",
        "value": "Live at churp.sg",
        "detail": "Took Churp from a community hackathon to a Sparks-funded pilot in Tengah: 300 plots, 60+ residents onboarded (Oct 2026)."
      },
      {
        "label": "Community",
        "value": "500+ people reached",
        "detail": "Led SIT Magical Hearts programmes and volunteer deployments serving more than 500 beneficiaries."
      }
    ],
    "resume_edition": "2026-11"
  },
  "experience": {
    "roles": [
      {
        "id": "ldc-researcher",
        "title": "AI Researcher (Contract)",
        "company": "Louis Dreyfus Company",
        "kind": "Research",
        "period": "Aug 2026 to now",
        "current": true,
        "points": [
          "Traced over-counting to duplicate tracks, not detector error, which cancelled a planned retrain.",
          "Cut over-counting at the hardest site by about three quarters with a gated merge across camera passes.",
          "Thesis (CountOnce): testing whether a video count can give a range that is right as often as it claims."
        ]
      },
      {
        "id": "pa-ai-intern",
        "title": "AI Intern · RAG & Agentic Systems",
        "company": "People's Association",
        "kind": "Internship",
        "period": "Aug 2026 to now",
        "current": true,
        "points": [
          "Developing retrieval and agentic AI systems for community-facing public-service workflows.",
          "Applying orchestration, evaluation, and trace auditing to production use cases."
        ]
      },
      {
        "id": "ldc-cv-intern",
        "title": "Applied AI Engineer Intern · Computer Vision",
        "company": "Louis Dreyfus Company",
        "kind": "Internship",
        "period": "Mar to Aug 2026",
        "current": false,
        "points": [
          "Built a YOLO and BoT-SORT pipeline that counts each object once in field video, deployed on Azure.",
          "Led annotation across 7 datasets (10,000+ images) and re-split validation by camera and site to stop leakage."
        ]
      },
      {
        "id": "pa-product-lead",
        "title": "Product Lead · Citizen Developer",
        "company": "People's Association",
        "kind": "Civic product",
        "period": "Sep 2025 to Aug 2026",
        "current": false,
        "points": [
          "Led nine volunteers taking Churp from a hackathon concept to a $20K Sparks-funded pilot in Tengah.",
          "Delivered Singpass OIDC, Myinfo, an equal-chance ballot, VAPT, and PA ICT handover."
        ]
      }
    ],
    "education": [
      {
        "id": "sit",
        "degree": "BSc (Hons) Applied Artificial Intelligence",
        "school": "Singapore Institute of Technology",
        "period": "Sep 2024 to 2027",
        "note": "Final-year LDC thesis · SMU Hack for Cities 2026 and SIT HackRift 2025 finalist"
      },
      {
        "id": "rp",
        "degree": "Diploma in Business Information Systems",
        "school": "Republic Polytechnic",
        "period": "Apr 2019 to May 2022",
        "note": "Internship at Infineon Technologies, Mar to Aug 2021 · Top 20, Google Cloud Hackathon Singapore 2022 · business information systems, web development, and analytics"
      }
    ],
    "certifications": [
      {
        "name": "AI-300",
        "issuer": "Microsoft",
        "year": "2026",
        "note": "Operationalizing machine learning and generative AI solutions."
      },
      {
        "name": "Fundamentals of Deep Learning",
        "issuer": "NVIDIA Deep Learning Institute",
        "year": "2025",
        "note": "Neural-network training and deployment fundamentals."
      },
      {
        "name": "Generative AI with Diffusion Models",
        "issuer": "NVIDIA Deep Learning Institute",
        "year": "2025",
        "note": "Diffusion-model training, sampling, and generation."
      },
      {
        "name": "Exploring Adversarial Machine Learning",
        "issuer": "NVIDIA Deep Learning Institute",
        "year": "2025",
        "note": "Adversarial threats, attacks, and model robustness."
      }
    ],
    "volunteering": "Special Olympics sports volunteer, SIT Magical Hearts member since 2024 and president through 2025, reaching more than 500 beneficiaries across outreach programmes."
  },
  "projects": [
    {
      "id": "field-vision-counting",
      "kind": "project",
      "title": "Counting each object once in field video",
      "tier": "featured",
      "domain": "cv",
      "year": "2026",
      "role": "Applied AI Engineer Intern, then AI Researcher · Louis Dreyfus Company",
      "summary": "Built a YOLO and BoT-SORT pipeline that counts each object once in field video, deployed on Azure. Traced over-counting to duplicate tracks, not detector error, which cancelled a planned retrain.",
      "proof": "A gated merge across camera passes cut over-counting at the hardest site by about three quarters · every count carries a ±2 range",
      "tech": [
        "YOLO",
        "BoT-SORT",
        "Azure"
      ],
      "links": [
        {
          "label": "Read the full story",
          "url": "https://zulfaqarhafez.com/experience#story-vision"
        }
      ],
      "case_file": null,
      "resume_blocks": []
    },
    {
      "id": "churp",
      "kind": "project",
      "title": "Churp",
      "tier": "current",
      "domain": "civic",
      "year": "2025",
      "role": "Product Lead · People's Association",
      "summary": "A civic allotment-garden balloting platform taken from community-hackathon concept to a pilot launch in Tengah with a nine-volunteer team.",
      "proof": "Live at churp.sg: 300 plots, 60+ residents onboarded, 6 zones (Oct 2026) · Singpass login · Sparks-funded pilot",
      "tech": [
        "Singpass OIDC",
        "Myinfo",
        "FAPI 2.0",
        "VAPT"
      ],
      "links": [
        {
          "label": "Live",
          "url": "https://churp.sg"
        }
      ],
      "case_file": null,
      "resume_blocks": []
    },
    {
      "id": "guidemesg",
      "kind": "project",
      "title": "GuideMeSG",
      "tier": "current",
      "domain": "civic",
      "year": "2025",
      "role": "Lead Developer",
      "summary": "Accessible public-transport navigation designed to support independent travel for persons with intellectual disabilities using Singapore transport data.",
      "proof": "Live demo · 50 m off-route caregiver alerts · 3-second realtime",
      "tech": [
        "Next.js",
        "TypeScript",
        "Supabase",
        "LTA DataMall"
      ],
      "links": [
        {
          "label": "Live",
          "url": "https://guide-me-sg-r22y.vercel.app/"
        },
        {
          "label": "Code",
          "url": "https://github.com/ZulfaqarHafez/GuideMeSG"
        }
      ],
      "case_file": "https://zulfaqarhafez.com/work/guidemesg",
      "resume_blocks": [
        "guidemesg.navigation"
      ]
    },
    {
      "id": "ppe-compliance",
      "kind": "project",
      "title": "PPE Compliance Dashboard",
      "tier": "archive",
      "domain": "cv",
      "year": "2025",
      "role": "System architecture and full-stack",
      "summary": "Live helmet and PPE validation combining YOLOv8 detections with pose-aware MediaPipe safety checks.",
      "proof": "Held-out test mAP50 0.47 on 255 images (validation during training 0.62 to 0.64) · runs in your browser",
      "tech": [
        "YOLOv8",
        "MediaPipe",
        "FastAPI"
      ],
      "links": [
        {
          "label": "Code",
          "url": "https://github.com/ZulfaqarHafez/AAI3001_Deep_Learning"
        },
        {
          "label": "Demo",
          "url": "https://youtu.be/0caldjkLU7g"
        }
      ],
      "case_file": "https://zulfaqarhafez.com/work/ppe-compliance",
      "resume_blocks": [
        "ppe-compliance.validation",
        "ppe-compliance.onnx"
      ]
    },
    {
      "id": "helplah",
      "kind": "project",
      "title": "HelpLah.AI",
      "tier": "archive",
      "domain": "civic",
      "year": "2025",
      "role": "Team of three at Hack n Roll 2025",
      "summary": "A bilingual (English and Mandarin) chatbot built at Hack n Roll 2025 that offers empathetic support to people facing loneliness and reads its replies aloud.",
      "proof": "Llama-2-7B-chat on a Colab GPU behind a Flask app · spoken replies with Google Text-to-Speech",
      "tech": [
        "Flask",
        "Llama 2",
        "gTTS"
      ],
      "links": [
        {
          "label": "Code",
          "url": "https://github.com/ZulfaqarHafez/HelpLah.AI"
        }
      ],
      "case_file": null,
      "resume_blocks": [
        "helplah.triage"
      ]
    },
    {
      "id": "claimlens",
      "kind": "project",
      "title": "ClaimLens",
      "tier": "archive",
      "domain": "research",
      "year": "2026",
      "role": "ML Engineer",
      "summary": "A fine-tuned DeBERTa-v3 model that classifies whether evidence supports, refutes, or remains neutral toward a claim, with open weights.",
      "proof": "Seven LangGraph agents · 65.8% accuracy on 3,000 VitaminC test pairs against 59.4% for same-size zero-shot NLI",
      "tech": [
        "PyTorch",
        "Transformers",
        "DeBERTa-v3"
      ],
      "links": [
        {
          "label": "Model",
          "url": "https://huggingface.co/Zulfhagez"
        },
        {
          "label": "Code",
          "url": "https://github.com/ZulfaqarHafez/AAI3008_ClaimLens"
        }
      ],
      "case_file": "https://zulfaqarhafez.com/work/claimlens",
      "resume_blocks": [
        "claimlens.model"
      ]
    },
    {
      "id": "eduquery",
      "kind": "project",
      "title": "EduQuery SG",
      "tier": "archive",
      "domain": "systems",
      "year": "2025",
      "role": "Full Stack Developer",
      "summary": "Unified search and analytics across Singapore education data, backed by PostgreSQL and MongoDB.",
      "proof": "3NF PostgreSQL + MongoDB · 25+ filter fields · 79 commits",
      "tech": [
        "Node.js",
        "MongoDB",
        "PostgreSQL"
      ],
      "links": [
        {
          "label": "Code",
          "url": "https://github.com/ZulfaqarHafez/INF2003_EduQuery"
        },
        {
          "label": "Demo",
          "url": "https://youtu.be/Wo4YhykGx-8"
        }
      ],
      "case_file": "https://zulfaqarhafez.com/work/eduquery",
      "resume_blocks": [
        "eduquery.search"
      ]
    },
    {
      "id": "fairwork",
      "kind": "project",
      "title": "FairWork Contract",
      "tier": "archive",
      "domain": "civic",
      "year": "2025",
      "role": "Frontend Engineer",
      "summary": "Payslip translation support for foreign workers who need clearer employment information in their own language.",
      "proof": "Multilingual document explanation workflow",
      "tech": [
        "Next.js",
        "Gemini",
        "FastAPI"
      ],
      "links": [
        {
          "label": "Live",
          "url": "https://fair-work-contract.vercel.app/"
        },
        {
          "label": "Code",
          "url": "https://github.com/KevanSoon/FairWork-Contract"
        }
      ],
      "case_file": null,
      "resume_blocks": [
        "fairwork.frontend"
      ]
    },
    {
      "id": "tracerazor",
      "kind": "experiment",
      "title": "TraceRazor",
      "tier": "lab",
      "domain": "systems",
      "year": "2026",
      "role": "Built by Zulfaqar Hafez",
      "summary": "I built a Rust auditor that accounts for wasted tokens in AI-agent traces and produces signed efficiency receipts.",
      "proof": "PyPI package, 7 releases · 111 test files, CI on every push · Ed25519-signed receipts",
      "tech": [
        "Rust",
        "Python",
        "Ed25519"
      ],
      "links": [
        {
          "label": "Repository",
          "url": "https://github.com/ZulfaqarHafez/TraceRazor"
        }
      ],
      "case_file": "https://zulfaqarhafez.com/work/tracerazor",
      "stage": "Open-source tool, 185 commits",
      "resume_blocks": [
        "tracerazor.auditor"
      ]
    },
    {
      "id": "assay",
      "kind": "experiment",
      "title": "Assay",
      "tier": "lab",
      "domain": "research",
      "year": "2026",
      "role": "Built by Zulfaqar Hafez",
      "summary": "I built Assay to probe an agent with adversarial tasks before anyone treats its guardrails as reliable.",
      "proof": "20+ probes across six failure categories · verdicts gated at pass^k · 28 API test files",
      "tech": [
        "FastAPI",
        "Next.js",
        "Sandboxing"
      ],
      "links": [
        {
          "label": "Repository",
          "url": "https://github.com/ZulfaqarHafez/Assay"
        }
      ],
      "case_file": "https://zulfaqarhafez.com/work/assay",
      "stage": "Agent-safety tool, 196 commits",
      "resume_blocks": [
        "assay.probes"
      ]
    },
    {
      "id": "agenticpdf",
      "kind": "experiment",
      "title": "AgenticPDF",
      "tier": "lab",
      "domain": "civic",
      "year": "2026",
      "role": "Built by Zulfaqar Hafez",
      "summary": "I built a local-first document workbench where search, reranking, and citations remain inspectable.",
      "proof": "1,007 invoices · hybrid dense + BM25 with cross-encoder rerank · offline on ONNX",
      "tech": [
        "Next.js",
        "ONNX",
        "SQLite"
      ],
      "links": [
        {
          "label": "Repository",
          "url": "https://github.com/ZulfaqarHafez/AgenticPDF"
        }
      ],
      "case_file": "https://zulfaqarhafez.com/work/agenticpdf",
      "stage": "Local-first prototype",
      "resume_blocks": [
        "agenticpdf.workbench"
      ]
    },
    {
      "id": "osciwriting",
      "kind": "experiment",
      "title": "OsciWriting",
      "tier": "lab",
      "domain": "research",
      "year": "2026",
      "role": "Built by Zulfaqar Hafez",
      "summary": "I designed and ran a 50,000-prompt measurement study to test when LLM response caching is actually worthwhile, and published the Abandon decision.",
      "proof": "Pre-registered · N = 50,000 · substitutability 12.8 to 15.3 percent against a 70 percent bar · decision: Abandon",
      "tech": [
        "Python",
        "UMAP",
        "HDBSCAN"
      ],
      "links": [
        {
          "label": "Repository",
          "url": "https://github.com/ZulfaqarHafez/OsciWriting"
        }
      ],
      "case_file": "https://zulfaqarhafez.com/work/osciwriting",
      "stage": "Measurement study, decided",
      "resume_blocks": [
        "osciwriting.study"
      ]
    },
    {
      "id": "portfolio-mcp",
      "kind": "experiment",
      "title": "Portfolio MCP server",
      "tier": "lab",
      "domain": "agent",
      "year": "2026",
      "role": "Built by Zulfaqar Hafez",
      "summary": "I built an MCP server into this site so agents can read my work and build résumés only from blocks I approved; a job posting can steer the selection but never adds a word.",
      "proof": "18 tools · skills with their proof · approved-block résumés · owner-only application tracker",
      "tech": [
        "TypeScript",
        "MCP",
        "Vercel Functions"
      ],
      "links": [
        {
          "label": "How agents connect",
          "url": "https://zulfaqarhafez.com/resumes#agents"
        }
      ],
      "case_file": null,
      "stage": "Live on this site",
      "resume_blocks": []
    }
  ],
  "skills": [
    {
      "id": "agents",
      "name": "Agents and LLM systems",
      "url": "https://zulfaqarhafez.com/skills#skills-agents",
      "skills": [
        {
          "id": "mcp",
          "name": "MCP servers and tool calling",
          "claim": "An MCP server on this site serves my profile, projects, skills and résumé blocks to agents; TraceRazor serves its audits over stdio MCP.",
          "evidence": [
            {
              "tier": "try",
              "label": "Try it: call my MCP server from the page",
              "url": "https://zulfaqarhafez.com/work/this-site#case-try",
              "note": "Pick an open tool, send it to /api/mcp and read the real JSON-RPC request and response."
            },
            {
              "tier": "try",
              "label": "Try it: connect my MCP server",
              "url": "https://zulfaqarhafez.com/resumes#agents",
              "note": "The live Streamable HTTP endpoint at /api/mcp, with the claude mcp add command to connect it."
            },
            {
              "tier": "check",
              "label": "Check it: TraceRazor repository",
              "url": "https://github.com/ZulfaqarHafez/TraceRazor",
              "note": "The same report is served over the CLI, a stdio MCP server, a REST and WebSocket server and a GitHub Action."
            }
          ]
        },
        {
          "id": "langgraph",
          "name": "LangGraph agent pipelines",
          "claim": "Seven agents in a LangGraph state machine with a retry loop decompose, search, scrape and verify each claim in ClaimLens.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: the seven-agent pipeline figure",
              "url": "https://zulfaqarhafez.com/work/claimlens#case-figure",
              "note": "One claim travels through seven agents; the verifier scores every evidence piece three ways."
            },
            {
              "tier": "check",
              "label": "Check it: ClaimLens repository",
              "url": "https://github.com/ZulfaqarHafez/AAI3008_ClaimLens",
              "note": "LangGraph 0.2+ state machine with a retry loop. Team of five; my part is as on my résumé."
            }
          ]
        },
        {
          "id": "langchain",
          "name": "LangChain and the OpenAI SDK",
          "claim": "GPT-4o-mini agents on LangChain and the OpenAI SDK split text into atomic claims, write search queries and score relevance in ClaimLens.",
          "evidence": [
            {
              "tier": "check",
              "label": "Check it: ClaimLens repository",
              "url": "https://github.com/ZulfaqarHafez/AAI3008_ClaimLens",
              "note": "Stack: LangChain and OpenAI SDK (GPT-4o-mini agents)."
            }
          ]
        },
        {
          "id": "trace-auditing",
          "name": "Agent trace auditing",
          "claim": "TraceRazor, the Rust auditor I built, names the avoidable work in an agent trace and calls nothing a saving until the same task is rerun and still passes.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: the sample trace viewer",
              "url": "https://zulfaqarhafez.com/work/tracerazor#case-try",
              "note": "Each step of the bundled trace with its tokens, the steps the audit flags and why, and the signals behind TAS 83.1, read from the stored audit JSON."
            },
            {
              "tier": "see",
              "label": "See it: pip install tracerazor, run on the sample",
              "url": "https://zulfaqarhafez.com/demos/tracerazor/pip-install-transcript.txt",
              "note": "The terminal transcript: tracerazor 1.1.0 from PyPI auditing the bundled trace, matching the stored report."
            },
            {
              "tier": "check",
              "label": "Check it: the measured case study",
              "url": "https://github.com/ZulfaqarHafez/TraceRazor/blob/main/docs/case_study.md",
              "note": "12 paired live runs with seeded bootstrap CIs."
            }
          ]
        },
        {
          "id": "guardrails",
          "name": "Adversarial guardrail testing",
          "claim": "Assay fires 20 or more adversarial probes across six failure categories at an agent in a sandbox that never executes, and a tripwire catches the forbidden call.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: a 21-second recording of Assay",
              "url": "https://zulfaqarhafez.com/work/assay#case-demo",
              "note": "The web app in its deterministic demo mode: 20 probes, verdict HOLD."
            },
            {
              "tier": "check",
              "label": "Check it: Assay repository",
              "url": "https://github.com/ZulfaqarHafez/Assay",
              "note": "196 commits, 28 API test files, CI with a secret scan and pip-audit."
            }
          ]
        },
        {
          "id": "fine-tuning",
          "name": "Fine-tuning transformers in PyTorch",
          "claim": "Fine-tuned a 184.4M-parameter DeBERTa-v3 NLI model for ClaimLens and published the weights on Hugging Face.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: the model judging 16 real pairs",
              "url": "https://zulfaqarhafez.com/work/claimlens#case-see",
              "note": "Its recorded probabilities on VitaminC test pairs, and its confusion matrix over all 3,000."
            },
            {
              "tier": "check",
              "label": "Check it: the model on Hugging Face",
              "url": "https://huggingface.co/Zulfhagez/claimlens-deberta-v3-nli",
              "note": "Zulfhagez/claimlens-deberta-v3-nli, safetensors."
            },
            {
              "tier": "check",
              "label": "Check it: ClaimLens evaluation write-up",
              "url": "https://github.com/ZulfaqarHafez/AAI3008_ClaimLens/blob/eval-2026-11/eval/README.md",
              "note": "65.8 percent accuracy on 3,000 VitaminC test pairs, 95 percent CI 64.0 to 67.5."
            }
          ]
        }
      ]
    },
    {
      "id": "evaluation",
      "name": "Evaluation",
      "url": "https://zulfaqarhafez.com/skills#skills-evaluation",
      "skills": [
        {
          "id": "held-out",
          "name": "Held-out evaluation and error analysis",
          "claim": "Measured the deployed PPE detector on 255 held-out images (mAP50 0.468, not the 0.62 to 0.64 from validation) and traced 44 percent of its misses to the 0.5 threshold.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: the per-class results table",
              "url": "https://zulfaqarhafez.com/work/ppe-compliance#case-results",
              "note": "AP50 and recall at 0.5 for six classes, run on 11 Nov 2026."
            },
            {
              "tier": "see",
              "label": "See it: where the PPE model misses",
              "url": "https://zulfaqarhafez.com/work/ppe-compliance#case-failures",
              "note": "Misses and false alarms per class at 0.5, and the first cause of each of the 872 misses."
            },
            {
              "tier": "check",
              "label": "Check it: PPE test-set evaluation",
              "url": "https://github.com/ZulfaqarHafez/AAI3001_Deep_Learning/blob/eval-2026-11/eval/README.md",
              "note": "AAI3001 eval/README.md and eval/results, branch eval-2026-11."
            }
          ]
        },
        {
          "id": "baselines",
          "name": "Benchmarks against baselines",
          "claim": "Measured the ClaimLens model at 65.8 percent against 59.4 percent for a zero-shot model of the same size, and the evaluation found a label swap in the app code, now fixed.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: where its 3,000 answers went",
              "url": "https://zulfaqarhafez.com/work/claimlens#case-see",
              "note": "Confusion matrix: 1,173 NEI answers against 404 true NEI pairs."
            },
            {
              "tier": "check",
              "label": "Check it: ClaimLens evaluation write-up",
              "url": "https://github.com/ZulfaqarHafez/AAI3008_ClaimLens/blob/eval-2026-11/eval/README.md",
              "note": "Paired 95 percent CI for the gain: plus 4.5 to plus 8.0 points."
            },
            {
              "tier": "check",
              "label": "Check it: my note on measuring it",
              "url": "https://zulfaqarhafez.com/notes/my-model-had-no-accuracy-number",
              "note": "How the measurement was run and what it found."
            }
          ]
        },
        {
          "id": "pass-k",
          "name": "Agent evaluation at pass^k",
          "claim": "Assay certifies an agent only when every held-out rerun clears the bar: one CLI run scored a mean of 0.800 against a 0.800 threshold and still came back Do not ship.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: a replay of the recorded run",
              "url": "https://zulfaqarhafez.com/work/assay#case-try",
              "note": "The proof bundle of the HR screener run, probe by probe: grades per trial, the pass^k gate per category and the recorded verdict."
            },
            {
              "tier": "check",
              "label": "Check it: the CLI verdict file",
              "url": "https://zulfaqarhafez.com/demos/assay/summary.md",
              "note": "Deterministic run of the hardened HR screener against the hr-v1 pack at k = 2."
            },
            {
              "tier": "check",
              "label": "Check it: my note on why one pass is not enough",
              "url": "https://zulfaqarhafez.com/notes/why-one-pass-never-certifies-an-agent",
              "note": "The arithmetic behind the pass^k gate."
            }
          ]
        },
        {
          "id": "reruns",
          "name": "Paired reruns with bootstrap CIs",
          "claim": "My first TraceRazor fix raised token use by 5.6 percent on 12 live runs; I published that, rewrote the fix, and the second round measured 0.7 percent fewer tokens.",
          "evidence": [
            {
              "tier": "check",
              "label": "Check it: the measured case study",
              "url": "https://github.com/ZulfaqarHafez/TraceRazor/blob/main/docs/case_study.md",
              "note": "Seeded 10,000-resample bootstrap CIs, round 1 and round 2."
            },
            {
              "tier": "check",
              "label": "Check it: my note on the fix that cost tokens",
              "url": "https://zulfaqarhafez.com/notes/the-fix-that-cost-tokens",
              "note": "The negative result and the rewrite."
            }
          ]
        },
        {
          "id": "pre-registered",
          "name": "Pre-registered studies with an LLM judge",
          "claim": "A 50,000-record study with its gate fixed before the run: judged substitutability peaked at 12.8 to 15.3 percent against a 70 percent bar, so the decision was Abandon.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: the H5 result against the 70 percent bar",
              "url": "https://zulfaqarhafez.com/work/osciwriting#case-see",
              "note": "Acceptability per cosine band, subject against control, with the data table."
            },
            {
              "tier": "check",
              "label": "Check it: OsciWriting findings",
              "url": "https://github.com/ZulfaqarHafez/OsciWriting/blob/main/docs/findings.md",
              "note": "docs/findings.md, recorded 20 May 2026."
            },
            {
              "tier": "check",
              "label": "Check it: the PRD, locked before the run",
              "url": "https://github.com/ZulfaqarHafez/OsciWriting/blob/main/PRD.md",
              "note": "PRD v2 committed 19 May 2026, before the decision run."
            }
          ]
        },
        {
          "id": "leakage",
          "name": "Leakage checks on test splits",
          "claim": "Found 40 PPE test images whose filenames also appear in train and measured the score without them: mAP50 0.462 against 0.468.",
          "evidence": [
            {
              "tier": "check",
              "label": "Check it: PPE test-set evaluation",
              "url": "https://github.com/ZulfaqarHafez/AAI3001_Deep_Learning/blob/eval-2026-11/eval/README.md",
              "note": "AAI3001 eval/README.md, branch eval-2026-11."
            }
          ]
        }
      ]
    },
    {
      "id": "vision",
      "name": "Computer vision",
      "url": "https://zulfaqarhafez.com/skills#skills-vision",
      "skills": [
        {
          "id": "yolo",
          "name": "Object detection with YOLO",
          "claim": "A YOLOv8 PPE detector served through FastAPI, with a compressed copy that runs in your browser; at Louis Dreyfus Company, YOLO detection of objects in field video.",
          "evidence": [
            {
              "tier": "try",
              "label": "Try it: PPE detector in your browser",
              "url": "https://zulfaqarhafez.com/work/ppe-compliance#case-try",
              "note": "The deployed detector at 320 pixels with 8-bit weights: one click runs it on a held-out test image, or on your own photo, which never leaves the tab."
            },
            {
              "tier": "see",
              "label": "See it: the PPE dashboard screenshot",
              "url": "https://zulfaqarhafez.com/work/ppe-compliance#case-screen",
              "note": "Live camera detection with helmet and vest checks and the compliance log."
            },
            {
              "tier": "check",
              "label": "Check it: PPE repository",
              "url": "https://github.com/ZulfaqarHafez/AAI3001_Deep_Learning",
              "note": "System architecture and full stack were my part; teammates trained the models."
            }
          ]
        },
        {
          "id": "tracking",
          "name": "Multi-object tracking (BoT-SORT)",
          "claim": "Built a YOLO and BoT-SORT pipeline that counts each object once in field video, and traced over-counting to duplicate tracks, not detector error.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: the counting pipeline on Experience",
              "url": "https://zulfaqarhafez.com/experience#story-vision-figure",
              "note": "The public description of the work; the code and data are under NDA."
            },
            {
              "tier": "try",
              "label": "Try it: the pond walkthrough, synthetic",
              "url": "https://zulfaqarhafez.com/#pond-walkthrough",
              "note": "A synthetic pond with the shape of the work and none of a client's data, in five steps: detect, track, a duplicate ID, track-linking, and a count with a range."
            },
            {
              "tier": "see",
              "label": "See it: over-count with and without track-linking, synthetic",
              "url": "https://zulfaqarhafez.com/#pond-before-after",
              "note": "Thirty seeded synthetic ponds counted by the pond's own simulation code, with the script that reproduces them; not results from the employer's work."
            }
          ]
        },
        {
          "id": "pose",
          "name": "Pose estimation (MediaPipe)",
          "claim": "MediaPipe's 33 pose landmarks confirm that each detected PPE item sits at the right body location before it counts.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: the PPE demo video",
              "url": "https://youtu.be/0caldjkLU7g",
              "note": "The team's walkthrough of the app with the skeleton overlay."
            },
            {
              "tier": "see",
              "label": "See it: the detect-then-prove-it-is-worn figure",
              "url": "https://zulfaqarhafez.com/work/ppe-compliance#case-figure",
              "note": "Detections, pose landmarks and the Dual Validation Engine."
            },
            {
              "tier": "check",
              "label": "Check it: PPE repository",
              "url": "https://github.com/ZulfaqarHafez/AAI3001_Deep_Learning",
              "note": "MediaPipe Pose in the FastAPI backend."
            }
          ]
        },
        {
          "id": "opencv",
          "name": "OpenCV",
          "claim": "Part of the PPE compliance backend, alongside FastAPI, Ultralytics YOLOv8 and MediaPipe.",
          "evidence": [
            {
              "tier": "check",
              "label": "Check it: PPE repository",
              "url": "https://github.com/ZulfaqarHafez/AAI3001_Deep_Learning",
              "note": "Listed in the stack in the README."
            }
          ]
        },
        {
          "id": "grad-cam",
          "name": "Grad-CAM",
          "claim": "Used with the ResNet-18 helmet classifier in the PPE project's first phase, which reached 92.22 percent test accuracy.",
          "evidence": [
            {
              "tier": "check",
              "label": "Check it: PPE repository",
              "url": "https://github.com/ZulfaqarHafez/AAI3001_Deep_Learning",
              "note": "README, Phase 1: ResNet-18 and Grad-CAM."
            }
          ]
        }
      ]
    },
    {
      "id": "retrieval",
      "name": "RAG and retrieval",
      "url": "https://zulfaqarhafez.com/skills#skills-retrieval",
      "skills": [
        {
          "id": "hybrid-retrieval",
          "name": "Hybrid retrieval with reranking",
          "claim": "AgenticPDF routes a query by document summaries, fuses dense and BM25 scores with reciprocal-rank fusion, and reranks with a cross-encoder, all on one machine.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: the retrieval traces",
              "url": "https://zulfaqarhafez.com/work/agenticpdf#case-traces",
              "note": "16 labelled questions: every chunk returned, with its dense, BM25, fused and rerank scores."
            },
            {
              "tier": "see",
              "label": "See it: the two-stage retrieval figure",
              "url": "https://zulfaqarhafez.com/work/agenticpdf#case-figure",
              "note": "Route by summary, fuse dense and BM25, rerank."
            },
            {
              "tier": "check",
              "label": "Check it: AgenticPDF repository",
              "url": "https://github.com/ZulfaqarHafez/AgenticPDF",
              "note": "1,007 invoices and 3 papers, roughly 1k documents and 4k vectors."
            }
          ]
        },
        {
          "id": "on-device-embeddings",
          "name": "On-device embeddings and reranking",
          "claim": "bge-small-en-v1.5 embeddings and an ms-marco-MiniLM cross-encoder run on device through transformers.js, with no API key needed in offline mode.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: recall at k",
              "url": "https://zulfaqarhafez.com/work/agenticpdf#case-results",
              "note": "Answer passage in the top 8 for 11 of 16 questions, run on CPU with no API key."
            },
            {
              "tier": "check",
              "label": "Check it: AgenticPDF repository",
              "url": "https://github.com/ZulfaqarHafez/AgenticPDF",
              "note": "Node tests cover chunking, reciprocal-rank fusion and vector cache invalidation."
            }
          ]
        },
        {
          "id": "evidence-retrieval",
          "name": "Web evidence retrieval",
          "claim": "ClaimLens writes 2 to 5 targeted queries per claim, scrapes up to 5 at once, and keeps the top 5 pieces by relevance before the verifier votes.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: the seven-agent pipeline figure",
              "url": "https://zulfaqarhafez.com/work/claimlens#case-figure",
              "note": "Search Architect and Scraper agents feed the verifier."
            },
            {
              "tier": "check",
              "label": "Check it: ClaimLens repository",
              "url": "https://github.com/ZulfaqarHafez/AAI3008_ClaimLens",
              "note": "Tavily or SerpAPI, deduplicated by URL."
            }
          ]
        },
        {
          "id": "embeddings-clustering",
          "name": "Embeddings, UMAP and HDBSCAN",
          "claim": "OsciWriting embeds prompts with all-MiniLM-L6-v2 and clusters them with UMAP and HDBSCAN to test whether a semantic cache could serve them.",
          "evidence": [
            {
              "tier": "check",
              "label": "Check it: OsciWriting repository",
              "url": "https://github.com/ZulfaqarHafez/OsciWriting",
              "note": "A 36-cell clustering sweep with a degeneracy guard."
            }
          ]
        }
      ]
    },
    {
      "id": "backend",
      "name": "Backend and full stack",
      "url": "https://zulfaqarhafez.com/skills#skills-backend",
      "skills": [
        {
          "id": "nextjs",
          "name": "Next.js, React and TypeScript",
          "claim": "GuideMeSG streams a traveller's location to a caregiver's map, and the résumé builder on this site composes a résumé from approved blocks in your browser.",
          "evidence": [
            {
              "tier": "try",
              "label": "Try it: GuideMeSG, live",
              "url": "https://guide-me-sg-r22y.vercel.app",
              "note": "Lead developer in a team of five; submitted to HackRift 2025."
            },
            {
              "tier": "try",
              "label": "Try it: the résumé builder on this site",
              "url": "https://zulfaqarhafez.com/resumes#resume-build-title",
              "note": "Pick blocks, watch it fit the page budget and run the check."
            },
            {
              "tier": "see",
              "label": "See it: a recording and screenshots of GuideMeSG",
              "url": "https://zulfaqarhafez.com/work/guidemesg#case-captures",
              "note": "The live app captured on 11 Nov 2026, up to the empty setup form."
            }
          ]
        },
        {
          "id": "typescript-apis",
          "name": "TypeScript APIs and document generation",
          "claim": "The résumé engine and MCP server behind this site are TypeScript on Vercel Functions: résumés are composed only from approved blocks and rendered to PDF, Word and Markdown.",
          "evidence": [
            {
              "tier": "try",
              "label": "Try it: call the résumé tools from the page",
              "url": "https://zulfaqarhafez.com/work/this-site#case-try",
              "note": "get_resume, check_resume and build_tailored_resume answer from /api/mcp in the console."
            },
            {
              "tier": "try",
              "label": "Try it: build a résumé and download the PDF",
              "url": "https://zulfaqarhafez.com/resumes#resume-build-title",
              "note": "The builder composes approved blocks in the browser; the PDF comes from /api/resume."
            },
            {
              "tier": "check",
              "label": "Check it: the engine's code, in excerpts",
              "url": "https://zulfaqarhafez.com/work/this-site#case-code",
              "note": "The block-id check in the spec validator and the fixed PDF dates, read from the source at build time."
            }
          ]
        },
        {
          "id": "prerendering",
          "name": "Server prerendering and build gates",
          "claim": "Every route on this site is rendered to HTML at build time from the same React tree the browser hydrates, and the build fails when a skill's proof link does not resolve.",
          "evidence": [
            {
              "tier": "see",
              "label": "See it: the build and request paths",
              "url": "https://zulfaqarhafez.com/work/this-site#case-figure",
              "note": "The gates in npm run build, in order, and what Vercel serves from dist and api."
            },
            {
              "tier": "check",
              "label": "Check it: the gate's code, in excerpts",
              "url": "https://zulfaqarhafez.com/work/this-site#case-code",
              "note": "check-skills requires each proof link to name a prerendered page and an id in its HTML."
            },
            {
              "tier": "check",
              "label": "Check it: llms.txt, generated from the same data",
              "url": "https://zulfaqarhafez.com/llms.txt",
              "note": "The plain-text guide for agents, projected from the data the pages render."
            }
          ]
        },
        {
          "id": "fastapi",
          "name": "FastAPI services",
          "claim": "The Assay examiner, the PPE compliance backend and the ClaimLens API with server-sent events are FastAPI services.",
          "evidence": [
            {
              "tier": "check",
              "label": "Check it: Assay repository",
              "url": "https://github.com/ZulfaqarHafez/Assay",
              "note": "FastAPI examiner, scoring and persistence; 28 API test files."
            },
            {
              "tier": "check",
              "label": "Check it: PPE repository",
              "url": "https://github.com/ZulfaqarHafez/AAI3001_Deep_Learning",
              "note": "POST /process-image and POST /process-video."
            },
            {
              "tier": "check",
              "label": "Check it: ClaimLens repository",
              "url": "https://github.com/ZulfaqarHafez/AAI3008_ClaimLens",
              "note": "POST /verify, an SSE stream at /verify/stream and async jobs."
            }
          ]
        },
        {
          "id": "supabase",
          "name": "Supabase and PostgreSQL",
          "claim": "Location pushed every 3 seconds over Supabase Realtime in GuideMeSG, and a Third Normal Form PostgreSQL schema on Supabase for EduQuery SG.",
          "evidence": [
            {
              "tier": "try",
              "label": "Try it: GuideMeSG, live",
              "url": "https://guide-me-sg-r22y.vercel.app",
              "note": "Supabase Realtime between the traveller and caregiver."
            },
            {
              "tier": "see",
              "label": "See it: the EduQuery walkthrough video",
              "url": "https://youtu.be/Wo4YhykGx-8",
              "note": "Search, map and analytics in the running app."
            },
            {
              "tier": "check",
              "label": "Check it: EduQuery repository",
              "url": "https://github.com/ZulfaqarHafez/INF2003_EduQuery",
              "note": "3NF schema with 4 junction tables, 79 commits."
            }
          ]
        },
        {
          "id": "sql",
          "name": "SQL analytics and MongoDB",
          "claim": "Six analytics endpoints with CTEs and window functions over PostgreSQL, and user activity logged to MongoDB, behind one Express API.",
          "evidence": [
            {
              "tier": "check",
              "label": "Check it: EduQuery repository",
              "url": "https://github.com/ZulfaqarHafez/INF2003_EduQuery",
              "note": "Full-stack developer on a team project for INF2003 Database Systems."
            }
          ]
        },
        {
          "id": "rust",
          "name": "Rust",
          "claim": "TraceRazor's audit core is Rust, tested by 10 Rust test files, with clippy run with warnings denied on every push.",
          "evidence": [
            {
              "tier": "check",
              "label": "Check it: TraceRazor repository",
              "url": "https://github.com/ZulfaqarHafez/TraceRazor",
              "note": "111 test files (101 Python, 10 Rust), CI on every push."
            }
          ]
        },
        {
          "id": "civic-product",
          "name": "Singpass login in a live civic product",
          "claim": "Churp, the Tengah garden-balloting platform, is live with Singpass login; I led the nine-volunteer team as Product Lead.",
          "evidence": [
            {
              "tier": "try",
              "label": "Try it: churp.sg, live",
              "url": "https://churp.sg",
              "note": "Signing in needs Singpass; the code is not public."
            },
            {
              "tier": "see",
              "label": "See it: Churp public screens and a recording",
              "url": "https://zulfaqarhafez.com/work#projects",
              "note": "Home, the public ballot page and the FAQ, captured on 11 Nov 2026; the logged-in screens are not shown."
            }
          ]
        }
      ]
    },
    {
      "id": "deployment",
      "name": "Deployment and model optimisation",
      "url": "https://zulfaqarhafez.com/skills#skills-deployment",
      "skills": [
        {
          "id": "quantisation",
          "name": "Model quantisation (int8 ONNX)",
          "claim": "Quantised the PPE detector to int8 ONNX, about 4x smaller, with held-out mAP50 0.455 against 0.461 in fp32.",
          "evidence": [
            {
              "tier": "try",
              "label": "Try it: the int8 model in your browser",
              "url": "https://zulfaqarhafez.com/work/ppe-compliance#case-try",
              "note": "This 8-bit, 320-pixel copy scores mAP50 0.41 on the held-out test split, against 0.47 for the full model at 640 pixels."
            },
            {
              "tier": "check",
              "label": "Check it: PPE test-set evaluation",
              "url": "https://github.com/ZulfaqarHafez/AAI3001_Deep_Learning/blob/eval-2026-11/eval/README.md",
              "note": "The export and its accuracy table, branch eval-2026-11."
            }
          ]
        },
        {
          "id": "browser-inference",
          "name": "In-browser inference (ONNX Runtime Web)",
          "claim": "The PPE detector runs on your device with onnxruntime-web: nothing downloads until you ask, and the photo never leaves the tab.",
          "evidence": [
            {
              "tier": "try",
              "label": "Try it: PPE detector in your browser",
              "url": "https://zulfaqarhafez.com/work/ppe-compliance#case-try",
              "note": "An 11.4 MB model plus about 4 MB of runtime."
            }
          ]
        },
        {
          "id": "ci",
          "name": "CI and release automation",
          "claim": "TraceRazor runs cargo fmt, cargo test, clippy, cargo deny and pytest on every push and ships wheels with checksums and SBOMs; Assay ships a GitHub Action that fails a build on a failing verdict.",
          "evidence": [
            {
              "tier": "check",
              "label": "Check it: TraceRazor release v1.2.0",
              "url": "https://github.com/ZulfaqarHafez/TraceRazor/releases/tag/v1.2.0",
              "note": "Five platform wheels, standalone archives, checksums and SBOMs."
            },
            {
              "tier": "check",
              "label": "Check it: the Assay GitHub Action",
              "url": "https://github.com/ZulfaqarHafez/Assay/tree/main/.github/actions/assay",
              "note": "Uploads the scorecard JSON, proof bundle and Markdown summary."
            }
          ]
        },
        {
          "id": "serverless",
          "name": "Serverless deployment",
          "claim": "This site's MCP server and JSON export run as Vercel Functions, and GuideMeSG is deployed on Vercel.",
          "evidence": [
            {
              "tier": "try",
              "label": "Try it: call my MCP server from the page",
              "url": "https://zulfaqarhafez.com/work/this-site#case-try",
              "note": "The live endpoint at /api/mcp, a Vercel Function."
            },
            {
              "tier": "try",
              "label": "Try it: GuideMeSG, live",
              "url": "https://guide-me-sg-r22y.vercel.app",
              "note": "Next.js on Vercel."
            },
            {
              "tier": "see",
              "label": "See it: the request path on Vercel",
              "url": "https://zulfaqarhafez.com/work/this-site#case-figure",
              "note": "Static HTML from dist, and api functions for the MCP server, résumé files and exports."
            }
          ]
        }
      ]
    }
  ],
  "skills_at_work": [
    {
      "id": "azure-ml",
      "name": "Azure ML",
      "claim": "Deployed the field-video counting pipeline on Azure with on-demand GPU inference.",
      "publicly_verifiable": false,
      "described_at": "https://zulfaqarhafez.com/experience#ldc-cv-intern",
      "role": "Applied AI Engineer Intern, Louis Dreyfus Company",
      "note": "Described on the Experience page; the code and data are covered by confidentiality, so there is nothing public to try, see or check."
    },
    {
      "id": "annotation",
      "name": "Dataset annotation and leakage-safe splits",
      "claim": "Led annotation across 7 datasets (10,000+ images) and re-split validation by camera and site to stop leakage.",
      "publicly_verifiable": false,
      "described_at": "https://zulfaqarhafez.com/experience#ldc-cv-intern",
      "role": "Applied AI Engineer Intern, Louis Dreyfus Company",
      "note": "Described on the Experience page; the code and data are covered by confidentiality, so there is nothing public to try, see or check."
    }
  ],
  "build_record": [
    {
      "year": "2025",
      "event": "Sparks x Build for Good Community Hackathon",
      "project": "Churp · Tengah garden balloting",
      "result": "Live pilot",
      "big": true
    },
    {
      "year": "2025",
      "event": "SIT HackRift",
      "project": "GuideMeSG",
      "result": "Finalist",
      "big": false
    },
    {
      "year": "2025",
      "event": "SMU Hack For Cities",
      "project": "GreenMerlion, CV recycling",
      "result": "Finalist",
      "big": false
    },
    {
      "year": "2025",
      "event": "Pan-SEA AI Dev Challenge",
      "project": "Regional AI challenge",
      "result": "Top 100",
      "big": false
    },
    {
      "year": "2022",
      "event": "Google Cloud Hackathon",
      "project": "CareFall Vision, fall detection",
      "result": "Top 20",
      "big": false
    }
  ],
  "resumes": [
    {
      "slug": "highlights",
      "title": "Highlights, one page",
      "description": "My current one-page CV: research, production computer vision, a detector quantised to run in a browser, agentic projects, and the Churp pilot.",
      "page_budget": 1,
      "pages": 1,
      "font_size": 8.75,
      "keywords": [],
      "resume_version": "rv_39d257c36864a78b",
      "urls": {
        "pdf": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-highlights-2026-11.pdf",
        "docx": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-highlights-2026-11.docx",
        "md": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-highlights-2026-11.md"
      },
      "markdown": "# Zulfaqar Hafez\n\n**Applied AI Final-Year Student**\n\n[zulfaqarhafez@gmail.com](mailto:zulfaqarhafez@gmail.com) | [linkedin.com/in/zulfaqar-hafez](https://www.linkedin.com/in/zulfaqar-hafez) | [zulfaqarhafez.com](https://zulfaqarhafez.com) | [github.com/ZulfaqarHafez](https://github.com/ZulfaqarHafez)\n\n## Summary\n\nFinal-year Applied AI student, AI Researcher at Louis Dreyfus Company and $20,000 Sparks Fund recipient, focused on production computer vision and agentic AI. Deployed field-video counting on Azure GPU inference, and quantised a PPE detector to int8 ONNX (held-out mAP50 0.455 vs 0.461 fp32) small enough to run in a browser tab.\n\n## Technical Skills\n\n- **Agentic AI & LLMs:** LangGraph, LangChain, RAG, MCP servers, agent evaluation and trace auditing, NLI fine-tuning (DeBERTa-v3)\n- **Computer Vision:** YOLO (Ultralytics), BoT-SORT tracking, OpenCV, MediaPipe, Grad-CAM, ONNX Runtime Web\n- **Engineering:** PyTorch, Azure ML, FastAPI, Next.js, Supabase, Rust, ONNX int8 quantisation, GitHub Actions CI\n- **Certifications:** NVIDIA DLI: Gen AI with Diffusion Models, Adversarial ML, Fundamentals of DL; Microsoft AI-300\n\n## Projects\n\n### Agentic AI Energy Platform\n\n*VoltPulse | SMU Hack For Cities 2026* | Jan - Feb 2026\n\n- Developed VoltPulse SG, an agentic platform using LangGraph to orchestrate specialized agents via intent-based routing, automating SP bill extraction with OpenAI Vision OCR and providing AI-powered consumption diagnosis.\n- Built a RAG-based intelligence system using SeaLion Encoder and pgvector to surface government saving opportunities, linking user consumption data with authorized retailers to maximize $300 Climate Voucher utility.\n\n### Generative Video Pipeline\n\n*Waaah-Comics | Gemini Hackathon* | Jan 2026\n\n- Engineered a generative pipeline using Stable Video Diffusion (SVD) to transform static comic panels into animation.\n- Fine-tuned SVD using Lightning LoRA, significantly reducing trainable parameters while maintaining high temporal consistency across 24 panel layouts.\n\n**PPE Compliance Dashboard | System architecture and full-stack** | 2025\n\n- Quantised the detector to int8 ONNX, 44.8 MB to 11.5 MB at held-out mAP50 0.455 vs 0.461 fp32; a 320 px int8 copy runs in the browser.\n\n## Experience\n\n### Louis Dreyfus Company\n\n*AI Researcher (Contract)* | Aug 2026 - Present\n\n- Hand-audited 37 detections and traced persistent over-counting to duplicate tracks, not detector error, which cancelled a planned detector retrain.\n- Tested and logged 8 duplicate-merging methods; the gated merge across camera passes cut over-counting at the hardest site by about three quarters.\n- Thesis, CountOnce (Sep 2026 to Mar 2027): designing a model that makes one calibrated decision per track piece and abstains when unsure, to test whether a count range is right as often as it claims.\n\n*Applied AI Engineer (Computer Vision) Intern* | Mar 2026 - Aug 2026\n\n- Built a YOLO and BoT-SORT pipeline that counts each object once in field video (custom track-linking layer, size-aware confidence threshold), tested on 3 benchmark sites and deployed on Azure with on-demand GPU inference.\n- Led annotation across 7 datasets, building a 10,000+ image dataset, then re-split by camera and site to remove leakage that was inflating accuracy.\n\n### People's Association\n\n*AI Intern (RAG & Agentic Systems)* | Aug 2026 - Present\n\n*Product Lead (Citizen Developer)* | Sep 2025 - Aug 2026\n\n- Directed \"Churp\" (churp.sg), a $20,000 Sparks-funded PA allotment garden balloting platform, leading a 9-volunteer team from hackathon concept to a pilot launch in Tengah.\n- Integrated Singpass OIDC (FAPI 2.0) and Myinfo (7 scopes) with a cryptographic equal-chance ballot; took the system through Ensign InfoSecurity VAPT and a full handover to PA ICT (administrator guide, checklists, limitations register).\n\n## Education\n\n### Singapore Institute of Technology (SIT)\n\n*Bachelor of Science (Hons) in Applied Artificial Intelligence* | Sep 2024 - 2027\n\n### Republic Polytechnic (RP)\n\n*Diploma in Business Information Systems* | Apr 2019 - May 2022\n\n## Awards & Activities\n\n- Finalist, SIT HackRift 2025: Developed GuideMeSG navigation app using LTA DataMall APIs.\n- Finalist, SMU Hack for Cities 2026: Built VoltPulse SG, an agentic energy platform with LangGraph routing and vision OCR for SP bills.\n- President, SIT Magical Hearts 2025: Led outreach for 500+ beneficiaries; Featured speaker at SG Cares 2025.\n"
    },
    {
      "slug": "master",
      "title": "Master CV, two pages",
      "description": "Every approved block: all roles, every project and experiment, and the full awards record.",
      "page_budget": 2,
      "pages": 2,
      "font_size": 9.75,
      "keywords": [],
      "resume_version": "rv_f30f2d45a0fcc61b",
      "urls": {
        "pdf": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-master-2026-11.pdf",
        "docx": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-master-2026-11.docx",
        "md": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-master-2026-11.md"
      },
      "markdown": "# Zulfaqar Hafez\n\n**Applied AI Final-Year Student**\n\n[zulfaqarhafez@gmail.com](mailto:zulfaqarhafez@gmail.com) | [linkedin.com/in/zulfaqar-hafez](https://www.linkedin.com/in/zulfaqar-hafez) | [zulfaqarhafez.com](https://zulfaqarhafez.com) | [github.com/ZulfaqarHafez](https://github.com/ZulfaqarHafez)\n\n## Summary\n\nFinal-year Applied AI student, AI Researcher at Louis Dreyfus Company and $20,000 Sparks Fund recipient, focused on production computer vision and agentic AI. Deployed field-video counting on Azure GPU inference, and quantised a PPE detector to int8 ONNX (held-out mAP50 0.455 vs 0.461 fp32) small enough to run in a browser tab.\n\n## Technical Skills\n\n- **Agentic AI & LLMs:** LangGraph, LangChain, RAG, MCP servers, agent evaluation and trace auditing, NLI fine-tuning (DeBERTa-v3)\n- **Computer Vision:** YOLO (Ultralytics), BoT-SORT tracking, OpenCV, MediaPipe, Grad-CAM, ONNX Runtime Web\n- **Engineering:** PyTorch, Azure ML, FastAPI, Next.js, Supabase, Rust, ONNX int8 quantisation, GitHub Actions CI\n- **Certifications:** NVIDIA DLI: Gen AI with Diffusion Models, Adversarial ML, Fundamentals of DL; Microsoft AI-300\n\n## Experience\n\n### Louis Dreyfus Company\n\n*AI Researcher (Contract)* | Aug 2026 - Present\n\n- Hand-audited 37 detections and traced persistent over-counting to duplicate tracks, not detector error, which cancelled a planned detector retrain.\n- Tested and logged 8 duplicate-merging methods; the gated merge across camera passes cut over-counting at the hardest site by about three quarters.\n- Rebuilt the production counter (3-class YOLO26, BoT-SORT, MapAnything 3D, a logistic merge model) so every count carries a ±2 range a reviewer can check.\n- Thesis, CountOnce (Sep 2026 to Mar 2027): designing a model that makes one calibrated decision per track piece and abstains when unsure, to test whether a count range is right as often as it claims.\n\n*Applied AI Engineer (Computer Vision) Intern* | Mar 2026 - Aug 2026\n\n- Built a YOLO and BoT-SORT pipeline that counts each object once in field video (custom track-linking layer, size-aware confidence threshold), tested on 3 benchmark sites and deployed on Azure with on-demand GPU inference.\n- Led annotation across 7 datasets, building a 10,000+ image dataset, then re-split by camera and site to remove leakage that was inflating accuracy.\n- Froze one evaluation protocol and ranked 11 detector checkpoints on it; kept a lower-ranked model as a second detector because it catches objects the leader misses.\n\n### People's Association\n\n*AI Intern (RAG & Agentic Systems)* | Aug 2026 - Present\n\n- Developing retrieval and agentic AI systems for community-facing public-service workflows.\n- Applying orchestration, evaluation, and trace auditing to production use cases.\n\n*Product Lead (Citizen Developer)* | Sep 2025 - Aug 2026\n\n- Directed \"Churp\" (churp.sg), a $20,000 Sparks-funded PA allotment garden balloting platform, leading a 9-volunteer team from hackathon concept to a pilot launch in Tengah.\n- Integrated Singpass OIDC (FAPI 2.0) and Myinfo (7 scopes) with a cryptographic equal-chance ballot; took the system through Ensign InfoSecurity VAPT and a full handover to PA ICT (administrator guide, checklists, limitations register).\n\n## Projects\n\n### Agentic AI Energy Platform\n\n*VoltPulse | SMU Hack For Cities 2026* | Jan - Feb 2026\n\n- Developed VoltPulse SG, an agentic platform using LangGraph to orchestrate specialized agents via intent-based routing, automating SP bill extraction with OpenAI Vision OCR and providing AI-powered consumption diagnosis.\n- Built a RAG-based intelligence system using SeaLion Encoder and pgvector to surface government saving opportunities, linking user consumption data with authorized retailers to maximize $300 Climate Voucher utility.\n\n### Generative Video Pipeline\n\n*Waaah-Comics | Gemini Hackathon* | Jan 2026\n\n- Engineered a generative pipeline using Stable Video Diffusion (SVD) to transform static comic panels into animation.\n- Fine-tuned SVD using Lightning LoRA, significantly reducing trainable parameters while maintaining high temporal consistency across 24 panel layouts.\n\n**TraceRazor | Open-source agent trace auditor** | 2026\n\n- Built a Rust auditor that accounts for wasted tokens in AI-agent traces and produces signed efficiency receipts: 8 efficiency signals, a 0-100 audit score, and Ed25519 receipts.\n\n**Assay | Agent-safety prototype** | 2026\n\n- Built Assay to probe an agent with adversarial tasks before anyone treats its guardrails as reliable, using isolated execution and failure reports (FastAPI, Next.js).\n\n**AgenticPDF | Local-first retrieval prototype** | 2026\n\n- Built a local-first document workbench where search, reranking, and citations remain inspectable, running local ONNX inference with no API key.\n\n**Apologue | Agent workflow framework** | 2026\n\n- Built a markdown-first orchestration framework for planning, adversarial review, and agent handoffs in Claude Code.\n\n**AgenticAgentAgenting | Multi-agent prototype** | 2026\n\n- Prototyped a multi-agent system with LangGraph, then rebuilt it with a Rust (axum) backend: specialists take turns through a circle-junction scheduler and a proof gate decides when a run is done (33 backend tests, 17 Playwright tests).\n\n**OsciWriting | LLM caching measurement study** | 2026\n\n- Designed a 50,000-prompt measurement study to test when LLM response caching is worthwhile, with a pre-registered rubric and clustered analysis (UMAP, HDBSCAN).\n\n**ClaimLens | ML Engineer** | 2026\n\n- Fine-tuned a DeBERTa-v3 model that classifies whether evidence supports, refutes, or remains neutral toward a claim, and published the weights on Hugging Face.\n\n**PPE Compliance Dashboard | System architecture and full-stack** | 2025\n\n- Built live helmet and PPE validation combining YOLOv8 detections with pose-aware MediaPipe safety checks, cross-checking object detection against pose geometry.\n- Quantised the detector to int8 ONNX, 44.8 MB to 11.5 MB at held-out mAP50 0.455 vs 0.461 fp32; a 320 px int8 copy runs in the browser.\n\n**GuideMeSG | Lead Developer, SIT HackRift 2025 finalist** | 2025\n\n- Led development of accessible public-transport navigation that supports independent travel for persons with intellectual disabilities, using Singapore transport data (Next.js, Supabase, LTA DataMall).\n\n**FairWork Contract | Frontend Engineer** | 2025\n\n- Built the Next.js frontend and multilingual interface for payslip translation support for foreign workers who need clearer employment information in their own language.\n\n**HelpLah.AI | Hack n Roll 2025, team of three** | 2025\n\n- Built a bilingual (English and Mandarin) chatbot that offers empathetic support to people facing loneliness: a Flask app calling Llama-2-7B-chat on a Colab GPU, with spoken replies through Google Text-to-Speech.\n\n**EduQuery SG | Full Stack Developer** | 2025\n\n- Built unified search and analytics across Singapore education data, backed by PostgreSQL and MongoDB on Node.js.\n\n## Education\n\n### Singapore Institute of Technology (SIT)\n\n*Bachelor of Science (Hons) in Applied Artificial Intelligence* | Sep 2024 - 2027\n\n### Republic Polytechnic (RP)\n\n*Diploma in Business Information Systems* | Apr 2019 - May 2022\n\n## Awards & Activities\n\n- Finalist, SIT HackRift 2025: Developed GuideMeSG navigation app using LTA DataMall APIs.\n- Finalist, SMU Hack for Cities 2026: Built VoltPulse SG, an agentic energy platform with LangGraph routing and vision OCR for SP bills.\n- Finalist, SMU Hack for Cities 2025: Built GreenMerlion, a ResNet-based computer vision model for automated waste classification.\n- President, SIT Magical Hearts 2025: Led outreach for 500+ beneficiaries; Featured speaker at SG Cares 2025.\n- Top 100, Pan-SEA AI Dev Challenge 2025.\n- Top 20, Google Cloud Hackathon Singapore 2022: CareFall Vision fall detection.\n"
    },
    {
      "slug": "applied-ai-engineer",
      "title": "Applied AI Engineer",
      "description": "Production ML end to end: field computer vision on Azure, agentic RAG, and a funded civic product.",
      "page_budget": 1,
      "pages": 1,
      "font_size": 8.5,
      "keywords": [
        "Machine Learning",
        "Computer Vision",
        "LLM",
        "RAG",
        "Agents",
        "PyTorch",
        "Azure",
        "FastAPI",
        "MLOps",
        "Model validation",
        "Python"
      ],
      "resume_version": "rv_681f5e9bd0b00f28",
      "urls": {
        "pdf": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-applied-ai-engineer-2026-11.pdf",
        "docx": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-applied-ai-engineer-2026-11.docx",
        "md": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-applied-ai-engineer-2026-11.md"
      },
      "markdown": "# Zulfaqar Hafez\n\n**Applied AI Final-Year Student**\n\n[zulfaqarhafez@gmail.com](mailto:zulfaqarhafez@gmail.com) | [linkedin.com/in/zulfaqar-hafez](https://www.linkedin.com/in/zulfaqar-hafez) | [zulfaqarhafez.com](https://zulfaqarhafez.com) | [github.com/ZulfaqarHafez](https://github.com/ZulfaqarHafez)\n\n## Summary\n\nFinal-year Applied AI student, AI Researcher at Louis Dreyfus Company and $20,000 Sparks Fund recipient, focused on production computer vision and agentic AI. Deployed field-video counting on Azure GPU inference, and quantised a PPE detector to int8 ONNX (held-out mAP50 0.455 vs 0.461 fp32) small enough to run in a browser tab.\n\n## Technical Skills\n\n- **Agentic AI & LLMs:** LangGraph, LangChain, RAG, MCP servers, agent evaluation and trace auditing, NLI fine-tuning (DeBERTa-v3)\n- **Computer Vision:** YOLO (Ultralytics), BoT-SORT tracking, OpenCV, MediaPipe, Grad-CAM, ONNX Runtime Web\n- **Engineering:** PyTorch, Azure ML, FastAPI, Next.js, Supabase, Rust, ONNX int8 quantisation, GitHub Actions CI\n- **Certifications:** NVIDIA DLI: Gen AI with Diffusion Models, Adversarial ML, Fundamentals of DL; Microsoft AI-300\n\n## Experience\n\n### Louis Dreyfus Company\n\n*AI Researcher (Contract)* | Aug 2026 - Present\n\n- Hand-audited 37 detections and traced persistent over-counting to duplicate tracks, not detector error, which cancelled a planned detector retrain.\n- Tested and logged 8 duplicate-merging methods; the gated merge across camera passes cut over-counting at the hardest site by about three quarters.\n- Rebuilt the production counter (3-class YOLO26, BoT-SORT, MapAnything 3D, a logistic merge model) so every count carries a ±2 range a reviewer can check.\n- Thesis, CountOnce (Sep 2026 to Mar 2027): designing a model that makes one calibrated decision per track piece and abstains when unsure, to test whether a count range is right as often as it claims.\n\n*Applied AI Engineer (Computer Vision) Intern* | Mar 2026 - Aug 2026\n\n- Built a YOLO and BoT-SORT pipeline that counts each object once in field video (custom track-linking layer, size-aware confidence threshold), tested on 3 benchmark sites and deployed on Azure with on-demand GPU inference.\n- Led annotation across 7 datasets, building a 10,000+ image dataset, then re-split by camera and site to remove leakage that was inflating accuracy.\n- Froze one evaluation protocol and ranked 11 detector checkpoints on it; kept a lower-ranked model as a second detector because it catches objects the leader misses.\n\n### People's Association\n\n*AI Intern (RAG & Agentic Systems)* | Aug 2026 - Present\n\n- Developing retrieval and agentic AI systems for community-facing public-service workflows.\n- Applying orchestration, evaluation, and trace auditing to production use cases.\n\n*Product Lead (Citizen Developer)* | Sep 2025 - Aug 2026\n\n- Directed \"Churp\" (churp.sg), a $20,000 Sparks-funded PA allotment garden balloting platform, leading a 9-volunteer team from hackathon concept to a pilot launch in Tengah.\n- Delivered Singpass OIDC, Myinfo, an equal-chance ballot, VAPT, and PA ICT handover.\n\n## Projects\n\n### Agentic AI Energy Platform\n\n*VoltPulse | SMU Hack For Cities 2026* | Jan - Feb 2026\n\n- Developed VoltPulse SG, an agentic platform using LangGraph to orchestrate specialized agents via intent-based routing, automating SP bill extraction with OpenAI Vision OCR and providing AI-powered consumption diagnosis.\n- Built a RAG-based intelligence system using SeaLion Encoder and pgvector to surface government saving opportunities, linking user consumption data with authorized retailers to maximize $300 Climate Voucher utility.\n\n**TraceRazor | Open-source agent trace auditor** | 2026\n\n- Built a Rust auditor that accounts for wasted tokens in AI-agent traces and produces signed efficiency receipts: 8 efficiency signals, a 0-100 audit score, and Ed25519 receipts.\n\n**PPE Compliance Dashboard | System architecture and full-stack** | 2025\n\n- Quantised the detector to int8 ONNX, 44.8 MB to 11.5 MB at held-out mAP50 0.455 vs 0.461 fp32; a 320 px int8 copy runs in the browser.\n\n## Education\n\n### Singapore Institute of Technology (SIT)\n\n*Bachelor of Science (Hons) in Applied Artificial Intelligence* | Sep 2024 - 2027\n\n### Republic Polytechnic (RP)\n\n*Diploma in Business Information Systems* | Apr 2019 - May 2022\n\n## Awards & Activities\n\n- Finalist, SIT HackRift 2025: Developed GuideMeSG navigation app using LTA DataMall APIs.\n- Finalist, SMU Hack for Cities 2026: Built VoltPulse SG, an agentic energy platform with LangGraph routing and vision OCR for SP bills.\n"
    },
    {
      "slug": "computer-vision-engineer",
      "title": "Computer Vision Engineer",
      "description": "Detection, tracking, and validation on field video, pose-aware safety checks, an int8 detector that runs in a browser, and generative video.",
      "page_budget": 1,
      "pages": 1,
      "font_size": 9.25,
      "keywords": [
        "Computer Vision",
        "Object detection",
        "Tracking",
        "YOLO",
        "BoT-SORT",
        "OpenCV",
        "MediaPipe",
        "Grad-CAM",
        "3D vision",
        "Video",
        "Data annotation",
        "Model validation",
        "Model optimization",
        "ONNX",
        "PyTorch"
      ],
      "resume_version": "rv_4e37df5010001fd2",
      "urls": {
        "pdf": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-computer-vision-engineer-2026-11.pdf",
        "docx": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-computer-vision-engineer-2026-11.docx",
        "md": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-computer-vision-engineer-2026-11.md"
      },
      "markdown": "# Zulfaqar Hafez\n\n**Applied AI Final-Year Student**\n\n[zulfaqarhafez@gmail.com](mailto:zulfaqarhafez@gmail.com) | [linkedin.com/in/zulfaqar-hafez](https://www.linkedin.com/in/zulfaqar-hafez) | [zulfaqarhafez.com](https://zulfaqarhafez.com) | [github.com/ZulfaqarHafez](https://github.com/ZulfaqarHafez)\n\n## Summary\n\nFinal-year Applied AI student, AI Researcher at Louis Dreyfus Company and $20,000 Sparks Fund recipient, focused on production computer vision and agentic AI. Deployed field-video counting on Azure GPU inference, and quantised a PPE detector to int8 ONNX (held-out mAP50 0.455 vs 0.461 fp32) small enough to run in a browser tab.\n\n## Technical Skills\n\n- **Computer Vision:** YOLO (Ultralytics), BoT-SORT tracking, OpenCV, MediaPipe, Grad-CAM, ONNX Runtime Web\n- **Engineering:** PyTorch, Azure ML, FastAPI, Next.js, Supabase, Rust, ONNX int8 quantisation, GitHub Actions CI\n- **Certifications:** NVIDIA DLI: Gen AI with Diffusion Models, Adversarial ML, Fundamentals of DL; Microsoft AI-300\n\n## Experience\n\n### Louis Dreyfus Company\n\n*AI Researcher (Contract)* | Aug 2026 - Present\n\n- Hand-audited 37 detections and traced persistent over-counting to duplicate tracks, not detector error, which cancelled a planned detector retrain.\n- Tested and logged 8 duplicate-merging methods; the gated merge across camera passes cut over-counting at the hardest site by about three quarters.\n- Rebuilt the production counter (3-class YOLO26, BoT-SORT, MapAnything 3D, a logistic merge model) so every count carries a ±2 range a reviewer can check.\n- Thesis, CountOnce (Sep 2026 to Mar 2027): designing a model that makes one calibrated decision per track piece and abstains when unsure, to test whether a count range is right as often as it claims.\n\n*Applied AI Engineer (Computer Vision) Intern* | Mar 2026 - Aug 2026\n\n- Built a YOLO and BoT-SORT pipeline that counts each object once in field video (custom track-linking layer, size-aware confidence threshold), tested on 3 benchmark sites and deployed on Azure with on-demand GPU inference.\n- Led annotation across 7 datasets, building a 10,000+ image dataset, then re-split by camera and site to remove leakage that was inflating accuracy.\n- Froze one evaluation protocol and ranked 11 detector checkpoints on it; kept a lower-ranked model as a second detector because it catches objects the leader misses.\n\n### People's Association\n\n*Product Lead (Citizen Developer)* | Sep 2025 - Aug 2026\n\n- Directed \"Churp\" (churp.sg), a $20,000 Sparks-funded PA allotment garden balloting platform, leading a 9-volunteer team from hackathon concept to a pilot launch in Tengah.\n\n## Projects\n\n### Generative Video Pipeline\n\n*Waaah-Comics | Gemini Hackathon* | Jan 2026\n\n- Engineered a generative pipeline using Stable Video Diffusion (SVD) to transform static comic panels into animation.\n- Fine-tuned SVD using Lightning LoRA, significantly reducing trainable parameters while maintaining high temporal consistency across 24 panel layouts.\n\n**ClaimLens | ML Engineer** | 2026\n\n- Fine-tuned a DeBERTa-v3 model that classifies whether evidence supports, refutes, or remains neutral toward a claim, and published the weights on Hugging Face.\n\n**PPE Compliance Dashboard | System architecture and full-stack** | 2025\n\n- Built live helmet and PPE validation combining YOLOv8 detections with pose-aware MediaPipe safety checks, cross-checking object detection against pose geometry.\n- Quantised the detector to int8 ONNX, 44.8 MB to 11.5 MB at held-out mAP50 0.455 vs 0.461 fp32; a 320 px int8 copy runs in the browser.\n\n## Education\n\n### Singapore Institute of Technology (SIT)\n\n*Bachelor of Science (Hons) in Applied Artificial Intelligence* | Sep 2024 - 2027\n\n### Republic Polytechnic (RP)\n\n*Diploma in Business Information Systems* | Apr 2019 - May 2022\n\n## Awards & Activities\n\n- Finalist, SMU Hack for Cities 2025: Built GreenMerlion, a ResNet-based computer vision model for automated waste classification.\n- Top 20, Google Cloud Hackathon Singapore 2022: CareFall Vision fall detection.\n"
    },
    {
      "slug": "llm-agentic-engineer",
      "title": "LLM and Agentic Systems Engineer",
      "description": "Agent orchestration, RAG, evaluation, and guardrail testing, from hackathon builds to public-service work.",
      "page_budget": 1,
      "pages": 1,
      "font_size": 9.5,
      "keywords": [
        "LLM",
        "Agents",
        "RAG",
        "LangGraph",
        "LangChain",
        "Vector search",
        "pgvector",
        "Evaluation",
        "Guardrails",
        "OpenAI",
        "Fine-tuning",
        "NLP",
        "Trace auditing"
      ],
      "resume_version": "rv_b8a19f5e2249c445",
      "urls": {
        "pdf": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-llm-agentic-engineer-2026-11.pdf",
        "docx": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-llm-agentic-engineer-2026-11.docx",
        "md": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-llm-agentic-engineer-2026-11.md"
      },
      "markdown": "# Zulfaqar Hafez\n\n**Applied AI Final-Year Student**\n\n[zulfaqarhafez@gmail.com](mailto:zulfaqarhafez@gmail.com) | [linkedin.com/in/zulfaqar-hafez](https://www.linkedin.com/in/zulfaqar-hafez) | [zulfaqarhafez.com](https://zulfaqarhafez.com) | [github.com/ZulfaqarHafez](https://github.com/ZulfaqarHafez)\n\n## Summary\n\nFinal-year Applied AI student, AI Researcher at Louis Dreyfus Company and $20,000 Sparks Fund recipient, focused on production computer vision and agentic AI. Deployed field-video counting on Azure GPU inference, and quantised a PPE detector to int8 ONNX (held-out mAP50 0.455 vs 0.461 fp32) small enough to run in a browser tab.\n\n## Technical Skills\n\n- **Agentic AI & LLMs:** LangGraph, LangChain, RAG, MCP servers, agent evaluation and trace auditing, NLI fine-tuning (DeBERTa-v3)\n- **Engineering:** PyTorch, Azure ML, FastAPI, Next.js, Supabase, Rust, ONNX int8 quantisation, GitHub Actions CI\n- **Certifications:** NVIDIA DLI: Gen AI with Diffusion Models, Adversarial ML, Fundamentals of DL; Microsoft AI-300\n\n## Experience\n\n### People's Association\n\n*AI Intern (RAG & Agentic Systems)* | Aug 2026 - Present\n\n- Developing retrieval and agentic AI systems for community-facing public-service workflows.\n- Applying orchestration, evaluation, and trace auditing to production use cases.\n\n*Product Lead (Citizen Developer)* | Sep 2025 - Aug 2026\n\n- Directed \"Churp\" (churp.sg), a $20,000 Sparks-funded PA allotment garden balloting platform, leading a 9-volunteer team from hackathon concept to a pilot launch in Tengah.\n- Delivered Singpass OIDC, Myinfo, an equal-chance ballot, VAPT, and PA ICT handover.\n\n### Louis Dreyfus Company\n\n*Applied AI Engineer (Computer Vision) Intern* | Mar 2026 - Aug 2026\n\n- Built a YOLO and BoT-SORT pipeline that counts each object once in field video (custom track-linking layer, size-aware confidence threshold), tested on 3 benchmark sites and deployed on Azure with on-demand GPU inference.\n\n## Projects\n\n### Agentic AI Energy Platform\n\n*VoltPulse | SMU Hack For Cities 2026* | Jan - Feb 2026\n\n- Developed VoltPulse SG, an agentic platform using LangGraph to orchestrate specialized agents via intent-based routing, automating SP bill extraction with OpenAI Vision OCR and providing AI-powered consumption diagnosis.\n- Built a RAG-based intelligence system using SeaLion Encoder and pgvector to surface government saving opportunities, linking user consumption data with authorized retailers to maximize $300 Climate Voucher utility.\n\n**TraceRazor | Open-source agent trace auditor** | 2026\n\n- Built a Rust auditor that accounts for wasted tokens in AI-agent traces and produces signed efficiency receipts: 8 efficiency signals, a 0-100 audit score, and Ed25519 receipts.\n\n**Assay | Agent-safety prototype** | 2026\n\n- Built Assay to probe an agent with adversarial tasks before anyone treats its guardrails as reliable, using isolated execution and failure reports (FastAPI, Next.js).\n\n**AgenticPDF | Local-first retrieval prototype** | 2026\n\n- Built a local-first document workbench where search, reranking, and citations remain inspectable, running local ONNX inference with no API key.\n\n**AgenticAgentAgenting | Multi-agent prototype** | 2026\n\n- Prototyped a multi-agent system with LangGraph, then rebuilt it with a Rust (axum) backend: specialists take turns through a circle-junction scheduler and a proof gate decides when a run is done (33 backend tests, 17 Playwright tests).\n\n**ClaimLens | ML Engineer** | 2026\n\n- Fine-tuned a DeBERTa-v3 model that classifies whether evidence supports, refutes, or remains neutral toward a claim, and published the weights on Hugging Face.\n\n## Education\n\n### Singapore Institute of Technology (SIT)\n\n*Bachelor of Science (Hons) in Applied Artificial Intelligence* | Sep 2024 - 2027\n\n### Republic Polytechnic (RP)\n\n*Diploma in Business Information Systems* | Apr 2019 - May 2022\n\n## Awards & Activities\n\n- Finalist, SIT HackRift 2025: Developed GuideMeSG navigation app using LTA DataMall APIs.\n"
    },
    {
      "slug": "ml-research-engineer",
      "title": "ML Research Engineer",
      "description": "Thesis research testing whether a video count can give a range that is right as often as it claims, leakage-safe validation, and measurement studies.",
      "page_budget": 1,
      "pages": 1,
      "font_size": 9.75,
      "keywords": [
        "Research",
        "Experiment design",
        "Evaluation",
        "Model validation",
        "Data leakage",
        "Transformers",
        "Diffusion",
        "LoRA",
        "Fine-tuning",
        "PyTorch",
        "Statistics",
        "Benchmark"
      ],
      "resume_version": "rv_2acaf3c105febe75",
      "urls": {
        "pdf": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-ml-research-engineer-2026-11.pdf",
        "docx": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-ml-research-engineer-2026-11.docx",
        "md": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-ml-research-engineer-2026-11.md"
      },
      "markdown": "# Zulfaqar Hafez\n\n**Applied AI Final-Year Student**\n\n[zulfaqarhafez@gmail.com](mailto:zulfaqarhafez@gmail.com) | [linkedin.com/in/zulfaqar-hafez](https://www.linkedin.com/in/zulfaqar-hafez) | [zulfaqarhafez.com](https://zulfaqarhafez.com) | [github.com/ZulfaqarHafez](https://github.com/ZulfaqarHafez)\n\n## Summary\n\nFinal-year Applied AI student, AI Researcher at Louis Dreyfus Company and $20,000 Sparks Fund recipient, focused on production computer vision and agentic AI. Deployed field-video counting on Azure GPU inference, and quantised a PPE detector to int8 ONNX (held-out mAP50 0.455 vs 0.461 fp32) small enough to run in a browser tab.\n\n## Technical Skills\n\n- **Agentic AI & LLMs:** LangGraph, LangChain, RAG, MCP servers, agent evaluation and trace auditing, NLI fine-tuning (DeBERTa-v3)\n- **Computer Vision:** YOLO (Ultralytics), BoT-SORT tracking, OpenCV, MediaPipe, Grad-CAM, ONNX Runtime Web\n- **Engineering:** PyTorch, Azure ML, FastAPI, Next.js, Supabase, Rust, ONNX int8 quantisation, GitHub Actions CI\n- **Certifications:** NVIDIA DLI: Gen AI with Diffusion Models, Adversarial ML, Fundamentals of DL; Microsoft AI-300\n\n## Experience\n\n### Louis Dreyfus Company\n\n*AI Researcher (Contract)* | Aug 2026 - Present\n\n- Hand-audited 37 detections and traced persistent over-counting to duplicate tracks, not detector error, which cancelled a planned detector retrain.\n- Tested and logged 8 duplicate-merging methods; the gated merge across camera passes cut over-counting at the hardest site by about three quarters.\n- Rebuilt the production counter (3-class YOLO26, BoT-SORT, MapAnything 3D, a logistic merge model) so every count carries a ±2 range a reviewer can check.\n- Thesis, CountOnce (Sep 2026 to Mar 2027): designing a model that makes one calibrated decision per track piece and abstains when unsure, to test whether a count range is right as often as it claims.\n\n*Applied AI Engineer (Computer Vision) Intern* | Mar 2026 - Aug 2026\n\n- Built a YOLO and BoT-SORT pipeline that counts each object once in field video (custom track-linking layer, size-aware confidence threshold), tested on 3 benchmark sites and deployed on Azure with on-demand GPU inference.\n- Led annotation across 7 datasets, building a 10,000+ image dataset, then re-split by camera and site to remove leakage that was inflating accuracy.\n\n### People's Association\n\n*AI Intern (RAG & Agentic Systems)* | Aug 2026 - Present\n\n- Applying orchestration, evaluation, and trace auditing to production use cases.\n\n## Projects\n\n### Generative Video Pipeline\n\n*Waaah-Comics | Gemini Hackathon* | Jan 2026\n\n- Engineered a generative pipeline using Stable Video Diffusion (SVD) to transform static comic panels into animation.\n- Fine-tuned SVD using Lightning LoRA, significantly reducing trainable parameters while maintaining high temporal consistency across 24 panel layouts.\n\n**TraceRazor | Open-source agent trace auditor** | 2026\n\n- Built a Rust auditor that accounts for wasted tokens in AI-agent traces and produces signed efficiency receipts: 8 efficiency signals, a 0-100 audit score, and Ed25519 receipts.\n\n**OsciWriting | LLM caching measurement study** | 2026\n\n- Designed a 50,000-prompt measurement study to test when LLM response caching is worthwhile, with a pre-registered rubric and clustered analysis (UMAP, HDBSCAN).\n\n**ClaimLens | ML Engineer** | 2026\n\n- Fine-tuned a DeBERTa-v3 model that classifies whether evidence supports, refutes, or remains neutral toward a claim, and published the weights on Hugging Face.\n\n## Education\n\n### Singapore Institute of Technology (SIT)\n\n*Bachelor of Science (Hons) in Applied Artificial Intelligence* | Sep 2024 - 2027\n\n### Republic Polytechnic (RP)\n\n*Diploma in Business Information Systems* | Apr 2019 - May 2022\n"
    },
    {
      "slug": "civic-tech",
      "title": "Civic Tech and Public-Service AI",
      "description": "Singpass-integrated civic products, accessibility builds, and RAG for public-service workflows.",
      "page_budget": 1,
      "pages": 1,
      "font_size": 10,
      "keywords": [
        "Public sector",
        "Singpass",
        "Myinfo",
        "OIDC",
        "VAPT",
        "Product management",
        "Stakeholder management",
        "Accessibility",
        "Next.js",
        "Supabase",
        "Team leadership"
      ],
      "resume_version": "rv_6eb1fc53b0ba9773",
      "urls": {
        "pdf": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-civic-tech-2026-11.pdf",
        "docx": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-civic-tech-2026-11.docx",
        "md": "https://zulfaqarhafez.com/resume/zulfaqar-hafez-civic-tech-2026-11.md"
      },
      "markdown": "# Zulfaqar Hafez\n\n**Applied AI Final-Year Student**\n\n[zulfaqarhafez@gmail.com](mailto:zulfaqarhafez@gmail.com) | [linkedin.com/in/zulfaqar-hafez](https://www.linkedin.com/in/zulfaqar-hafez) | [zulfaqarhafez.com](https://zulfaqarhafez.com) | [github.com/ZulfaqarHafez](https://github.com/ZulfaqarHafez)\n\n## Summary\n\nFinal-year Applied AI student, AI Researcher at Louis Dreyfus Company and $20,000 Sparks Fund recipient, focused on production computer vision and agentic AI. Deployed field-video counting on Azure GPU inference, and quantised a PPE detector to int8 ONNX (held-out mAP50 0.455 vs 0.461 fp32) small enough to run in a browser tab.\n\n## Technical Skills\n\n- **Agentic AI & LLMs:** LangGraph, LangChain, RAG, MCP servers, agent evaluation and trace auditing, NLI fine-tuning (DeBERTa-v3)\n- **Engineering:** PyTorch, Azure ML, FastAPI, Next.js, Supabase, Rust, ONNX int8 quantisation, GitHub Actions CI\n\n## Experience\n\n### People's Association\n\n*AI Intern (RAG & Agentic Systems)* | Aug 2026 - Present\n\n- Developing retrieval and agentic AI systems for community-facing public-service workflows.\n- Applying orchestration, evaluation, and trace auditing to production use cases.\n\n*Product Lead (Citizen Developer)* | Sep 2025 - Aug 2026\n\n- Directed \"Churp\" (churp.sg), a $20,000 Sparks-funded PA allotment garden balloting platform, leading a 9-volunteer team from hackathon concept to a pilot launch in Tengah.\n- Integrated Singpass OIDC (FAPI 2.0) and Myinfo (7 scopes) with a cryptographic equal-chance ballot; took the system through Ensign InfoSecurity VAPT and a full handover to PA ICT (administrator guide, checklists, limitations register).\n\n### Louis Dreyfus Company\n\n*Applied AI Engineer (Computer Vision) Intern* | Mar 2026 - Aug 2026\n\n- Built a YOLO and BoT-SORT pipeline that counts each object once in field video (custom track-linking layer, size-aware confidence threshold), tested on 3 benchmark sites and deployed on Azure with on-demand GPU inference.\n\n## Projects\n\n### Agentic AI Energy Platform\n\n*VoltPulse | SMU Hack For Cities 2026* | Jan - Feb 2026\n\n- Developed VoltPulse SG, an agentic platform using LangGraph to orchestrate specialized agents via intent-based routing, automating SP bill extraction with OpenAI Vision OCR and providing AI-powered consumption diagnosis.\n- Built a RAG-based intelligence system using SeaLion Encoder and pgvector to surface government saving opportunities, linking user consumption data with authorized retailers to maximize $300 Climate Voucher utility.\n\n**GuideMeSG | Lead Developer, SIT HackRift 2025 finalist** | 2025\n\n- Led development of accessible public-transport navigation that supports independent travel for persons with intellectual disabilities, using Singapore transport data (Next.js, Supabase, LTA DataMall).\n\n**FairWork Contract | Frontend Engineer** | 2025\n\n- Built the Next.js frontend and multilingual interface for payslip translation support for foreign workers who need clearer employment information in their own language.\n\n**HelpLah.AI | Hack n Roll 2025, team of three** | 2025\n\n- Built a bilingual (English and Mandarin) chatbot that offers empathetic support to people facing loneliness: a Flask app calling Llama-2-7B-chat on a Colab GPU, with spoken replies through Google Text-to-Speech.\n\n## Education\n\n### Singapore Institute of Technology (SIT)\n\n*Bachelor of Science (Hons) in Applied Artificial Intelligence* | Sep 2024 - 2027\n\n### Republic Polytechnic (RP)\n\n*Diploma in Business Information Systems* | Apr 2019 - May 2022\n\n## Awards & Activities\n\n- Finalist, SIT HackRift 2025: Developed GuideMeSG navigation app using LTA DataMall APIs.\n- President, SIT Magical Hearts 2025: Led outreach for 500+ beneficiaries; Featured speaker at SG Cares 2025.\n"
    }
  ]
}