I'm building every aspect of the business and technical product myself. App Evolved is something I'll always be working on. Selling my apartment provided the initial capital I used to get the company off the ground and I am running the company on a very tight budget
I incorporated App Evolved as a limited liability company in two countries:
I ensured accounting was configured and that the company is tax compliant with the annual returns filed and I opened a business bank account. I work with accountants in both South Africa and the UK
The SaaS application includes its own support tracking system, billing and invoicing, referral ecosystem, central monitoring with incident reports, task scheduler and customer instant messaging
A big part of what the application does is extends the functionality of CloudWatch. I've built an automation layer that attempts to rectify CloudWatch alarms/issues automatically and this automation layer can be extended easily
I've reinvented the company. We build awesome apps and manage clouds
The PHP Shop is an application and business I built in the hope of acquiring PHP, DevOps and AWS consultation work while building App Evolved
Customer consultations take place in real-time via the chat application I developed. The frontend establishes a WebSocket connection into the backend and invokes a natural language chatbot that the customer has to authenticate to
Once authentication has occurred, a communication channel (SMS, email, web console) is setup and the consultation takes place
I've had to put the business on hold due to financial reasons. Online marketing campaigns were run via Google Adwords
The PHP Shop is a subsidiary of App Evolved (Pty) Ltd
I built Task Complete because I wanted to get freelancing work while I build App Evolved and I wanted to flip the dynamic on how freelancing websites work
Task Complete allows the customer to specify how many hours the project must be completed in and the customer is presented with a final, total bill
Payments are processed via PayPal Express and the customer can describe the project using markdown
Task Complete is a subsidiary of App Evolved (Pty) Ltd. I've had to put the business on hold due to financial reasons
Find Freelance Work is a SaaS application that helps freelance software developers find work and it makes it easy for companies to hire great freelance talent
The app is also supported in Thai, Filipino and Vietnamese. The frontend web server renders the initial SPA in the localised language and backend API responses are returned in the localised language as well
I am still very much working on Find Freelance Work and it's a subsidiary of App Evolved (Pty) Ltd
The name used to be Freelance Factory but I had some issues with the Madrid Protocol/trademark so I had to change the name
I launched the app on Product Hunt, Indie Hackers and Hacker News and the app has attracted some freelancers
I developed RSS Feed really quickly and I enjoyed learning about the RSS 2.0 specification. I'm also using my standard frontend layout model and design strategy
The idea behind the app is I wanted to have my favorite RSS feeds delivered to my inbox for free. The app has a lot of bugs
The recruitment agency that doesn't suck and is completely free for candidates looking for work
The SemaphoreCI pipeline deploys the backend RESTful API into App Engine and the frontend SPA is served out of Google Cloud Storage (with the global cloud CDN caching enabled)
I am still very much working on People Placements and it's a subsidiary of App Evolved (Pty) Ltd
You can hire me for full stack web application development or platform/devops engineering
I'm the founder of App Evolved. I created Task Complete, Code Jobs, The PHP Shop, Private Goals, Beer Now and Perfect Places in my spare time. I have plenty other examples of my work I can show you during an interview
The work descriptions and my skills listed here are only brief summaries. I can elaborate on the details and provide comprehensive information during an interview
My predominantly used and favourite stack is LAMP-memcached (Linux, Apache, MySQL, PHP and memcached) and I've built most of my app backends using this technology stack
Some of my apps use a Node.js backend in AWS Lambda behind API Gateway
When I build a relational database schema, I ensure it's well designed and that the referential integrity is always maintained
I've built single page applications (SPAs) with RESTful backend APIs and I've built applications using server side rendering (SSR)
I definitely prefer working on the app backend although, you can hire me for a full stack position
I don't like being abstracted by frameworks, both on the frontend and the backend. I write vanilla JavaScript and I enjoy learning about it's core concepts
I have a very good understanding of how the Document Object Model (DOM) API and how the XMLHttpRequest (XHR) API work
ATOM is my IDE of choice and I'm familiar with Git. All of my projects source code is hosted in GitHub
A microservice that returns a country's geographical location information
I developed Get Country Data because I wanted to reduce the amount of costly calls my apps were making to the Google Geocoding/Places API and I wanted to know additional information like currency names, currency acronyms, currency symbols (HTML entities) and international telephone calling codes
The data came out of multiple other projects I was working on and is not read from any external source or a local database but rather it's kept in-memory
The Relational Database API allows access to MySQL over HTTP and ensures the price is low and predictable
This enables me to prevent direct access to the MySQL server and the query result table is returned in an associative array and is optionally serialized and stored in memcached
The API connects to the MySQL server using a user account that is granted all privileges on all databases and tables. It determines what user account to use by parsing the connection string read from the virtual host environment variables
The Relational Database Client is shipped with my PHP projects via Composer and JSON is the data interchange format
My build process works by concatenating all JS and pushing it through Babel and then through UglifyJS
Percy is invoked by the CI/CD pipeline and performs a pixel-diff
The JS and external stylesheets are cached by the browser and will be re-cached after a production deployment (the frontend web server sets the Cache-Control header)
I have experience with Puppet and managing large scale server deployments globally (servers > 150) and I have experience with monitoring using New Relic (APM, Infrastructure), Zabbix and Nagios
I've built highly available GNU/Linux server infrastructure capable of scaling the hosted application to thousands of concurrent connections using horizontal scaling and application load balancing techniques
I'm happy architecting and building backend infrastructure both in the public cloud and on physical hardware on-premises
I've created CI/CD pipelines that are invoked by Jenkins and deploy into autoscaling EC2 fleets using the blue-green and rolling deployment strategies
All my Platform and DevOps engineering work is in code
I run all my app server infrastructure on cost effective Linode virtual machines and I do all the systems administration myself
The frontend and backend web servers run Apache HTTPd with mod_php and each run a local instance of memcached
All of my app backends are integrated into Papertrail, that I used for exception and general logging, and Papertrail invokes a Slack webhook and these exceptions are readable on my mobile phone
I host and maintain all my DNS zones myself using the BIND9 name server. Shell access is protected by private key and 2-factor authentication
I use Semaphore CI with all my apps and the pipeline is described in YAML and travels with the git repository and deploys into my static App Server Infrastructure
The deployment strategy is rolling and the webroot directory is a symlink which is updated after the source code is tarball'ed and transferred via SCP
I'm able to do plenty production deployments in a day without negatively effecting the users
For my frontend projects, Semaphore CI invokes Percy and all notifications are pushed into Slack
Puppet manages my app servers configuration and is directly applied on each server manually
There is no master and all the Puppet modules and manifests are in Git
Puppet manages everything from the user accounts and SSH server configuration to the Apache virtual hosts and PHP global configuration
My App Server Infrastructure is in code and can be provisioned and managed with Terraform
If the infrastructure is newly created, Terraform will copy up and execute a shell script that installs Puppet and clones the Puppet Masterless Git repository
Solve problems. Build products. Perform work on the ground. Get customers. Launch startups. Fail. Try again
My favourite subjects were history and computer science. I partook in extracurricular computer science classes that taught programming in Java
Certified Ethical Hacker (C|EH) - Credential ID: ECC920658
Linux+ Certified Professional - Credential ID: COMP001006338586
Cisco Certified Entry Networking Technician - Credential ID: CSCO11921168
Effective Communication and Human Relations (self-paid for seminar, 7 weeks)
I used to run Gentoo 2006.1 (vanilla 2.6 kernel) with Xorg and Xfce and now I use OS X on a 13" Macbook Pro Mid-2010 Mid-2014 Mid-2017
I learn by doing, by building, by experimenting and by taking risks. If I don't understand something, I take the time to figure it out and I never give up. Ever
I'm probably not smart enough to solve the halting problem and I don't enjoy hardcore math concepts but I have a passion for how the web works and I have a lifetime of learning to do
Native or bilingual proficiency
Elementary proficiency