Runbook.
Every system Stillmark touches gets a runbook the next person can follow.
These are six production systems and integrations for a global manufacturing group that runs two ERPs. Stillmark’s principal led each one before the firm was founded. Client names are left out on purpose.
01 Payment files
A manufacturing group ran two ERPs, Dynamics NAV and Business Central. Staff built bank payment files by hand from both. Every run depended on someone typing correctly and on one person knowing the process.
An n8n pipeline that produces ACH and check payment files for JPMorgan Chase directly from NAV and Business Central. The pipeline prepares the file. Finance reviews and releases it. A module of the internal operations portal, described below, later replaced the n8n pipeline.
Payment files are repeatable and auditable. Separation of duties holds: the person who builds the file is not the person who releases it.
n8n, later Python and FastAPI, Dynamics NAV, Business Central, JPMorgan Chase ACH and check file formats
02 Expense to ERP
Expense reports lived in SAP Concur. They had to land in NAV, and someone re-keyed them by hand.
An Apache Airflow pipeline. It picks up SAP Concur exports over SFTP, decrypts them with PGP, and loads them into staging tables before they post to NAV.
No manual re-keying. The pipeline runs nightly and writes a log, so anyone can see what loaded and what did not.
Airflow, SFTP, PGP, staging tables, Dynamics NAV
03 Dual-ERP portal
The business ran NAV alongside a second, industry-specific ERP. Users needed information from both and had to switch between two systems to get it.
A FastAPI and Redis backend that integrates both ERPs, and a web portal on top of it.
One screen instead of two systems.
FastAPI, Redis, web portal, Dynamics NAV, second industry ERP
A manual step between two systems? Describe it in one email to info@stillmarksystems.com.
04 Shop floor
Machine operators on a manufacturing floor needed to run each production job and have the results reach the ERP.
A touchscreen web application. An operator scans a badge and sees the job queue for their machines. The operator consumes raw material by lot, records quality and machine parameters, reports output and scrap, prints labels, and posts the journals to Dynamics NAV. A traceability view links the components, operations, and sales orders behind a production order.
One system takes a job from raw material to posted output, with every lot traceable.
React, TypeScript, FastAPI, SQL Server, Redis, Dynamics NAV, label printers, Docker
05 Operations portal
Pricing, customer service, supply chain, warehouse, and finance each did routine work against the same ERP data.
One web portal, with the menus each person sees set by an administrator. It handles price files, labels, item lookups, replenishment, delivery-date exceptions, and the ACH and check files that replaced the n8n pipeline. Price updates wait for someone to accept or reject them.
Routine office work for five teams runs from one place, with a clear accept step before price changes take effect.
React, TypeScript, FastAPI, SQL Server, Redis, Dynamics NAV, Firebase Authentication, Docker
06 Inventory counting
Warehouse counts needed to be accurate without the counter seeing the expected quantity.
A tablet application. Administrators define locations and open a count session. The system builds count sheets from an ERP inventory snapshot. Counters scan items and record quantity and bin, without seeing the expected figure. Administrators review variances, send items or bins for a blind recount, close the session, and export the results.
Counts are blind by design, variances are reviewed before anything is accepted, and results leave as a file.
React, TypeScript, FastAPI, PostgreSQL, Redis, Firebase Authentication, Docker
07 Deliverables
Every system Stillmark touches gets a runbook the next person can follow.
Every change is recorded with the date, the reason, and who approved it.
Retained clients get hours used, open risks, and a review with IT management each month.
Stillmark works only from accounts in your name, so ending the engagement means disabling them and nothing else.