Erfan Pirjahandideh

I build ML experiments and the tools to review them.

I work on applied machine learning and full-stack tools. I'm especially interested in how brain-signal models perform on people they haven't seen before.

Open EEG viewer OpsDesk fixture Reachboard demo

Brain Signals Lab

Motor-imagery EEG on public PhysioNet data, scored on participants the model never trained on.

I kept each participant's recordings in a single fold. Across 50 people and five folds, CSP + LDA averaged 61.8% accuracy. A most-frequent-class baseline reached 50.4%. The viewer loads saved reports only—nothing retrains when you open a page.

Try it: open Participants and filter below chance to see spread across people.

Engineering results on one dataset—not a clinical or neuroscience claim.

Evaluation section of the Brain Signals Lab viewer with fold accuracy chart.
Saved evaluation report in the public viewer (screenshot source).

OpsDesk AI

A fictional support desk where proposals cite the handbook and a person approves before anything runs.

Changing an approved ticket proposal invalidates its approval. A second execution request returns the first receipt. I compared a rules baseline with a local language model on 60 fictional tickets: the rules produced 37 fully correct proposals and the model produced 25.

Try it: approve a plan change on the fixture, then repeat the run and watch duplicate handling.

The browser simulates the workflow; the Python service runs locally. All customer data is synthetic.

OpsDesk mobile fixture showing a receipt after simulated approval.
Mobile-width fixture replay (screenshot source).

Reachboard showcase

I built a fictional media-buying catalogue where the server owns cart totals and campaigns move draft → awaiting payment.

I seeded six packages with channel, placement, and RB credits prices. In the sample journey, add Echo Weekly (35) and Northline Sound (40), review cart → draft, and the locked campaign total is 75 credits. When I run Django locally, checkout is POST-only with CSRF and per-user reset—that backend is separate from the public browser simulation linked below.

Try the simulation: use the compare-row adds, review cart → draft, submit, then reset and shop again.

The screenshot is the verified public static fixture at draft (75 credits). A separate local Django catalogue capture shows the server-rendered app—not the Pages demo.

Public Reachboard browser simulation at draft with Echo and Northline totalling 75 RB credits.
Public static fixture at draft (75 RB credits) after Echo + Northline (screenshot source). Live simulation linked above.

I used AI coding assistants on these portfolio repos; each project README describes scope and local-only pieces.