Nnaemeka Nwakaudu
Nnaemeka Nwakaudu.

Open to analyst rolesMiddlesbrough, UK

Nnaemeka
Nwakaudu.

Data and BI Analyst, turning operations into insight. Three years inside Amazon's logistics network taught me where the numbers come from.

Selected work

A short working history.

Experience

  1. Jun 2024 to Jan 2026

    Operations Specialist

    Amazon DSP, Kingston upon Hull

    Built shift-KPI dashboards and ran trend-driven risk assessments, cutting incidents by 10%. Process standardisation lifted shift efficiency 12%. Held 98% on-time delivery and onboarded 15+ associates.

  2. Jan 2024 to Aug 2024

    Data Analysis Intern

    Correlation One, UK programme

    Python, SQL and Excel pipelines for 30% better decision efficiency. Tableau dashboards for stakeholder reporting. Automation scripts cut processing time 25%.

  3. Oct 2023 to Jan 2024

    Interim Operations Supervisor

    Amazon DSP, Hull

    Led outbound during peak: 1M+ unit shipments in 14 days, a station record. Real-time workflow rebalancing and team briefings.

  4. Nov 2022 to Jun 2024

    Outbound Flow Operations

    Amazon DSP, Kingston upon Hull

    Sortation supervision with a 95% sort-compliance scorecard. Co-designed performance metrics with shift leaders.

  5. Nov 2020 to Oct 2022

    Software Developer

    iStarNet Technologies, Owerri, Nigeria

    Android and Jetpack Compose. Shipped mobile apps that raised user retention 25%, led code reviews, and optimised algorithms for a 15% performance gain.

From the delivery station to the dashboard.

Three years inside Amazon's last-mile network taught me what a metric looks like when it's right, when it's gamed, and when it's just noise.

More about me

Open to analyst roles in BI, data and operations analytics.

AgentChat

A chat app for your own AI models, on Android and Windows. Conversations are saved on the device, not on a server. I designed it, built it and submitted it to Google Play.

Role
Design, build, testing and store submission
Year
2026
Platforms
Android and Windows
Built with
Flutter, Dart and Java
Design file
Figma
  • 2Apps, Android and Windows
  • 4Kinds of server, local and cloud
  • 5Files per message, 20 MB each

The brief

Running a model on your own computer keeps your questions private and costs nothing per message. The catch is the interface. It sits in a browser on one machine, and it stops being useful the moment you leave the desk.

So the brief was short. Use my own model from my phone. Keep every chat, searchable. Make setup something a person can finish from the guides inside the app.

Models forget

A model can only read so much at once. The app has to decide what to keep.

Phones sleep

Android cuts the connection when you switch apps, and a reply stops half way.

Tokens cost money

On a paid service every word is billed, so a long reply needs a limit.

How it connects

AgentChat sends one kind of request, the OpenAI chat format, so the same chat works against every server. For a model at home there are three ways in: the same Wi-Fi, Tailscale, or a Cloudflare Tunnel. Cloud services connect directly.

AgentChat Android or Windows Your model LM Studio, on your own computer Same Wi-Fi Tailscale Cloudflare Tunnel Straight over the internet A cloud service OpenAI, DeepSeek, Groq

Setup guides for every route are built into the app, with steps you can tick off and commands you can copy.

Screen anatomy

The chat screen has five parts. Everything else lives in history and settings.

A
B
C
D
E
  • AHeaderThe model in use and its connection, with past chats, a new chat and settings one tap away.
  • BAgent tabsGeneral, Photo reader, Problem solver, Researcher or your own. Each is a saved set of instructions and tools.
  • CMessagesReplies stream in. The model's thinking sits in a collapsible section, and each reply shows its speed.
  • DMemory meter and thinkingA thin gauge shows how full the model's memory is. Fast, Balanced or Deep sets how hard it thinks.
  • EMessage boxType, dictate, or attach files and photos.

The design

Every screen was drawn in Figma before it was built. The file below is the working design, live. Drag to move around the canvas and scroll to zoom in on any screen.

The AgentChat design file. If the preview does not load, open it in Figma.

Open in Figma

The screens

The same design on both platforms. Light and dark themes, with the conversation as the main thing on screen.

Chat. An example conversation. Attached files are read as text.
Settings. Connection status first, then a short list that opens each group.

What I decided

Four problems took most of the thinking. Each one was a number that had to be chosen and then checked.

Memory that looks after itself

Every model has a window of text it can read at once. AgentChat counts what is in use and shows it as a gauge. It treats 60% of the window as usable, so the reply has room.

When a chat reaches 85% of that, the model writes a short summary of the older messages (context compaction). The recent ones stay word for word, and the chat carries on at about 50%. The older messages stay on screen for you to read.

Replies that survive switching apps

Android puts an app to sleep soon after you leave it, and a sleeping app loses its connection. While a reply is being written, AgentChat runs as a foreground service. The notice shows the model, a timer and a Stop button.

If the connection still drops, the app asks again by itself, twice, before it shows an error.

A cap on what a reply can cost

On a paid service every token is billed. I added three options. All are off by default, and none appear for a local LM Studio server, where a long reply costs time and no money.

  • Reply length. Short, Medium or Long, with a hard cap on the reply.
  • Short answers. One line added to the instructions that asks the model to lead with the answer.
  • Long message warning. A note under the message box before a huge paste goes out.

OpenAI names its cap differently from everyone else, so the app asks each server the way it expects and corrects itself if one refuses. Models that think count their hidden reasoning against the cap, so they get 8,000 tokens of room on top.

Reply length and the cap it sets
SettingAboutCap
Short500 words700 tokens
Medium1,500 words2,000 tokens
Long3,000 words4,000 tokens

Help where the errors are

Most failures are about the connection, not the app. Setup guides for each route sit inside it, with steps you tick off and commands you can copy.

A Fix a problem screen runs a live check on your settings, matches the error you are seeing to a fix, and can be searched. Contact support opens a ready email and adds setup details only if you choose. Tokens and keys are never included.

RoleDesign, build, testing and store submission
Built withFlutter, Dart and Java
PlatformsAndroid (1.0.0, build 6) and Windows
ChecksUnit tests against a fake server, and a script that confirms the release build is obfuscated
Next case studyEngland emissions map

England emissions map

An interactive map of emissions across England, drawn in D3.js from UK local authority statistics. Pick a year from 2020 to 2023, hover or tap an area, and read its figures.

Role
Data cleaning, design and D3 build
Made for
A data visualisation project at Teesside University
Built with
D3.js, JavaScript, HTML, CSS and Excel
Data
UK local authority emissions, 2005 to 2023
  • 296English local authorities in the cleaned data
  • 4Years you can switch between
  • 5Colour bands on a fixed scale

The data

The source is the UK government's local authority and regional greenhouse gas emissions statistics, 2005 to 2023. It gives each authority's emissions in kt CO2e by sector (industry, commercial, public sector, domestic, transport, land use, agriculture and waste), with population and area alongside.

I cleaned it in Excel first. Authorities outside England went, and so did the zero rows. That left 296 English local authorities across 19 years, 5,624 rows. The same workbook holds the tables behind a bar chart, a tree map, a pie chart and a multi-line chart. The map is the part I built in D3.

How the map works

Two files load together. One holds boundaries for 326 English districts. The other is a table with a row for each of 148 areas in each year, taken from the workbook's second tier authority column. D3 joins them by name in the browser.

Clean

Summary rows are dropped and text becomes numbers, so each row is one area in one year.

Divide

The emissions figure is divided by population for every row. That ratio is what the map is coloured by.

Colour

A threshold scale sorts each ratio into one of five bands, and the shape is filled to match.

What the figure is. The dashboard's emissions column is the workbook's emissions per square kilometre, so the map colours that density divided by population. The live page calls it per capita emissions. It is not, and the last decision below covers the fix.

The dashboard

This is a redraw of the live dashboard, built from its own boundary and emissions files. Choose a year, hover or tap an area, and click one to zoom in. Click the background to zoom back out.

Redrawn from the live dashboard. Where its labels are wrong, I have used the right ones.

Open the live dashboard

Reading the screen

  • AData yearFour years, 2023 first. The map recolours and the highest and lowest cards update.
  • BSelected areaHover or tap an area to see its emissions per km² in kt CO2e. A tooltip adds the population and the value the colour comes from.
  • CHighest and lowestThe areas with the highest and the lowest emissions per km² in the chosen year.
  • DThe mapHovering dims the rest. Click zooms in and a click on the background zooms out. The live version also zooms with scroll or pinch and pans by dragging.
  • EColour scaleFive bands with fixed breaks, so a colour means the same thing in every year.

What I decided

Four things shaped how the map reads, and one of them is a fix I still owe it.

One scale for every year

The breaks sit at 0.02, 0.04, 0.08 and 0.15, and they do not move when the year changes. A colour means the same thing in 2020 and in 2023, so a shape that changes colour has changed band, and the scale has not shifted under it.

The legend stays put for the same reason.

  • 0 to 0.02 Lowest
  • 0.02 to 0.04
  • 0.04 to 0.08
  • 0.08 to 0.15
  • 0.15 and above Highest

Areas drift down the scale

Across the 117 areas the map can draw, the middle band shrinks from 40 areas in 2020 to 34 in 2023, while the two lowest bands grow from 63 to 71.

The top band is inner London in every year: seven areas in 2020 and six in 2023, after Tower Hamlets slips down a band.

A tap does what a hover does

A phone has no hover, so the same handler also listens for touch. Tapping an area dims the rest and fills the readout, just as pointing does.

On a narrow screen the sidebar becomes a bar across the top, the cards sit two to a row and the legend steps aside to save room. The map gets a fixed height so the page can still scroll past it.

Two things I would fix

The measure. The dashboard is titled per capita, but its colours come from emissions per km² divided by population. The workbook already holds a true per capita column, in tonnes of CO2e per person. Using it changes the picture, as the table shows.

The grey. The table has 148 areas and the map can draw 117. The boundary file holds 2013 districts, so county rows such as Devon, Essex and Kent match no district and stay light grey. Those county figures are also sums of their districts' densities, which cannot be added up that way. The next version should colour by the per capita column and give each county's districts the county's figure.

Highest areas in 2023, by two measures
RankOn the map nowPer capita, t CO2e per person
1City of LondonCity of London, 35.2
2Kensington and ChelseaNorth Lincolnshire, 29.8
3WestminsterRutland, 19.6
RoleData cleaning, design and D3 build
Built withD3.js, JavaScript, HTML, CSS and Excel
DataUK local authority emissions statistics, 2005 to 2023
Inspired byThe D3 Graph Gallery hover choropleth
Next case studyAgentChat

About

From the delivery station to the dashboard.

Three years inside Amazon's last-mile network taught me what a metric looks like when it's right, when it's gamed, and when it's just noise.

Where I come from

Outbound flow, then Operations Specialist at an Amazon delivery station in Hull. Shift KPIs, risk assessments and a station record of 1M+ units in 14 days.

Where I am now

An MSc in Business Intelligence and Analytics at Teesside University, 2026. Big data, decision analytics and interactive visualisation.

Where I'm going

An analyst role in BI, data or operations analytics, anywhere in the UK. I'm based in Middlesbrough.

  • Python
  • SQL
  • D3.js
  • Tableau

Operations gave me the questions. Analytics gives me the answers.

  • 3+Years at Amazon DSP
  • 1M+Units in 14 days, a station record
  • 30%Decision efficiency

See the AgentChat case study

Contact

Open to analyst roles in BI, data and operations analytics.

I'm based in Middlesbrough and looking across the UK. You can reach me on LinkedIn.