Engineering

How we build, what we have built, and what we have written down along the way. Everything here is the real thing — the decks we run with teams, the products in production, the articles behind the decisions.

15 parts5 projects46 articles20222026

Learning path

How work moves through a team, then a web app built with Claude Code — structured across repos, on an AWS base, with a backend in Node, Python or containers, talking over events, authenticated, secured and shipped by CI/CD. Read each part, or run it as a deck.

  1. Workshop 1

    Agile Foundations for Product Owners & QA

    The prerequisite to Part 0, for a product and quality team with no software development background. Opens with six questions the room cannot answer yet — is agile the same as Scrum, who decides how much fits in a sprint, when does testing start — and is finished when they can. The Manifesto's four values as a preference ordering rather than a ban, Scrum's 3:5:3 against Kanban's WIP limit, the backlog as one ordered list, stories as goals rather than features, points rather than days, the four ceremonies and what each is actually for, and why refinement is the meeting where a PO and a tester do their best work together. Every definition quoted from Atlassian's Agile Coach. Half-day workshop with a facilitator run sheet.

    Read →Present →

  2. Part 0

    Software Development Life Cycle + The way we work

    Before any code: how work actually moves. Thirteen Jira stations, six actors, the Assignee-vs-Developer rule, the three-move rejection, and one ticket traced from a customer request to a green pipeline on production. Half-day team workshop with a quiz and a facilitator run sheet.

    Read →Present →

  3. Part 1

    Build a Web App with Claude Code

    Start here. Describe what you want in plain English and let Claude Code build a Next.js app — install, prompt, preview, iterate. Covers npm/package.json and project structure. Ends with the app running locally.

    Read →Present →

  4. Part 2

    Platforms: Vercel, Supabase & the AWS Alternatives

    Now get it online. What Vercel and Supabase actually do, how to deploy, and the AWS services (S3+CloudFront, Amplify, Lambda, ECS Fargate, DynamoDB, Cognito) that do the same jobs.

    Read →Present →

  5. Part 3

    Monorepos, Subtrees & Shipping Many Services

    Repo topology, decided by one question: what has to change together? A pnpm Next.js monorepo on Vercel — the traps that fail a deploy after a green build, what a restructure silently breaks outside the repo, and why one repo is still not one origin. Plus git subtrees vs submodules with the real migration runbook, and ~15 API repos on one shared pipeline. Every failure in it is one we actually hit.

    Read →Present →

  6. Part 4

    AWS Cloud Platform Infrastructure

    The base layer under every app: VPC, subnets, security groups, S3, EventBridge, IAM, RDS. Which pieces to build with Terraform (shared, stateful, long-lived) vs CloudFormation/SAM (per-service compute) — and how services plug in through SSM.

    Read →Present →

  7. Part 5

    Backend Option A — Node.js API (Next.js Route Handlers)

    Add a backend in the same codebase. Build a Notes API with Route Handlers — a swappable data layer, dynamic routes, validation. The fullstack-JavaScript path.

    Read →Present →

  8. Part 6

    Backend Option B — Python API (AWS SAM)

    A standalone serverless service, built the way JunctionNet ships APIs: layered handlers → services → repositories → models with a middleware factory for DI. API Gateway + Lambda (Python) + DynamoDB via SAM.

    Read →Present →

  9. Part 7

    Backend Option C — Docker + AWS ECS Fargate

    For a real-server app (NestJS, Express, FastAPI, workers, Redis, Kafka): containerize with Docker and run on ECS Fargate behind a load balancer, deployed from CI. Modeled on jnet-transport-backend.

    Read →Present →

  10. Part 8

    Event-Driven Development with EventBus

    Let services react to each other without calling each other. The event-driven pattern on Amazon EventBridge — naming source and detail-type, when and where to publish, extending a system by adding consumers, and forwarding events to OpenSearch for analytics.

    Read →Present →

  11. Part 9

    Sending Notifications with Amazon SES

    The last mile of an event-driven system. Prepare SES so your mail actually arrives — verified domain, SPF/DKIM/DMARC, custom MAIL FROM, least-privilege IAM — then wire events → rules → subject → send, with idempotency, one message per recipient, and bounce handling.

    Read →Present →

  12. Part 10

    API Authentication — Supabase, Cognito & Your Own

    Who issues the token, who verifies it, what the request carries. Supabase Auth and Cognito end to end — JWKS, issuer pinning, app_metadata vs user_metadata, RLS, groups, ID vs access tokens, client-credentials M2M — compared across three production systems.

    Read →Present →

  13. Part 11

    API Security — Authentication Headers

    Prove who is calling, the right way for each caller: Bearer JWTs for services, cookies for browsers, static API keys for third parties, HMAC signatures for webhooks — and why the Authorization header almost always wins. Ties into the platform Lambda Authorizer.

    Read →Present →

  14. Part 12

    CI/CD & Releases with GitHub Actions

    Automate it. One GitHub Actions pipeline — CI checks on every PR, preview environments, keyless OIDC auth to AWS, protected production, and rollable releases — wired to each stack from Parts 1–6.

    Read →Present →

  15. Part 13

    Claude Code + Prompt Engineering Best Practices — Stop Chatting with Claude Code, Start Directing It

    The capstone: level up how you drive the tool. Permission modes, ultrathink, auto mode, remote sessions, ultracode multi-agent workflows, the /run → /verify → review loop, and the anatomy of a CLAUDE.md.

    Read →Present →

Projects

Architecture, backend, frontend and the pipeline that ships it.

CargoNaut

2024 – 2025

A freight operations OS for Mexico-bound shipments. Full-stack product with 6 Python Lambda microservices, an AI-powered Next.js app (React 19), a customer portal, and a Terraform-managed AWS platform. Pilot customer: SANHUA.

  • 6 bounded-context Lambda microservices (Finance, Document, Shipment, etc.) behind API Gateway with multi-scheme auth (Supabase JWT / HMAC / API Key)
  • AI integration via Anthropic Claude for MBL extraction, email classification, and shipment tracking intelligence
  • n8n + EventBridge orchestration for scheduled jobs, inbound-email webhooks, and carrier scraping
  • Customer-facing portal with S3-backed document upload, real-time tracking maps (MapLibre GL), and billing dashboard
  • Terraform + Terragrunt infrastructure: VPC, Route53, ACM, API Gateway VPC Links, SSM Parameter Store
Python 3.13AWS SAMLambdaEventBridgeNext.js 16React 19SupabaseAnthropic Claude APITerraformTerragruntn8nPostgreSQL
cargonaut.cloud

JunctionNet

2023 – 2025

A large-scale logistics platform monorepo with ~18 Python Lambda microservices, 5+ Vue.js 3 portals (EntryWriter, Organizer, Pricing, UDM, Workspace), and a custom CI/CD framework.

  • 18 Python Lambda microservices with shared common library and Lambda Layers
  • Nx monorepo with 5 Vue.js 3 portal apps — PrimeVue UI, AWS Amplify / Cognito auth
  • 19 reusable GitHub Actions (build-portal, deploy-api, serverless-deploy, jira-comment, etc.)
  • Playwright-based E2E synthetic monitoring running on cron across all portals
  • Multi-account AWS SSO with Terraform-managed networking and EventBridge forwarder
PythonAWS LambdaVue.js 3PrimeVueGitHub ActionsPlaywrightServerless FrameworkEventBridge
junctionnet.ai

RedLie

2022 – 2025

Free software to compute the índice de disponibilidad léxica (lexical-availability index). Upload a CSV, compute the indices, and export the results to Excel.

  • Ported IDL algorithm: CSV → records → indices → Excel export
  • S3-backed uploads (no database) with Cognito-gated sample history
  • One Next.js app — unified a former Python Lambda API and Vue portal into React + PrimeReact
Next.jsTypeScriptPrimeReactAWS AmplifyCognitoS3ExcelJS
redlie.net

QuizHub

2025

Kahoot-style live multiplayer trivia. A host goes live and shows a QR code; players join from their phones — no login — answer timed questions, and a podium appears at the end.

  • Host builds a quiz and goes live with a 6-digit PIN and QR code
  • Players join from phones with speed-based scoring, no login
  • Realtime lobby, live questions, and an end-screen podium + leaderboard
Next.js 15React 19Tailwind CSSSupabaseRealtimeVercel
quizhub.cloud

JunctionNet Control

2024 – 2025

An internal developer platform and a personal operating system in one console — pipelines, the sprint board and cloud infrastructure beside the daily habits, budget and OKRs that fund them.

  • Next.js route handlers backed by domain modules; state lives in Supabase Postgres, scoped per user by RLS
  • CI/CD, Jira and AWS boards beside daily, weekly and quarterly tracking, with Recharts visualizations
  • Supabase Auth, one session shared with QuizHub, deployed on Vercel
Next.jsReactSupabaseRechartsPostgres RLSSWR
control.junctionnet.nl

Stack

Python and AWS Lambda on the backend, Next.js and Vue on the front, Terraform underneath. Production-tested, not aspirational.

Cloud & Infrastructure

AWS LambdaAPI GatewayEventBridgeS3RDS / PostgreSQLRoute53CloudWatchCognitoSSMACM

Infrastructure as Code

TerraformTerragruntAWS SAMServerless FrameworkCloudFormationDocker

Backend

Python 3.13FastAPIAWS Lambda PowertoolsSQLAlchemyAlembicPytestNode.js

Frontend

Next.js 16Vue.js 3PrimeVueAWS Amplify

Data & Integrations

SupabasePostgreSQLn8n WorkflowsAnthropic Claude APIGoogle Sheets APIElasticsearch

DevOps & Testing

GitHub ActionsPlaywrightVitestPytestMakefileNx MonorepoSentry

Writing

46 pieces on software architecture, API design, cloud infrastructure and engineering practice. Newest first; read times are the published estimates.

2025

All writing on Medium ↗