Projects · Internal tool

IT-shop

An internal IT ordering portal for an organisation, built from scratch. Staff order a computer as a complete package instead of separate parts, approvers and IT get a complete case, and admins have the catalogue, cost centres, rights, statistics and operations in one place.

The shop Product pages Orders and approvals Inventory Statistics Cost centres and delivery Managing the catalogue Roles, delegation and logs Operations On a phone

The screenshots are anonymised: the organisation's name and logo, people, e-mail addresses, cost centres, addresses, order numbers and prices are removed or blurred. The interface is in Swedish.

Order

The shop

The start page explains the whole flow in four steps and leads with complete computer packages: a laptop or a desktop with screens and a dock, rented as one item, so IT gets a complete case instead of a list of spare parts.

Screenshot of the IT-shop start page in a dark theme: the heading Beställ datorn som ett paket, inte som reservdelar, four numbered steps from choosing a package to IT placing the order, and cards for a mobile and a stationary workstation with photos of laptops, screens and a dock. Prices are blurred. (open full size)
Shop start page
Set it up

Product pages

A product page is a small configurator. The buyer picks the options, says who will use the computer and which programs it needs, and sees the price change before anything goes in the cart.

Screenshot of a product page for a mobile workstation: a photo of a laptop with two screens and a dock, options for one or two screens, screen model, webcam, extra charger and wireless keyboard and mouse, and a section for a personal or shared computer with an empty e-mail field. Prices are blurred. (open full size)
Product page
From cart to supplier

Orders and approvals

At checkout the buyer picks a cost centre among the ones they may order for and a delivery area, and can add a delivery instruction and where the equipment will be placed. If the cost centre has an approver the order waits for them; then IT gets the whole case by e-mail and moves it on step by step.

Screenshot of the checkout: fields for cost centre and delivery area, an empty delivery instruction field and a placement or comment field, beside a summary of the order with a keyboard and mouse combo, freight, what is sent for approval and a button to send the order to IT. Prices are blurred. (open full size)
Checkout
After delivery

Inventory

Delivered equipment ends up on one page: everything the person leases, plus the equipment on cost centres they have rights to. Each row shows what it is, which cost centre pays for it, who it is assigned to, when it was ordered and how much warranty is left.

Screenshot of the inventory page in a dark theme: the heading Mina inventarier, a short intro about warranty times, a search field, a row of cost-centre filter chips, buttons for decommissioning, filters and all equipment, and a table with rows for laptops and a USB-C dock showing cost centre, assignee, order date, warranty end date and months left. Cost centres, people, serial numbers and order numbers are placeholders and prices are removed. (open full size)
My inventory
Screenshot of one inventory row for 20 laptops: the product name, program, order number, a line with 20 serial numbers and, beside it, 20 assignments, one per computer, followed by the order date, the warranty end date and months left. The cost centre, order number and program are placeholders, several serial numbers and assignments are replaced with neutral values and prices are removed. (open full size)
Per-unit assignment and serial numbers
Screenshot of the assignment form opened in an inventory row for a USB-C dock: radio buttons for shared, personal or special, then fields for type (display screen), location (Mötesrum 2) and purpose (Information), with Spara and Avbryt buttons. The cost centre and order number are placeholders and prices are removed. (open full size)
Changing an assignment
Overview

Statistics

One page shows how the shop is used: the last 30 days plus the active agreements, with every number a link to the orders behind it.

Screenshot of the statistics page: rows of key figure cards, a line chart of orders per day, a bar chart of rent and purchases per day, a status donut chart and bars for rent, buy or both. The figures and counts are blurred. (open full size)
Statistics
Who pays, where it goes

Cost centres and delivery

Cost centres follow the organisation's directory as a tree of groups and places. Each place can be linked to a delivery address, so the buyer only picks a cost centre and the address follows.

Screenshot of the cost centre admin page: an explanation of the tree, buttons for tree, new place, delivery link and new group, a search field, blurred group bubbles, and forms to add a cost centre, link delivery areas and create a group. (open full size)
Cost centres
Catalogue

Managing the catalogue

Admins keep the catalogue up to date themselves: products, the add-ons in each package, the application packages and the delivery areas, without touching the code.

Screenshot of the product admin page: a search field, filters for category, payment, status and sorting, and a list of products such as Mobil arbetsstation, Laptop ThinkPad T14s Gen 6 and Lenovo USB-C-dockningsstation with a thumbnail, buttons to crop the image or remove the product, and blurred prices. (open full size)
Products (admin)
Accounts

Roles, delegation and logs

Rights are given per person and scope rather than all or nothing, and every change can be traced.

Screenshot of the delegation admin page: a form to assign rights by e-mail and scope with checkboxes for buyer, approver and view and a period, a form to copy rights to a new manager for approval, and filter chips such as time-limited, substitute and holiday. The fields are empty. (open full size)
Delegation
Behind the scenes

Operations

The shop reports on its own health, so problems show up in the admin before users notice them.

Screenshot of the system information page: a status banner, host figures for load, memory and disk, checks for the database, response time and migrations, and the first services and APIs, such as the database, login, the health check, catalogue images and e-mail, with their status. (open full size)
System information
Works on a phone

On a phone

The whole shop works on a phone: the start page, the catalogue and the configurator, all the way to the cart.

Built with

Stack

ReactTanStack StartTypeScriptViteTailwind CSSRadix UIBetter AuthPostgreSQLKyselyZodRechartsDocker
Who made it

Tony's role

Tony's own project, from idea to production: he designed the ordering flow, the data model and the admin, built the shop and its tests, and runs it in Docker on self-hosted infrastructure with separate test and production sites.

All projects