Professional

vin@sg:~$ whoami

Vincent Wesley

Software Engineer

View projectsResume

Vincent Wesley

Software Engineer · Singapore

Software Engineer specializing in modern web platforms, data architecture, and applied AI.

Core Stack

Python · PHP · JavaScript · TypeScript · HTML · C++ · Rust · SQL · Docker · Flutter

Top Projects

  • MetaLens VGC: A cross-filtering metagame dashboard for Pokémon Champions VGC 2026, built from real tournament and ladder data.

Contact

  • Location: Singapore
  • Availability: 🟡 Currently working full-time
Portrait of Vincent Wesley, smiling, wearing glasses and a green leaf-print shirt.

About

About Me

Software Engineer specializing in modern web platforms, data architecture, and applied AI. I focus on turning complex operational data into clean, maintainable web systems and actionable dashboards. Always searching for the simplest, most reliable solution to real-world problems.

Role
Software Engineer
Bachelor of Science (Information Systems) certificate from Singapore Management University, awarded to Vincent Wesley, 3 June 2025

Bachelor of Science (Information Systems)

Singapore Management University · Awarded 3 June 2025

Digitally verifiable

Drop the .opencert file on opencerts.io to verify it

What I Do

What I Do

  • Software EngineeringBuilding reliable, maintainable systems

    Focusing on clean full-stack architecture, API integration, and performant web applications using TypeScript, React, and modern backend frameworks.

  • Data and AnalyticsTurning data into decisions

    Designing data pipelines, dashboards, and analytical models using Python, Pandas, and SQL to extract actionable operational insights.

  • AI EngineeringApplying AI to real problems

    Integrating LLMs, vector search, and intelligent workflows into production applications to solve concrete user problems.

Project Showcase

MetaLens VGC

A cross-filtering metagame dashboard for Pokémon Champions VGC 2026, built from real tournament and ladder data.

  • Every number is aggregated in the browser from real tournament team sheets and ladder data.
  • Fully cross-filtering, with filter state shareable via the URL.
  • Data refreshed weekly by a GitHub Actions workflow with failure alerting.

Live siteView liveView project

Code Snippets

Featured Code Snippets

  • Wilson Score Interval for Win-Rate Confidence

    JavaScript

    MetaLens VGC (public/js/lib/stats.js). Win-rate bounds that stay honest on small samples (a 3-0 record reads as 44-100%, not 100%), plus meta diversity as the effective number of species: exp of the Shannon entropy of usage counts.

    Wilson Score Interval for Win-Rate Confidence

    MetaLens VGC (public/js/lib/stats.js). Win-rate bounds that stay honest on small samples (a 3-0 record reads as 44-100%, not 100%), plus meta diversity as the effective number of species: exp of the Shannon entropy of usage counts.

    // Wilson score interval for a binomial proportion k/n, as [lo, hi] fractions.
    export function wilson(k, n, z = 1.96) {
      if (n === 0) return [0, 0];
      const phat = k / n;
      const z2 = z * z;
      const denom = 1 + z2 / n;
      const center = phat + z2 / (2 * n);
      const adj = z * Math.sqrt((phat * (1 - phat)) / n + z2 / (4 * n * n));
      return [(center - adj) / denom, (center + adj) / denom];
    }
    
    // exp(Shannon entropy) of usage counts, normalized to proportions.
    export function effectiveSpecies(counts) {
      const total = counts.reduce((a, b) => a + b, 0);
      if (total <= 0) return 0;
      let h = 0;
      for (const c of counts) {
        if (c <= 0) continue;
        const p = c / total;
        h -= p * Math.log(p);
      }
      return Math.exp(h);
    }
  • One Slot Test for Cross-Filter Chips

    JavaScript

    MetaLens VGC (public/js/lib/aggregate.js). Positive Pokémon chips are ANDed into a single per-Pokémon test, so "Rillaboom + Life Orb" keeps teams with a Rillaboom holding Life Orb; negative chips drop any team with a match.

    One Slot Test for Cross-Filter Chips

    MetaLens VGC (public/js/lib/aggregate.js). Positive Pokémon chips are ANDed into a single per-Pokémon test, so "Rillaboom + Life Orb" keeps teams with a Rillaboom holding Life Orb; negative chips drop any team with a match.

    /** The slot test built from the positive Pokémon chips, or null if there are none. */
    function slotTest(chips, dex, { keys = true } = {}) {
      const pos = chips.filter((c) => !c.neg);
      const keySet = keys ? new Set(pos.filter((c) => KEY_KINDS.has(c.kind)).flatMap(chipKeys)) : new Set();
      const attrs = pos.filter((c) => ATTR_KINDS.has(c.kind));
      if (!keySet.size && !attrs.length) return null;
      return (mon) => (!keySet.size || keySet.has(mon.k)) && attrs.every((c) => monMatchesAttr(mon, c, dex));
    }
    
    export function filterTeams(teams, filters = {}, chips = [], dex) {
      const { tiers, place, from, to } = filters;
      const slot = slotTest(chips, dex);
      const hasAttr = chips.some((c) => !c.neg && ATTR_KINDS.has(c.kind));
      return teams.filter((team) => {
        if (tiers && tiers.length && !tiers.includes(team.tier)) return false;
        if (place === 'topcut' && !team.topCut) return false;
        if (place === 'top8' && !(team.placing != null && team.placing <= 8)) return false;
        if (place === 'winner' && team.placing !== 1) return false;
        if (from && team.date < from) return false;
        if (to && team.date > to) return false;
        for (const c of chips) {
          const has = ATTR_KINDS.has(c.kind) && !c.neg ? true : teamHasChip(team, c, dex);
          if (c.neg ? has : !has) return false;
        }
        return !hasAttr || team.mons.some(slot);
      });
    }

See all snippets

GitHub

GitHub Activity

559 contributions in the last year

Longest streak
15
Current streak
5
Active days
21
Busiest month
Sep 2026
Contributions
559
559 contributions on GitHub in the last year, across 53 weeks.

Experience

Work Experience

  1. Jan 2026 – Present

    Software Engineer

    Ong&Ong Pte Ltd

    • Architected and developed full-stack in-house software applications, interactive dashboards, and web widgets to optimize internal workflows for architectural and design teams
    • Integrated custom Generative AI solutions and workflow automation tools to streamline project documentation, data querying, and production processes
    • Managed the end-to-end software development lifecycle, gathering requirements from cross-functional teams to deliver secure, scalable internal digital solutions
    • Refactored existing codebases and optimized API performance to ensure high availability and seamless data management across company systems
  2. May 2024 – Aug 2024

    Summer Intern

    Health Promotion Board

    • Leveraged tech to engage youth via hackathons and interactive modules
    • Curated digital content and optimized its delivery for youth health campaigns
    • UX testing and co-developed enhancements for health apps (H365)
  3. Jun 2023 – Aug 2023

    Summer Intern

    PT Pancaseraya Permai · Indonesia

    • Developed backend components of an Employee Shift Management System using PHP Laravel and MySQL
    • Collaborated on frontend development of the system's mobile app using Flutter
    • Assisted IT operations including computer troubleshooting, server backup monitoring, and face scan directory maintenance

Full experience, education and certifications

Skills

Skills

Programming Languages

  • Python
  • PHP
  • JavaScript
  • TypeScript
  • HTML
  • C++
  • Rust
  • SQL

Systems and DevOps

  • Docker
  • AWS
  • System Design
  • CI/CD
  • Linux Admin
  • Serverless

Frameworks and Libraries

  • Flutter
  • Laravel
  • Bootstrap
  • jQuery
  • React.js
  • Next.js

Frontend and UI Development

  • CSS
  • Tailwind CSS
  • Figma
  • Prototyping
  • Design Systems

Backend and Web Development

  • REST APIs
  • MongoDB
  • PostgreSQL
  • Node.js
  • Java
  • MySQL
  • Redis
  • GraphQL
  • gRPC
  • WebSockets
  • Swagger

Data Visualization and Analytics Tools

  • Tableau
  • Python Pandas
  • Matplotlib

AI

  • Machine Learning
  • Prompt Engineering
  • AI Tools
  • PyTorch
  • TensorFlow
  • LangChain
  • Vector Databases
  • scikit-learn

Software Engineering Practices

  • Testing
  • TDD
  • Design Patterns

Project Management

  • GitHub
  • Jira
  • Agile

Graphic Design

  • Video Editing
  • Photography
  • Adobe Creative Cloud

Other

  • Analytical Reasoning
  • Team Collaboration

Languages

Languages

Levels are out of 5 (5 = native).

LanguagesSpeaking / ComprehensionWritingOverall
English5/55/5Fluent
Indonesian5/55/5Fluent
Malay4/53/5Professional
Mandarin3/53/5Conversational
Hokkien (Fujian)3/53/5Conversational

Education

Education

  1. Aug 2021 – Jul 2025

    Bachelor of Science (Information Systems), Major in Business Analytics

    Singapore Management University (SMU) · Singapore

    • SMU poster
    • SMU campus at night
    • SMU building sign
  2. Jul 2018 – May 2021

    Darma Yudha Senior High School

    Science Program · Indonesia

    • Darma Yudha Senior High School poster

Achievements

Achievements

  • 2022

    Singapore's Team, 4th Place

    Asia-Oceania University Chess Championship (International)

  • 2022/2023

    1st Place, Team

    Singapore Inter-Varsity Chess League

    Singapore

  • 2020

    Silver Medalist

    National Logistic Mathematics Competition (KMNR)

    Indonesia

  • 2020

    Bronze Medalist

    Math Olympiad, OSS MIPA Expo XIV

    Indonesia

  • 2019

    Distinction (Top 10%)

    ICAS (International Competitions and Assessments for Schools) Mathematics

  • 2020

    Distinction (Top 10%)

    Read1 Online Mathematics Competition (ROMC), National Competition

    Indonesia

  • 2022

    1st Place

    Singapore Polytechnic Speed Chess Invitational

    Singapore

  • With Magnus Carlsen
  • Chess medals
  • Trophy shelf

All achievements with details

Certifications

Certifications

View all certifications (24)

Exco

Exco

  • 2023 – 2024

    Head

    SMU Chess Club

  • 2023 – 2024

    Honorary General Secretary

    SMU Intellectual Sports

  • 2018 – 2021

    Exco

    Math Club

All Exco roles with details

Interactive

Interactive

Small interactive widgets I built for fun. Each one loads only when you scroll to it.

  • Coin Flip

    Click the coin to flip it. Heads or tails?

  • Aim Trainer

    Click the shrinking targets as fast as you can, 10 in a row.

  • Memory Card Flip

    Flip two cards at a time and match all 8 pairs before the clock runs out.

  • Speed Math Blitz

    Type each answer and hit Enter before the 30-second timer runs out.

  • Pixel Sketchpad

    Draw on the 32 by 32 grid. Keyboard: arrows move, Space paints.

  • Kaleidoscope Mandala

    Drag inside the canvas to draw a symmetric mandala pattern.

  • Matrix Digital Rain

    Watch the code rain fall, and wave your cursor through it.

  • Conway's Game of Life

    Click cells to toggle them alive, then press Play to watch them evolve.

  • Sparkle Canvas

    Click or drag to throw some sparkles.

  • Morse Code Beeper

    Hold the key (or Space) to beep out dots and dashes; pause to decode the letter.

  • Bubble Wrap Pop

    Click or drag across the sheet to pop the bubbles.

  • CSS Box-Shadow 3D Sculptor

    Drag the sliders to extrude the box, then copy the generated CSS.

  • Text Glitch FX Generator

    Type a phrase and watch it glitch, then copy the CSS.

  • Infinite Confetti Cannon

    Click anywhere on the canvas to fire a burst of confetti.

  • Interactive Newton's Cradle

    Drag an end ball outward and let go to set off the swing.

  • Typewriter

    Type below — watch it hit the page.

  • Decision Roulette

    Can't decide? Spin the wheel.

  • Alphabet Speed Test

    Type a-z in order to race the clock.

  • Cursor Dodge

    Avoid the bouncing dots with your cursor.

  • Emoji Block Art

    Type something — see it in block art.

  • Color Match

    Match the color using the sliders.

  • Zen Garden Rake

    Drag across the sand to rake calming parallel lines.

  • Sand Hourglass

    Watch the sand fall through the hourglass, or flip it to reset.

  • Mini Piano

    Play the keys with the mouse or A S D F G H J K and W E T Y U.

  • Rhythm Tap

    Hit D F J K as the notes reach the line.

  • Dice Roller

    Pick a die and roll it.

See all interactive widgets

Blog

Latest Writing

Contact

Get in Touch

The quickest way to reach me is email.

Singapore time 10:57 SGT · Fri, 6 Nov 2026

HomeProfessional
ProjectsProfessional
SoftwareProjects
InteractiveProjects
Data and AnalyticsProjects
OtherProjects
ExperienceProfessional
Career TimelineProfessional
QualificationProfessional
Project HubProfessional
Code SnippetsProfessional
InteractiveProfessional
ResumeProfessional
First Run and Bun win in ASEANProfessional
Privacy
Terms
Cookies
QuestArchiveSoftware
DueReminderSoftware
AccessEaseSoftware
TL;DR PanelSoftware
asset-vaultSoftware
gfx-kitSoftware
House KitSoftware
sg-data-hubSoftware
vin-contextSoftware
vin-workflowSoftware
Black HoleInteractive
3D RoomInteractive
QR GardenInteractive
Synthwave DriveInteractive
MRT WindowInteractive
DevPulseData and Analytics
MetaLens VGCData and Analytics
esp32-core-kitOther
Toggle light / dark
Switch sidePersonal
Pause / resume effects
Copy email
Random page
Keyboard shortcuts
Download resume (PDF)

↑↓ move · Enter open · Esc close

Keyboard shortcuts

Ctrl K / ⌘K
Search the Site
?
Keyboard shortcuts
Esc
Close

ACHIEVEMENT UNLOCKED