Online version at https://www.philipcoombes.uk
ReactJS, Nuxt/VueJS, PHP, MySQL full-stack development a speciality.
I have over 35 years of programming and software engineering experience in everything from real-time embedded software to full-stack web development. Recently I have worked mostly on VueJS and ReactJS front-ends usually styled with TailwindCSS, Semantic-UI or Bootstrap with NodeJS and PHP RESTful APIs and MySQL/Mariadb or SQLite3 databases on the back-end.
Generally I have been responsible for all aspects of a project from initial design through implementation to completion. I specialise in administration systems with data management and reporting but have also had long term responsibilities on a number of consumer facing commercial websites. I often also manage the deployment of systems via Docker or other virtualisation type or hosting and I have considerable experience in hardening and managing security audits on the underlying server software.
I have lots of experience in the associated data processing, import and migration between legacy and modern systems and databases and am able to create processes and scripts to handle virtually any scenario as well as designing relational or object based databases to contain the results.
In among the web projects I have spent several years doing more 'traditional' software engineering using C/C++ on various platforms including embedded systems running real-time operating systems on ARM processors. I consider that the contrast in approaches between web and classical programming enhances my skills in both.
As well as paid work I also created the highly successful ZoneMinder Open Source CCTV project as a sideline. ZoneMinder integrates video feeds from analogue or network cameras and presents them via a comprehensive web interface which allows the users to view live video or replay historical events captured by configurable motion detection algorithms. This was a hybrid project consisting of a C/C++ backend for image capture, processing and streaming and a web UI for viewing live video and browsing historical events. I ran this project single-handed for over ten years until I handed it over to a collaborative team to continue its development in new directions.
For 'fun' and educational purposes I run a fairly comprehensive office/home network consisting of on and off-site VMWare ESXi servers connected via VPN amongst other hardware. These run around 30-40 virtual machines in total, generally self-hosted variants of what would otherwise be cloud applications. For example, Bitwarden (password manager), NextCloud (files and simple apps), PhotoPrism (photo management), Wazuh (log and server vulnerability monitoring), NXMeta (network video application) etc. These are nearly all running docker containers on FlatCar Linux which is an immutable lightweight distribution which can be set up purely from a configuration file. I maintain a library of config snippets allowing me to build new virtual machines with minimal effort.
I consider myself diligent, reliable and highly productive. My many years of experience help me to quickly identify the best methods and approaches for a particular project or problem. I have worked with some of my clients for more than twenty years on a variety of projects which I consider a strong endorsement of my abilities. I am happy to work full-time on projects or on an hourly basis for specific tasks and prefer to work either remotely or within easily commutable (ideally by bike) distance from BS34. Please enquire about daily and hourly rates, I am also happy to quote on a fixed-price basis for well defined requirements.
Freelance web developer, general programmer and IT Consultant. Embedded systems to full web stack projects undertaken and delivered. ReactJS a speciality.
Web2Wire is the name of my company used for my solo and collaborative freelancing and consultancy work. Its name signifies the range of skills I use, from pure web based front-end Single Page Applications to low-level real-time embedded systems involving C and assembler grade languages and direct GPIO and hardware access.
Projects undertaken include -
Please see the projects section for more information. Most of the clients I have worked with during this period are still using me for both new work and enhancement and further development of older projects.
I was recruited to create a bespoke ‘hard-wired’ prepaid services platform using C and Informix ESQL/C. On successful completion of this project I was engaged to investigate the possibility of creating a more generic services platform (Service Node) for a wider range of applications. I designed the software architecture of this product and specified and implemented a flexible service definition language (FSDL) in which services were defined. This design and implementation was done using object oriented methods (UML) and implemented in C++ with the FSDL language grammar defined in YACC and LEX. The FSDL allowed both the subscriber data and service behaviour to be clearly and unambiguously specified, and modified, without any binary changes being required in the core software and so accelerated software and service development timescales whilst reducing risk.
At the time of the initial development I was the only person involved with this project which then grew to a division of more than 200 people, a number of whom were primarily employed in the specification and maintenance of services via FSDL. The system itself was installed in over 20 countries hosting a variety of prepaid services. It supported over 10 million subscribers world-wide making it the largest installed base of systems of its kind with most customers repeatedly upgrading to increase capacity due to its popularity. Once the company started to expand was made senior team leader with responsibility for the call management and control team.
Following that I was made responsible for research into new technology areas that could be included in the product. This included liaison with other parts of Logica to discover other products with which the INP may interface as well as exploration of newer technologies such as CORBA, WAP, JAIN and VoIP that may potentially be incorporated within the product itself.
This was my first spell of freelance software development and mainly involved telecommunications projects with various divisions of Northern Telecom and their research arm Bell Northern Telecom (BNR).
Please see the projects section for more information on these engagements.
I was engaged to deliver and support the Networking module of a Computer Sciences diploma course. This was a part-time course and took place in the evenings where I would give lectures to the students, set them projects to complete and support them during the associated sessions. At the end of the semester I was also involved in setting and marking their module final examinations.
The course topics included the 7 layer OSI network model, computer interconnection equipment and concepts and an introduction and practical sessions relating to the design, components, and use of the (then embryonic) internet.
Below is a selection of some of the larger projects I have worked on in the last few years on a contract basis. In some cases details have been anonymised or omitted, due to NDAs or other publication limitations. I am happy to provide further information privately on request.
I have also worked on a large number of smaller jobs and projects that in some cases go beyond the scope of those listed here. If you are after particular application experience and don't see it here then feel free to get in touch to ask as it's highly likely I will have done something very similar in the past.
I have been a member of Clifton Bootcamp in its various iterations for over twelve years. Following a divestment from a previous umbrella organisation it was recently re-launched with new branding in its current form. I took on the creation of the website and implemented it as a statically generated site using Nuxt V3 as a build environment wrapper around VueJS.
The mobile first site was created from basic PDF designs supplied to me alongside liaison with the business owner. Although it was a largely straightforward static site build there were some interactivity and membership management integration issues that had to be overcome.
As well as creating the site I also currently host it on a server I run in a co-location environment.
This site was set up to regularly pull down records from a public swimming resource, store them locally in an SQLite3 database and process and present them in formats that make it easier to manage and assess the performance of specified swimmers against their peers and the various levels of qualifying times. It was written in NuxtJS/VueJS which allows the front-end, back-end and any utility scripts to share the same TypeScript codebase.
The client for this project is one of the leading online pharmacy providers in the UK. Their site allows customers to easily order medications for a variety of conditions using a simple online consultation which is reviewed and approved (or declined) by real doctors.
I was originally engaged to work on a rewrite of the website from an old version of Zend Framework. However it quickly became apparent that their server infrastructure was outdated and vulnerable so my initial involvement was to manage and oversee a structural reorganisation to a clustered architecture more suited to their requirements. The server configurations were defined and deployed using Ansible.
Once this was successfully completed I then moved onto the rewrite. This uses VueJS in a NuxtJS environment to support Server Side Rendering (SSR) to ensure continued high ranking search engine results. During this process the site was migrated from a Zend Framework driven site with a large bespoke HTML element to a more fully database driven site using a variety of new APIs to retain the existing look and feel while improving the ease of management and administration. As part of this process I created several parsers to extract the bespoke content into database tables that can be used to extract and keep up-to-date the rewritten content from the current live site.
Alongside the public site rewrite I also worked on the administration sites to add or enhance functionality. This included a comprehensive database structural review to identify and optimise slow and poorly structured queries.
Unfortunately due to staff availability the rewrite was never completed in this form and eventually refocused using alternate, less ambitious, solutions for which it was easier to recruit. I continued to manage the existing infrastructure during the migration to a new platform.
Sighthound Inc is a US company that specialises in providing AI powered video analysis solutions and services. These include vehicle make, model and license plate recognition, automated video and audio redaction and vehicular and pedestrian traffic monitoring and analysis primarily via their own video edge hardware.
I worked on a variety of projects with Sighthound, largely on the front-end web interfaces. These included the overall system management UI and a standalone video configuration UI for defining detection zones in a variety of co-ordinate systems. I also worked for a period on the analytics pipeline code and did the initial evaluation and implementation of the audio redaction functionality.
The company underwent several structural reorganisations and management and directional changes during this time but I was retained to provide some continuity during team member churn.
The London School of Journalism (LSJ) is a leading provider of online and in-person journalism courses for both graduates and those with a more casual interest. They have students from all over the world especially for the online courses where geography is no barrier to participation.
I have worked with the LSJ on and off since 2001. In that time I have worked on several redesigns and enhancements of the main brochure site, each bringing it up-to-date with browser developments and best practice. More recently I have created a new administration dashboard and system to monitor and manage student enrolments and payments via the WorldPay JavaScript payment gateway. This also manages instalment payments for those students who do not wish to pay in full. The LSJ runs a variety of courses all with differing payment structures and timings.
I also created the student online learning site. This system is used by students to attend virtual 'lectures' and one-to-one tutorials with their tutors throughout their courses. I also created the associated online examinations facility which is used for the student's module exams, both mock and real. This manages which examinations a student is entitled to sit, records their answers on an ongoing basis and enforces a time limit by which time they have to finish. Administrators are able to log in view ongoing lectures, tutorials and examinations and intervene or extend time etc in case of difficulties.
Over the years I also created a number of subsidiary systems to assist the back office. For instance, I wrote a mail processor which filters incoming and outgoing emails, detects the relevant student and then records and archives the email in a database and on file. A web interface is provided for fast lookup of student correspondence and rapid inspection and searching of emails and threads.
This was a fairly uncomplicated system set up to manage the booking and invoicing of photography sessions for clients and their pets. It included a contacts management function as well as PDF invoice creation and payments tracking. It was deployed as a simple two node docker cluster.
For this client I developed a full featured bespoke stock control and invoicing system to support multiple businesses. It supports the full order lifecycle from the initial receipt of customer purchase order, through issuing supplier POs, invoicing in multiple currencies as well stock assignment and management. Originally written in AngularJS with a PHP/MySQL back-end it was recently migrated to React/Redux on the front-end plus a complete API rewrite of the back-end.
As well as the day-to-day order management the system also featured various dynamic reports (using chart.js), synchronisation of selected products to the customer facing brochure website catalogues, and on-the-fly PDF generation for invoices and other documents. It was originally developed to run on a dedicated server but has since migrated to a docker cluster to reduce costs and simplify deployment and maintenance.
I also created all dynamic elements of the public facing website which allow browsing of product details and related functions.
I designed and implemented a solution to manage vehicles booked into a secure storage facility. This included the booking process, scheduling ongoing maintenance and housekeeping actions on the vehicles and inventory and capacity management. This project was a React/Redux front-end with a RESTful PHP API connecting to a MySQL database.
This client is a large sector specific advertising website. It exists to allow the public and businesses to list their items and to be contacted by potential buyers with a view to inspection and purchase. The core of the system is a curated search function that allows users to quickly narrow down the listing to those they are most interested in.
The ecosystem that the site exists within is reasonably complex inasmuch as there are several charging models depending on whether the advertiser is private or trade in nature. Private users pay for their adverts directly on the website whereas trade users are usually invoiced and charged monthly on a scale which depends on their advertising volume.
I originally worked on this site nearly 20 years ago when it was ported from a FileMaker project hosted on a small Apple Mac desktop. In that time I have worked on the following areas.
I created a telephone call recording management system. This was primarily a React administration dashboard which was used to manage, search and replay recordings of phone calls made on an Asterisk PBX or imported from records stored on mobile phones. The back-end for this project was a NodeJS server coupled with a MongoDB object database. There was also a worker node which ran offline and converted all of the audio files into mp4 files from whichever format they were originally recorded in. It was deployed as a dockerised solution running on a Synology NAS device which mounted filesystems from the PBX via NFS.
The Telemisis SiteNode 3G and TankNode products are versatile and compact telemetry and logging devices based on an ARM STM32 processor on custom hardware. They are intended to manage generators and other mobile and deployable plant and hardware and to be remotely manageable and upgradeable.
I worked on several generations of this product, writing code for modem communications, including over the Iridium satellite network, as well as low level device drivers to MEMS accelerometers, GPS devices, analog to digital converters, serial and network devices and other hardware using a variety of protocols include I2C and direct GPIO access.
I also wrote an embedded web server and the associated HTML, JavaScript and CSS for an onboard management interface over a LWiP network interface plus various other aspects of network functionality.
I worked for Telemisis for two separate periods which corresponded to two separate generations of the projects hardware and software.
This project was set up to allow the client to compare the prices of their listed products with those of their competitors in the same sector. It consisted of a React/Redux user interface which communicated with an API created in NodeJS and which used MongoDB as the data store. In this case MongoDB was preferred to MySQL owing to the large volume of data stored and the relatively simple relationships and searching functions required.
As well as the management interface itself there was also a spider component which ran queries against the other websites and included a configurable parser to extract the relevant pricing and stock availability and correlate it with the clients own products. To support this there were status pages highlighting when a competitors product was cheaper as well as reports and charts to illustrate price changes over time. The spider was also written in JavaScript on a Node platform in order to increase code sharing with the rest of the system.
This project was implemented as a Docker cluster for the main components and a Google Cloud virtual machine instance for the spider, allowing for network relocation should it become necessary if the spider was blocked during its crawls.
The Ozone Network project was an evolution of the concepts originally created for ZoneMinder and was designed as a toolkit for the easy creation of video and audio applications.
It provided a set of C++ classes that could be chained together to perform various tasks on audio/video or data streams. At it's simplest an application could be created to merely capture video and write it to a file, but with a few more lines of code that application could simultaneously perform motion or object detection on the stream, stream a marked up version to a browser and stitch together a further stream from another camera. The complexity was reserved for the component classes whilst a sophisticated application could be expressed in a handful of lines.
This project was intended as a showcase of the concepts and technology with a view to allowing third parties to download and use it for their own applications. The ozone.network site contains documentation and various examples and the source code is available on github.
The PONTIS EMC range of products are used to monitor and supervise EMC (Electro-Magnetic Compliance) testing for customers' electronic products. The monitoring hardware must not interfere with the testing and so is designed to prevent emission of electromagnetic radiation by the use of optical cabling and shielding.
I worked on the PECOS video monitoring systems which were sold as a controller for monitoring testing via video and audio from the shielded devices in the EMC chamber where the test was taking place.
The system was based on a heavily customised version of ZoneMinder with many modifications to support the bespoke hardware and a simplified and extended user interface. It was used to record the testing sessions and to overlay various important testing metrics on the video stream itself to make it easy to cross reference any failures with the test conditions at the time.
Audivo is based in Amberg, Bavaria in Germany. I worked both remotely from my own office and also visited the Audivo offices frequently to work there.
ZoneMinder is open source CCTV software that runs on Linux. It combines a fast and efficient real-time C++ back-end with a user friendly PHP web interface to make it easy to manage CCTV cameras and video from a large variety of cameras and feeds. The core of the system was a highly optimised MySQL database. As well as being able to view live video, ZoneMinder allows you to review historic events captured as the result of configurable motion detection. It also supports integration with external devices via plugins for camera and smart-home protocols.
ZoneMinder is probably the most popular 'free' video and CCTV monitoring and management software available and has been downloaded and installed thousands of times over the years, and is in use both in domestic and large and small corporate sites. It supports and network IP cameras and traditional analog video (via the Video4Linux driver API) and includes the ability to control those cameras with zoom, focus and pan/tilt facilities.
I originally created the ZoneMinder software and ran it largely on my own for over ten years. As well as the software itself I created the logos and branding and set up and administered the associated website, wiki pages and forums in my spare time.
Eventually other responsibilities meant I no longer had the time to devote to the project so have now handed it over to a larger team who are taking it forward.
Ubiquiti Networks Inc is a major NASDAQ listed business specialising in enterprise level networking infrastructure components and software. However in 2008 they were a much smaller business still in the start-up phase.
I was engaged to work on two projects with them as a result of them having encountered my work with ZoneMinder. The first of these was on-board software for their embryonic network camera project. The second project was to create a management user interface for controlling the cameras and managing footage. I worked with a small team of software and hardware engineers based at their offices.
The on-board software was based on the C++ components of ZoneMinder and ran on a customised build of Linux created to run on the specific Texas Instruments SoC hardware. I had to migrate and adapt the software to run on this platform and create new device drivers to allow efficient capture from the Pixim based camera components.
The management interface was similarly based on an adaptation of the interface from ZoneMinder though highly adapted for Ubiquiti's needs. Although originally intended to run on a Linux platform, shifting development goals and approach meant that ultimately this was ported to run on a Windows 7 platform. This was a challenging task given that the entire design ethos originally had been to use the capabilities of Linux for efficient operation, however it was completed successfully.
Ubiquiti Networks Inc is based in San Jose, California in the United States. I worked mostly remotely from my own office but also on occasion at their premises in the US.
Evolved Intelligence (EI) was formed by some of the same people that worked on the Logica mobile services product. It's goal was to provide next-generation services for GSM/3G/4G network operators to use themselves or offer to their customers.
I was involved on the services platform itself and worked on interfacing the Aricent SS7 signalling hardware with the services logic itself with was applied by Java components. This was written in C++ for the most part with the device drivers and kernel elements being written in C. SS7 is the protocol stack commonly used in the infrastructural elements of GSM, 3G and later networks. It controls the communications between the various network components using a layered model of protocols including MAP, TCAP, ISUP and INAP. My work on this project largely involved decoding and modifying or re-routing appropriate messages while passing the remainder onwards untouched.
The services I worked on include 'Welcome SMS', 'Preferred Networks' and 'Virtual Home Environment' which were provided to customise and configure services offered for mobile users roaming onto other networks.
Evolved Intelligence has continued to expand their service offering and was recently acquired by Mobileum.
The English Group was a boutique web and publishing agency which specialised in a high-end approach to design and production of both website and book projects. The visually arresting appearance of the websites had to be matched by innovative and intuitive functionality.
The English Group had an impressive client list including well-known artists, photographers, authors, philanthropists, venture capitalists and large international businesses, as well as more local interests such as law firm and private schools. They also had an in-house publishing function which focused mainly on sophisticated adult oriented content. I worked on a very wide range of sites for these clients from the highly visual art sector brochure style to the more conventional business information and customer interaction format. The sites were usually either created in WordPress, often with extensive customisations, or directly in PHP with a MySQL back-end database. I worked with the designers to turn their visualisations into the final sites, often directly from the PhotoShop files as most had little or no web experience. I also interfaced with customers directly to capture requirements for the site functions and custom behaviours.
As well as the customer sites I also created and maintained company business functions such as client tracking database and relations management (CRM) plus other administrative task management and looked after the the systems administration of the hosting servers and managed the in-company network.
SensusTech Ltd was formed to provide solutions to GSM mobile network operators in the field of performance testing and metrics. Their primary product was the Performance Analysis System which was designed to run autonomous and continuous testing against various aspects of a mobile network. It was based on the concept of a swarm of Performance Analysis Modules (PAMs) deployed either statically in buildings or in mobile mode in vehicles. These modules would report back to a central server over GPRS, SMS or other technology which would collate the results for time or location domain reporting.
I worked on the PAM element of the system. This was bespoke hardware based on the AT91RM9200 chipset and ran a custom Linux distribution. My initial task was to create this distribution and adapt it for the base hardware and create a number of device drivers to interface with specific hardware modules. I then worked on the module software itself which was written in C and managed the scheduling of tests and initial interpretation of any results before reporting them to the central server. To do this it had to interface with the various hardware elements on board such as GPS and GSM as well as a DSP which was used to perform Mean Opinion Score (MOS) tests on voice quality based on ITU recommendation P.263. I also wrote the multi-layer reporting and control protocol used to communicate with the central server.
Once the basic product was functional it was realised that control from the central station was not always possible or desirable. Consequently I then created a management application that could be used to directly control the units over the serial interface. This could be used for scheduling tests, viewing results and firmware upgrades etc. This application was written in Perl with QT window management.
SensusTech's success with this product led to it being acquired by Alan Dick Ltd which was an established operator in the mobile sector.
Bell Northern Research (BNR) was the research and development arm of Northern Telecom which was a major telecommunications provider. I worked on several projects during my time with BNR.
I designed and created a demonstrator system for the V5.1 local access protocol in order to demonstrate the company had technical competence in this area. I also created an exchange simulator to decode the V5.1 signalling and respond appropriately to interact with telephones. I wrote the software in C and C++, with low level routines on the MVME162 boards being written in assembler, necessary because there was no operating system on these boards, and I/O, timing and other actions had to be handled directly at hardware level. Thus successfully completed trials in Germany with a Siemens V5.1 exchange, and I was subsequently engaged in various intra-company consultancy tasks as a result.
Details of this role have been excluded from printed copy for brevity. Please visit www.philipcoombes.uk/#bnr-2 to view.
I worked in a team developing an ISDN terminal adapter product. This was a device intended to bridge communications from computers and other equipment across the ISDN telecommunications network. I initially designed and implemented a two layer Network Management protocol based on HDLC frame structure used via the ISDN network to effect communication, and remote access and configuration, between two or more Terminal Adapters. I also created and maintained multiple environments to support simultaneous development on different platforms and using different compilers and tools.
Details of this role have been excluded from printed copy for brevity. Please visit www.philipcoombes.uk/#bnr-1 to view.
The system I worked on was designed to control the reception, routing and retransmission of messages in a variety of formats, i.e. Telex, Gentex, PSS, PSTN, Telegraph etc. I was placed in overall control of the pre-release system testing and of fitness for release. Devised a means to restructure the test suites to implement a common user interface and report structure for a large number of separate and mainly dissimilar sets of tests. Subsequently I became responsible for large scale re-engineering of message archiving subsystem. This was a critical component of the system concerned with the storage and retrieval of all incoming and outgoing messages for billing purposes and for re-transmission of failed messages.
Details of this role have been excluded from printed copy for brevity. Please visit www.philipcoombes.uk/#act to view.
I was responsible for functional design, coding and testing of modules in shelf controller software for the Synchronous Multiplexor system. This software controlled and communicated with a number of other independent processors (both Motorola and Intel) running their own software, so considerable liaison with other software teams was necessary to define the common data formats and protocols.
Details of this role have been excluded from printed copy for brevity. Please visit www.philipcoombes.uk/#stc to view.
I am fluent in C/C++ for real-time systems and embedded programming and TypeScript, PHP and SQL for front and back-end web work.
Nuxt/VueJS and React are my primary web application development frameworks along with HTML, SASS/CSS, Node and related technologies. Previously, I have also used AngularJS for simpler solutions.
On the back-end I have created many RESTful APIs which are usually backed with MySQL/MariaDB, MongoDB or SQLite3 databases which I also design.
I have many years of experience of Linux systems administration and deployments, either direct on metal or using virtualisation or container solutions such as VMWare vSphere/ESXi and Docker. This ranges from initial installation and network set-up to security hardening, back-up and disaster recovery strategies.
My main interests outside of work are all outdoors. I enjoy Stand Up Paddleboarding (SUP), especially sea paddling, and own a couple of boards. I also enjoy cycling, both road and cross country. I have been a member of British Military Fitness for a number of years and attend outdoor fitness classes several times a week throughout the year. When I have time left over from that I like to hike and do general gardening activities. I am especially interested in the cultivation and consumption of range of chilli pepper varieties. During lockdown I have rediscovered my love of beer brewing and have got into bread making including the thankless chore that is sourdough.
If I am unable to go outside I enjoy reading, going to gigs, watching various sports and learning Welsh.
Updated: Monday, 13th January 2025