Ben Thompson

software developer

× LibreOffice AI

AI Assistant for LibreOffice

Windows app integrating local AI with LibreOffice Writer and Impress, allowing you to create and edit documents and presentations using a chat interface.

For my dissertation project, I worked on an application integrating local AI with the open-source software LibreOffice. The aim was to make it possible to bring AI capabilities to LibreOffice without requiring an expensive subscription.

I built the application for Windows using C# and the WinUI3 GUI framework.

To interface with LibreOffice, I used an MCP Server connected to LibreOffice's built-in UNO API. The MCP server exposed a set of tools which could perform actions in Writer and Impress.

Inside my application, I ran a local AI model (Qwen 3), using Ollama. By connecting to the MCP Server, the AI could respond to requests by performing actions in LibreOffice.

For example, if you ask it to create a presentation on a topic, it would generate an Impress presentation, apply a template, and add some initial slides with headers and bullet-points.

This project taught me a huge amount, especially about the architecture of AI applications, and how to optimise local AI performance.

If you're curious about the project, you can find more details (and the code) in the Github repo below.

Built with:
C#
WinUI3
Ollama
MCP
Python
Qwen 3
Pytest
× Sapphic Bison Internal Platform

Sapphic Bison Internal Platform

Secure management system to handle blood test orders using Next.js, Prisma & PostgreSQL

Together with a team of students at UCL, I built an order management platform for Sapphic Bison, a non-profit organisation providing blood tests for trans people across the UK.

The platform was designed to provide easy order tracking and management alongside data analytics, internal notifications, and integration with email and lab APIs.

For the frontend, I used Next.js and Material UI to create a full operational dashboard that allows staff members to view and change order details, manage profiles and permissions, generate PDF test results, and visualise order trends.

On the backend, I used a PostgreSQL database with Prisma for ORM. Secure authentication and authorisation was implemented using Auth.js.

Built with:
Next.js
Material UI
React
TypeScript
PostgreSQL
Prisma
Auth.js
× Album of the Year Website

Album of the Year Website

Fullstack project, built with the MERN stack, which shows users a list of selected albums filtered by year & genre

At the end of every year, I like to put together a list of my favourite albums.

So I had the idea to put this online, as a visual record of all the albums I'd enjoyed over the years. I also wanted it to be possible to filter the albums by year, genre, and if they had been selected as the 'winner' of that year.

It seemed like an ideal opportunity to use React, as I could then dynamically generate the list of albums depending on the filters selected by the user. On the backend, I used an Express router with NodeJS, and connected the site to a MongoDB database stored on MongoDB Atlas.

I still have plans to develop the site further, as I think there's lots of potential extra functionality that could be added!

Built with:
React
NodeJS
Express
MongoDB
HTML
CSS
SASS
JavaScript
× Tutoring Website

Tutoring Website

Personal website to advertise tutoring business, created with HTML, CSS & JavaScript

My first website, made to advertise my business as a tutor of English and Maths.

This was one of the inspirations in teaching myself to code, as I knew a personal website would be beneficial. I decided to make it from scratch with HTML, CSS & JavaScript, and learnt a lot along the way!

Fully responsive for mobile layouts and optimized for SEO.

Built with:
HTML
CSS
JavaScript