Focus area
NetSuite
SuiteScripts,
written in TypeScript.
ERP work since 2022, across four companies in Sweden and Denmark – and a growing pile of tooling built to make the repetitive parts of SuiteScript development stop being repetitive.
Now building Mynt, a language for NetSuite
Where
Four companies, one platform
Consulting and development roles, from the first ERP implementation to leading the
technical side of a delivery team.
The resume has
what each one actually involved; this is the shape of it.
- Systems DeveloperEmpathiq, Malmö Aug 2026 – now
- Technical LeadOmnit, Copenhagen Apr 2025 – Aug 2026
- Systems DeveloperStaria, Malmö Apr 2023 – Mar 2025
- Systems DeveloperSuitespot, Malmö Jun 2022 – Apr 2023
Built
The Integration App
An integration platform that lives inside NetSuite rather than beside it. Another system posts to one endpoint, and every request is written down as a record before anything happens to it. Whether it is then picked up on the spot or left for a scheduled run is a setting rather than a rewrite – and either way a failed row is a row you can open, fix and retry rather than a lost message.
The point of it is that the next integration should not need a developer. Field mappings are configuration records edited in the NetSuite UI, so a new field is a mapping and not a deployment – and a small React dashboard sits on top for the mapping and the log.
- Front door
- One RESTlet: post work, get answers back.
- Staging
- Always written down. Run now or run later.
- Mapping
- Configuration, not code. No deploy for a field.
- Order
- Records that depend on records not created yet.
That last one is the part worth the trouble. A payload often refers to something that does not exist in NetSuite yet, so those rows carry a placeholder, travel together, and have their real identifiers written back once the thing they point at exists.
Written in TypeScript, and available to you through Empathiq.
Tooling
The SDF tool
SuiteCloud's own suitecloud project:create -i gives you a JavaScript
project. nsx gives you one built for TypeScript: the layout, the
project.json, the build config that compiles it to SuiteScript, and files
named the way the rest of the account is named. None of that is the work, so with it
done, the first thing you write is the script.
npm install -g netsuite-ts-sdf-tool
Mynt
So I started writing a language
Four years of customisations, integrations and tooling kept turning up the same detours. Eventually the question was no longer how to work around them, but whether they had to be there at all.
Mynt is the answer I am building: a small language for NetSuite that knows your records, refuses the platform's silent mistakes, and compiles to plain SuiteScript 2.1. It is not a side business. It is the same work as everything above, carried one level further down – and the clearest picture I can give of how I think about software.
beforeSubmit create | edit (customer: Customer) { customer.comments = 'Managed by Mynt' }
/** * @NApiVersion 2.1 * @NScriptType UserEventScript * @NModuleScope SameAccount */ define([], () => { function beforeSubmit(context) { if ( context.type !== context.UserEventType.CREATE && context.type !== context.UserEventType.EDIT ) { return; }
- Records are typesA misspelled field fails on your machine, not in production.
- Mistakes fail earlyA change NetSuite would silently discard does not build.
- Plain SuiteScript outNo runtime. Deploy the output like any other file.
Get in touch
NetSuite work, SuiteScript, or something the platform is making harder than it should be – I am happy to talk about any of it.