OPEN TO FRONTEND & FULL-STACK ROLESPORTFOLIO / 2026

Hey, I’m James

Serious code.
A human
touch.

I’m a full-stack developer who cares as much about how a product feels as how it works. Thoughtful interfaces. Solid foundations. A little personality.

James TimmsBuilding for the web since 2021.Laravel, React, Vue — and plenty of curiosity.
James Timms
THE PERSON BEHIND THE CODEJames Timms ↗
IDEAS → INTERFACES → REAL-WORLD PRODUCTSScroll to discover
LaravelReactTypeScriptVueNext.jsPHPAWS

01 / SELECTED WORK

Built with purpose.
Made to be used.

Live sites and open-source tools, with a look at what goes into making them.

ASH Esports live homepage, with its red and black identity, team navigation, and competitive gaming introduction.
THE LIVE SITETake a look around

LIVE / FULL-STACK PLATFORM

ASH Esports.

A home for the community. A working platform for the organisation. Public teams, results, and broadcasts sit alongside the tools players, coaches, and staff use behind the scenes.

  • Team dashboards, recruitment, and roster management
  • Match planning, champion pools, and coaching tools
  • Discord, Riot Games, and Twitch integrations
  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • Prisma
  • PostgreSQL
Behind the build

Next.js and React power the public site and authenticated workspaces. Prisma models the organisation’s data in PostgreSQL, while NextAuth and server-side role and team checks control access. External integrations connect community accounts, player data, and live streams.

Visit live site (opens in a new tab)

Ultimate League ToolKit

A desktop companion for League of Legends, built around the local client API. Track ranks and match history, build and import rune pages, and manage everyday client tasks with notifications and handy utilities.

Open source under the MIT licence, with contributions welcome. Explore the code, learn from it, or help shape what comes next.

  • Electron
  • React
  • TypeScript
  • Vite
  • LCU API
Explore on GitHub (opens in a new tab)
FEATURED REPOSITORYPublic repository

Riot Match Analytics

A League of Legends analytics service that turns Riot API match data into player profiles, match summaries, and performance trends. Look up players by Riot ID, with account resolution handled behind the scenes.

Built with FastAPI and independently testable analytics functions. Constrained concurrency and retry handling respect Riot’s API limits, while Pytest checks run locally and in CI, with Docker keeping the workflow consistent.

  • Python
  • FastAPI
  • HTTPX
  • Pytest
  • Docker
  • Riot API
Explore on GitHub (opens in a new tab)

PiltoverClient

A reusable PHP client for the Riot Games API, ready for standalone projects and Laravel applications. Resolve players by Riot ID, retrieve summoner profiles, and explore match histories with regional routing handled automatically.

Guzzle powers the requests, with a Laravel facade and helper for straightforward integration. Bundled OpenAPI documentation and a ReDoc viewer make the API easier to explore, while PHPUnit covers the client and Laravel integration.

  • PHP
  • Laravel
  • Guzzle
  • Composer
  • PHPUnit
  • OpenAPI
Explore on GitHub (opens in a new tab)

RiftJS

A TypeScript-first Node.js library for building with League of Legends data. Retrieve player profiles, ranked summaries, match histories, and timelines, alongside champion and item data through built-in Data Dragon support.

Published on npm with TypeScript declarations and CommonJS support. Regional routing, paginated match fetching, and optional request pacing help developers connect their tools to Riot’s APIs with less setup.

  • TypeScript
  • Node.js
  • Axios
  • npm
  • Riot API
  • Data Dragon
Explore on GitHub (opens in a new tab)

02 / THE CRAFT

The whole picture.
Down to the details.

I like connecting the dots — from the first interaction to the query behind it.

The interface

Responsive layouts, thoughtful interactions, and a component system that stays consistent as a product grows.

ReactNext.jsVueTypeScriptTailwindFramer Motion
A TOOLKIT, NOT A CHECKLIST.
01

Make it clear.

Readable code. Understandable interfaces. Fewer surprises for everyone.

02

Make it hold up.

Test the important paths. Watch performance. Build for what comes next.

03

Make it feel right.

Motion with a purpose. Feedback at the right moment. Details that earn their place.

James Timms, the person behind the code
JAMES TIMMSTHE PERSON BEHIND THE PIXELS ↗
Yep, that’s me.

03 / A BIT ABOUT ME

A developer.
Always a builder.

I’m James, a full-stack software engineer building for the web since 2021. I enjoy the space where practical engineering meets a thoughtful user experience.

My work spans Laravel, React, and Vue, with a focus on performance, migrations, and making complex things easier to work with. I care about leaving a codebase better than I found it — and helping the people around me do the same.

Away from the usual app work, you’ll find my curiosity in gaming tools, live broadcast overlays, and exploring what match data can tell us.

5+YEARS BUILDING
Full-stackFROM UI TO INFRASTRUCTURE
The longer story? It’s in my CV
OPEN TO THE RIGHT OPPORTUNITYGOT SOMETHING IN MIND?

Let’s build
something good.

jtimms1998@gmail.com

A role, a project, or a good conversation. My inbox is open.