What I Have Worked On

Cosmetics Now

Cosmetics Now is an ecommerce website and brand selling across many marketplaces. It combines various wholesale and dropship stock sources with it's own stock on hand to cover a very large selection of well known and niche products across Makeup, Skin Care, Hair Care, Fragrances and Supplements.

It was built with Zen Cart but has been heavily customised over time to better support grouping multiple sources for the same product together, similar to the Amazon buy box concept, displaying the best price/ delivery timeframe for the customer depending on which region they are in.

  • Payment Gateways
    • Afterpay
    • ZipPay
    • Klarna
    • Stripe
    • Pin Payments
    • Airwallex
    • Paypal
      Wrote new integrations for newer buy now/ pay later platforms such as Afterpay and Zippay. Worked closely with each company to build integrations that passed their detailed specifications.

Wrote/ heavily modified integrations for credit card gateways such as Stripe and Pin. Cosmetics Now has more complicated requirements than avaliable 3rd party integrations would handle such as allowing for multiple accounts for multiple entities for better regional rates.

Created new payments abstractions to better support displaying payment errors at all stages of checkout.

  • Multiple websites

Zen Cart is designed for to run a single website per instance. For various business/ branding reasons Cosmetics Now wanted to run multiple websites with similar inventory. I extended various aspects of Zen Cart to allow for separate websites to be defined on a per domain basis which ran different templates and different configurations such as product/ supplier avaliability and regional pricing rules.

  • Partner Program
  • Redesign Project

In mid-late 2017 we started to seriously look at a complete website redesign. While the design had been incrementally updated over time to update the header and support varible width and mobile it was still largely based on a template purchased in 2011 and I am no designer.

We limited the budget for getting a design concept at $10k. We worked with a great design agency called Yoke, the budget meant to what we were getting was a concept and full layouts for 5 key pages. The rest would either need to be infered from this style guide or add to the cost in an additional round of work.

I worked closely with Yoke to end up with something we were both happy with. We then passed this to outsourced developers to first convert the InDesgin files into proper HTML/CSS and then to implement this across the website, starting from a bootstrap/sass base that was in use for our second website Europa Cosmetica.

This ended up taking a long time and produced a result where a lot of the small details were missing or incorrect. I decided rather than many rounds of back and forth on this that I would take it over and work on the fine details and get the sass into a reasonable state as it was highly duplicated defeating a lot of the purpose of nesting the styles.

After a couple more months we had something exactly right, the new layout launced in June 2018. It was responsive and worked well at all resolutions which was much better than the old design which was a separate mobile template that had a lot of different design choices and styles compared with the desktop version.

The new design also aided in making the add to cart and wishlist more dynamic with the car and wishlist dropping down at the top of the page when new items are added.

  • Marketplaces

  • Multiple Dropship

  • Stock System

  • Stock Purchasing

  • Bulk Purchases

  • Email Marketing

    • Emarsys, own system (rewards, instock, price)
    • System for building email templates
  • Moving Recommendations to Barilliance

  • Paid Ads

  • Complex service rewrites

    • Order submission queue
    • Dispatch parsing
  • Other Integrations

    • Aftership
    • Reviews.io
  • Dev Management

    • Contractor/ Employee

    Ran a process with a recruitment agency where they put forward a number of candidates. Developed a number of programming problems for a live coding exercise over replit to evaluate the candidates. Developed a take home assignment for further evaluate candidate ability.

    From this we bought the best candidate on as a contractor and eventually as a full time employee. Over time working together I have onboarded them to the project, set tasks in line with business goals and provided feedback and mentorship.

    • India

    Cosmetics Now had an Indian office, which mainly functioned as a hub for customer support staff. I hired 2 developers to work from this office. This involved placing a local job ad, reviewing resumes, creating a take home assignment for candidate assessment, conducting online interviews and organsing an offer. Once hired I took 2 trips to India where I did initial training in person as well as worked closely with our customer support team to provide additional tranining. After this I continued to manage the developers.

    • Outsourced

    We have worked with a number of overseas contractors/ outsource firms. To manage this I have created documentation around setting up a local development environment. I have also created detailed task specs for the developers to complete and managed the day to day progress by reviewing and merging their code.

  • Dev Ops

    • Capistrano - setup with the ability to deploy to multiple servers if required based on EC2 tags and with the ability to deploy different branches and to different enviroments.
    • AWS Services
      • EC2, S3, Cloudfront, SQS, SES, IAM, Cloud Watch, RDS, Route 53
    • Servers built on CentOs (RHEL)/ Ubuntu/ Arch Linux
    • Logentries/ Slack integration for production PHP error tracking
    • Sentry/ Discoard integration for later production PHP error tracking
  • Accounting

As Cosmetics Now consists of a large number of entities across multiple jurisdictions it has complicated accounting requirements. Developed a set of reporting that tracks the cross bills between different entities. For example one entity will hold stock and cross bill wholesale costs to another entitiy if it sells any stock from the first entity. Another entity may handle the shipping, requiring another cross bill.

Tax laws for international shipping have grown in complexity requiring precise accounting in the local currently of GST/VAT/Sales Tax. Reporting was developed to calculate our tax obligations. An integration was also written with Tax Jar to allow live calulations of sales tax at checkout for US states where we are registered.


AffClicks was an attempt to solve attribution issues in sales based affiliate marketing across multiple affiliate networks for publishers. It involved 2 parts:

  1. The ability to integrate with multiple affiliate networks and aggregate the publishers sales/ commission statistics. Most larger publishers promoting a number of merchants will end up dealing with multiple affiliate networks as it is dictated by which networks merchants have signed up for. Without aggregation this means that they would be frequently logging into many networks to determine business performance.
  2. The ability for a publisher to have end to end attribution for their ad spend. A publisher would typically define a conversion on Adwords or Bing to be when a user clicks on an affiliate link to send them to a merchant. In Affiliate Marketing though this is only half the story, the customer many click on the affiliate link and never buy anything with the merchant so it isn't really a conversion. Affclicks would provide ad performance information based on the conversion data from the Affiliate Network.

My business partner Murray at the time ran a Cosmetics price comparison website which generated revenue via affiliate links, which I had been a developer on for some time. So Affclicks was a tool that could help optimise that business while also hopefully finding a market niche to sell to similar businesses.

While the ad spend functionallity worked well it was hard to roll out to other users. Google required that if you were implementing an alternative Adwords interface for third parties that you required approval and needed to reimplement a significant portion of the complete functionality of Adwords even if it wasn't relevant to your product. We used this component in house but were never able to bring it to third parties.

We spent too long building the product without validating the market at all. Neither of use were capable enough as SASS marketers either to properly reach the market even if it did exist, if paid ads didn't work we didn't have much of a fallback and had a limited budget to buy ads. We got some beta users but never launched a paid service.

In the end it ran out of money to pay my low wage at the time and effort shifted over to Cosmetics Now which was already bringing in revenue.

Affclicks was good experience for me in building and releasing a full product. Affclicks had a PHP backend and used a lot of JS based templating and long polling for an interactive UI in a time before such JS functionality was as common. It was also the first time I used AWS and set up a deployment process.

Bachelor of Computer Systems Engineering With Honors
Real-time Clustering of News Related Short Messages Gathered from Twitter
While a lot of similar work had been done on Google news style classification of news and clustering of related articles at the time not much research had been done applying these techniques to the short messages on Twitter (140 characters at the time). The research evaluated how well popular classification and clustering methods applied to short messages with less context. Similar techniques may be employed with Twitters trending topics and automated summarisation of news.

Project: Retail Merchandising Software
Based off a specification given to the university by a partner we developed a prototype system to support merchandisers visting retail stores. This was done in PHP and Mysql.

Internship: Mintec Systems
Worked for 3 months over the summer with Mintec systems. I worked on a number of projects:
* Rewriting their internal employee VB6 time tracking tool in c#.net/ Silverlight.
* Creating a prototype label creation desktop program in Java.
* Debugging/ updating their PHP drupal website.

Earlier Projects
I first learned PHP in around 2001 through my interest of developing games in RPG Maker, there were a number of community websites for RPG Maker and I wanted to help work on them.
I created a browser based massively multiplayer text based game called Operation Night Wolf.
I also created by own custom forum software similar to Invision Board and PHPBB.