Curriculum vitae

João Vitor Bermal Santaniello

Software Engineer · Full-Stack, AI-Augmented Delivery and Geospatial Data

Six years building software for water, energy, healthcare and telecom, now AI-native with Claude Code, plus the brands and stores I design on my own.

6 years
building software in production since 2020
3h to 20 min
on a recurring geospatial workflow at Aegea
~40%
of EyeConnect’s production code, more than any other author
9/10
MBA thesis in computer vision at USP/ESALQ
14 devices
read by the EyeConnect OCR pipeline while I led it
358 to 11 px
optic disc center error after I trained a detector for my thesis pipeline
9 skills
shared Claude Code skills used across 13 client projects
US$0.03
per ticket in the Triage Desk AI support demo

Summary

Software engineer with six years of production experience across water utilities, energy, healthcare and telecom. I build full-stack products and data pipelines with FastAPI, Node.js, React, Next.js, Python and ArcGIS. I was the main developer of EyeConnect, a teleophthalmology platform in production, from its clinic DICOM gateway to OCR exam intake, rewrote ISPDrive, a multi-tenant SaaS for internet providers, and build the geospatial analyses behind expansion studies at Aegea, one of the largest sanitation groups in Brazil. Claude Code is now my primary environment. MBA in Software Engineering (USP/ESALQ, deep learning thesis graded 9/10), fluent English with US teams.

How I work now: Claude Code writes most first drafts and I own the result. I plan the change, write the guardrails into skills and CLAUDE.md files, read every diff, run the tests and check the running software before anything ships. That habit comes from years of writing FastAPI, Node.js, Meteor, React and Python by hand, and from writing benchmark problems designed to make frontier models fail.

Where it shows: a teleophthalmology platform in production, from the gateway installed at clinics to the doctor’s report; a white-label storage SaaS resold by internet providers; the geospatial analyses behind water and sewer concession studies for one of the largest sanitation groups in Brazil; a US e-commerce brand I run on my own; and a public demo of multi-brand AI support triage.

Experience

  1. Dec 2022 to Present

    Bizpoke Soluções em Software

    São José dos Campos, SP

    Software Developer

    Aegea · Expansion planning and Regenera

    Aegea is one of the largest private sanitation groups in Brazil. I work with its Expansion Planning team, which uses geospatial data to size markets and prioritize new water and sewer concessions, and with Regenera, its solid waste and landfill biogas operation. The role covers data modeling, Python automation, ArcGIS publishing and requirement work directly with the client.

    • Cut a recurring geospatial workflow from more than 3 hours to about 20 minutes with Spatial Extractor, a reusable Python and GeoPandas tool with parallel spatial joins, validation and Excel/Shapefile export.
    • Delivered census tract indicators for 16 Brazilian states by crossing IBGE census, CNEFE addresses and ANEEL BDGD records, giving the expansion team demand estimates for concession studies.
    • Co-designed the CITIUS/Regenera data model for landfill biogas operations and loaded its historical data (wells, drains, collectors, readings), feeding dashboards with measurement beacons and normalized CH4 classes.
    • Kept production dashboards running through the ArcGIS Enterprise 11.5 migration by auditing and fixing panels, and wrote a governance script that reports unused portal items for cleanup.
    • Removed manual steps from weekly routines by automating stage calculations, symbology standardization, file ingestion and PostgreSQL materialized view refreshes with ArcGIS toolboxes, Python and FME.
    • Took new products from request to production, such as a critical work order dashboard and a field data collection panel, running requirement refinements with Aegea teams and documenting the dashboard portfolio for a new team.
    • Loaded the theoretical and historical Regenera data (wells, drains, PDRs, collectors, readings, landfill stages) behind dashboards with measurement beacons, normalized CH4 classes and weekly filters.
    • Evaluated Experience Builder as a replacement for ArcGIS Dashboards during the Enterprise 11.5 migration, and validated every new dashboard with Aegea teams in staging before production.
    • Built geofeasibility layers (addresses within 50 m of the water network) enriched with CNEFE attributes and income classes by census tract, used to prioritize prospect regions.
    • Processed rooftop counts from BDGD for Ceará and Santa Catarina with urban and rural filters and published them as dashboards in staging and production.
    • Modeled a customer reputation layer for Pará by geocoding records against CNEFE and handed the data model to the Aegea data team.
    • Consolidated the solid waste database for Rio de Janeiro and produced thematic maps, heatmaps and dashboards for the landfill program.
    • Defined how the first and last measurement of each well are calculated and added closed valve classification to the measurement beacons.
    • Created a topology correction tool in GeoPandas and a symbology standardization toolbox reused across dashboards.
    • Python
    • GeoPandas
    • ArcGIS Pro
    • ArcGIS Enterprise 11.5
    • ArcGIS Dashboards
    • Experience Builder
    • FME
    • PostgreSQL
    • Excel

    AI-augmented delivery with Claude Code

    Claude Code is now my primary environment at Bizpoke. I write the shared context and tools that let the whole team use it the same way on client projects.

    • Authored a shared library of nine Claude Code skills and a root CLAUDE.md inherited by 13 Aegea project folders (project bootstrap, ArcGIS API client, dashboard editing, delivery documents, status reporting), so every teammate works from the same playbook.
    • Connected Claude Code through MCP to ClickUp for daily client status reports, and contributed to BizpokeBI, our geospatial data platform, and its bizpoke MCP server with approval-gated writes.
    • Built an OAuth2 client for the ArcGIS Enterprise REST API with automatic backups before every edit and strict separation of production and staging portals, so the agent can update dashboards in bulk safely.
    • Turned recurring failures into guardrails: the dashboard skill documents traps found in real sessions (edits kept only in memory, schema quirks, filter bugs) and verifies saves through network requests, so the agent does not repeat them.
    • The ClickUp routine builds status reports from Epic cards, per project and as a consolidated portfolio view, replacing hand-written updates.
    • BizpokeBI runs on FastAPI, DuckDB with Apache Sedona, H3 indexing and Redis queues; the bizpoke MCP server gives Claude its dataset catalog, processing pipelines, jobs and ArcGIS tools, with every write gated by explicit approval and an audit log.
    • Produced specs, a living requirements table, acceptance test notebooks and formal delivery documents (.docx and PDF) from shared templates, taking features from request to production on ArcGIS Enterprise 11.5.
    • Claude Code
    • MCP
    • ClickUp
    • FastAPI
    • DuckDB
    • Apache Sedona
    • H3
    • Redis

    EyeConnect · teleophthalmology platform in production

    EyeConnect connects eye clinics to remote ophthalmologists: clinics send exams, doctors write the reports and patients receive the results by link. I was its main developer in 2023 and 2024, wrote about 40% of the platform code in production today and built the clinic gateway alone.

    • Built, as sole developer, a Raspberry Pi exam gateway for clinics: Orthanc receives DICOM from eye devices, and a Node.js service classifies exams, reads PDF reports with AWS Textract and posts them to the platform over OpenVPN.
    • Brought the OCR into the platform: bulk PDF uploads to S3, AWS Textract and parsers for 14 exam devices (Zeiss Cirrus and HFA, Spectralis and others), with deduplication and retries.
    • Generated rule-based draft reports for visual field and OCT exams and structured reports with PDF output, and integrated the Clinic Web (Linx) API to find patients by CPF and send exams back.
    • From the repositories: 146 platform commits and 94 merged pull requests, 93 of the 98 master commits in 2023 and 2024, and all 33 commits of the clinic gateway.
    • Clinic gateway: an Orthanc PACS built for the Raspberry Pi (ARM64) receives DICOM from the devices, and a Node.js loop pulls instances through the Orthanc REST API every 15 seconds, also picks up PDFs dropped in a folder, and moves each file through input, classified, processed, failed, waiting or ignored states with retries and a 15 day purge.
    • Classified DICOM exams by SOP class and protocol tags (angiography, retinography, ICG, visual field, OCT macula and disc, Zeiss Visucam photos), with a Python pydicom service as fallback for pixel data and encapsulated PDFs.
    • Wrote the provisioning runbook for each clinic: an OpenVPN client, Raspberry Pi OS Lite, the Orthanc build, NTP and timezone, Node.js and Python, and three systemd services that restart on failure.
    • Moved the gateway OCR from Google Document AI to AWS Textract, then brought it into the platform for bulk uploads.
    • Platform OCR: pdf-lib keeps the first page, Textract reads it, the device is detected from its parameters and per-device regular expressions extract name, CPF, birth date, gender, exam date and type; an MD5 identifier blocks duplicates and failed files retry every 15 minutes for up to 24 hours. Device profiles grew from 5 to 14 while I led it.
    • Draft reports built with factory-pattern extractors, analyzers and text generators for Zeiss HFA visual fields (MD, PSD, VFI, GPA, fixation losses, false positives and negatives) and Cirrus OCT, leaving the exam in pre-report for the doctor.
    • Structured reports for OCT macula and disc, pachymetry and topography through a table generator factory, next to the free-text option.
    • Clinic Web (Linx) integration with a token per clinic, patient lookup by CPF and a scheduled job that sends finished exams back; extra API parameters for the partner 4medic and parsing for Clinoftalmo reports.
    • Exam locking with automatic release after an hour and an email to the doctor, SMS and email notifications with Short.io links, an SMS credit monitor, an SMS resend area, invoicing reports (overall and per doctor), cost reports per clinic and payer types for public, private and health plan exams.
    • Upgraded Meteor from 1.10 to 2.7, 2.8 and 2.15 and replaced the agenda job package, keeping Docker and Meteor Up deploys running for development, QA and production.
    • Smaller changes to older integrations: patient phone lookup in a hospital TASY (Oracle) database, and SFTP support for the Phelcom Eyer retinal camera with an OpenSSH server locked to SFTP in a chroot.
    • Meteor
    • Blaze
    • MongoDB Atlas
    • AWS S3
    • AWS Textract
    • Google Document AI
    • Node.js
    • Orthanc
    • DICOM
    • pydicom
    • Raspberry Pi
    • systemd
    • OpenVPN
    • Docker
    • Meteor Up

    ISPDrive · white-label cloud storage for internet providers

    ISPDrive is a cloud storage service that internet providers resell to their subscribers under their own brand, starting with G6 Internet. I built its reporting tools in 2021 and 2022 and have been its only developer since 2024.

    • Rewrote the product in FastAPI, MongoDB and Next.js 14 as a multi-tenant SaaS: per-provider branding, sign-in against each provider’s ERP, and uploads and downloads straight to DigitalOcean Spaces through presigned URLs.
    • Built the admin area with usage dashboards, an audit trail of 11 action types and a quota report used for invoicing, and deployed it on DigitalOcean with Docker Compose, NGINX and automatic Let’s Encrypt renewal.
    • Built the first reporting stack in 2021 and 2022: a report API in Express and MySQL (login history and data usage) and a React dashboard with MUI DataGrid and Recharts, and later moved the upload server from MySQL to MongoDB.
    • Covered the API with pytest integration tests against MongoDB with mocked storage.
    • From the repository: 56% of the non-merge commits and the only author since July 2024.
    • Providers are resolved by subdomain or path (NGINX redirects subdomains to the path), each with its own logo and colors; every query is scoped to the provider, cross-tenant admin requests get 403, and there are three roles: platform admin, provider admin and subscriber.
    • Each provider chooses local or external sign-in; external sign-in checks the credentials against the provider’s own ERP and creates the account on first login, with JWT access and refresh tokens.
    • Uploads go straight from the browser to storage through presigned PUT URLs with a progress bar, and downloads through presigned GET URLs; folders are key prefixes per provider and user.
    • Admin dashboard with active users and real storage used, totaled from the storage listings with a short cache; server-side pagination, sorting and search; and a CSV of active users per quota plan for invoicing.
    • Audit trail of 11 action types with the client IP, from sign-in and sign-out to folder and file access, uploads and deletes.
    • Deployed with Docker Compose (NGINX, Certbot, FastAPI, Next.js) on a DigitalOcean droplet with MongoDB Atlas, Let’s Encrypt renewal every 12 hours and an NGINX reload every day.
    • A 2026 version is in progress: new navigation with recents, favorites, search and settings, and a global admin area.
    • FastAPI
    • MongoDB Atlas
    • ODMantic
    • Next.js 14
    • TypeScript
    • Redux Toolkit
    • Tailwind CSS
    • DigitalOcean Spaces
    • Docker Compose
    • NGINX
    • Let’s Encrypt
    • pytest

    Equatorial Energia · DOMO field app

    DOMO is a field operations product for Equatorial Energia, one of the largest power distribution groups in Brazil, built in sprints with a multidisciplinary team.

    • Led front-end and mobile delivery for DOMO, building an offline-capable map component in React Native (Expo) with feature create, edit and delete, attribute forms, extra layers and tablet support.
    • Prototyped the project validation flow in Figma and implemented it in Next.js, TypeScript, Redux and MUI after sign-off from Equatorial.
    • Ran the technical spike for the mobile map component with the architecture team, validating offline use, feature editing and alternative public basemaps.
    • Produced the screen prototypes for the demand validation flow, including the queue of demands waiting for approval by Equatorial.
    • React Native
    • Expo
    • Next.js
    • TypeScript
    • Redux Toolkit
    • MUI
    • Figma
    • ArcGIS

    US utilities through SBS

    GIS and integration work for US utilities through SBS, in English with US teams.

    • Automated GIS workflows for North Las Vegas and Duke Energy and integrated SAP, IBM Maximo and Schneider Electric via Python and JS SDKs.
    • Built custom ArcGIS JavaScript API components and FME workflows for utility asset data.
    • ArcGIS JS API
    • FME
    • Python
    • JavaScript
    • SAP
    • IBM Maximo
  2. May 2025 to Oct 2025

    Alignerr

    Remote

    AI Coding Benchmark Contributor (freelance)

    • Wrote Python problems with reference solutions and test suites for LiveCodeBench and BigCodeBench, each designed to break at least 2 of 4 frontier models, and reviewed prompts and grading criteria in the Mango and Fairylights programs.
    • Target models included Qwen, DeepSeek, Claude Sonnet and Nova, across code generation, self-repair and code execution tasks, with a written failure analysis for every problem.
    • Python
    • Test design
    • LLM evaluation
    • Technical writing
  3. Apr 2021 to Dec 2022

    Bizpoke Soluções em Software

    São José dos Campos, SP

    Software Development Intern

    • Shipped React, Node.js, Python and C# features for client projects and produced spatial data with ArcGIS Pro and Enterprise alongside offshore teams, in English.
    • Built the first ISPDrive reporting tools in this period (a report API in Express and MySQL and a React dashboard), described with ISPDrive above.
    • Versioned client work with Git across several teams.
    • React
    • Node.js
    • Python
    • C#
    • ArcGIS Pro
    • ArcGIS Enterprise
    • Git
  4. Oct 2020 to Mar 2021

    NFe Sistemas

    São José dos Campos, SP

    Web Development Intern

    • Delivered front-end and back-end changes with HTML, CSS, JavaScript, jQuery, PHP and MySQL.
    • HTML
    • CSS
    • JavaScript
    • jQuery
    • PHP
    • MySQL

Selected projects

AI support triage for D2C brands · 2026

Triage Desk

Live demo of AI customer support for several brands: n8n ingests messages, a Claude agent in a Supabase Edge Function drafts replies with policy and catalog sub-agents, and staff approve them in Next.js. Brand data is isolated with Postgres RLS and pgTAP tests.

  • Orchestrator agent with strict tools, structured outputs and prompt caching; about 20 seconds and US$0.03 per ticket.
  • Idempotent ingestion, HMAC verified Shopify order sync, a backlog sweep and an error workflow in n8n.
  • Public demo with a daily reset and a cap on re-runs; a technical design document in the repository.
  • Five n8n workflows: inbound message (secret check, idempotent store, triage), approved reply (a pg_net trigger and SMTP), Shopify order sync (HMAC verified), a backlog sweep every 5 minutes and an error handler that writes to automation_errors.
  • Postgres security: RLS by brand membership with security definer helpers, column grants so staff cannot touch AI fields, a guard trigger on status changes, RPCs only the service role can call, and 14 pgTAP tests.
  • Verified run: 10 real tickets (order status, damage past the window, sizing, an address change, a return without the box, spam, a message in Spanish) triaged with the expected decision in about 20 seconds each.
  • Claude API
  • Supabase
  • PostgreSQL RLS
  • Edge Functions
  • n8n
  • Next.js
  • Vercel
  • pgTAP

MBA thesis in deep learning · 2025 to 2026

Retinal AVR pipeline

PyTorch pipeline that estimates the arteriolar-to-venular ratio, a cardiovascular risk marker, from retinal photographs: a U-Net segments vessels (Dice 0.79 on held-out DRIVE images), a ResNet-50 network separates arteries from veins, and an optic disc model cut the disc center error from 358 to 11 px for Knudtson caliber measurement.

  • Enhanced U-Net with residual blocks, batch normalization and a BCE plus Dice loss, after preprocessing with the green channel, CLAHE, gamma correction and Albumentations.
  • Artery and vein network with a ResNet-50 encoder, Squeeze-and-Excitation and a vessel constraint module, trained on IOSTAR and RITE.
  • Optic disc U-Net with a classical computer vision fallback: median center error of 11.1 px on held-out IOSTAR images, against 357.9 px for the image center assumed in the original thesis.
  • CRAE and CRVE by iterative Knudtson combination inside the peripapillary Zone B, AVR = CRAE / CRVE and a risk category.
  • Reproducible runs on an AMD RX 6800XT with ROCm and a metrics document that states the known limits (a held-out split for the artery and vein model is the next run); a FastAPI endpoint and a Next.js upload page.
  • Graded 9/10, with potential use in automated screening and teleophthalmology.
  • Python
  • PyTorch
  • OpenCV
  • Albumentations
  • ROCm
  • FastAPI
  • Next.js

Founder, designer and developer · 2026

Miau Atelier

A cat furniture brand for the US market, built end to end: brand identity, Shopify store in USD with Stripe, Python automation over the Admin GraphQL API and an AI image pipeline for product photography.

  • Brand identity: name, palette, Playfair Display and Montserrat typography and a brand board that guides every product image.
  • Shopify store in USD with Stripe, a customized Dawn theme, store policies, Google Merchant Center listings and branded email on the domain.
  • Python tooling over the Shopify Admin GraphQL API to create products, attach media and manage collections, menus, pages and policies.
  • An AI art direction pipeline: a prompt builder with room scenes and real product dimensions, contact sheets for review and a script that publishes the approved images.
  • Connected to Claude through a Composio MCP server, so the store is managed from Claude Code.
  • Conversion work: a buy-now flow, size and fit metafields on the 15 live products, a delivery and returns summary, a shipping FAQ, abandoned checkout emails and Judge.me reviews in the brand style.
  • Shopify
  • Liquid
  • Admin GraphQL
  • Stripe
  • Python
  • Next.js
  • Generative AI

Next.js on Vercel · 2026

NAMMAN

Browser-only app that syncs Neural Amp Modeler profiles from the TONE3000 API to disk: OAuth 2.0 with PKCE, File System Access API, IndexedDB, backoff and throttled bulk downloads, no server.

  • OAuth 2.0 with PKCE against the TONE3000 API, the File System Access API to write into a folder the user picks, and IndexedDB for the download history.
  • Retries with exponential backoff and throttled bulk downloads, so large libraries sync without hitting rate limits.
  • Iterated from a Supabase and Prisma backend to a database-free architecture, with 40 commits in five weeks.
  • Next.js
  • TypeScript
  • OAuth 2.0 PKCE
  • File System Access API
  • IndexedDB
  • Vercel

Next.js 16 on Vercel · 2026

joaosantaniello.com

This site: migrated from static HTML to Next.js on a feature branch and shipped through Vercel preview and production with a custom domain.

  • Portuguese and English routes with edge language detection by browser language and country, and a light and dark theme.
  • One content source renders this page, the CV PDFs (printed with Playwright, with automatic page limit checks) and versions tailored to specific roles.
  • Print flyers generated from code with QR codes, and the Triage Desk demo on a subdomain.
  • Next.js 16
  • TypeScript
  • Tailwind CSS
  • Vercel
  • Playwright

Education

2024 to 2026

MBA in Software Engineering

Universidade de São Paulo (USP/ESALQ) · Piracicaba, SP

  • Coursework in back-end and front-end architecture, APIs and micro-frontends, cloud and Kubernetes, clean architecture and DDD, machine learning and model deployment, observability and TDD.
  • Thesis graded 9/10: the retinal AVR pipeline under Selected projects.
  • Back-end and front-end engineering with modern web architectures, APIs and micro-frontends.
  • Cloud computing (IaaS, PaaS, SaaS) and container orchestration with Docker and Kubernetes.
  • Agile methods, clean architecture and domain-driven design.
  • Machine learning, Big Data and AI, including how models are deployed.
  • UX design, design thinking and user-centered development.
  • APIs and message queues, observability, and software testing with TDD.
  • Also blockchain, digital law (LGPD), change management and leading high-performance teams.
  • Thesis advisor: Prof. Dr. Heinrich da Solidade Santos.

2021 to 2022

Associate degree in Systems Analysis and Development

Universidade Paulista (UNIP) · São José dos Campos, SP

  • Software design, databases, web and back-end development, completed while working full time.

2018 to 2020

Technical Program in Computing, with high school

Colégio Técnico Antônio Teixeira Fernandes · São José dos Campos, SP

  • Programming, web development and algorithms, including team programming competitions.

Skills

Languages
Python, TypeScript, JavaScript, SQL, Bash
Data and GIS
GeoPandas, ArcGIS Pro, ArcGIS Enterprise 11.5, ArcGIS Dashboards, Experience Builder, ArcGIS JS API, FME, PostgreSQL, enterprise geodatabases, ETL and data modeling
Back end
FastAPI, Node.js (Express), Meteor, Flask, REST APIs, JWT, OAuth 2.0 and PKCE, WebSockets and DDP, MongoDB (Motor, ODMantic, Mongoose), PostgreSQL, MySQL, Supabase, DICOM
Front end and mobile
React, Next.js, Redux Toolkit, Tailwind CSS, MUI, React Native (Expo), Figma
Cloud and DevOps
Docker and Docker Compose, NGINX, Certbot and Let’s Encrypt, Linux and systemd, AWS (S3, Textract, EC2, CloudWatch), DigitalOcean (Droplets, Spaces), MongoDB Atlas, Supabase, Vercel, Meteor Up, basic Kubernetes
AI and ML
Claude Code (skills, CLAUDE.md, MCP servers, sub-agents, scheduled routines), Claude API (tool runner, structured outputs, prompt caching), PyTorch (U-Net, ResNet-50), OpenCV, Albumentations, ROCm, OCR with AWS Textract and Google Document AI, LLM evaluation
Healthcare imaging
DICOM (SOP classes, tags, encapsulated PDF), Orthanc PACS and its REST API, pydicom, OCR of ophthalmic device reports
Automation and integration
n8n (webhooks, Code nodes, retries, schedules, error workflows), pg_net and pg_cron, SyncedCron jobs, OpenVPN, SFTP, webhook HMAC verification
Testing and quality
pgTAP, pytest, Jest and supertest, acceptance test notebooks, code review through pull requests
E-commerce and design
Shopify (Admin GraphQL, Liquid), Stripe, brand identity, generative image pipelines
Ways of working
Scrum, Git and GitFlow, Jira, ClickUp, technical documentation, remote work with US teams
Languages
Portuguese (native) · English (fluent, daily professional use)
Courses and events
Python 3: Deep Dive, Part 1 (Udemy, 2025)Deep Learning Using ArcGIS (Esri, 2024)AWS Summit São Paulo (2023)ArcGIS Fundamentals (Esri, 2021)Esri Developer Summit (2022)

This is the extended version, with more detail than the PDFs. For applications, download the full CV or the one-page resume.