my photo

Marcin Szamotulski

I am a full stack developer and PhD mathematician.

Curriculum Vitae


I am an experienced full stack web developer and have proven myself across a variety of challenges involving designs, implementations, and minimum viable products.

I understand what business needs are and can translate these into prototypes, frameworks and, well, code ;)

I am particularly strong in building applications that need to run on real-world mobile networks where LTE speeds are not always available, which is nearly everywhere!

code quality

I am as much curious, open, and learn quickly as I am collaborative. I combine all this with an abstract thinking skill worthy of my academic background, which is PhD in maths. This means my code is neat, and therefore scales easily and is easy to maintain. More importantly however, my code is easily comprehensible for others who join the team. This is super important in agile development with teams that (may) rotate quickly.

web performance

I have a thorough understanding of web. I have experience pursuing memory leaks, track performance issues in hot code and can code high-performing css animations that run at 60FPS on mobile.

usability, ui & accessibility

Web should be as inclusive as its interactive. Both usability and accessibility is key. Often, good design calls for accessible UI that is easy to navigate with keyboard only input for people with disabilities. I have experience with HTML5 and ARIA (Accessible Reach Internet Applications). I keeping the original semantic of native elements, this is really important in building usable components by variety of people with different habits from ‘all parts of the web’.

maintaince, testability and deadlines

When designing code, I think forward and craft my code in a way that others can pick it up easily. This also means other components can be added on at little effort.

Testing code early is paramount. On tight deadlines there’s often not enough time to write thorough tests. If that’s the case, I go back and write the necessary test, resolve compromises done to meet deadlines. In the long run, wise code reviews always pay back.

functional programming

I am an advocate for functional programming. It often brings clarity, projects become easier to comprehend and allow for a reasonable way of managing side effects.

Haskell Node.js Python C
JavaScript PureScript React Redux Angular html5 css SASS


Some of the most recent projects I worked for:


At the moment I am working at Gravicus and I am responsible for front-end development. We decided to build ui with PureScript and React. I setup various projects using Redox, my PureScript implementation of redux architecture (using free monads paired cofree comonads).

I've been also responsible for implementing pixel perfect designs closely working with our designer. Writing complex ui elements using pseudo-elements and well designed modern css. I've decided to try postcss. It introduces proper scoping of css which avoids problems in the long run. It fits well into functional programming paradigm with its composition of css classes (it tames side effects of globally scoped css and introduces composition of css classes which is obeys the laws of a semigroup).

I setup unittest which runs both in node with purescript-test-unit and in the browser using karma runner. Before taking up this role I wrote a library to run purescript-test-unit using karma runner in a browser environment and bindings for the airbnb's enzyme react testing library. This allows us to properly test react components and write test in PureScript.

Redox architecture which splits the redux interpreter from the DSL allows to plug an interpreter designed for tests which can mock data, pretend request. This will allow us to have a very good testing architecture for our work. This is based on my work published on github: redox, react-redox and my purely functional routing library cofree-react-router.

Progressive Web App PureScript React Redox HTML5/CSS3 CssModules WebPack karma purescript-enzyme purescript-unit-test


This is an open-source project which provides a tree shaking algorithm for PureScript. It outputs a set of CommonJS modules which can be bundled with webpack, rollup or any other tool. zephyr allows to build lazy loaded applications that are also properly minified before shipping. This opens new possibilities in the PureScript ecosystem.

Haskell PureScript Stack


I am an active member of the PuresScript community, I have contributed to the PureScript compiler and I authored and maintain various libraries. My noticeable original libraries:

  • purescript-redox
    Redux architecture for PureScript applications, that focuses on correctness and compostability and testability. It is using a pairing between free monad (DSL) and a cofree comonad (interpreter). Interestingly you can compose DSL's (taking a sum) and compose the corresponding interpreters.
  • purescript-react-redox
    React bindings for Redox.
  • purescript-cofree-react-router
    React router modelled using a Cofree Array comonad. This is not surprising if you realise that DOM can be modelled by Cofree Array tree structure. The comonad gives nice api for declaring routes and the library provides combinators for querying mounted components.
  • purescript-react-ix
    PureScript React bindings that provide safe way of dealing with advanced react features like refs, mutations of the react element (storing callback references, DOM references). It has no runtime overhead. The safety is provided by tracking the changes of a ReactThis in an indexed monad.
  • purescript-react-spaces
    A free monad DSL which provides a interface for writing React vDOM tree. It is interpreted during execution time so it has a runtime cost. It is similar to BlazeHTML library. Together with redox this provides an alternative for pux.
  • purescript-karma-test-unit
    This is a small bridge that lets run purescript-test-unit tests in a browser using karma runner.
  • purescript-vim and psc-ide-vim
    I am maintaining the first one, and I rewrote the second one. These are vim plugins that makes Haskell devs cry ;).
I did non trivial contributions to more than a few core purescript libraries, just to mention a few:


I have delivered progressive web apps written with ReactJS and Knockout and relied on custom Rubble logic language for the backend as well as Python and NodeJS.

My job as a JavaScript, Python and Rubble engineer was to develop applications based on rubble logic programming platform, documentation proofreading in close cooperation with our CTO.

One of the challenges up front was to tame a legacy code. I have done this by introducing flow - the type system from Facebook for JavaScript, so that we at rubble could reason about the code with confidence. I turned our flag workflow application into single page app which loads instantly, with smooth transitions between page views, 60fps animations and offline support.

Along the way, which was super exciting for me, I have also picked up a new programming paradigm: logic programming utilising programming language Rubble, which was developed fully in-house. It is a fully declarative rule engine and process engine, with forward and backward chaining and syntax inspired by Prolog. I proofread the documentation and helped to debug critical issues; I rebuilt web interface for it using websockets for instant communication using ReactJS.

Flask (Python) Flask-Restful (Python) nodejs Rubble websockets Progressive Web Apps ES6 React Redux Knockout jQuery Crossroads Hasher HTML5/CSS3 LESS SASS Twitter Bootstrap gulp Browserify WebPack


Static code analysis platform for Python.

I worked as a backend and frontend engineer. This was my first real React application, pre flux, or react-redux era...

Flask (Python) Celery MongoDB Ansible Apache Stripe Github API React jQuery Gulp Require.js HTML5/CSS3 SASS Twitter Bootstrap


Car selling web application.

In my work as back-end dev, I focused on development and maintenance of various parts of the system including reviewing complex logic at the backend. In addition to that I was also busy with the front-end.

Django (Python) Celery MySQL RabbitMQ Vagrant Scrappy HTML5/CSS3 jQuery d3 Twitter Bootstrap

Github Recruiting

Recruiting app for Github developers.

This was an exciting time for me to work on a small Angular application backed by a github data on open source community and using the pygit2 (libgit2) library. For this project I worked as a full stack web developer and delivered a proof of concept in almost no time :)

Flask (Python) MongoDB Flask-Restful (Python) Ansible Apache PyGit2 (libgit2) Github API Google Maps API Angular jQuery Gulp HTML5/CSS3 SASS Twitter Bootstrap


Social platform for sharing enriched hyperlink text connected to LinkedIn .

I worked both as a backend and front-end developer. I implemented pixel perfect designs handed by the design team. There was a big issue with legacy code at the beginning. After initial struggle with a single page app written by the previous team (using just jQuery) I advocated for using angular and I rewrote the application using modern approach. This was a difficult decision for managers but after all they understood the benefits they got - much more reliable code base, well tested - hence more happy workflow for every body in the team and the users.

Django Celery SQL MySQL Nginx (hosted on AWS) RabbitMQ Rest Framework Angular jQuery HTML5/CSS3


Chronology app for lawyers.

This project, developed with a team of legal professionals, asked for a tool to collaborate on a knowledge base in legal cases.

It was exciting to closely collaborate with people of different background whose needs had to be addressed. Action from the ground up.

Flask (python) SQLAlchemy PostgreSQL Heroku HTML5/CSS3 Angular jQuery Twitter Bootstrap


Email-based micro-learning application

The service targeted busy professionals who wanted to learn new skills. Where I helped was with my expertise in fat back-end and thin front-end applications.

With today's technologies, like service workers - these kind of apps can be heavily optimised as well (here is a link to an interesting issue that was present on, where fresh pages loaded faster than client side routing, and a solution using by streaming the content into browser’s HTML parser).

Flask (python) SQLAlchemy PostgreSQL Heroku HTML5/CSS3 jQuery Twitter Bootstrap

Scientific Articles

Some papers and preprints that I authored or coauthored:

Updating content...