About

Oscar Johnson

I build web apps, backend tools, terminal projects, and practical systems while studying computer science and software development. This site is where I can keep those projects usable instead of leaving them only as repository links.

What I am trying to show

I care about projects that do something: process files, render an interface, manage state, connect to an API, run in the terminal, or solve a real annoyance I had. The goal is not to make every project look identical. The goal is to make each one understandable and, when possible, usable from the browser.

ReactNext.jsTypeScriptTailwindPythonFastAPIRustC#SQLJavaPHP

Reasoning

Why these projects are here

This portfolio

My first portfolio helped me try React and connect a Java backend for a school CRUD project, but I was not satisfied with it. It felt more like a list of links than a place where the work could actually run. This version is meant to host the projects, archive them, and give each one a page that fits what it actually is.

Wordle

Wordle was my first real attempt at making a game without a school outline or jumping into something too large. The original version helped me practice JavaScript, DOM manipulation, input handling, and game-state logic. The portfolio version keeps that project visible while cleaning it up for the current site.

TexVoice

TexVoice came from a practical problem: I had long LaTeX note files from school and wanted a way to turn them into audio with chapters, logs, and playback. I also wanted a better way to handle long PDFs and notes without depending on heavy or paid tools.

Terminal FX

The idea behind Terminal FX was to make the terminal look like something more than a text box. The Python version runs animation modes and streams them to the browser through WebSockets and xterm.js. The Rust version is a separate native app with more modes and better performance. There is also a Rust/WASM path being explored for rendering pixel-based modes directly on a canvas.

Rhythm Sync

Rhythm Sync came from a school multiplayer and networking assignment. I kept working on it after the deadline and it turned into a real-time rhythm duel with WebSocket match state, campaign mode, AI opponents with distinct personalities, boss abilities, and a campaign map. It replaced the older Target Transmission placeholder and ended up being the most fully built project in the portfolio.

Toolbox

Toolbox exists because I kept writing small utility scripts in separate folders and losing them. The current tools are an electron shell calculator ported from Python and an even division finder that helps with LED animation timing and brightness step calculations. The goal is to keep adding things that solve a specific annoyance without duplicating what TexVoice or other projects already do.

Next direction

Notes, audio, and generated files may become their own library.

TexVoice could eventually connect to a small collection of prepared notes: PDF files, generated audio, chapters, and logs. That would let someone open a note set and listen without regenerating the audio. The upload and generation tool can stay separate from the archived notes so the app does not become cluttered.