cristianmartinez

Senior software engineer building APIs, SDKs, integrations, and customer-facing products.

Based in the Netherlands.

01 / PERSONAL PROJECTS

Two projects I’m building: a language and a state-machine runtime.

01 / EXPRESSION LANGUAGEPERSONAL / OPEN SOURCE

Yexp

A compiled expression language for JSON.

Query, transform, and validate JSON-like data with JavaScript-shaped expressions. I built the lexer, parser, bytecode compiler, and VM, along with a streaming CLI and a browser playground.

YEXP / QUERY EXAMPLE
{
  "products": [
    { "name": "Mouse", "price": 25, "inStock": true },
    { "name": "Laptop", "price": 999, "inStock": true }
  ]
}
Expression$.products[.inStock && .price < 100][*].name
Result["Mouse"]
  • Predicate selectors, wildcard projections, recursive descent, and pipelines.
  • Inspectable, serializable bytecode, evaluated without eval() or generated JavaScript.
  • An embedded TypeScript API and a CLI that use the same language.

TYPESCRIPT / COMPILER / BYTECODE VM / CLI

02 / STATE MACHINE RUNTIMEPERSONAL / OPEN SOURCE

Statepack

State machines defined as data.

Define states, transitions, guards, and mutations in JSON, with reactive data stores. I’m building the compiler and interpreter, portable machine artifacts, and execution runtimes in Rust, Go, and Zig.

STATEPACK / COMPILE, SAVE, EXECUTE
  1. 01 / DefineJSON machine{ "id": "counter", "initial": "active", … }
  2. 02 / CompilePortable artifact

    Machine definition + Yexp bytecode

  3. 03 / ExecuteJavaScript · Rust · Go · Zig

    The native runtimes share an initial execution profile.

Statepack uses Yexp for its portable expression bytecode.

  • JSONata or Yexp expressions for store queries and mutations.
  • Compiled Yexp machines can be saved as JSON and loaded without recompiling expression source.
  • Native runtimes execute a shared initial profile, checked against JavaScript conformance fixtures.

TYPESCRIPT / YEXP / RUST / GO / ZIG

02 / WORK EXPERIENCE

APIs, SDKs, workflow services, and email integrations.

01 / AppcuesNovember 2022 – June 2026

Senior Software Engineer

Experience Builder and SDKs

Owned the middleware translating Builder state into the SDK’s custom DSL. Developed Elixir workflow services and led frontend development for Workflows and Journeys.

SDKs / ELIXIR / CLICKHOUSE↗
02 / VerySeptember 2021 – September 2022

Senior Software Engineer

Sole Collector APIs and alerts

Built the Node.js API, Elasticsearch-powered sneaker and brand search, and a release-alert system using RabbitMQ. Also developed Ruby and Elixir APIs and helped launch a React Native application.

NODE.JS / ELASTICSEARCH / RABBITMQ↗
03 / ZivverSeptember 2019 – September 2021

Senior Software Engineer

Gmail integration and email security

Built Zivver’s Gmail Chrome extension, integrated AI detection for potential data leaks, and contributed to shared browser-extension architecture.

CHROME EXTENSIONS / GMAIL / EMAIL SECURITY↗
View my full experience ↗
Cristian Martinez03 / ABOUT ME

Senior software
engineer

Software engineer with 14 years of experience building APIs, SDKs, integrations, and customer-facing products.

My work spans Node.js and Elixir backends, React and TypeScript interfaces, and email integrations.

I enjoy working through the details that make software useful, from the underlying framework to the experience of the people using it.

Full experience and skills ↗
  • 01
    Backend

    Node.js, Elixir, NestJS, Ruby, REST APIs, GraphQL

  • 02
    Frontend

    TypeScript, React, React Native, browser extensions

  • 03
    Data & messaging

    PostgreSQL, Elasticsearch, ClickHouse, Redis, RabbitMQ

  • 04
    Tooling

    SDKs, monorepos (Nx, Turborepo), CI/CD, AWS

04 / WRITING

Personal writing.

29 SEPTEMBER 2025 / PERSONAL

I Want to
Be There ↗

A letter for Annie and Max.

All writing ↗