123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 |
- [
- {
- "name": "Adobe Illustrator",
- "tags": ["design"]
- },
- {
- "name": "Adobe Photoshop",
- "tags": ["design"],
- "description": "I have used Photoshop all my career to create assets for the web, including UI, imagery, and other promotional content."
- },
- {
- "name": "Affinity Designer",
- "tags": ["design"],
- "description": "I use Designer to work with vector-based imagery and create icons."
- },
- {
- "name": "Affinity Publisher",
- "tags": ["design"]
- },
- {
- "name": "Agile",
- "tags": ["knowledge"],
- "description": "I am comfortable working in an agile environment."
- },
- {
- "name": "Alpine.js",
- "tags": ["js", "framework"],
- "description": "A recent discovery that I find makes it very easy to build simple websites, like this one, without huge amounts of reactive boilerplate. I look forward to getting to know it better."
- },
- {
- "name": "Apache",
- "tags": ["framework"],
- "description": "I have set up many websites using PHP or JS using an Apache front proxy. I prefer nginx these days but Apache is easier to use in some respects."
- },
- {
- "name": "ArangoDB",
- "tags": ["database"],
- "description": "ArangoDB is a fantastic NoSQL graph database which offers a very accessible and powerful query language, AQL. I have used it for many large-scale Node server apps."
- },
- {
- "name": "Backend development",
- "tags": ["knowledge"],
- "description": "I have extensive backend engineering experience from building numerous server apps and integrations throughout my career."
- },
- {
- "name": "BDD",
- "tags": ["knowledge"],
- "description": "My experence working in a fast-paced retail environment taught me that goals are always shifting, and it's vital to be able to respond to evolving requirements as your business grows with your software."
- },
- {
- "name": "Bitbucket",
- "tags": ["operations", "platform"],
- "description": "I have used Bitbucket for version control (git) and CI/CD via Pipelines. It integrates well with Jira, too."
- },
- {
- "name": "Cassandra",
- "tags": ["database"],
- "description": "A clever solution for storing data at scale when you have a clear understanding of the queries you will use."
- },
- {
- "name": "CI/CD",
- "tags": ["operations", "knowledge"],
- "description": "I try as much as possible to automate repetitive processes, including testing software, building and deploying it, creating backups etc. A well-organised CI/CD app can also help to visualise the reach of your operations."
- },
- {
- "name": "Confluence",
- "tags": ["platform"],
- "description": "Confluence integrates well with Jira and Bitbucket, and does a satisfactory job as an information hub if carefully organised."
- },
- {
- "name": "CSS/SASS",
- "tags": ["design", "language"],
- "description": "I write native and semantic CSS/SASS like poetry. I thrive in the intersection of style, content, and function."
- },
- {
- "name": "Docker",
- "tags": ["operations", "language", "platform"],
- "description": "Containerization is a boon to any hardworking engineer that needs to run a bunch of different stuff without taking chances on their host OS. Docker works great in production, too."
- },
- {
- "name": "Express",
- "tags": ["js", "framework"],
- "description": "Express provides a very developer-friendly web server that's easy to scale horizontally and extend."
- },
- {
- "name": "Figma",
- "tags": ["design"],
- "description": "Figma is a great design tool that makes it trivial for designers to share assets I can immediately isolate and embed into the software I'm working on."
- },
- {
- "name": "Frontend development",
- "tags": ["knowledge"],
- "description": "I am well-versed in past and present frontend and UX trends and try to keep up with all major frameworks, including React and Vue."
- },
- {
- "name": "Full-stack development",
- "tags": ["knowledge"],
- "description": "I am adept at uniting frontend and backend development with accessible connectors and protocols."
- },
- {
- "name": "git",
- "tags": ["operations", "language"],
- "description": "All development has been significantly easier ever since git joined my workflow. I work with greater confidence, knowing that I can always look to the past to guide the future."
- },
- {
- "name": "GitHub",
- "tags": ["operations", "platform"],
- "description": "GitHub offers increasing value the more you use it, and its Actions are so easy to work with to enable CI/CD even for small projects. Always my first stop for hosted version control."
- },
- {
- "name": "Go",
- "tags": ["language"],
- "description": "I adore Golang's simplicity - it makes networked apps quick to put together with minimal fuss, and easy to understand when you revisit them again in the future."
- },
- {
- "name": "Google Analytics",
- "tags": ["platform"],
- "description": "I have provided basic and custom Google Analytics integrations for many clients, enabling them to better understand and react to customer behaviours."
- },
- {
- "name": "Google Docs/Drive",
- "tags": ["office"],
- "description": "Google offer a very competitive office suite which fits 95% of my use cases perfectly. It makes it easy to share documentation and resources with my clients, and collaborative editing works exceptionally well."
- },
- {
- "name": "Grafana",
- "tags": ["operations", "platform"],
- "description": "I use Prometheus and Grafana to aggregate metrics from different apps and create useful visualisations of their availability, behaviour, and performance."
- },
- {
- "name": "GraphQL",
- "tags": ["language", "knowledge"],
- "description": "I have worked with GraphQL in Magento and Uniswap integrations. It's not my preference of API for technical and cost/benefit reasons but when it works, it's very clever."
- },
- {
- "name": "gRPC",
- "tags": ["framework"],
- "description": "While I favour WebSocket or REST APIs in most cases, gRPC can be a good option for coupled connectivity in mature apps with a well-defined protocol."
- },
- {
- "name": "HTML5/XHTML/XML",
- "tags": ["language"],
- "description": "HTML was my first web language, and it remains of critical importance for SEO and accessibility even in the era of web apps."
- },
- {
- "name": "Ionic Framework",
- "tags": ["js", "framework"],
- "description": "I led a team of four developers building a Magento-based web app for a major retailer. Ionic was a strong choice to use off-the-shelf components and accelerate our wireframing."
- },
- {
- "name": "JavaScript (ES6)",
- "tags": ["js", "language"],
- "description": "I am fluent in JavaScript, though I prefer to work in TypeScript wherever possible. It's a fine language for simple cases and offers much more power when augmented by type hints, especially in Intellisense."
- },
- {
- "name": "Jenkins",
- "tags": ["operations", "platform"],
- "description": "I have managed Jenkins instances for clients which handle testing, building, and deploying apps and creating backups across their network."
- },
- {
- "name": "Jira",
- "tags": ["platform"],
- "description": "Despite its complexity, Jira is a great tool for managing projects, particularly when its integrations are well-used."
- },
- {
- "name": "Laravel",
- "tags": ["php", "framework"],
- "description": "This framework's clever use of PHP magic methods makes it elegant without becoming overly restrictive. Laravel has remained a competitive option while other frameworks have risen and fallen."
- },
- {
- "name": "LevelDB",
- "tags": ["database"],
- "description": "LevelDB is a nice, simple key-value store that makes it easy to whip up a self-contained app without using an external storage service. Its speed makes up for certain limitations such as single read and write."
- },
- {
- "name": "LibreOffice (OpenOffice)",
- "tags": ["office"],
- "description": "When Microsoft Office isn't available, or heaven forfend isn't working, LibreOffice fills the gap perfectly well and has a few tricks of its own. It's always good to have a backup plan."
- },
- {
- "name": "Magento (Adobe Commerce)",
- "tags": ["php", "js", "ecommerce", "framework", "platform"],
- "description": "I have delivered beautiful and powerful Magento websites for boutique and major retailers, often developing complex integrations with other platforms. I have experience with both Open Source and Commerce editions and was lead developer on one of the first Magento websites to launch on Commerce Cloud."
- },
- {
- "name": "MariaDB",
- "tags": ["database"],
- "description": "MariaDB is my go-to when I need a MySQL server for Magento or WordPress work. It's easy to set up, particularly in a Docker-enabled environment."
- },
- {
- "name": "Markdown",
- "tags": ["language"]
- },
- {
- "name": "MetaMask",
- "tags": ["web3", "framework"],
- "description": "I have integrated with MetaMask to facilitate currency exchanges on the Ethereum network."
- },
- {
- "name": "Microsoft Office",
- "tags": ["office"],
- "description": "Word, Excel, Powerpoint - we've all used them at some point, and sometimes even the more niche apps."
- },
- {
- "name": "MongoDB",
- "tags": ["js", "database"],
- "description": "MongoDB works really well with Node.js apps, making the most of dynamic typing and offering a powerful declarative query API."
- },
- {
- "name": "MySQL/SQL",
- "tags": ["database"],
- "description": "A popular choice for many apps in need of RDBMS. SQL can accomplish so much and so quickly when properly utilized."
- },
- {
- "name": "New Relic",
- "tags": ["operations", "platform"],
- "description": "New Relic is a multifacted platform I haven't had full opportunity to explore, but it has been incredibly useful to capture and visualise logging across apps, making it easier to monitor and respond to issues particularly in a distributed network."
- },
- {
- "name": "Next.js",
- "tags": ["js", "framework"]
- },
- {
- "name": "nginx",
- "tags": ["framework"],
- "description": "A very elegant and efficient HTTP server which I favour for most apps, particularly when combined with automatic SSL certificate issuance."
- },
- {
- "name": "Node-RED",
- "tags": ["operations", "language"],
- "description": "I have used Node-RED to create integrations and functionality which may need to be accessible to non-technical users. The drag-and-drop interface works really well, and it's easy to create your own plugins if the extensive plugin library doesn't have everything you need."
- },
- {
- "name": "Node.js",
- "tags": ["js", "language"],
- "description": "I am a Node aficionado and I try to make the most of the expansive standard library, but when deadlines loom, there's a million packages on npm to speed things up a bit. Node apps are one of the quickest ways to get off the ground, particularly when transpiling from TypeScript."
- },
- {
- "name": "PayPal",
- "tags": ["payments", "platform"],
- "description": "I have integrated PayPal for ecommerce using their plugins, primarily in Magento. I have also patched issues in earlier versions of the plugin for clients who had issues with payment creation."
- },
- {
- "name": "PHP",
- "tags": ["php", "language"],
- "description": "I have been with PHP since version 5.6 many years ago. While it hasn't completely shaken off its past, modern versions are much more approachable with better typing features and strong, structured OOP capabilities."
- },
- {
- "name": "Prometheus",
- "tags": ["operations", "platform"],
- "description": "I use Prometheus and Grafana to aggregate metrics from different apps and create useful visualisations of their availability, behaviour, and performance."
- },
- {
- "name": "React",
- "tags": ["js", "framework"],
- "description": "Functional React is a brilliant way to build complex web apps with interlocking functionality. Hooks make it easy to separate concerns by isolating internal logic from the UX."
- },
- {
- "name": "REST API",
- "tags": ["knowledge"],
- "description": "Sometimes you just can't beat a straightforward HTTP request to get the data you need, and well-formed REST APIs offer familiar conventions that make full use of the HTTP protocol and receive attendant benefits."
- },
- {
- "name": "SOAP",
- "tags": ["framework"],
- "description": "No longer the preeminent message format for integrated web services, but still useful to know, particularly when integrating particularly deep-set systems in industry and commerce."
- },
- {
- "name": "Shell",
- "tags": ["operations", "language"],
- "description": "I use a terminal every day in the course of my work, whether on my own system or in a remote SSH session. My hands-on experience managing servers supports my ability to implement CI/CD."
- },
- {
- "name": "Shopify",
- "tags": ["platform"],
- "description": "I believe Shopify is an excellent, low-complexity option for small businesses who need an online shop. I am familiar with managing shops and marketing integrations, and have some experience with their APIs and templating system."
- },
- {
- "name": "Sketch",
- "tags": ["design"]
- },
- {
- "name": "Solidity",
- "tags": ["web3", "language"],
- "description": "I have reviewed and supported Solidity-based smart contracts for the Ethereum network."
- },
- {
- "name": "Strangler pattern",
- "tags": ["knowledge"],
- "description": "Businesses are made up of many moving parts, and sometimes parts need to be replaced. Software has to be able to follow suit, be it through interfaces and abstraction or the use of microservices. I can help make this happen."
- },
- {
- "name": "Stripe",
- "tags": ["payments", "platform"],
- "description": "I have integrated Stripe into client systems both using plugins and manually using their excellent SDKs and APIs. Stripe is comfortably one of the best payment processors available in terms of developer experience."
- },
- {
- "name": "Tailwind CSS",
- "tags": ["framework"],
- "description": "As much as I like to roll out my own CSS tailored for purpose, it can get out of control in larger teams and busy projects with high code turnover, particularly when following BDD. Tailwind provides cohesion and compartmentalisation of styles without sacrificing flexibility."
- },
- {
- "name": "TDD",
- "tags": ["knowledge"],
- "description": "Tests are crucial to the correctness of all software. I am adept at writing full-coverage unit tests and designing integration tests. Test-driven development is a good fit for businesses that have a particular need for robustness and a clear vision for their software implementation."
- },
- {
- "name": "TypeScript",
- "tags": ["js", "language"],
- "description": "TypeScript is the perfect solution for code correctness in JavaScript apps. It has enabled me to build things of vastly greater scope and complexity without losing track of the flow of data."
- },
- {
- "name": "Umami [Analytics]",
- "tags": ["platform"],
- "description": "Sometimes, often for privacy reasons, Google Analytics isn't the right choice for your organisation, but that doesn't mean you have to miss out on analytics. Umami is a strong, responsible, and open-source option for understanding your users' behaviour."
- },
- {
- "name": "Vue.js",
- "tags": ["js", "framework"],
- "description": "I have built numerous frontend applications in Vue 2 and 3. It is particularly enjoyable to create Vue SFCs since the introduction of Composition API and improvements in TypeScript support."
- },
- {
- "name": "WebSockets",
- "tags": ["js", "framework", "language"],
- "description": "WebSockets make it wonderfully simple to create real-time data streams between a server and its client, particularly in the browser."
- },
- {
- "name": "web3.js",
- "tags": ["js", "framework"]
- },
- {
- "name": "WooCommerce",
- "tags": ["php", "js", "ecommerce", "framework", "platform"],
- "description": "A solid option for small online shops that need a high degree of customisation without the cost of hosted solutions. I have built and maintained WooCommerce stores for several clients."
- },
- {
- "name": "WordPress",
- "tags": ["php", "js", "ecommerce", "framework", "platform"],
- "description": "The granddaddy of CMS. Say what you will about coding in WordPress, but its versatility and huge variety of plugins has kept it relevant and viable for over two decades. I have extensive experience customising and integrating WordPress for a wide range of clients."
- }
- ]
|