JCM

Hey, I am Jonathan.

Staff software engineer at Lindy, an AI agent platform. I wrote its first line of code in 2023 and have been building agents, and the framework they run on, ever since: the layer that talks to every LLM vendor, tool calling, memory and context, sandboxes where an agent gets a shell and a filesystem, and the coding agents we now point at our own backlog.

A good part of my week goes into making the team faster than me: reviewing pull requests, running lunch and learns, automating whatever gets done twice, and turning what worked into guides and agent skills so the next person starts from the answer. I do most of it in the open on Slack, so when I unblock one person the context becomes team context: the next person can find it, and so can our Lindy teammate.

Lately most of that effort has gone into AI coding for the whole company, so that everyone, not just engineers, can make real changes to the product themselves, and into a Reviewer Agent for what became the next bottleneck once everyone could ship: reviews and the validation loop.

The rest of the job is everything around that: the product people actually click on and the platform it ships through, so a normal week goes from a Relay component to a Temporal workflow to a Kubernetes node pool, and I kinda like it that way. Before Lindy: real-time collaboration at Teamflow, backend and DevOps at HelloMD, the Gol Linhas Aéreas app at Entria, and five years of freelancing.

Self-taught in Software Engineering, but with a degree in Accounting. Based in Foz do Iguaçu, Brazil. I also love open-source and try to contribute anytime I can. I maintain node‑libcurl since 2016.

Previously
  • Teamflow2021–2025
  • Croz2020–2021
  • HelloMD2018–2019
  • Feedback House2018
  • Entria2017–2018
  • Freelance2012–2017

Writing

Planning to get back to writing again, some time, soon. For now these are some posts I wrote back when LLMs were not really a thing, heh.

12 postsRSSAll posts
    1. How To Code in TypeScriptA ten-part TypeScript series I wrote for DigitalOcean, from basic types to generics, namespaces, and modules. This post just points to it.
    1. Automated Deployment of React Native Apps Using Fastlane - Part 1 - Play StoreEveryone that has been releasing apps manually knows how tiresome and time consuming the process is, the main idea behind this...
    1. How To Automate Deployments to DigitalOcean Kubernetes with CircleCIHaving an automated deployment process is a requirement for a scalable and resilient application, and GitOps, or Git-based DevOps, has rapidly become a popular method of organizing CI/CD with a Git repository as a “single source of truth.” Tools like CircleCI…
    1. Using CircleCI Workflows to Replicate Docker Hub Automated BuildsCircleCI workflows is a powerful feature that can be used to make your deployment process simple and intuitive.
    2. Introduction to GraphQL Mongo HelpersIf you are using MongoDB and GraphQL, you probably have some arguments on your resolvers to filter the data returned from MongoDB. Using those helpers you can reduce the amount of code duplication when doing that!
    3. Client-Supplied Custom Sorting Using GraphQLIt’s not uncommon the need to sort/order data returned from an API, based on arguments sent by the client. With REST we could just use query-strings, but how to do it in GraphQL?
    4. GraphQL Mutation Arguments Validation with Yup using graphql-middlewareRecently, I found out about the awesome library by Prisma called graphql-middleware, which allows running arbitrary code before/after your GraphQL resolvers are called.
    5. Parallel testing a GraphQL server with Jest and MongoDBThis is a follow-up to the awesome post written by Sibelius Seraphini: Testing a GraphQL server using Jest
    6. Using Fastlane Match With Existing Certificates Without Revoking ThemFastlane match improves drastically code signing, even for small teams, their only issue is that by default, it does not work with existing certificates, and that is a show stopper for anyone trying to use it on existing projects.
    1. Encapsulating data on GraphQL using LoadersIf you have already used GraphQL, you probably saw that it can consume data coming from the most varied sources, be it a local database or an external API, while centralizing them in a single, self-contained, API.
    2. Access Control List on GraphQL with LoadersIn our previous post, we saw how to encapsulate data from any data source to be used on our GraphQL resolvers using Loaders, now let’s see a more robust example of that, on how to create some access control rules directly on those loaders.
    3. Re-utilizing React Native styles with Styled ComponentsHaving to refactor some components to use styled-components I felt the urge to reuse some existing styles created to be used with React Native StyleSheet, directly on styled!