Skip to content

Software engineer & architect

Jānis Strautiņš

I design the architecture, direct AI agents to build it, and make sure the software does what the business actually needs.

AI-first development · TypeScript · Node.js · Redis · PostgreSQL

Portrait of Jānis Strautiņš

01 / about

From writing code to designing systems.

Software is built differently now. AI agents write most of the code, so my job is the part they can't do: understanding the business, designing the architecture and setting the guardrails that keep the result reliable.

My background is full-stack TypeScript: multi-service Node.js backends that talk through Redis Streams and pub/sub, PostgreSQL underneath, and React interfaces for data-heavy work. I care about clear boundaries between services and tests that can actually fail.

Java is the language I'm most passionate about. My work has demanded a TypeScript stack, so I haven't used it day to day, and I'd welcome the chance to bring it back.

Currently

Now
Designing multi-service systems and building them AI-first
Role
The link between business needs and software design
Daily stack
TypeScript, Node.js, Redis, PostgreSQL, React
Passionate about
Java

02 / stack

The stack, with the evidence behind it.

No skill bars. Each item says how it was used. Strong means daily use on large, long-lived code; Solid means used on real projects.

Architecture & AI-first development

  • Multi-service architectureStrong

    Services built on one shared framework, with common contracts and test utilities

  • Event-driven messagingStrong

    Redis Streams and pub/sub as middleware between services

  • AI-first developmentStrong

    Agents write the code; I set the rules, review the output and own the design

  • Business to softwareStrong

    Turning operational needs into data models, APIs and interfaces

  • Guardrails for AI agentsSolid

    Sandboxed runs, restricted networking, tests as the gate for every change

Backend

  • TypeScript / Node.jsStrong

    Production services and shared libraries, in daily use

  • RedisStrong

    Streams, consumer groups, pub/sub and caching

  • PostgreSQL & migrationsStrong

    Versioned schemas and migrations across several databases

  • Express & RESTStrong

    APIs documented with OpenAPI 3.1 and Swagger UI

  • Dependency injectionStrong

    IoC containers as the backbone of service design

  • Auth: OIDC, JWT, LDAPStrong

    Single sign-on, token verification and permission models

  • S3-compatible storageSolid

    File uploads and image processing

Frontend

  • React + TypeScriptStrong

    Data-heavy interfaces and reusable component libraries

  • Complex layoutsStrong

    Draggable, resizable and nested layouts

  • Data grids & formsStrong

    Grids, forms, actions and reports

  • ViteSolid

    Build setup for apps and libraries

  • Accessibility basicsSolid

    Semantic markup, labelled controls, role-based tests

Testing & quality

  • VitestStrong

    Backend and frontend suites with coverage floors

  • Contract testsStrong

    Tests that fail when routes, permissions and UI drift apart

  • PlaywrightSolid

    End-to-end suites against mocked APIs, per-role specs

  • Release gatesSolid

    One verify step that gates every build

DevOps & tooling

  • Docker / ComposeStrong

    Per-service deployments with test and production variants

  • Linux & shellStrong

    Install, build and run automation

  • Rootless PodmanSolid

    Containers with restricted networking

  • Monorepo packagesSolid

    Shared packages published to a private registry

03 / contact

Have a business problem that needs the right software? Let's talk.

I'm not looking for a new role right now, but I'm always glad to talk about software architecture, AI-first development and the problems they solve.