Skip to content

Case study · sheet metal and metalworking · powder coating

Software for a metal fabrication and powder coating shop

Lakotech is a contract sheet-metal and metalworking shop with its own powder coating line. Material, thickness, quantity and operations lived only in DXF file names. Finding out where a part stood meant asking people on the shop floor, and paint jobs went through a WhatsApp group and a paper notebook. I built the shop one app that carries an order from a folder of drawings, through the shop floor and the paint shop, to delivery notes, labels and suggested invoice prices.

Words and code: Rafał Szewc, software engineer, RS Mobile

  • 16 modules in one app
  • 11 months of development at the client, module by module
  • 15 min at most before a new order on the drive appears in the system
Industry
Contract sheet-metal and metalworking for other companies, powder coating
Scope
Orders, production plan, paint shop, quotes, delivery notes, labels, invoice prices, purchasing
Technology
Java 21, Spring Boot, Angular, MySQL, Elasticsearch, Docker; AI: OpenAI GPT-4o via LangChain4j
Period (from git history)
Nov 2025 – Oct 2026, built in stages
Status
Running on the client’s own NAS server, on site.
01 · RAL 7035

How it worked before

The shop had all the data, just scattered. The drawing’s file name told you the most.

Order folder on the drive

  • LT-1482D order number
  • BRYKOMET customer
  • 260930 received 30 Sep 2026

Drawing file in that folder

  • S235 material
  • 5mm thickness
  • 2pcs quantity
  • C cutting
  • Gw tapping
  • P sandblasting
  • M7016M powder coat, RAL 7016 matt
  • 1482D order no.
  • BRYKOMET customer
  • mounting plate description
  • .dxf 2D drawing
File-naming pattern inside an order, with the shop’s operation codes; words translated from Polish. Fictional data.
  • Orders

    An order was a folder on the drive with DXF, STEP and PDF files. Material, thickness, quantity and the sequence of operations were recorded only in the file names.

  • Production status

    There was no single place showing the stage of each part. You checked the folders, including copies in the “done” folders, or asked people on the shop floor.

  • Quotes

    They were calculated from drawing dimensions. The first attempt at automation was a separate script that turned DXF files into an Excel sheet.

  • Invoices, delivery notes, labels

    Invoice prices were looked up in old invoices in spreadsheets. The customer’s order number was retyped onto delivery notes and labels.

  • Paint shop

    A job was a post in a WhatsApp group, “photos + colour + instructions”, and a line in a notebook. Paint was weighed and billed per kg outside any system, and oven loads were planned from memory.

  • Purchasing

    Shortages, such as “we’re out of sandblaster nozzles”, were reported on WhatsApp. The owner searched old emails for where he had last ordered the part and sent the same enquiry to several suppliers.

02 · RAL 5015

What I built

One app in the browser: the office works in it on computers, the shop floor on tablets. An order travels through it from a folder of drawings to delivery notes, labels and invoice lines.

  1. 01 DXF folder from the drive every 15 min
  2. 02 Order items with thumbnails
  3. 03 Operations C · G · Gw · P · Sz
  4. 04 Paint shop job, RAL, batch
  5. 05 Delivery notes and labels PDF and TSC 50×30 mm
  6. 06 Invoice prices suggested from past invoices

Orders

A folder of drawings becomes an order

Every 15 minutes the system reads the order folders on the company drive. Each file becomes an item of the order, and the system reads the operations from its name. A CAD service adds the thumbnail and dimensions in millimetres: in a batch every 5 hours, or straight away at the push of a button. The Pending, In progress and Done statuses update themselves; Picked and Dispatched are ticked by hand.

Orders — a folder of DXF drawings as an order: items, operations, statuses. App screenshot with fictional data — labels translated from the Polish interface.

Production

A Today / Tomorrow plan for the shop floor

The office drags orders into the Today and Tomorrow columns. A worker logs in with a phone number and a 4-digit PIN, sees only the operations for their own workstation and ticks off each step with one button. The app records who did it and when, and a mistake can be undone.

  • machine photos next to each step
  • a Picking tab with a PDF list
Production — the Today / Tomorrow plan, office view. On a tablet, a worker sees only the operations of their own workstation. App screenshot with fictional data — labels translated from the Polish interface.

Paint shop

A paint shop with a bot in the WhatsApp group

A paint job becomes a job card with a number, photos, RAL colour, quantity and share of the oven. The bot (OpenAI’s GPT-4o) reads the paint shop group, photos included, opens the job and asks only for a missing colour. The board suggests how to fill each oven batch up to 100%, and paint is weighed before and after coating, with a photo of the scale.

Paint shop – jobs WhatsApp group · Thursday 8 Oct
  1. Leszek Motor guards, 12 pcs, Termasz, for tomorrow
  2. Paint Shop Bot New job T-2026-076 Motor guards · 12 pcs · TERMASZ Colour: not given — reply here and I’ll add it. Due: Fri 9 Oct
  3. Leszek 9005 matt
  4. Paint Shop Bot Updated T-2026-076 RAL 9005 matt (was: not given)
Illustration of an exchange in the paint shop group, translated from Polish. Fictional data.
Paint shop — jobs from the WhatsApp group, RAL colours and oven batches. App screenshot with fictional data — labels translated from the Polish interface.

Quotes and invoice prices

Quotes and invoice prices that remember past prices

“Create quote” saves an Excel sheet with thumbnails, dimensions, material and the net total in the order folder; GPT reads the file names along the way. For invoice lines the system shows up to 5 prices from past invoices for each file, one per year, and warns when the material or thickness was different back then. The app does not issue the invoice itself; every hour it reads from Google Sheets what has already been invoiced.

  • match score in percent
  • material prices per customer
  • invoicing status on the order list
The “Prepare invoice” page, step 1: invoice lines and price suggestions from invoice history. App screenshot with fictional data — labels translated from the Polish interface.

Documents

Delivery notes, picking lists and labels

The system builds delivery notes, numbered per year, and picking lists as PDFs and saves them in the order folder. The 50×30 mm labels go to a TSC printer straight from the order. The customer’s order number is entered once and appears on the delivery note and on every label.

Label layout with the fields as printed. Fictional data.

Purchasing

newest module · Oct 2026

Purchasing straight from the WhatsApp group

The bot picks up purchasing needs from the groups and opens a request. It suggests suppliers from the company’s email archive, and the enquiry goes out from the company mailbox with 10 seconds to press “Undo”. The system reads replies every 5 minutes, and a person decides what to order.

  1. To order
  2. Enquiry sent
  3. Supplier reply
  4. Ordered
  5. Closed

Other modules · 7 of 16

  • CAD previews and dimensions
  • Duplicates and “done” folders
  • “Show in folder” in Windows Explorer
  • Company data from the GUS registry, users and roles
  • Operations with machine photos
  • LakotechBot on Telegram
  • Email Bot
03 · RAL 7016

How it works

The system lives at the client: the app and the database run in Docker containers on the client’s Synology NAS, next to the order folders. The AI features use OpenAI (GPT-4o via LangChain4j), so the data they work with leaves the premises.

On site

the client’s Synology NAS · Docker
App
Java 21 and Spring Boot, Angular front end
Data
MySQL: orders, production plan, paint shop, delivery notes, purchasing
Search
Elasticsearch: invoice and email history
Drawings
CAD thumbnail service: DXF, STEP, IGES, IPT
WhatsApp
a bridge built on an unofficial library: it signs in to WhatsApp as a linked device (like WhatsApp Web), not through Meta’s Cloud API
Drive
order folders on the company drive
Shop floor
TSC label printer on the plant network

Off site

cloud services, over the internet
OpenAI
messages and photos from the WhatsApp groups, file names for quotes, invoice line names (for price lookups), email content, Telegram questions together with the order data the bot fetches to answer them
Remote access
an ngrok tunnel to the app’s API: Telegram webhooks come in this way
WhatsApp
messages pass through Meta’s servers
Google
invoice spreadsheets the system reads statuses from
Email
the company mailbox (SMTP and IMAP)
Other
Telegram for LakotechBot; GUS, the Polish business registry, for company data by tax ID

Safeguards

  • Bot modes

    Five modes, from off to full. In observation mode the bot only logs what it would have done. After more than 10 messages in 10 minutes, or more than 30 in a day, it pauses itself.

  • The bot deletes nothing

    It does not delete jobs and does not create new customers. Jobs from WhatsApp wait for review in a dashed frame.

  • Checks in code

    Java code validates every model response and calculates dates itself. The ADMIN and EMPLOYEE roles are enforced in the UI and in the API.

04 · RAL 1023

Project timeline

The system grew module by module over 11 months, from 7 Nov 2025 to 1 Oct 2026. The stage dates come from the code’s change history.

  1. Nov 2025

    Folder import, item operations and statuses, CAD thumbnails and duplicate search. Drive sync every 15 minutes since 26 Nov.

  2. Dec 2025 – Jan 2026

    Dashboard and order tabs. Since 7 Jan, LakotechBot on Telegram has answered questions about orders.

  3. Feb 2026

    Quotes from DXF files to Excel. AI reads the file names.

  4. Apr 2026

    The pricing tool, company data from GUS, delivery notes, the TSC printer and an email archive in Elasticsearch.

  5. May – Jul 2026

    Phone and PIN login, the production plan, price history and the “Prepare invoice” page.

  6. Aug 2026

    Labels for a whole order and picking lists.

  7. Sep 2026

    Paint shop (1 Sep) and the WhatsApp bot (7 Sep), the Picking tab, “Show in folder”.

  8. Oct 2026

    Purchasing (1 Oct), the newest module in the system.

05 · RAL 6018

Results

All of this follows directly from how the system works.

  • Nobody retypes orders. A new folder shows up in the system within 15 minutes.

  • The stage of every part is visible on the order list, without digging through folders or asking the shop floor.

  • Every step on the shop floor is signed: who ticked it off and when.

  • A paint request becomes a job with a number, RAL colour and due date, and anything missing, such as the colour or a weighing, shows on the card.

  • Paint consumption comes from weighings with a photo of the scale and is billed in PLN per kg, without a notebook.

  • The customer’s order number is entered once, and history suggests the invoice price.

06 · RAL 9010

Questions I hear from manufacturers

How much does a system like this cost?

I start with a proof of concept on your own folders and drawings: it costs PLN 10,000–25,000 net (about €2,300–5,700) and takes 2–4 weeks. A system built on company data usually costs PLN 40,000–120,000 (about €9,100–27,400) and takes 2–3 months. At Lakotech the system grew in stages over 11 months. Maintenance is PLN 1,000–2,000 a month (about €230–460). Euro amounts at the National Bank of Poland rate of 9 October 2026 (PLN 4.3775 per euro).

Does our data stay in the company?

The order database, the drawings and the production plan sit on the server at the plant. What leaves is what the AI works on: messages and photos from the WhatsApp groups, file names when quoting, invoice line names, email content, and questions to the Telegram bot together with the order data the answer is about. OpenAI states that it does not use API data to train its models. The invoice spreadsheets in Google Sheets and WhatsApp itself, which runs on Meta’s servers, are in the cloud too. If some data must not leave the plant, I set up a local model on a server at your company.

How long does implementation take?

A proof of concept on your files takes 2–4 weeks; further modules follow in stages. In this project, order import with statuses was built in November 2025, the production plan in May and June 2026, and the paint shop with the bot in September 2026.

What if the only developer is no longer available?

The system runs on a server at the plant, not on mine. Ready-made scripts back up and restore the MySQL database and the Elasticsearch index. The code is standard Java with Spring Boot and Angular, with 255 backend test classes and 48 end-to-end test scenarios, so another developer does not start from scratch. Code ownership, NDA and handover terms are agreed in the contract before work starts. Ongoing maintenance is PLN 1,000–2,000 a month (about €230–460).

Will it work with the systems we already have?

Yes, because I start from what the plant already uses. For this client that means folders on a drive, invoice spreadsheets in Google Sheets, the company mailbox, WhatsApp groups and a TSC label printer. If you run Comarch ERP, SAP or IFS, I connect to it through an API or SQL views. On the first call we agree what should flow into it and out of it.

What if the bot misreads a message?

The job still lands on the board in a dashed frame with a “to review” status, so someone corrects it before painting. To start with, the bot can also run in observation mode, where it creates nothing and sends nothing.

Can WhatsApp block the bot?

It can. The bot reads the existing paint shop group as a linked device, like WhatsApp Web, through an unofficial library rather than Meta’s official Cloud API. That lets the crew keep writing where they always have, but Meta does not support this kind of connection. That is why the bot has a sending limit and an observation mode, and a paint job can always be created by hand.

07 · RAL 3020

Let’s start with one module: orders, the shop floor or the paint shop

Tell me how an order gets from receipt to invoice at your company. I’ll reply with the module I would start with and what it might cost. With RS Mobile, the first step is a test on your own folders and drawings: 2–4 weeks, PLN 10,000–25,000 net (about €2,300–5,700). On WhatsApp I usually reply within one business hour.

Rafał Szewc

Rafał Szewc

Software engineer, 12+ years, previously at SAP. You talk directly to the person who writes the code.

More about me
WhatsApp