MULTILAYERED SERVICES

From LOB platform to cloud migration

Every project is different, but the approach is always the same: architecture first, then development — with AI agents contributing to code, testing, and documentation.

Projects

Nosli Works

A selection of systems I’ve built from architecture to launch.

1LOB PlatformWeb platform · production+

Scalable Line of Business (LOB) solutions, with a strong focus on architecture, integration, and long-term maintainability. Backend, frontend, and integrations from architecture through to production.

ColdBox, Docker, Azure

<svg class="ps-visual" viewBox="0 0 1200 800" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Infographic: gebruikers via API naar database"><defs><pattern id="ps-dots-p1" width="24" height="24" patternUnits="userSpaceOnUse"><circle cx="1.2" cy="1.2" r="1.2" fill="var(--ps-grid)"/></pattern></defs><rect width="1200" height="800" fill="url(#ps-dots-p1)"/><g class="ps-ink"><path class="ps-edge" d="M280,400 H520"/><path class="ps-edge" d="M680,400 H900"/><rect class="ps-box" x="140" y="352" width="140" height="96" rx="16"/><rect class="ps-box ps-box--core" x="520" y="340" width="160" height="120" rx="18"/><path class="ps-box" d="M900,368 a52,16 0 0 1 104,0 V440 a52,16 0 0 1 -104,0 z"/><ellipse class="ps-box" cx="952" cy="368" rx="52" ry="16"/><circle class="ps-pkt" r="5" data-ps-pkt="" data-dur="3.2" data-path="M280,400 H900"/><circle class="ps-pkt ps-pkt--rsp" r="5" data-ps-pkt="" data-rev="1" data-dur="4" data-delay="1.4" data-path="M280,400 H900"/></g></svg>
2Client PortalSelf-service portal+

Real-time insight into status, documents and planning for end clients — built as a fast, lightweight SPA.

Vue 3, Vite, REST API

<svg class="ps-visual" viewBox="0 0 1200 800" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Infographic: SPA-scherm met content en grafiek"><defs><pattern id="ps-dots-p2" width="24" height="24" patternUnits="userSpaceOnUse"><circle cx="1.2" cy="1.2" r="1.2" fill="var(--ps-grid)"/></pattern></defs><rect width="1200" height="800" fill="url(#ps-dots-p2)"/><g class="ps-ink"><rect class="ps-box" x="360" y="220" width="480" height="340" rx="18"/><path class="ps-edge" d="M360,280 H840"/><circle class="ps-mini" cx="392" cy="250" r="5"/><circle class="ps-mini" cx="414" cy="250" r="5"/><circle class="ps-mini" cx="436" cy="250" r="5"/><rect class="ps-box ps-box--soft" x="400" y="320" width="180" height="18" rx="6"/><rect class="ps-box ps-box--soft" x="400" y="360" width="300" height="12" rx="6"/><rect class="ps-box ps-box--soft" x="400" y="388" width="260" height="12" rx="6"/><path class="ps-edge ps-edge--chart" d="M400,510 L470,470 L540,492 L620,430 L700,452 L790,410"/><circle class="ps-pkt" r="5" data-ps-pkt="" data-dur="3.6" data-path="M400,510 L470,470 L540,492 L620,430 L700,452 L790,410"/></g></svg>
3Legacy ModernizationMigration · legacy → cloud+

A fifteen-year-old business system moved step by step to containers on Azure — without closing up shop.

CFML, Lucee, Azure ACR, Docker

<svg class="ps-visual" viewBox="0 0 1200 800" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Infographic: legacy server via containers naar de cloud"><defs><pattern id="ps-dots-p3" width="24" height="24" patternUnits="userSpaceOnUse"><circle cx="1.2" cy="1.2" r="1.2" fill="var(--ps-grid)"/></pattern></defs><rect width="1200" height="800" fill="url(#ps-dots-p3)"/><g class="ps-ink"><rect class="ps-box ps-box--dashed" x="160" y="330" width="150" height="140" rx="14"/><path class="ps-edge" d="M310,400 H500"/><rect class="ps-box" x="500" y="330" width="70" height="60" rx="10"/><rect class="ps-box" x="580" y="330" width="70" height="60" rx="10"/><rect class="ps-box" x="540" y="404" width="70" height="60" rx="10"/><path class="ps-edge" d="M650,400 H840"/><path class="ps-box ps-box--cloud" d="M890,440 a34,34 0 0 1 -7,-67 a46,46 0 0 1 90,-8 a30,30 0 0 1 23,53 a27,27 0 0 1 -20,22 z"/><circle class="ps-pkt" r="5" data-ps-pkt="" data-dur="3.4" data-path="M310,400 H840"/><circle class="ps-pkt" r="5" data-ps-pkt="" data-dur="3.4" data-delay="1.7" data-path="M310,400 H840"/></g></svg>
4Status & Monitoring APITooling · monitoring+

One API that watches the health of all environments and relays it in real time to dashboards and alerts.

REST, Webhooks, Dashboards

<svg class="ps-visual" viewBox="0 0 1200 800" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Infographic: hartslag-monitor van alle omgevingen"><defs><pattern id="ps-dots-p4" width="24" height="24" patternUnits="userSpaceOnUse"><circle cx="1.2" cy="1.2" r="1.2" fill="var(--ps-grid)"/></pattern></defs><rect width="1200" height="800" fill="url(#ps-dots-p4)"/><g class="ps-ink"><rect class="ps-box" x="240" y="260" width="720" height="280" rx="18"/><path class="ps-edge ps-edge--chart" d="M280,400 H420 L460,340 L510,460 L560,400 H680 L720,352 L770,448 L820,400 H920"/><circle class="ps-pkt" r="5" data-ps-pkt="" data-dur="3" data-path="M280,400 H420 L460,340 L510,460 L560,400 H680 L720,352 L770,448 L820,400 H920"/><circle class="ps-led" cx="930" cy="292" r="5"/></g></svg>
5UX-UIDesign · research+

From wireframe to clickable prototype — interfaces that feel logical, tested with real users and ready for development.

Figma, Design systems, Prototyping, Usability testing

<svg class="ps-visual" viewBox="0 0 1200 800" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Infographic: artboard met wireframe-componenten en cursor-flow"><defs><pattern id="ps-dots-p5" width="24" height="24" patternUnits="userSpaceOnUse"><circle cx="1.2" cy="1.2" r="1.2" fill="var(--ps-grid)"/></pattern></defs><rect width="1200" height="800" fill="url(#ps-dots-p5)"/><g class="ps-ink"><rect class="ps-box" x="320" y="200" width="560" height="400" rx="18"/><rect class="ps-mini" x="312" y="192" width="16" height="16" rx="3"/><rect class="ps-mini" x="872" y="192" width="16" height="16" rx="3"/><rect class="ps-mini" x="312" y="592" width="16" height="16" rx="3"/><rect class="ps-mini" x="872" y="592" width="16" height="16" rx="3"/><rect class="ps-box ps-box--soft" x="360" y="244" width="200" height="22" rx="7"/><rect class="ps-box ps-box--soft" x="360" y="292" width="480" height="12" rx="6"/><rect class="ps-box ps-box--soft" x="360" y="320" width="420" height="12" rx="6"/><rect class="ps-box ps-box--dashed" x="360" y="368" width="220" height="140" rx="12"/><rect class="ps-box ps-box--dashed" x="620" y="368" width="220" height="140" rx="12"/><rect class="ps-box ps-box--core" x="360" y="540" width="150" height="38" rx="10"/><path class="ps-edge ps-edge--chart" d="M470,438 C560,380 640,500 730,438 S840,540 435,559"/><circle class="ps-pkt" r="5" data-ps-pkt="" data-dur="4" data-path="M470,438 C560,380 640,500 730,438 S840,540 435,559"/></g></svg>
6Cloud (Azure / GCP)Infrastructure · multi-cloud+

Scalable cloud environments on Azure and Google Cloud — from landing zone and CI/CD to cost control and security.

Azure, GCP, CI/CD

<svg class="ps-visual" viewBox="0 0 1200 800" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Infographic: centrale hub tussen twee clouds"><defs><pattern id="ps-dots-p6" width="24" height="24" patternUnits="userSpaceOnUse"><circle cx="1.2" cy="1.2" r="1.2" fill="var(--ps-grid)"/></pattern></defs><rect width="1200" height="800" fill="url(#ps-dots-p6)"/><g class="ps-ink"><path class="ps-box ps-box--cloud" d="M220,436 a34,34 0 0 1 -7,-67 a46,46 0 0 1 90,-8 a30,30 0 0 1 23,53 a27,27 0 0 1 -20,22 z"/><path class="ps-box ps-box--cloud" d="M890,436 a34,34 0 0 1 -7,-67 a46,46 0 0 1 90,-8 a30,30 0 0 1 23,53 a27,27 0 0 1 -20,22 z"/><rect class="ps-box ps-box--core" x="520" y="340" width="160" height="120" rx="18"/><rect class="ps-box ps-box--soft" x="544" y="366" width="112" height="14" rx="6"/><rect class="ps-box ps-box--soft" x="544" y="392" width="88" height="14" rx="6"/><rect class="ps-box ps-box--soft" x="544" y="418" width="100" height="14" rx="6"/><path class="ps-edge" d="M330,400 H520"/><path class="ps-edge" d="M680,400 H870"/><circle class="ps-pkt" r="5" data-ps-pkt="" data-dur="3" data-path="M330,400 H520"/><circle class="ps-pkt" r="5" data-ps-pkt="" data-dur="3" data-delay="1" data-path="M680,400 H870"/><circle class="ps-pkt ps-pkt--rsp" r="5" data-ps-pkt="" data-rev="1" data-dur="3.6" data-delay="1.6" data-path="M330,400 H870"/></g></svg>
7Mobile DevelopmentApps · iOS & Android+

Native-feeling apps from a single codebase — offline-first, push notifications and seamless integration with existing APIs.

Flutter, Firebase, REST API, GCP, Android, iOS

<svg class="ps-visual" viewBox="0 0 1200 800" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Infographic: telefoonframe met app-schermen en cloud-sync"><defs><pattern id="ps-dots-p7" width="24" height="24" patternUnits="userSpaceOnUse"><circle cx="1.2" cy="1.2" r="1.2" fill="var(--ps-grid)"/></pattern></defs><rect width="1200" height="800" fill="url(#ps-dots-p7)"/><g class="ps-ink"><rect class="ps-box" x="500" y="180" width="200" height="420" rx="30"/><rect class="ps-box ps-box--soft" x="560" y="200" width="80" height="10" rx="5"/><rect class="ps-box ps-box--soft" x="524" y="236" width="152" height="70" rx="10"/><rect class="ps-box ps-box--soft" x="524" y="320" width="70" height="70" rx="10"/><rect class="ps-box ps-box--soft" x="606" y="320" width="70" height="70" rx="10"/><rect class="ps-box ps-box--soft" x="524" y="404" width="152" height="12" rx="6"/><rect class="ps-box ps-box--soft" x="524" y="428" width="120" height="12" rx="6"/><rect class="ps-box ps-box--core" x="524" y="520" width="152" height="36" rx="10"/><rect class="ps-box ps-box--soft" x="565" y="576" width="70" height="6" rx="3"/><path class="ps-box ps-box--cloud" d="M930,400 a34,34 0 0 1 -7,-67 a46,46 0 0 1 90,-8 a30,30 0 0 1 23,53 a27,27 0 0 1 -20,22 z"/><path class="ps-edge" d="M700,390 H905"/><rect class="ps-box ps-box--dashed" x="250" y="330" width="140" height="140" rx="14"/><path class="ps-edge" d="M390,400 H500"/><circle class="ps-pkt" r="5" data-ps-pkt="" data-dur="3" data-path="M700,390 H905"/><circle class="ps-pkt ps-pkt--rsp" r="5" data-ps-pkt="" data-rev="1" data-dur="3.4" data-delay="1.2" data-path="M700,390 H905"/><circle class="ps-pkt" r="5" data-ps-pkt="" data-dur="2.6" data-delay="0.6" data-path="M390,400 H500"/></g></svg>

Contact

Let's get acquainted

Tell me briefly what you're working on or where you're stuck. I usually respond within one business day — and you'll always talk to me, never a bot.

EMAIL
nordin@nosli.nl
PHONE
+31(0)237110397
LOCATION
The Netherlands · remote-first
RESPONSE TIME
Within 1 business day
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.