{"site":"https://www.zanoni.dev.br","name":"Felipe Zanoni da Rosa","generated_at":"2026-10-19T16:57:07.028Z","headline":"Felipe Zanoni da Rosa","subtitle":"Software Engineer","about":"I'm Felipe Zanoni, a Software Engineer with experience in backend development, automation, and systems integration. I've worked in Industry 4.0 corporate environments (TMD Friction) and in full stack development (Sage Networks), consistently focused on Python, Linux, Docker, and solid software engineering practices.\r\n\r\nI'm currently studying Computer Science at UNIFEI and working as a Software Engineer on the Black Bee Drones team, building software for autonomous drones using ROS and computer vision. I enjoy projects that combine well-structured code with real-world problems — from industrial process automation to mission-critical embedded systems.\r\n\r\nI'm originally from Salto, SP, and currently live in Itajubá, MG, where I study. Outside of code, I enjoy playing video games, cooking in my free time, collecting perfumes, and playing card games like truco and poker.","services":"Web Development\r\nCustom websites and web applications built from planning to deployment.\r\n\r\nProcess Automation\r\nScripts and systems to automate repetitive tasks, reducing manual work and errors.\r\n\r\nBackend & APIs\r\nREST API and backend system development in Python, focused on performance and best practices.\r\n\r\nInfrastructure Consulting\r\nLinux and Docker environment setup, from development to production deployment.","availability":"available for new projects","contact":{"email":"fezarosa@gmail.com","phone":"+55 (11) 94377-2412","github":"https://github.com/fezarosa-dev","linkedin":"https://www.linkedin.com/in/felipe-zanoni/","other_links":[{"label":"Instagram","url":"https://www.instagram.com/fezarosa_/"},{"label":"Linkedin","url":"www.linkedin.com/in/felipe-zanoni"},{"label":"WhatsApp","url":"https://wa.me/5511943772412"},{"label":"fezarosa@gmail.com","url":"mailto:fezarosa@gmail.com"},{"label":"+55 (11) 94377-2412","url":"tel:+5511943772412"}],"page":"https://www.zanoni.dev.br/en/contato"},"resume":{"content_md":"# Felipe Zanoni da Rosa\r\n**Software Engineer**\r\n\r\nItajubá – MG, Brazil | +55 (11) 94377-2412 | fezarosa@gmail.com\r\n[zanoni.dev.br](https://zanoni.dev.br) | [linkedin.com/in/felipe-zanoni](https://linkedin.com/in/felipe-zanoni) | [github.com/fezarosa-dev](https://github.com/fezarosa-dev)\r\n\r\n---\r\n\r\n## Professional Summary\r\n\r\nSoftware Engineer with hands-on experience across full stack development, automation, and systems integration, moving fluidly between backend, frontend, and infrastructure in Linux environments. Background in Industry 4.0 projects, autonomous robotic systems (ROS2), and data-driven solutions, with strong command of Python, Rust, TypeScript, and Docker. Focused on building scalable software, with an emphasis on code quality, process automation, and continuous improvement.\r\n\r\n---\r\n\r\n## Professional Experience\r\n\r\n### Software Engineer – Black Bee Drones\r\n*May 2026 – Sep*\r\n\r\n- Developed software systems for autonomous drones in competitive applications, using ROS2 and Python in Linux environments;\r\n- Architected a finite state machine (YASMIN) for autonomous missions, covering takeoff, area coverage, target detection, and landing;\r\n- Built and trained computer vision models (YOLO/Ultralytics) and OpenCV pipelines for target detection, decoupled from hardware for isolated testing;\r\n- Collaborated with cross-functional engineering teams to research, implement, and document software solutions for competitions and technical presentations;\r\n- Used Git for version control and software project management in a collaborative development environment.\r\n\r\n### Full Stack Developer – Sage Networks\r\n*Nov 2025 – Mar 2026*\r\n\r\n- Built a Rust-based data pipeline (Parquet, Arrow, and embedded DuckDB) auditing BGP connectivity redundancy across Internet Exchange Points;\r\n- Developed a hybrid Python and Cython pipeline for large-scale network traffic geolocation, operating within a 5-minute SLA;\r\n- Maintained and evolved an in-house authentication system with email-based 2FA, JWT tokens, password recovery, and multi-tenant isolation across clients;\r\n- Reverse-engineered a third-party platform's database, with no API or documentation available, to build a productivity analytics system;\r\n- Built a new support tab in the client dashboard (Angular) and led standardization and modularization of components;\r\n- Developed REST APIs and backend applications in Python, with Git version control and Docker containerization;\r\n- Handled bug fixes, performance optimization, and technical documentation of features and processes.\r\n\r\n### Industry 4.0 Projects Trainee – TMD Friction\r\n*Jul 2025 – Nov 2025*\r\n\r\n- Led an integration project between the shop-floor system (ProLeiT) and the ERP (TOTVS), presented to senior management, to eliminate manual raw-material consumption entry and reduce tax discrepancies;\r\n- Identified the root cause: lack of automatic validation (poka-yoke) between manually entered consumption and actual values measured by inbound/outbound scales, distorting TOTVS's backflush calculation;\r\n- Proposed an automated integration architecture with poka-yoke validations (blocking invalid batches, out-of-range weights), ensuring real-time batch traceability;\r\n- Built Excel dashboards and KPIs (Power Query, Power Pivot, pivot tables, complex formulas) for operational and business data analysis;\r\n- Mapped production processes to identify risks and technical failure points before they impacted production;\r\n- Made advanced use of ERP, MES, and PCS systems; produced technical documentation for projects and presentations.\r\n\r\n### Foreign Trade Apprentice – TMD Friction\r\n*Aug 2024 – Jul 2025*\r\n\r\n- Automated email dispatch, reporting, and PDF generation with VBA, using Excel itself as a database in an environment with no option to install new tools;\r\n- Implemented poka-yoke validations in critical spreadsheets, automatically checking entered values against reference calculations and cutting hours-long tasks down to minutes;\r\n- Automated document-request follow-ups with suppliers and internal departments, eliminating manual tracking;\r\n- Handled freight analysis, quote management, special tariff regimes, and invoice processing for financial approval.\r\n\r\n### Web Developer & Automation Engineer – Freelancer\r\n*2023 – 2024*\r\n\r\n- Developed custom web applications and automations, delivering end-to-end solutions following software engineering best practices.\r\n\r\n---\r\n\r\n## Projects\r\n\r\n### IXSonar — BGP Visibility Analysis Across Internet Exchange Points\r\n- **What:** a pipeline auditing BGP connectivity redundancy across Brazilian and international Internet Exchange Points, using historical route snapshots.\r\n- **Stack:** Rust (tokio, reqwest, rayon), Apache Parquet and Arrow to minimize disk I/O, embedded DuckDB for SQL queries, Python (pandas, Flask) for the dashboard.\r\n- **Solves:** the I/O bottleneck on massive, incomplete datasets, enabling prefix-overlap and AS-path comparisons across IXs without reprocessing data on every query.\r\n\r\n### SOVA — Large-Scale Traffic Geolocation Pipeline\r\n- **What:** a pipeline that geolocates source and destination IPs in network traffic dumps to feed a DDoS detection and mitigation system.\r\n- **Stack:** hybrid Python and Cython architecture, MaxMind GeoIP database, parallel processing.\r\n- **Solves:** processing millions of records with IP geolocation lookups within a 5-minute SLA, impractical in pure Python.\r\n\r\n### Heimdall — Authentication and Access Control System\r\n- **What:** an authentication and authorization system integrated with the client dashboard (Asgard), featuring 2FA, JWT, and multi-tenant isolation.\r\n- **Stack:** Python, JWT, SQLite, Nginx.\r\n- **Solves:** granular access control by contracted plan, with full data isolation between client companies and a consolidated admin role.\r\n\r\n### Asgard — Client Dashboard\r\n- **What:** a new support tab in the client dashboard showing plan usage, ticket status, and average response time; led standardization and modularization of the project's components.\r\n- **Stack:** Angular, TypeScript, containerized with automated deployment.\r\n- **Solves:** duplicated code patterns across screens and lack of client visibility into their own support activity.\r\n\r\n### Pokedex — Support Technician Productivity and Allocation Analysis\r\n- **What:** a system that calculates per-technician productivity and flags workload imbalances across the team.\r\n- **Stack:** Python, direct SQL access to the database, Docker Swarm, Nginx.\r\n- **Solves:** the absence of an API or documentation on a third-party support platform, requiring full reverse engineering of the database schema before extracting any metric.\r\n\r\n### Drone Simulator — ROS2 Flight Simulator\r\n- **What:** a quadcopter simulator with custom physics, autopilot, and simulated sensors, running at 60 FPS.\r\n- **Stack:** Python, ROS2, VPython (3D visualization), NumPy; physical model in X configuration with individual motor mixing; GPS, IMU, and LIDAR published as standard ROS2 topics.\r\n- **Solves:** testing navigation and obstacle-avoidance algorithms without the cost or risk of physical hardware.\r\n\r\n### BlackBee Challenge 2026 — Autonomous Aerial Mapping\r\n- **What:** an autonomous aerial mapping system with target detection and real GPS coordinate projection.\r\n- **Stack:** Python, ROS2/rclpy, YASMIN (finite state machine), OpenCV and YOLO/Ultralytics (interchangeable detection pipelines), MAVROS/MAVLink, Gazebo.\r\n- **Solves:** autonomous area coverage, detection, and geolocation of targets; includes a fix for an optics error that changed the coverage algorithm from 6 to 8 waypoints, plus deduplication of targets across overlapping photos.\r\n\r\n### Personal Portfolio — Site and Admin Panel\r\n- **What:** a full-stack portfolio site with its own CMS, native bilingual support, and authentication.\r\n- **Stack:** Next.js 16 (App Router), React 19, TypeScript, Supabase (Postgres + Auth), Google Drive API, unit tests.\r\n- **Solves:** content management (projects, articles, résumé, messages) without relying on an external CMS, with automatic language detection via middleware.\r\n\r\n### Moodle Chat Bot — C Programming Assistant\r\n- **What:** a browser extension that turns the Moodle chat into an interactive C compiler and AI tutor.\r\n- **Stack:** JavaScript (Manifest V3), Python/Flask, GCC, Google Gemini API, DuckDB.\r\n- **Solves:** compiling, running, and debugging C code (with real-time scanf support) directly from the course chat, with automatic header inference and fallback across AI models.\r\n\r\n### Electrolysis App — PEM Electrolyzer Simulator\r\n- **What:** a desktop application simulating a PEM electrolyzer over 24 hours, calculating H2/O2 output, water consumption, heat generated, and electrical power draw from a configurable load profile.\r\n- **Stack:** C# / .NET with Avalonia UI, LiveChartsCore and SkiaSharp for interactive charts, CSV and image report export.\r\n- **Solves:** simulating intermittent solar-power scenarios with a physical electrolyzer model (Faraday's Law, cell efficiency, thermal losses), recalculated in real time.\r\n\r\n---\r\n\r\n## Education\r\n\r\n- **B.Sc. in Computer Science** – Federal University of Itajubá (UNIFEI), Prof. José Rodrigues Seabra Campus – 2026 – Expected Graduation: 2029;\r\n- **Technical Degree in Information Technology for the Internet** (integrated with high school) – Federal Institute of Education, Science and Technology of São Paulo (IFSP) – 2023 to 2025.\r\n\r\n---\r\n\r\n## Languages\r\n\r\nEnglish – Advanced | Portuguese – Native\r\n\r\n---\r\n\r\n## Technical Skills\r\n\r\n- **Languages & Scripting:** Python, Rust, JavaScript, TypeScript, Java, C#, SQL, Bash Script, HTML/CSS/SCSS, VBA\r\n- **Systems & Infrastructure:** Linux (server environments), Docker and Docker Swarm, Nginx, ROS2\r\n- **Software Development:** Git/GitHub, data structures, unit testing fundamentals, software development lifecycle (SDLC)\r\n- **Automation & Applied AI:** Python automation with locally hosted LLMs, LLM integration with offline files, computer vision (OpenCV/YOLO)\r\n- **Data & BI:** Power BI, Advanced Excel (Power Query, Power Pivot, pivot tables, complex formulas), VBA for report automation\r\n- **Methodologies:** Agile methodologies, Clean Code\r\n\r\n---\r\n\r\n## Additional Training & Certifications\r\n\r\n- Complete Docker – Jan 2025\r\n- Git and GitHub – Jun 2023\r\n- Python Essentials 1 & 2 – 2023/2025\r\n- Python 3 – 2022–2023\r\n- Network Defense – Apr 2025\r\n- Advanced Excel – Apr 2025","links":[{"label":"Download - EN","url":"https://docs.google.com/document/d/1CYHk6t-I1D1vMSkaWIs1RXZukacTCiPr1_jkE_Ht_14/edit?usp=sharing"},{"label":"Download - PT","url":"https://docs.google.com/document/d/1gaWBLVdjhkcmq8kdD0hJKEG0VFPCqdpRSZstJiLtVTI/edit?usp=sharing"}],"page":"https://www.zanoni.dev.br/en/curriculo"},"projects":[{"title":"SOVA — Large-Scale Traffic Geolocation Pipeline","summary":"Hybrid Python and Cython pipeline that processes millions of network traffic records in real time, resolving IP geolocation to feed a DDoS detection and mitigation system.","description":"### What it is\r\nA large-scale network traffic (NetFlow dump) processing pipeline, used as input for a DDoS detection and mitigation system. For each traffic record, the system resolves source and destination IP geolocation and delivers clean, structured data for downstream consumption.\r\n\r\n### Challenge\r\nProcess millions of rows of traffic data within a 5-minute window, under strict time and memory constraints. Beyond the volume, each row required an IP geolocation lookup, which made pure Python processing unfeasible within the required SLA.\r\n\r\n### Solution\r\n- Hybrid architecture with **Python** as the orchestrator (flow control, aggregation, and output formatting) and **Cython** to accelerate the critical paths — both in NetFlow dump parsing and geolocation lookups.\r\n- Used the **MaxMind GeoIP** database to resolve source and destination IP geolocation at scale.\r\n- Parallel processing to handle the data volume within the available time window while keeping memory usage under control.\r\n- Cleaned and standardized output data, producing structured datasets later used to feed presets for the anti-DDoS system.\r\n\r\n### Result\r\nA pipeline capable of processing large volumes of network traffic within the required time SLA, delivering clean, geolocated data as the foundation for automated attack mitigation decisions.\r\n\r\n### Tech Stack\r\n- Python\r\n- Cython\r\n- MaxMind GeoIP\r\n- SQLite\r\n- Parallel processing / multiprocessing\r\n\r\n### Technical Highlights\r\n- Optimized critical code paths with Cython to reach near-C performance in Python\r\n- IP geolocation lookups at scale (millions of records) within a tight time window\r\n- Parallel processing to balance speed and memory usage\r\n- Data cleaning and standardization pipeline for downstream security systems","technologies":["Python","Docker","Git","SQLite","Cython"],"coauthors":[],"company":"Sage Networks","repo_url":null,"site_url":null,"page":"https://www.zanoni.dev.br/en/projetos/sova"},{"title":"IXSonar — BGP Visibility Analysis Across Internet Exchanges","summary":"Rust data pipeline that audits, at scale, connectivity redundancy across Brazilian and international Internet Exchange Points (IXs), using historical BGP route snapshots collected by RouteViews. The goal was to answer a practical question: is it worth a provider investing in long-distance physical connectivity to a major IX, such as São Paulo, or is most of the prefix data already replicated at closer, regional IXs? Handling a massive volume of incomplete and inconsistent data, with the real bottleneck being disk I/O rather than CPU, the pipeline combines Rust, Parquet, Arrow, and DuckDB to process everything with minimal reads/writes, delivering a historical dashboard that grounds that decision in real data.","description":"### What it is\r\nA network analysis tool that compares BGP route visibility across multiple Internet Exchange Points (IXs) — including different IX.br locations in Brazil, plus a few international IXs for comparison. It answers questions like: which prefixes announced at one IX also appear at another? How many keep the same AS path at both locations? How does that coverage vary across CDNs, access providers, banks, and government networks?\r\n\r\nThe practical goal behind the analysis is to show that, in most cases, it isn't worth a provider investing in long-distance physical connectivity to a far-away IX (e.g., running a link all the way to the São Paulo IX from Fortaleza) because most of the prefixes and networks available at a major IX are already replicated at regional IXs. The result is a historical dashboard that helps network teams make that decision with real data, understanding connectivity redundancy across locations.\r\n\r\n### Challenge\r\nData comes from RouteViews (University of Oregon), which collects route snapshots (RIBs) from routers around the world — but not every IX has full coverage: certain dates and times have capture gaps depending on the source router. Files came with missing data, inconsistent formatting between snapshots, and an enormous volume of information to process. The biggest technical challenge was finding a way to process that volume with minimal disk I/O and maximum speed, since the real bottleneck wasn't CPU — it was read/write throughput.\r\n\r\n### Solution\r\n- A **Rust** binary that automatically downloads RIB snapshots from RouteViews, testing multiple days in parallel until a valid file is found, and applies configurable include/exclude filters over AS-PATH and BGP communities.\r\n- **Apache Parquet** as the intermediate format — columnar, immutable files with built-in statistical summaries, chosen for drastically reducing disk I/O compared to alternatives like SQLite.\r\n- **Apache Arrow** to move data directly in memory (RAM) between pipeline stages, avoiding unnecessary disk serialization/deserialization.\r\n- Embedded **DuckDB** to compare IX pairs — prefix overlap, AS path consistency, and per-category network metrics — processing global, IPv4, and IPv6 dimensions in parallel, all via direct SQL over the Parquet files.\r\n- **Python** scripts that read the final results and generate a self-contained HTML dashboard with interactive charts, served by a small Flask server.\r\n\r\n### Result\r\nA complete pipeline — from raw data collection to final visualization — capable of efficiently processing large volumes of BGP data on both disk and memory, delivering historical visibility into connectivity redundancy across Brazilian and international IXs.\r\n\r\n### Tech Stack\r\n- Rust (tokio, reqwest, rayon, embedded DuckDB)\r\n- Python (pandas, matplotlib, Flask)\r\n- Apache Parquet as intermediate format\r\n- Apache Arrow for in-memory data transport\r\n- Google Charts for the dashboard\r\n\r\n### Technical Highlights\r\n- Automatic, resilient download of historical BGP RIBs from RouteViews, testing multiple days until a valid snapshot is found\r\n- Handling of incomplete data and inconsistent formatting across different collections/routers\r\n- Use of Parquet + Arrow to minimize disk I/O and maximize processing speed at scale\r\n- Configurable filter engine with AND/OR logic over BGP communities and AS-PATH\r\n- Route overlap comparison done entirely in SQL over Parquet files, via embedded DuckDB\r\n- Native Rust parallel processing across the three analysis dimensions (global, IPv4, IPv6)\r\n- Network classification by business category (CDN, ISP, financial, government) to segment the analysis","technologies":["DuckDB","Git","Rust","Python","Pandas","Flask"],"coauthors":[],"company":"Sage Networks","repo_url":null,"site_url":null,"page":"https://www.zanoni.dev.br/en/projetos/ixsonar"},{"title":"Heimdall — Authentication and Access Control System","summary":"Maintenance and evolution of Heimdall, an in-house authentication system built in Python, with two-factor verification via email, JWT-based tokens, password recovery (\"forgot password\"), and multi-tenant permission management — restricting each client's access to only the areas included in their plan, fully isolating access between different companies, and maintaining an admin account with access across all clients' dashboards. The system is integrated with Asgard, the client-facing dashboard.","description":"### What it is\r\nHeimdall is the company's in-house authentication and access control system, integrated with Asgard (the client-facing dashboard): Asgard sends authentication and authorization requests to Heimdall, which validates and responds to them. It already existed when I joined the project; my role was ongoing maintenance and improvement.\r\n\r\n### My role\r\n- Maintained and evolved the authentication flow, including two-factor verification (2FA) via email.\r\n- Worked with JWT tokens for authentication and session control.\r\n- Maintained the \"forgot password\" recovery flow.\r\n- Managed access permissions to specific areas of the system, tied to each client's contracted plan — blocking access to features outside the contract's scope.\r\n- Implemented multi-tenant isolation: each client company only has access to its own dashboard, with no possibility of accessing data or areas belonging to other companies on the platform.\r\n- Supported the administrator account, with privileged access across all clients' dashboards on the platform.\r\n- Persisted user data in a SQLite database.\r\n- Routed requests between Asgard and Heimdall through Nginx.\r\n\r\n### Tech Stack\r\n- Python\r\n- JWT\r\n- Two-factor authentication (email)\r\n- Password recovery\r\n- SQLite\r\n- Nginx\r\n- Multi-tenant access control with an administrator role\r\n\r\n### Technical Highlights\r\n- Use of JWT tokens for authentication and session control\r\n- Two-factor authentication via email\r\n- Password recovery flow\r\n- Permission model tied to contracted plans, enabling granular access control by feature/area\r\n- Multi-tenant isolation ensuring one company can never access another's data or screens\r\n- Administrator role with a consolidated view across all clients, alongside the standard isolation between companies\r\n- User persistence in SQLite\r\n- Nginx as the routing layer between Asgard (frontend) and Heimdall (authentication service)\r\n- Direct integration with Asgard as the authentication and authorization layer","technologies":["Python","Docker","Git","SQLite","Nginx"],"coauthors":[],"company":"Sage Networks","repo_url":null,"site_url":"https://cliente.sagenetworks.com.br/","page":"https://www.zanoni.dev.br/en/projetos/heimdall"},{"title":"fuelCellPem — PEM Fuel Cell Simulator","summary":"A desktop application that simulates a PEM fuel cell (electricity generation from hydrogen) over a 24-hour period, letting engineers and students interactively see how much hydrogen is consumed, how much water and heat is produced, and how efficient the cell is — all driven by a configurable hour-by-hour usage profile.","description":"# fuelCellPem — PEM Fuel Cell Simulator\r\n\r\n**A desktop app that shows, hour by hour, how a PEM fuel cell behaves over a full day of use.**\r\n\r\n## What it is\r\n\r\nA desktop application that simulates a PEM (Proton Exchange Membrane) fuel cell over a 24-hour period. The user enters the stack characteristics and a daily load profile, and the app interactively shows how much hydrogen is consumed, how much water is produced, how much heat is generated, how efficient the cell is, and how much energy it delivers — with daily, monthly, and annual totals.\r\n\r\nIt's the natural companion to the Electrolysis App: where that one simulates producing hydrogen, this one simulates the reverse path, turning hydrogen back into electricity.\r\n\r\n## How it works\r\n\r\nThe user sets the stack parameters and draws the usage profile by dragging bars directly on a chart (or typing an exact value), with shortcuts for typical profiles like a continuous 24-hour run or just daylight hours. On every change, the app recalculates the hourly operation from the cell's physical model and updates charts, averages, and totals in real time. Input fields validate what's typed and warn about invalid values, and the interface offers undo/redo, JSON import and export of the inputs, and a full PDF export of the results.\r\n\r\nThe model was ported from a reference Python notebook and systematically validated against it: an automated test suite compares the app's outputs with the notebook's across a wide range of scenarios, including extreme cases and absurd inputs, making sure nothing breaks or produces invalid results.\r\n\r\n## Tech stack\r\n\r\n- C# / .NET with Avalonia UI (cross-platform desktop)\r\n- Interactive charts and PDF report export\r\n- xUnit for automated testing (including headless UI tests)\r\n- Python + SciPy to generate the reference data used for validation\r\n- Git and GitHub Actions for continuous integration and release publishing\r\n\r\n## Technical highlights\r\n\r\n- Faithful port of a scientific model from Python to C#, with parity verified against the original implementation\r\n- Large-scale validation against the reference, covering a wide grid of parameter combinations\r\n- Input robustness: accepts comma or dot as the decimal separator, rejects invalid values, and guards against numeric overflow and infinite loops\r\n- JSON import and export with proper error handling (invalid, locked, or oversized files) without crashing the app\r\n- Drag-to-edit interface with undo/redo and PDF report export\r\n- Layered code organization: physics model, data, UI, and tests\r\n- CI pipeline that builds, tests, and publishes releases automatically","technologies":["C#","Jupyter","Git","Google Colab","GitHub Actions","Python"],"coauthors":[{"name":"Juan Felipe Vásquez Uribe","url":"https://www.linkedin.com/in/juan-felipe-vasquez-u/"}],"company":"Freelancer","repo_url":null,"site_url":null,"page":"https://www.zanoni.dev.br/en/projetos/fuelcellpem"},{"title":"Pokedex — Productivity Analysis and Support Technician Allocation","summary":"Python system built to give visibility into the operation of a team of infrastructure and network technicians, who handled customer tickets through a third-party support platform. The biggest challenge wasn't the business logic, but data access: there was no API available, only direct database access, with no documentation on how the tables related to each other — it took reverse engineering the schema and handling incomplete, inconsistently formatted data. Once that data was cleaned, the system calculates per-technician productivity, tracks ticket distribution, and cross-references those numbers with the team's real availability to flag workload imbalances. Everything is presented through visual dashboards, running in production on a Docker Swarm cluster with Nginx as reverse proxy.","description":"### What it is\r\nA Python-based system that accessed a third-party customer support platform's database directly, used by infrastructure and network technicians (contracted to handle and resolve customer tickets). With no API or documentation available, the goal was to turn that raw data into productivity insights and support team management decisions.\r\n\r\n### Challenge\r\nThere was no API or any structured way to access the data — only direct server and database access. The schema was inconsistent, with dirty, incomplete data and no documentation on how the tables related to each other. Reverse-engineering the database schema was a prerequisite before any reliable productivity or allocation metric could even be calculated.\r\n\r\n### Solution\r\n- Reverse-engineered the support platform's database structure, mapping tables and relationships with no available documentation.\r\n- Direct SQL connection and queries to the database to extract ticket and support data.\r\n- Cleaned and handled inconsistent/incomplete data in Python before calculating any metrics.\r\n- Processing to calculate per-technician productivity metrics (ticket volume, resolution time, estimated effort).\r\n- Visual reports and dashboards to track task distribution across the team.\r\n- Allocation-support logic, cross-referencing workload with each technician's availability to flag imbalances.\r\n\r\n### Result\r\nA tool that gave management real visibility into the support team's productivity and helped balance ticket distribution across technicians, accounting for each one's capacity and availability — built on top of a data source with no clear structure or documentation.\r\n\r\n### Tech Stack\r\n- Python\r\n- SQL (direct database access)\r\n- Data processing and cleaning\r\n- Dashboard/report generation\r\n- Docker Swarm\r\n- Nginx\r\n\r\n### Technical Highlights\r\n- Reverse-engineered an undocumented database schema\r\n- Direct SQL data extraction with no API available\r\n- Handling inconsistent and incomplete data as a core part of the pipeline\r\n- Productivity and effort metrics calculated from raw support data\r\n- Visual dashboard for team tracking\r\n- Allocation logic accounting for individual technician availability\r\n- Deployed on a Docker Swarm cluster with Nginx as reverse proxy","technologies":["Python","Docker","Git","Nginx","MySQL"],"coauthors":[],"company":"Sage Networks","repo_url":null,"site_url":null,"page":"https://www.zanoni.dev.br/en/projetos/pokedex"},{"title":"Asgard — Client Dashboard","summary":"The company's client-facing dashboard, built in Angular, where I developed a new support tab — showing clients their contracted plan usage, ticket status (open, closed, awaiting response from either side), and average response times for both the client and the support team. I also led an effort to standardize and modularize components and the color system, reducing rework for the team and improving both performance and maintainability. The application runs in containers with an automated deployment pipeline.","description":"### What it is\r\nAsgard is the company's client-facing dashboard — the interface where clients track their account information and statistics. It's a full Angular application, running in containers with an automated deployment pipeline.\r\n\r\n### My role\r\nI didn't build the application from scratch; I joined an existing project and worked on specific fronts:\r\n- Developed a new support tab in the dashboard, giving clients visibility into:\r\n  - Usage of their contracted support plan (how much of the available quota had been used);\r\n  - Number of open and closed tickets;\r\n  - Tickets awaiting a response from the client and tickets awaiting a response from the team;\r\n  - Average response time for the client and average response time for the team.\r\n- Standardized the project: I noticed developers were manually repeating the same code patterns across different screens, so I created a standardized structure to eliminate that rework.\r\n- Modularized pages and components, making the code more reusable and easier to maintain.\r\n- Restructured the color system, unifying its use across the entire project.\r\n- Delivered frontend performance improvements as a result of these structural changes.\r\n\r\n### Tech Stack\r\n- Angular\r\n- TypeScript\r\n- Containers (deployment)\r\n- Automated deployment pipeline\r\n\r\n### Technical Highlights\r\n- Modularized components and pages to reduce code duplication\r\n- Standardized color system and styles across the application\r\n- Frontend performance gains from the restructuring\r\n- Worked on top of an existing codebase without breaking active functionality","technologies":["Docker","Git","TypeScript","Nginx","MySQL","Angular"],"coauthors":[],"company":"Sage Networks","repo_url":null,"site_url":"https://cliente.sagenetworks.com.br/","page":"https://www.zanoni.dev.br/en/projetos/asgard"},{"title":"Moodle Chat Bot — C Programming Assistant in Moodle Chat","summary":"A browser extension (Chrome/Firefox) that watches the Moodle chat and turns it into an academic C programming assistant. Right from the course chat, students can compile and run C code, interact with the running program (including feeding input via `scanf`), ask an AI to explain errors or fix bugs, and keep a history of past conversations and runs — all without leaving the course interface.","description":"# Moodle Chat Bot — C Programming Assistant in Moodle Chat\r\n\r\n**A browser extension that turns Moodle's chat into a C compiler and AI tutor.**\r\n\r\n## What it is\r\n\r\nA browser extension (Chrome/Firefox) that watches the Moodle chat and turns it into an academic C programming assistant. Right from the course chat, students can compile and run C code, interact with the running program (including feeding input via `scanf`), ask an AI to explain errors or fix bugs, and keep a history of past conversations and runs — all without leaving the course interface.\r\n\r\n## How it works\r\n\r\nA content script injected into the Moodle page watches the chat for commands starting with `!`, sent by an authorized user. Each command is forwarded to a local Flask backend, which routes the message: if it's C code, it's compiled with GCC and run in a subprocess, using queues and threads to capture output in real time and detect when the program is waiting for user input. If it's a question, the message — together with whatever previous-run context the user chose to include — is sent to Google's Gemini AI, with automatic fallback across models when quota limits are hit. All message history, AI responses, and run logs are stored in a local DuckDB database.\r\n\r\n## Tech stack\r\n\r\n- JavaScript (browser extension, Manifest V3)\r\n- Python + Flask (local backend)\r\n- Google Gemini API\r\n- DuckDB for persistence\r\n- GCC for compiling and running C\r\n\r\n## Technical highlights\r\n\r\n- Interactive C runner with real-time `scanf` support through a \"silence timer\" that decides when to hand output back to the user\r\n- Automatic `#include` inference: when Moodle's chat strips symbols like `#`, the bot recognizes the functions used (`printf`, `malloc`, `sqrt`...) and injects the correct headers\r\n- Fine-grained AI context system — from \"last run\" to a specific conversation ID, with rules to include only the question, only the answer, or both\r\n- Cascading fallback across Gemini models to work around free-tier quota limits\r\n- Layered backend architecture (routing, execution, AI, header inference, database), keeping each responsibility isolated","technologies":["Firefox Extensions","Git","JavaScript","Python","Flask","DuckDB"],"coauthors":[],"company":"Personal project","repo_url":"https://github.com/fezarosa-dev/moodleChat","site_url":null,"page":"https://www.zanoni.dev.br/en/projetos/moodle-chat-bot"},{"title":"BlackBee Challenge - 2026 - Mission 1 - Mapping","summary":"Built for Mission 1 of the Black Bee Challenge, an autonomous aerial robotics competition. The goal: a drone takes off with no human intervention from the center of a 14x14 meter arena, sweeps the entire area following a grid flight plan, locates up to 5 ground \"bases\" (targets marked with shapes and numbers), photographs each one making sure it's fully framed, computes its GPS coordinate, and generates a report with the photos as proof — exactly as required by the competition's official rules.","description":"# Black Bee Challenge 2026 — Autonomous Aerial Mapping\r\n\r\n**A drone that takes off on its own, maps 100% of a competition arena, and identifies targets by itself.**\r\n\r\n## What it is\r\n\r\nBuilt for Mission 1 of the Black Bee Challenge, an autonomous aerial robotics competition. The goal: a drone takes off with no human intervention from the center of a 14x14 meter arena, sweeps the entire area following a grid flight plan, locates up to 5 ground \"bases\" (targets marked with shapes and numbers), photographs each one making sure it's fully framed, computes its GPS coordinate, and generates a report with the photos as proof — exactly as required by the competition's official rules.\r\n\r\n## How it works\r\n\r\nThe system is a finite state machine running on ROS2: takeoff, coverage planning, photo capture at each waypoint, base detection, and landing. All the camera-geometry and computer-vision math (field-of-view calculation, ground footprint size, coverage grid, pixel-to-GPS conversion) lives in modules completely independent from ROS, so they can be tested without a real drone. Base detection can run either through classic image processing (OpenCV) or a YOLO model trained specifically for the target, interchangeable without touching the rest of the pipeline.\r\n\r\n## Tech stack\r\n\r\n- Python + ROS2 (rclpy)\r\n- YASMIN (finite state machine)\r\n- OpenCV and YOLO/Ultralytics for detection\r\n- MAVROS/MAVLink for real drone control\r\n- Gazebo for simulation\r\n\r\n## Technical highlights\r\n\r\n- Fixed a real optics bug: the camera's field of view is diagonal, not horizontal — the correct trigonometric conversion changed the number of required waypoints from 6 to 8\r\n- Coverage algorithm verified numerically by sweeping a fine grid of points to confirm 100% arena coverage\r\n- Two-stage pixel-to-GPS projection pipeline, with optional tilt compensation (roll/pitch) for the drone\r\n- Deduplication of targets detected across overlapping photos, with mosaic composition when no single photo shows the whole target\r\n- Entire mission configuration centralized in one file, with profiles that switch between simulation and real flight","technologies":["ROS","Git","Python","OpenCV"],"coauthors":[{"name":"Felipe Barros","url":null}],"company":"Black Bee Drones","repo_url":"https://github.com/Black-Bee-Drones/black-bee-challenge-2026/tree/mapping","site_url":null,"page":"https://www.zanoni.dev.br/en/projetos/blackbee-challenge"},{"title":"Electrolysis App — PEM Electrolyzer Simulator","summary":"A desktop application that simulates a PEM electrolyzer (hydrogen production via water electrolysis) over a 24-hour period, letting engineers and students interactively see how much H2 and O2 is produced, how much water is consumed, how much heat is generated, and how much electrical power is required — all driven by a configurable load profile, built with intermittent solar power scenarios in mind.","description":"# Electrolysis App — PEM Electrolyzer Simulator\r\n\r\n**A desktop app that shows, hour by hour, how much hydrogen an electrolyzer produces from a solar power profile.**\r\n\r\n## What it is\r\n\r\nA desktop application that simulates a PEM electrolyzer (hydrogen production via water electrolysis) over a 24-hour period, letting engineers and students interactively see how much H2 and O2 is produced, how much water is consumed, how much heat is generated, and how much electrical power is required — all driven by a configurable load profile, built with intermittent solar power scenarios in mind.\r\n\r\n## How it works\r\n\r\nThe user draws the available hourly power profile by dragging bars directly on a chart (or typing an exact value), with shortcuts for typical profiles like a continuous 24-hour run or just daylight hours. On every change, the app recalculates hourly production using the electrolyzer's physical model (Faraday's law, cell efficiency, thermal losses) and updates the charts and the daily, monthly, and annual totals in real time. Results can be exported as a package containing chart images, hourly data in CSV, and the parameters used in the simulation.\r\n\r\n## Tech stack\r\n\r\n- C# / .NET with Avalonia UI (cross-platform desktop)\r\n- LiveChartsCore + SkiaSharp for charting\r\n- CSV and image report export","technologies":["Python","C#","Git","Jupyter","Google Colab","GitHub Actions"],"coauthors":[{"name":"Juan Felipe Vásquez Uribe","url":"https://www.linkedin.com/in/juan-felipe-vasquez-u/"}],"company":"Freelancer","repo_url":null,"site_url":null,"page":"https://www.zanoni.dev.br/en/projetos/electrolysis-app"},{"title":"Drone Simulator — ROS2 Flight Simulator","summary":"A drone (quadcopter) flight simulator built to test navigation and obstacle-avoidance algorithms without the risk or cost of physical hardware. The virtual drone takes off, flies a slalom course avoiding obstacles, can perform maneuvers (like a flip), and automatically returns to its origin point to land — all rendered in real-time 3D.","description":"# Drone Simulator — ROS2 Flight Simulator\r\n\r\n**A full virtual quadcopter, with its own physics and simulated sensors, for testing autopilot logic without a real drone.**\r\n\r\n## What it is\r\n\r\nA drone (quadcopter) flight simulator built to test navigation and obstacle-avoidance algorithms without the risk or cost of physical hardware. The virtual drone takes off, flies a slalom course avoiding obstacles, can perform maneuvers (like a flip), and automatically returns to its origin point to land — all rendered in real-time 3D.\r\n\r\n## How it works\r\n\r\nThe core is a ROS2 node running at 60 frames per second. On every frame, an autopilot (implemented as a state machine) decides the flight commands — takeoff, navigation, maneuver, return, and landing — which drive a simplified physics model of an X-configuration quadcopter with individual per-motor mixing. The simulator publishes GPS, IMU, and LIDAR data in the same formats real hardware would use over ROS2, letting any external system consume these sensors as if it were controlling an actual drone. The scene is rendered in 3D with VPython, showing the drone, the environment, and its flight trail.\r\n\r\n## Tech stack\r\n\r\n- Python 3 + ROS2 (rclpy)\r\n- VPython for 3D visualization\r\n- NumPy for physics and vector math\r\n\r\n## Technical highlights\r\n\r\n- A complete flight state machine: takeoff, obstacle-avoiding navigation, maneuver, return-to-launch, and landing\r\n- Quadcopter physics model with individual motor mixing (throttle, roll, pitch, yaw)\r\n- Simulated sensors (GPS, IMU, LIDAR) published as standard ROS2 topics, ready to be consumed by any external node\r\n- Collision detection against obstacles and arena boundaries, ending the mission on a crash\r\n- Real-time 3D visualization with a flight trail","technologies":["ROS","Git","Python","NumPy"],"coauthors":[],"company":"Black Bee Drones","repo_url":"https://github.com/fezarosa-dev/droneSimulator","site_url":null,"page":"https://www.zanoni.dev.br/en/projetos/drone-simulator"},{"title":"Personal Portfolio — Website & Admin Panel","summary":"This is the site you're looking at right now: a Next.js application built from scratch to showcase projects, articles, a resume, and contact options — with one key difference: all content is managed through a custom admin panel, with no external CMS involved. Projects, text, images, technologies, and incoming messages are all edited straight from the browser, without touching code or triggering a new deploy. The site also exposes hybrid search (full-text + local AI, no API cost) and an MCP server that lets an AI read and edit this content under permission — in fact, that's how this very paragraph was written.","description":"# Personal Portfolio — Website & Admin Panel\n\n**A portfolio site that's also a complete full-stack application, with its own CMS, authentication, and bilingual support.**\n\n## What it is\n\nThis is the site you're looking at right now: a Next.js application built from scratch to showcase projects, articles, a resume, and contact options — with one key difference: all content is managed through a custom admin panel, with no external CMS involved. Projects, text, images, technologies, and incoming messages are all edited straight from the browser, without touching code or triggering a new deploy.\n\n## How it works\n\nThe app uses Next.js App Router with two main areas: the public-facing site and an authentication-protected `/admin` section where content is created and edited. Data lives in Supabase (Postgres), with a schema versioned through incremental SQL migrations. A custom middleware handles two things at once: guarding the admin routes and automatically detecting the visitor's language (Portuguese or English) via browser header and cookie, serving already-translated content. Site images are hosted on Google Drive and served through dedicated endpoints, keeping the API key off the client entirely.\n\n## Tech stack\n\n- Next.js 16 (App Router) + React 19 + TypeScript\n- Tailwind CSS 4 + shadcn/ui + Framer Motion\n- Supabase (Postgres + Auth)\n- Google Drive API as an image gallery\n- react-markdown for blog articles\n\n## Technical highlights\n\n- A custom CMS built into the admin panel, covering projects, articles, resume, contact messages, and the site's visual customization\n- Purpose-built bilingual support: automatic language detection plus mirrored content fields (e.g. `hero_title` / `hero_title_en`)\n- SEO handled from day one: structured JSON-LD, sitemap, robots.txt, and dynamic Open Graph images\n- Unit tests covering the most sensitive parts of the system: authentication, locale detection, and markdown processing\n- Hybrid search (full-text + local AI) and an MCP server for AI-driven content edits, with granular permissions\n\n## Hybrid search and MCP connections\n\nBeyond the CMS, the site has two features that go past a typical portfolio:\n\n- **Hybrid search** (`/busca`, ⌘K shortcut): combines Postgres' native full-text search with semantic search through an embedding model running locally on the server (`@huggingface/transformers`, no external API cost), merging both rankings with Reciprocal Rank Fusion.\n- **MCP server** (`/api/mcp`): exposes the site's content as [Model Context Protocol](https://modelcontextprotocol.io) tools, with per-resource, per-connection read/write permissions created and managed from the admin panel. This lets an AI (like Claude) read and edit projects, articles, SEO copy and other site content directly, under the owner's granular control — this very paragraph was added through that connection.","technologies":["Git","TypeScript","React","PostgreSQL","JavaScript","Vercel","GitHub Actions","Supabase","Next.js","Tailwind CSS"],"coauthors":[],"company":"Personal project","repo_url":"https://github.com/fezarosa-dev/portfolio","site_url":"www.zanoni.dev.br","page":"https://www.zanoni.dev.br/en/projetos/portfolio-pessoal"},{"title":"TOTVS × ProLeiT Integration — Data Analysis and Automation for Industry 4.0","summary":"An Industry 4.0 project that integrated the ERP (TOTVS) with the shop-floor MES (ProLeiT). I worked on large-scale data analysis, cross-referencing reports with millions of rows and MES data to reconcile inventory, spot process failures, and flag stock discrepancies, while also reviewing a custom ERP screen and automating routines with VBA and Power Automate. The findings were taken to the board to guide the project's progress.","description":"### What it is\nAn Industry 4.0 project to integrate the company's ERP (**TOTVS**) with its shop-floor MES (**ProLeiT**). The idea was to make the two systems talk to each other, reducing manual entries and the discrepancies between what happened on the production floor and what was recorded in the ERP.\n\n### Challenge\nData volume was the biggest obstacle. TOTVS reports had millions of rows, had to be cross-referenced with other equally large reports, and then with data coming from the MES. The work involved reconciling inventory, finding where processes were failing, and identifying stock discrepancies, all in a corporate environment using the tools the company already had.\n\n### My role\n- Analyzed and compared large volumes of data, cross-referencing ERP reports with MES data to validate consistency and reconcile inventory.\n- Identified process failures and stock discrepancies from those comparisons.\n- Built models and analyses in **advanced Excel**: Power Query to clean and combine datasets, Power Pivot to model the data, pivot tables, KPIs, Solver, and complex index-and-lookup formulas.\n- Automated routines with **VBA** and **Microsoft Power Automate**, including automatically filling in information that used to be entered by hand.\n- Read the code of a custom TOTVS screen, built by an outsourced vendor, to spot potential failures before it went live.\n- Took part in meetings with the board to present findings and discuss the project's progress.\n- Worked heavily in TOTVS day to day to extract and check data.\n\n### Result\nVisibility into the gaps between production and the ERP, with analyses that supported the board's decisions on the integration's direction, and manual routines replaced by automations.\n\n### Tech Stack\n- Advanced Excel (Power Query, Power Pivot, pivot tables, KPIs, Solver)\n- VBA\n- Microsoft Power Automate\n- TOTVS (ERP)\n- ProLeiT (MES)\n\n### Technical Highlights\n- Cross-referencing reports with millions of rows between ERP and MES\n- Data modeling with Power Query and Power Pivot on large datasets\n- Inventory reconciliation and discrepancy detection by comparing systems\n- VBA and Power Automate automations to eliminate manual data entry\n- Code review of a custom ERP screen built by a third party\n- Presenting technical findings to the board","technologies":["Excel","VBA","Power Automate"],"coauthors":[],"company":"TMD Friction Brazil","repo_url":null,"site_url":null,"page":"https://www.zanoni.dev.br/en/projetos/integracao-totvs-proleit"},{"title":"Mão Dupla — Chrome Extension to Manage Instagram Followers","summary":"Open-source Chrome extension (Manifest V3) that shows, from the user's own account, who they follow without being followed back, who unfollowed and who is new, with a paced follow/unfollow queue. Runs 100% locally, with no server and no password. Built with the help of Claude AI.","description":"# Mão Dupla — Chrome Extension to Manage Instagram Followers\n\n**An open-source extension that shows who doesn't follow you back and tracks what changed between one refresh and the next.**\n\n### What it is\nA Chrome extension (Manifest V3) that also works in Edge and Brave. From the user's own Instagram account, it shows who they follow without being followed back, who unfollowed, who is new, and who left the \"following\" list. It lets you follow and unfollow straight from the list, one by one or through a queue. It's an open-source project (MIT license), with version 2.0.0 published and a .zip installer on the Releases page.\n\n### How it works\nThe extension injects functions into the Instagram tab where the user is already logged in, through `chrome.scripting`, and consumes the site's internal API by mimicking its requests. Everything runs locally in the browser: there's no server, it never asks for a password, and it doesn't send data to anyone. The lists are cached locally and each refresh is compared with the previous one, which makes it possible to show changes over time.\n\n### Features\n- Real-time list loading with a progress bar, and comparison of each refresh against the previous one.\n- Checks \"left\" alerts directly against Instagram before showing them, to avoid false positives.\n- Follow and unfollow queues with a random pause between actions. The queue stops by itself and locks for 6 hours if Instagram limits the account.\n- Export and import of everything as a .zip (full JSON plus one CSV per tab), to carry the data from one computer to another.\n- Custom interface: sidebar, cards with photo and verified badge, search, and configurable pagination.\n- Accessibility: visible keyboard focus, screen-reader labels, and \"reduce motion\" support.\n\n### Tech Stack\n- Plain JavaScript, no dependencies or build step\n- Chrome Extensions (Manifest V3) and `chrome.scripting`\n- localStorage for the local cache\n- GitHub Actions for the automated release\n\n### Technical Highlights\n- Wrote the .zip generator and reader from scratch, including the CRC32 calculation, without any libraries\n- Reuses the session already open in the browser, without storing cookies, tokens, or passwords\n- Validates data on import, discarding photo links that aren't from Instagram\n- Verifies each suspicious alert directly against Instagram to eliminate false positives\n- Queue with a random pause and an automatic lock when Instagram limits the account\n- Automated release: when a tag is created, the workflow checks the manifest version, packages the zip, and publishes the release\n\n### How it was built\nBuilt by me with the help of Claude AI, which helped me investigate how the site works and write and test the code.\n","technologies":["JavaScript","Chrome Extensions","GitHub Actions","Git"],"coauthors":[],"company":"Personal project","repo_url":"https://github.com/fezarosa-dev/mao-dupla","site_url":null,"page":"https://www.zanoni.dev.br/en/projetos/mao-dupla"}],"articles":[]}