Skip to content
keegan@portfolio:~$

keegan@portfolio:~$ whoami

Keegan Frieslaar

Full-Stack Software Engineer

I build and run safety-critical AWS serverless systems in TypeScript, currently MSA Grid at MSA Safety, which monitors gas-detector fleets worldwide.

8+ years · Cape Town, South Africa · SAST (UTC+2)

keegan@portfolio:~$ ls ./next-steps

keegan@portfolio:~$

Featured projects

ls -la ~/projects →

[case study]

Case study: an RDS outage caused by polling

How a 2-second polling endpoint saturated a production RDS cluster on MSA Grid, and how I traced it to a sequential scan and cut database CPU from ~95% to ~30% within hours.

  • RDS
  • PostgreSQL
  • Node.js
  • TypeScript
  • CloudWatch
  • Datadog

MSA Grid

Connected-safety platform for industrial gas detection

  • Angular
  • TypeScript
  • NGRX
  • Node.js
  • PostgreSQL
  • AWS Lambda

Xago

Africa's first XRP (Ripple) digital asset exchange

  • React
  • JavaScript
  • react-vis
  • Swagger / OpenAPI
  • Algolia InstantSearch
  • Leaflet

Serverless AI Portfolio

This website: a static Next.js site on S3 + CloudFront with a Node.js Lambda backend and a Bedrock-powered agent.

  • Next.js
  • TypeScript
  • AWS SAM
  • Lambda
  • API Gateway
  • DynamoDB

Ask my AI agent

A Node.js Lambda runs a tool-calling agent on Amazon Bedrock. It answers from structured data about my experience, skills and projects, and it is rate limited and budget capped.

Ask me anything about Keegan's experience, skills and projects. I'm an agent running on Amazon Bedrock that looks up answers with tools.

Experience

  1. Date: Mar 2023 — Present (3 yrs 7 mos) · Cape Town, South Africa

    Software Engineer · Safety iO

    MSA Safety (NYSE: MSA)

    Building MSA Grid, a connected-safety platform that monitors gas-detection fleets and worker safety in hazardous industrial environments. Full-stack across Angular, Node/TypeScript and AWS, within a 6-person sub-team collaborating with teams in Germany and the US.

    • Build and operate MSA Grid end to end — Angular front-end, Node/TypeScript REST APIs and AWS infrastructure — for a safety-critical platform used worldwide, where top customers run fleets of 300–3,000 gas detectors and reliability protects workers in hazardous environments.
    • Diagnosed and resolved a production outage in which a high-frequency polling endpoint saturated an RDS cluster, restoring stability through targeted database indexing.
    • Mentored 13+ engineers and review code daily.
    • TypeScript
    • Angular
    • NGRX
    • Node.js
    • PostgreSQL
    • AWS Lambda
    • API Gateway
    • Step Functions
    • +10 more
  2. Date: Jul 2018 — Mar 2023 (4 yrs 8 mos) · Cape Town, South Africa

    Software Engineer · Tenacious Digital

    Delivered web and mobile products for clients across fintech and e-commerce, including Africa's first XRP digital asset exchange.

    • Owned the React front-end of Xago, Africa's first XRP (Ripple) digital asset exchange — building real-time trading charts, Swagger-driven API integration and search against a regulated financial platform with 5,000+ registered users and R4.6 billion in trading volume, still live in production today.
    • Built a customer-facing e-commerce platform for Masterparts, enabling online purchasing across a catalogue of 60,000 active line items and now handling 10,000–15,000 orders a month.
    • Promoted from intern to junior to mid-level engineer, leading a team of 3 and mentoring junior engineers.
    • React
    • JavaScript
    • Node.js
    • MongoDB
    • REST APIs
    • Docker
    • Testing Library

Full experience, education and skills on my CV

Skills

Languages

  • TypeScript
  • JavaScript
  • SQL

Front-end

  • Angular
  • NGRX
  • React
  • i18next

Back-end

  • Node.js
  • REST API design
  • OpenAPI / Swagger

Data

  • PostgreSQL
  • MongoDB
  • DynamoDB

DynamoDB: Single-table design · Streams + event filtering · TTL & atomic counters

Cloud & infrastructure

  • AWS Lambda
  • API Gateway
  • Step Functions
  • CloudFormation
  • Ansible
  • S3 / CloudFront

Testing

  • Jest
  • Testing Library
  • Playwright

Delivery & operations

  • Jenkins
  • Bitbucket Pipelines
  • GitHub Actions
  • Docker
  • Datadog
  • CloudWatch
  • Linux

GitHub Actions: OIDC federation to AWS (no long-lived keys) · Automated testing & linting · Environment promotion

AI

  • Amazon Bedrock
  • LLM agents & tool calling
  • AI-assisted engineering

Amazon Bedrock: Converse API & tool use · Guardrails & cost controls · Model selection & evaluation

LLM agents & tool calling: Agent loops with bounded iterations · Grounded answers over structured data · Prompt design

AI-assisted engineering: AI pull-request reviewer in CI · Custom Copilot agents & skills · MCP servers

Architecture

Visitor
Browser
Route 53 + ACM
DNS & TLS
CloudFront
CDN · security headers · URL rewrite function

/*

S3 (private)
Static Next.js export via OAC

/api/*

API Gateway
HTTP API · throttling
Lambda · Node.js 22
chat · contact · visits · health
Amazon Bedrock
Nova 2 Lite · tool use
DynamoDB
Single table · TTL · streams
SES
Contact notifications
Everything is serverless, defined in AWS SAM and deployed by GitHub Actions using OIDC.

Contact

Messages are stored in DynamoDB, and a stream-triggered Lambda emails them to me via SES.

Prefer email? hello@keeganfrieslaar.com