Hi there, I'm

V. HaLy

I'm a Computer and Information Sciences graduate with a double major in Data Science and Networks & Cybersecurity. Below is a selection of projects I've built, along with why I made each one and what I learnt along the way.

Filter projects

Showing 7 of 7

Languages

Tools

01

Speedcube Training Explorer

A local-first training tracker for speedcubers, with a WCA-style timer, progress charts, solve analytics, and a comparison against the world rankings.

Languages

  • Python
  • JavaScript
  • HTML
  • CSS
  • SQL

Tools

  • Flask
  • SQLite
  • Plotly
  • uv
  • VS Code
  • Claude Code
  • Git
  • GitHub

Try it here

This site has a mini version of its timer. Hold Space anywhere until the time turns green, let go to start, then press any key to stop.

The Speedcube Training Explorer dashboard, showing a personal best, an estimated world rank, and recent sessionsView Speedcube Training Explorer on GitHub
Why I built it
I compete in speedcubing (my WCA profile) and wanted one place to time my solves, track my progress, and see how I compare with the world, with my data kept safely on my own computer.
What I learnt
How to move an app from browser storage to a small local server and database, keep it fast with tens of thousands of solves, and calculate statistics exactly as the WCA rules define them.
02

twin

A digital twin that chats with visitors as me, answering questions about my background, skills, and experience in my own voice.

Languages

  • Python
  • JavaScript
  • HTML
  • CSS

Tools

  • FastAPI
  • OpenAI API
  • marked
  • DOMPurify
  • Render
  • VS Code
  • Git
  • GitHub
Why I built it
I wanted my personal site to answer "so what do you actually do?" even when I'm offline, without the chat drifting off topic. It builds on the digital twin example from Ed Donner's agents course, which I rebuilt for a public website.
What I learnt
How to stream replies token by token while still handling tool calls, and how to protect a public endpoint with rate limits, input validation, and safeguards that keep personal data out of the code.
03

sidekick

A personal AI co-worker that browses the web, researches, and writes files, then has an evaluator check the work before handing it back.

Languages

  • Python
  • JavaScript
  • HTML
  • CSS

Tools

  • LangChain
  • LangGraph
  • Playwright MCP
  • FastAPI
  • OpenAI API
  • Serper
  • Pushover
  • uv
  • pytest
  • GitHub Actions
  • VS Code
  • Git
  • GitHub
Why I built it
I wanted an assistant for everyday planning, study, travel, and job hunting that delivers a finished result rather than stopping to ask. It started from the Sidekick lab in Ed Donner's agents course, which I extended with my own backend, interface, and tools.
What I learnt
How agent loops behave in practice: designing a fair evaluator, letting a person approve or decline actions mid-run, stopping a run safely, and cutting token use by trimming tools and old context.
04

lx

A command-line tool that turns plain-English task descriptions into Linux commands, powered by a local LLM so it stays private, free, and offline.

Languages

  • Python

Tools

  • Ollama
  • Rich
  • pytest
  • pipx
  • GitHub Actions
  • Linux
  • VS Code
  • Git
  • GitHub
lx
What would you like to do? find every pdf larger than 50mb
⠋ Thinking...

Command:     find . -type f -name "*.pdf" -size +50M
Explanation: This command recursively searches the current directory and its
             subdirectories for files that match the PDF extension and are
             larger than 50 megabytes.
Risk:        LOW

Copy command to clipboard? [y/N]
Why I built it
I didn't want to memorise every command flag, and I didn't want an AI running commands on my machine without my say. lx suggests a command, explains it, and rates the risk, but I always decide whether it runs.
What I learnt
How to get reliable structured output from small local models using few-shot prompting, constrained decoding, JSON repair, and retries, and how to package, test, and benchmark a Python CLI.
05

my-redis

A small in-memory key-value store written from scratch in C, with a non-blocking event loop, a binary wire protocol, a hash table, and key expiry.

Languages

  • C

Tools

  • TCP sockets
  • poll()
  • gcc
  • GitHub Actions
  • Linux
  • VS Code
  • Git
  • GitHub
my-redis
$ ./server &
$ ./client
server says: OK
server says: hello
server says: (integer) 1
server says: (nil)
server says: (error 1) unknown command
server says: OK
server says: (integer) 1
server says: (integer) 1
(sleeping 2s to let key2 expire...)
server says: (nil)
Why I built it
Using Redis doesn't teach you how it works inside. I built a small, readable version in stages, following the Build Your Own Redis guide, so each piece stays easy to follow.
What I learnt
Non-blocking socket programming and poll()-based event loops in C, designing a length-prefixed protocol, writing a chained hash table from scratch, and implementing lazy expiry.
06

my-network-scanner

A Python CLI that finds live hosts with ARP, scans their ports with SYN packets, grabs service banners, and saves the results as JSON.

Languages

  • Python

Tools

  • Scapy
  • Sockets
  • argparse
  • pytest
  • GitHub Actions
  • Linux
  • VS Code
  • Git
  • GitHub
my-network-scanner
$ sudo .venv/bin/python scanner.py 192.168.1.0/24
[+] ARP scanning 192.168.1.0/24...
[+] Host found: 192.168.1.1 | d8:9e:f3:11:22:33
[+] SYN scanning 192.168.1.1...
[+] Results saved to results.json
Why I built it
Tools like nmap do far more, but using them doesn't show you how they work. I wanted a small, readable scanner where each step, from host discovery to banner grabbing, is easy to follow.
What I learnt
ARP discovery, batched TCP SYN scanning, why UDP results are always less certain, rough OS guessing from TTL values, concurrent scanning with a thread pool, and saving partial results when a scan is interrupted.
07

SYBTPOC

Should You Buy This Piece of Clothing? An interactive questionnaire that scores a clothing item and recommends whether it is worth buying.

Languages

  • Python

Tools

  • VS Code
  • Git
  • GitHub
SYBTPOC
$ python sybtpoc.py
Score     Recommendation
0-49      Don't buy it. Save your money for a better item.
50-79     Consider buying it, but look at other options too.
80-100    A great buy! You should definitely purchase it.
Why I built it
I created it for my AP Computer Science Principles project, with the aim of encouraging people to shop more thoughtfully and sustainably.
What I learnt
The fundamentals of sequencing, selection, and looping, and how to design a simple program around a real-world decision.

Have a question about one of my projects, or an opportunity you'd like to discuss?Send me an email and I'll get back to you.