Waha Bosch Auto Service · Bosch Car Service center
47,000 workshop Excel files turned into one source of truth and an AI assistant
A three-branch car-service business ran on about 47,000 Excel files, with the same customer, car or part written many ways and transfer receipts arriving as phone screenshots.
About 47,000 scattered files turned into one source of truth.
The same customer, car or part recognised across every spelling.
Branch performance on Power BI dashboards, and an assistant that answers from the data and price lists.
select i.payment_id, i.order_id, i.instalment_no, i.instalments, i.payment_type, i.customer_state, i.order_date, i.cash_date, i.amount, case when i.cash_date is null then 'Never paid' when i.cash_date <= r.report_date then 'Received' else 'Due' end as status,
The code · 2_rules.sql
1 / 9
Ready to set up
Project · Daily cash dashboard
Knowing where 76% of the money comes from, every day
103,886 payments 76% of the cash in arrived by credit card, and BRL 1.56 million was still due on instalments.
Today's cash on one page, not at month end.
Instalments still due and late payments listed.
The payment methods and regions that bring the money in.
Our asking price per m² against 5,619 competing listings, every week
A developer or brokerage selling units in Egypt's growth areas checks competing listings by hand now and then, so nobody can say how its asking price per m² compares with the units around it, or who cut their price.
Our asking price per m² set against the market every week, area by area.
The areas and units where we ask most above the median of their type.
Every price kept with its week, so a competitor's cut shows up the week it happens.
ranked = sellers.sort_values("late_rank").reset_index(drop=True)cum = ranked.late_items.cumsum() / ranked.late_items.sum()share = numbers["top sellers: share of late items"] * 100fig, ax = plt.subplots(figsize=(8, 3.6))ax.plot(range(1, len(cum) + 1), cum * 100, color=ACCENT, lw=2)ax.axvline(TOP_N, color=GREY, ls="--", lw=1)ax.set_xlabel("Sellers, most late items first")ax.set_ylabel("Share of all late items (%)")
The code · analysis.ipynb
1 / 9
One warehouse for sales, suppliers and departments
99,441 orders in one star schema: 100 of 3,095 sellers account for half of all late-delivered items.
- name: AI & Data Engineer search: [AI Data Engineer, Data AI Engineer, ML Data Engineer] title_needs: - [data] - [ai, ml, genai, llm, llms, machine learning] - [engineer*, developer*]- name: Data Engineer
The code · settings.yaml
1 / 8
Every new data and AI job from 22 sources, ranked and emailed every day
Open-source product: 22 sources, 121 company career pages in Egypt and a crawl of 28,000+ more, merged into one ranked list every day.
for attempt in range(8): response = http.get(url, params=params or None, timeout=60) if response.status_code not in (429, 503): break wait = response.headers.get("Retry-After", "") time.sleep(int(wait) if wait.isdigit() else 2 ** attempt)response.raise_for_status()return response
The code · tracker.py
1 / 8
Ready to set up
Knowing every competitor price change on 356 products, every week
356 products across 10 stores: 127 price changes caught, each within one run.
WORST_SUPPLIER_SQL = """SELECT s.supplier, COUNT(*) AS late_linesFROM star.fact_order_line fJOIN star.dim_product p USING (product_key)JOIN star.dim_supplier s USING (supplier_key)CROSS JOIN star.client_setting cWHERE DATE_TRUNC('week', f.due_date)::date = %(week)s AND f.delivered_date > f.due_date + c.on_time_grace_days
The code · summarize.py
1 / 8
Ready to set up
Showing the suppliers behind 29% of late deliveries
98,666 orders: 29% of late deliveries started with a supplier's late hand-over, and 61 suppliers with 4.4% of deliveries accounted for 12% of them.
WITH sale_orders AS ( SELECT order_id, customer_id, CAST(purchased_at AS DATE) AS order_date, CAST(delivered_at AS DATE) AS delivered_date, CAST(estimated_at AS DATE) AS estimated_date FROM orders WHERE list_contains($sale_statuses, status)),
The code · checks.sql
1 / 8
Ready to set up
Showing which sellers and states deliver late, and what it costs in reviews
96,478 orders: late orders scored 2.27 stars against 4.29 on time, and the top 10% of sellers brought 67% of revenue.
offers.append({ "listing_key": str(p["id"]), "title": p["title"], "price": price, "currency": "EGP", "is_discounted": bool(price and was and was > price), "url": f"{base}/products/{quote(p['handle'])}", "brand": (p.get("vendor") or "").strip() or None, "part_no": scrape.part_code(variant.get("sku")), "in_stock": variant.get("available"),})
The code · nautoexpress.py
1 / 7
Ready to set up
Seeing where every spare part is cheaper, across 13 Egyptian sellers, every week
28,825 prices from 13 sellers in one weekly run: 88 of the 154 parts sold under the same part number (57.1%) have a seller at least 5% below the market's middle price.
overview = q('''SELECT count(*) AS sales_rows, count(DISTINCT order_key) AS orders, count(DISTINCT customer_key) AS customers, count(DISTINCT product_key) AS products, min(order_date) AS first_order, max(order_date) AS last_order, round(sum(quantity * net_price)) AS sales_all_yearsFROM sales''')
The code · analysis.ipynb
1 / 6
Ready to set up
Rebuilding a slow sales report without changing a single number
2,098,633 sales rows: one 35-column table rebuilt as a star schema of 4 tables, every number matched against SQL before and after.
Daily order files loaded into a lakehouse, with every file kept
Order files pile up on shared drives, with no single source of truth and no history.
Results coming soon
Project · Delta lakehouse
Stay tuned
Supply-chain KPIs every analyst can trust
Every team calculates lead time and fill rate differently, so the same question gets different answers.
Results coming soon
Project · Supply-chain marts
Stay tuned
Catching bad supplier data before it reaches reports
Supplier and product master data has no owner, no lineage and no checks, so errors surface in the reports.
Results coming soon
Project · Master-data governance
Stay tuned
Daily demand from years of sales, recomputed every morning
Demand planning runs on slow spreadsheets that can't hold years of item-level sales.
Results coming soon
Project · Department demand at scale
Stay tuned
Warning before stock runs out
Stock-outs show up in yesterday's report, after the sales are already lost.
Results coming soon
Project · Real-time stock alerts
Stay tuned
Keeping supplier feeds loading when their files change
Nightly loads break when a supplier renames a column or changes a unit, and reports go stale until someone fixes the code.
Results coming soon
Project · Self-healing ingestion
Stay tuned
Catching supplier overbilling before it is paid
Accounts payable pays supplier invoices that don't match the purchase order or the delivery: wrong prices, short shipments and duplicates, because nobody checks every line by hand.
Results coming soon
Project · Supplier invoice check
Stay tuned
Answering managers' data questions in seconds
Managers wait days for an analyst to pull a simple number, and analysts spend their week on repeat requests.
Results coming soon
Project · Ask your warehouse
Stay tuned
Finding the penalty clause before the supplier does
Payment terms, penalties and termination clauses are buried in hundreds of supplier contracts, and buyers miss them.
Results coming soon
Project · Contract assistant
Stay tuned
One clean product record per item, across every supplier
The same product is listed by several suppliers under different names, with missing attributes, so stock and sales split across duplicates.
Results coming soon
Project · Catalog SKU matching
Stay tuned
Letting any AI assistant read the warehouse safely
Teams want AI assistants on their data, but giving a model database access is risky.
Results coming soon
Project · Warehouse MCP server
Stay tuned
Taking order-status questions off the support team
E-commerce support teams drown in order-status, return and refund messages.
Results coming soon
Project · Customer-service agent
Stay tuned
What customer reviews say about each supplier
Quality problems hide in thousands of reviews that nobody has time to read.
Results coming soon
Project · Review intelligence
Stay tuned
Arabic shoppers finding products on the first search
Arabic and dialect searches return nothing on most stores, and the sale is lost.
Results coming soon
Project · Arabic product search
Stay tuned
A supplier risk brief in minutes
Buyers sign or renew suppliers without checking news, financial and delivery risk signals.
Results coming soon
Project · Supplier risk agent
Stay tuned
AI cost per department, visible and capped
AI bills grow with no owner and no limits, and private data can leak into prompts.
Results coming soon
Project · LLM gateway
Stay tuned
A small model that understands Egyptian shoppers
Generic models misread Egyptian dialect messages, so bots send the wrong answer.
Results coming soon
Project · Egyptian Arabic model
Stay tuned
Delivery calls handled without a call centre
Customers and drivers call to ask when and where an order will arrive, and the phone never stops.