ELIKO // SYS
X 000  Y 000 OP_MODE AUTO

LIVE

RadiaQ

Supplier quotes go in, a priced customer quotation comes out, and every price can be traced back to the document it came from.

2025-2026 · Radion Engineering · Business automation, AI

About

Quoting a robot cell means dozens of supplier parts, several currencies and the engineering hours to put them together. RadiaQ reads supplier quotes in any format, builds a parts library from them and prices a complete quotation with one consistent engine for margin, risk and labor. Every number stays linked to its source, and a person approves every new part before it is saved.

Why I built it

A quotation for a robot cell is a small engineering project in itself. Dozens of supplier parts in three currencies, engineering hours on top, and a margin that has to be right. For years that lived in spreadsheets, retyped from supplier PDFs, with no link back to the document a price came from. RadiaQ was built to give the division one library, one pricing engine and one honest answer to the question every quote raises, does this price make sense. Around it grew a small software practice of its own, with tests that check the engine against hand-calculated quotations and an AI worker that turns the team's requests into clean tickets.

What it does

Reads any quote
PDFs, scans and spreadsheets, in Hebrew or English, in shekels, dollars or euros.
A living parts library
Every part keeps its original currency and the date of the quote its price came from.
One pricing engine
Margin, risk, VAT and labor computed the same way on every quotation.
A person approves
New parts and price changes are confirmed on screen before anything is saved.
Built for a team
Each team sees only its own data, with company sign-in and a right-to-left Hebrew interface.
Statistics that sanity-check a price
Each quotation shows its hardware, software and labour split, the ratios between them, profit by type, and a warning when something looks unusual. A separate analytics view shows margin distributions across past quotations.
Versions and a change history
A sent quotation is read-only. Revisions become new versions, and every change, margin and exchange-rate changes included, is recorded in a history panel.
Price confirmed before it goes out
The system asks whether the quoted price matches, and any gap is closed with a recorded discount, so the total always equals the price sent.
Copy out for email, several ways
A quotation is copied out by system or by component, with or without prices, ready to paste into an email.
Tickets that write themselves
The team drops a bug or a wish in free text, even just a screenshot. An AI worker opens the image, asks at most three questions, checks for duplicates and files an issue with type, size, blast radius and acceptance criteria.

How it works

A supplier document is read into lines, matched against the library and approved by a person. Quotations draw on the library and one engine computes the totals.
A supplier document is read into lines, matched against the library and approved by a person. Quotations draw on the library and one engine computes the totals.

Built with

React + TypeScript · Supabase Postgres, row-level security · Supabase Edge Functions · Claude API · AG Grid · Microsoft sign-in · Cloudflare Pages · Vitest, Playwright, GitHub Actions

How it is built

Every push runs lint, a type check, the unit tests and a production build on two Node versions. A fixture test checks the pricing engine against quotations calculated by hand. A separate workflow tests team isolation against the database on every change and sweeps it every six hours. A push to the main branch deploys to Cloudflare Pages, and a rollback is a revert and a push. The database schema lives in versioned migrations.

At a glance

TYPE
Internal configure-price-quote web app
USERS
Radion robotics division, technical and sales staff
AI
Claude reads supplier quotes (PDF, image, Excel) through a server-side proxy
STACK
React, TypeScript, Supabase (Postgres), Cloudflare Pages
SCALE
517 commits over 10 months, about 1,700 automated tests
LANGUAGE
Hebrew, right to left

My role. Defined the quoting workflow and the pricing rules and built the app as sole builder.

Screens

Totals are built from the lines. Each system rolls up its own parts and the summary splits hardware, software and labor. Sample data.
Totals are built from the lines. Each system rolls up its own parts and the summary splits hardware, software and labor. Sample data.
The import review. Lines read from a supplier PDF, matched to parts already in the library, with a choice per line between a price update and a new part.
The import review. Lines read from a supplier PDF, matched to parts already in the library, with a choice per line between a price update and a new part.
Every part carries the date of the supplier quote its price came from, in the original currency and in shekels.
Every part carries the date of the supplier quote its price came from, in the original currency and in shekels.
Every source document stays on file with the parts it produced.
Every source document stays on file with the parts it produced.
The breakdown is computed from the lines. Materials against labor, labor by type of work, and the robot hardware's share.
The breakdown is computed from the lines. Materials against labor, labor by type of work, and the robot hardware's share.
The home screen. Quotation value by status, and the drafts and follow-ups that need attention today.
The home screen. Quotation value by status, and the drafts and follow-ups that need attention today.