Featured Haskell work: Career Trainer
Career Trainer is a personal web application for storing career goals, organizing learning topics, generating practice questions, and updating progress from answers. Its initial implementation keeps routes, database access, HTML rendering, and the API client in one executable so the full request path is easy to inspect.
The scope is deliberately small. The documented next steps include tests for progress updates and splitting the executable into modules as the boundaries settle.
Backend and web stack
- Haskell / GHC: explicit records for career goals and generated questions.
- Scotty over WAI/Warp: HTTP routing for HTML pages, JSON endpoints, and a health check.
- Lucid2: server-rendered HTML built in Haskell.
- SQL / SQLite: persisted goals and topics, with answer-driven progress updates through sqlite-simple.
- OpenAI API: structured question responses decoded into Haskell values, with local fallback questions when credentials or requests fail.
Read the architecture walkthrough and typed API boundary example for the implementation choices.
Engineering approach: types, correctness, and testing
I favor type-driven design that makes data shapes and boundaries visible. A typed record helps organize the domain; it does not by itself prove that a progress calculation or an external response is correct.
For Career Trainer, the next testing priority is the topic progress formula: correct and incorrect answers, repeated updates, and boundary values. The API fallback path also deserves explicit checks. These are testing priorities described in the write-up, not a claim of an existing comprehensive test suite.
Reproducible development with Nix
Career Trainer declares its development environment with Nix flakes. The documented entry points are nix run and nix develop followed by cabal run career-trainer. This gives a reviewer a concrete starting point for building and exploring the application.
The setup walkthrough connects that environment to the development loop.
Selected technical writing
- Career Trainer: Haskell web architecture, SQLite, and API integration
- Deployment, DNS, and HTTPS validation with Next.js and Vercel
- Static hosting with a private S3 origin and CloudFront
Specialized Cardano and Plutus experience
As a Teacher Assistant at Input Output Global from March 2019 to December 2025, I supported the Plutus Pioneer Program, delivered Cardano and Plutus courses and workshops, and assisted in testing Cardano development tools. This teaching and tooling experience informs how I explain constraints and make technical behavior reviewable.
My Cardano work includes Plutus, Aiken, and eUTxO concepts. The validator review checklist and Aiken and Lean 4 workflow show how I approach invariants and the limits of verification claims.
Review my work or discuss a role
For a Haskell developer role, start with Career Trainer’s source. More work is available on GitHub. To discuss a Haskell backend or Cardano role, email me.