Joseph Corcoran

Full stack software engineer.
Code. Create. Innovate.

I'm a developer and love to build innovative software solutions, that meet your business needs. My favourite work is creating simple solutions for complex problems, working in an agile environment; refining, improving code, and learning new technologies.

My favourite language is JavaScript/TypeScript, I have the most experience with it and love the flexibility that a multi-paradigm language provides. As per the JS ecosystem, I'm a big fan of React, Next.js, and NodeJS on the server. I love learning about new technologies and how they can provide real business solutions. As such I have been learning Rust when I get some spare time, and out of my own interest I've been playing around with Flutter too.

Currently I am a Cloud Engineer at Rapha, and work building AWS infrastructure for our backend services. I love cycling and love working for such a great brand in the industry.

I leverage modern AI tools to help me build better software faster. I don't know if AI will replace software engineers but I am always learning to use it to improve the software I deliver.

In my spare time you'll find me travelling with my wife, road cycling, mountain biking or playing my guitar.

Experience

Rapha - from September 2025 to Current

Cloud Engineer (Backend)

  • Centralised Customer Identity & User Service:
    • -Decoupled the platform from email-based IDs by building a central identity service using immutable UUIDv7 keys.
    • -Created DynamoDB identity and connection tables mapping users across Auth0, Commerce Layer, NewStore, Bloomreach, CometChat, and Postgres.
    • -Built a two-stage Step Functions email update workflow: dual-email verification (old + new) for security/GDPR, followed by parallel sync across 6 downstream systems.
    • -Engineered resilient failure handling with SQS dead-letter queues, EventBridge redrive pipes, and partial retries for failed downstream syncs.
    • -Provided IAM-secured admin overrides for internal support and event-driven signup handlers to auto-provision users across third-party APIs.
    • -Ran rate-limited, idempotent backfill scripts across the full customer base to populate identity mappings from existing systems.
    TypeScript
    Node.js
    AWS
    DynamoDB
    Step Functions
    EventBridge
    SQS
    AppSync
    Terraform
    Nx
    Jest
    Grafana
    GitLab
  • AI-Powered Email Triage, Security & Workflow Automation:
    • -Addressed severe operational risk across Supply Chain, Retail, and Finance teams where critical supplier blockers, invoices, and urgent actions were buried under vendor noise, automated pings, and targeted phishing/spam.
    • -Conducted cross-department discovery proving keyword filters were brittle; architected an AI classification pipeline combining malicious phishing/spam detection with a layered rule hierarchy (Personal Profile > Team Rule Pack > General Rules).
    • -Engineered strict zero-trust input boundaries: email content is treated as untrusted external text with LLM tool-calling disabled during classification to eliminate prompt-injection and data-exfiltration attack vectors.
    • -Hardened data privacy and compliance: OAuth refresh tokens and user profiles are Fernet-encrypted at rest in Firestore; classification records retain zero email body content and automatically purge after 30 days via native TTL policies.
    • -Built an enterprise self-service onboarding portal on Google Cloud Platform with Google Workspace OAuth, Cloud Identity group policy enforcement, and automated Gmail label provisioning.
    • -Containerized (Docker) and deployed an autonomous processing engine on Cloud Run (Vertex AI Gemini Flash) that labels incoming threads (Reply, Action, Read, Noise), auto-archives non-actionable noise, and delivers daily action digests.
    • -Exposed conversational FastMCP tools for Claude and Gemini Enterprise, allowing verified team members to query blockers, explain verdicts, correct misclassifications, and mute noise senders via natural language.
    Python
    GCP
    Cloud Run
    Vertex AI
    Gemini Flash
    FastMCP
    Firestore
    Gmail API
    Phishing & Spam Detection
    OAuth 2.0 / OIDC
    Fernet Encryption
    Prompt-Injection Defense
    TailwindCSS
    GitLab CI/CD
    Docker
  • Integration with US based warehouse:
    • -Two integrations with US based warehouse providers was required to streamline the US order process.
    • -Integrated our order flow with their API, using API gateway, SQS and Lambda Functions deployed via Terraform and Serverless.
    • -Live orders switched over seamlessly allowing continued operations and reporting.
    • -Effective commuication with US warehouse and the team as a whole was key to a smooth deployment
    • -Setup of Grafana Dashboards and alerts, for observability and monitoring.
    NodeJs
    Terraform
    NX
    AWS
    S3
    SQS
    EventBridge
    Serverless
    TypeScript
    Jest
    Graphana
    GitLab
  • Maintenance or migration of older code and bugfixes:
    • -BAU bug fixing and maintenance of code. Updated repos to use newer technologies such as ESBuild to replace Webpack when bundling Typescript Lambdas (faster builds/smaller bundles).
    • -Updating and adding tests, to ensure code quality and stability.
    • -Updating Node versions and ensuring deployment pipelines continue to succeed.
    NodeJs
    Terraform
    NX
    AWS
    S3
    SQS
    EventBridge
    Serverless
    TypeScript
    Jest
    Graphana
    GitLab

Groundsure - from July 2022 to September 2025

Full stack software engineer

  • New admin system:
    • -Replacing legacy admin system with new React application, allowing for better UI/UX for groundsure staff, more functionality, with an easier to maintain and update codebase.
    • -Order management for customer services much quicker and easier, faster response times leading to better service generating more sales through retention of customers.
    • -We incorporated developer tools to monitor errors in our report generation allowing for better observability of our systems, using NewRelic and AWS queues as part of this.
    • -Updated our orders API and pricing model, whilst still supporting some legacy XML orders for customers who have not yet migrated to the new system.
    React
    StyledComponents
    NodeJs
    Express
    MongoDB
    AWS
    Serverless
    NewRelic
    TypeScript
  • Replacing x2 legacy ordering systems:
    • -The business had a need to replace the outdated ordering systems which were written in Java, C# and used SQL Server. The legacy codebase had become unmaintainable having been written by a 3rd party and become outdated. We had to reverse engineer aspects to understand some business logic needed.
    • -Re-built the ordering platforms using React, Next.js, Express, MongoDB deployed to AWS. Which created a much more modern, user friendly UX/UI and improved the overall performance of the system.
    • -Our reports require drawing on maps, so we built our own mapping library using MapLibre GL and built out our own custom drawing tools for this (such as an auto-fill drawing tool).
    • -We also incorporated hundreds of layers for our customers to apply to the map and analyse, such has Flood risks, Radon levels, and many more.
    React
    Next.js
    Tailwind Css
    Express
    MongoDB
    AWS
    MapLibreGl
    Zustand
    TypeScript
  • New interactive online product - Groundsure Explorer:
    • -Building new interactive map, displaying over 50 historic map layers from our in-house records and tile servers. Previously we only provided actual pdfs of the historic maps.
    • -Customers can now view their historic maps online to interrogate their sites for potential historic risks.
    • -Added the ability to add annotations (Points, Polygons and Labels) to the map which have their own notes and tags.
    • -Hundreds of data layers can be applied to the map to allow for location analysis, provided again by our own tile servers.
    • -Built back end routes to support this functionality, using Express and MongoDB, so users can save their changes.
    React
    Next.js
    Express
    Mongo
    AWS
    MapLibreGl
    Tailwind Css
    SST
    TypeScript
    Turf.js
  • New report for Australian market:
    • -Building a new report which we launched in Australia, highlighting risks regarding property and land purchases.
    • -Puppeteer was used on the server for the report generation on the server, hosted on AWS backend, SQS for queueing and processing, and S3 for storage.
    React
    Next.js
    Puppeteer
    PostgresSql
    Express
    Mongo
    AWS
    MapLibreGl
    TypeScript
  • Ordnance Survey Mapping Product:
    • -Bringing a specialist product we sold in house. External contractor was producing these for us but at a high cost and limited control.
    • -Helped adjust and integrate with the Python API built by the GIS team to provide to scale mapping.
    • -Setup the deployment to AWS lambda and SQS queue architecture to produce maps saved to S3 and send messages to process the report.
    • -Created a to scale report template which used the images produced to pdf build reports to the design spec and deliver to customers.
    • -Setup a report preview with React to provide a faster and better developer experience.
    React
    Python
    Tailwind Css
    NodeJs
    AWS
    SQS
    S3
    Serverless
    NewRelic
    TypeScript
  • Maintaining our BAU report generation system:
    • -Updating our Ruby based report generation system which is hosted on AWS using docker containers.
    • -Ruby PrawnPdf used for PDF generation, with SQS used heavily for queueing and processing.
    • -I have taken the opportunity to work on this a number of times to broaden my coding knowledge and experience as well as supporting the business.
    Ruby
    PrawnPdf
    Docker
    PostgresSql
    AWS

IT Career Switch - from Aug 2021 to Jun 2022

Coding Traineeship – Full Stack Software Developer

  • Course:
    • -During the Traineeship I had to demonstrate a very competent level of the following: HTML5, CSS3, JavaScript, PHP, SQL, Python, Java, C#, GitHub, and more.
    • -Passed the Microsoft MTA: Introduction to Programming Using HTML and CSS exam.
    • -We incorporated developer tools to monitor errors in our report generation allowing for better observability of our systems, using NewRelic and AWS queues as part of this.
    • -Updated our orders API and pricing model, whilst still supporting some legacy XML orders for customers who have not yet migrated to the new system.
    HTML
    CSS
    JavaScript
    PHP
    SQL
    Python
    Java
    C#
  • Final project 1 - Gazetteer map application:
    • -Creating a “Gazetteer” web app using LAMP stack, using LeafletJs which allowed users to click on countries to find information such as population, currency etc. using API calls to provide this data from a range of sources.
    • -Provided multiple other sources of information such as country capital weather, top 5 news articles, and more.
    • -I'm a big fan of Formula 1 so I also used the a Formula 1 API (Ergast) to highlight all the races on for the current year and provide other information about these.
    LeafletJs
    JavaScript
    Bootstrap
    FTP
    PHP
    CSS
    jQuery
  • Final project 2 - Company Directory:
    • -A user requirements document was needed to be prepared which was checked for sign off, before developing a “mobile first” full stack REST application.
    • -Frontend built to add, edit, delete, search and filter company personnel.
    • -Backend built to support the above CRUD operations using PHP, MySQL, and a REST API.
    • -Rules implemented to ensure delete operations were safe (eg. Employee cannot be deleted if belong to department).
    • -Validations implemented on the frontend and backend to ensure data is entered correctly and stored securely.
    JavaScript
    HTML
    CSS
    SQL
    PHP
    LAMP
    Bootstrap Css
    jQuery
Other projects

Whistle Image

Creator

  • Whistle Image - whistleimage.com:
    • -I built this to learn Rust and WebAssembly, and ended up fascinated by image compression and how it actually works.
    • -A private, browser-based image converter for AVIF and WebP — conversion runs entirely in the browser, so images are never uploaded to a server.
    • -Built with Next.js, React, TypeScript and Tailwind CSS.
    • -Rust compiled to WebAssembly runs the conversion in a web worker, keeping the UI responsive.
    • -Deployed to AWS with SST, using CloudFront and Route 53 with a custom domain.
    • -Staging and preview deployments are password-gated and no-index; the public production stage serves the live site.
    NextJs
    React
    TypeScript
    Tailwind CSS
    Rust
    WebAssembly
    AWS
    SST
    CloudFront

Studio Sunlight

Software Engineer

  • Studio Sunlight Website - studiosunlight.co.uk:
    • -Much like this website. Setup github workflow for continuous deployment of website to cheap Hostinger Shared hosting.
    • -Custom domain name and SSL certificate provided by Hostinger.
    • -NextJs used for frontend, with Typescript and Tailwind CSS for styling - compiled into a static website.
    • -Very minimal reliance on external Libraries - all custom code for Modals, Image Carousel, and form validation etc. to reduce maintenance burden, provide more control and flexibility.
    • -PHP mailer used to send emails from the website contact form to custom email address.
    • -Built a Rust Image processing CLI tool to convert .png images to .AVIF format for faster loading on the website (10x times smaller but still great quality).
    • -I used AI tools to help me with SEO optimisation, incorporating a sitemap.xml, robots.txt file and meta tags for each page.
    NextJs
    Hostinger
    TypeScript
    Jest
    GitHub Actions
    PHP
    Tailwind CSS
    AVIF
    AI Tools
    SEO Optimisation

Other