Nx, a TypeScript based monorepo tool, is not only a great tool for Node.js based technology such as Angular, Ionic or NestJS but also works well with Kotlin based backend APIs with multiple modules.

Modular Monolithic Kotlin Backend APIs

At Lapis, we are busy migrating existing manyrepo projects into the Nx workspace, in order to simplify and streamline the development life cycle.

We have recently built and released AquaOnline, a Commercial Aquaculture Management System for NSW DPI. AquaOnline manages government administrative information for commercial aquaculture farms (land-based facilities) and leases (sea and rivers) with regulated permissions. …

Nx: a monorepo tool

We’d like to share our recent experience with Nx. Nx is a Typescript based monorepo tool, primarily supporting Node.js based frontend, backend apps, and libraries. The topics we are covering today:

  • Why monorepo?
  • Nx: A monorepo tool
  • Create Nx workspace for a project
  • Build, lint, test, serve and run
  • Single package.json policy
  • Affected apps by dep-graph and git diff
  • Computation caching and Nx Cloud
  • API Gateway + Lambda ready package
  • Gitlab CI Pipeline for a monorepo
  • Lessons learned

Why monorepo?

Lapis (our company) builds and manages custom end-to-end solutions for our clients and we use AWS and various cloud-based services.

Our architecture…

Good bye Jenkins and hello GitLab CI

At Spatial Vision, we have been using Jenkins for Continuous Integration, building, testing and deploying web apps, native mobile apps, APIs and AWS resources to target environments.

Jenkins manages over 50 projects and nearly 500 jobs including active development builds and on-going maintenance tasks.

Today, we’d like to share our story on migrating from Jenkins to GitLab CI, by comparing the DSL of each platform so you can understand the differences between them and it gives you a quick introduction of GitLab CI for Jenkins users.

Release it!

This is a part 3 of Running AngularJS 1.6 in Angular 5 (side by side), you can read part 1 and part 2.

We’ve completed the new features and it’s now time to release to the production.

Today, we’d like to share our experience with the release process including

  • Building a release bundle
  • Deploy to S3 bucket
  • Lessons learned

Building a release bundle


In AugularJS, we used Grunt (generated by Yeomen) to create a release bundle. Grunt build performs:

  • Build a css file from scss
  • Convert html templates into a single js file
  • Bundle js files including the libraries into a single js file

The Hackathon

Recently, Spatial Vision was invited to an open tender process which featured a hackathon to assess our capabilities/offering. It was the first tender process that we had been involved in which had this component so we were very excited to showcase our development capability.

One of the hackathon challenges was to create an app for recreational fishers which would identify the species of fish they caught in order to determine whether take it home or release it.

Other Requirements

  • We only had 5 days with 2 developers to build all challenges (2 apps)
  • After an initial estimate, we could only spend 2…

We’d like to share one of the migration strategies from AngularJS to Angular. This blog is part 1 of 3, please also read part 2: Building new features in Angular 5 and part 3: Build, deploy and beyond.

At Lapis, We run a number of AngularJS (1.2.x ~ 1.6.x) apps in production which were built around 2012 ~ 2015. Their main tech stack components are:

  1. Angular 1.x
  2. Bootstrap 3.x
  3. Leaflet
  4. OpenLayer
  5. LocalStorage (ngstorage)
  6. Font Awesome
  7. Moment JS (Date/time)
  8. Grunt for build
  9. Docker for the build process

Many of the apps are stable and there is no reason to migrate/upgrade (commercially)…


At Spatial Vision, we’re trying a new approach for R&D, Team R&D (or simply hack day). Traditionally our R&D process looks like:

  1. There is a piece of technology/topic we’d like to understand based on our potential work
  2. Creates a set of criteria/goal for R&D
  3. A senior developer research/reads some documentations, creates a prototype
  4. A senior developer presents the outcome to the management and team

While this approach most likely produces a better outcome from a financial point of view, it does not scale well and there are a number of people who are interested in working on R&D works.


Hiroki Gota

I am a Software Architect at Lapis, Melbourne Australia. I enjoy building end to end custom solutions with a Kaizen spirit in a team environment.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store