Raphael Winckler de Bettio
Portfolio

Systems I have designed and built

Systems developed within the university: institutional projects with companies and government agencies, and proofs of concept and prototypes that supported research, outreach and teaching. Since many have no public access, I show how they work with screens or illustrations and a diagram — and each case shows how far it went: proof of concept, prototype, MVP or in production.

See also a sample deliverable: the funding document built from the PLANTIA POC (condensed) →

PLANTIA · Proof of concept
  1. POC
  2. Prototype
  3. MVP
  4. In production

Generative Optimization of 3D Physical Layouts for Agribusiness via Hybrid Artificial Intelligence

A proof of concept for companies that design agribusiness processing plants. Today, putting together the preliminary layout for a sales proposal is manual, slow work full of rework. Here, the client describes the demand in plain text — for example, “I need to process 250 kg of material per hour” —, artificial intelligence turns the request into a specification, the system works out how many machines are needed and finds a position for each one on its own, already connected to each other, producing a model ready for SketchUp. The POC showed the mechanism works end to end and became the technical basis of an R&D proposal in partnership with UFLA. I conceived and developed the proof of concept.

Proof of conceptAgribusinessArtificial intelligenceOptimization3D modelingSketchUp

For your startup: shows the full path a startup goes through: from an idea to a working proof of concept and, from there, to a technical document ready to seek funding.
See the condensed version of the funding document →

Status

  • Proof of concept completedMechanism validated end to end, in varied scenarios
  • Next stageR&D project structured in partnership with UFLA, with a roadmap to product and ready for public funding calls
  • DomainAgro-industrial processing plants
PLANTIA — proof of concept
The request in plain text Machines sized Factory assembled automatically Other scenarios Straight into SketchUp

How it works

won't fit? it says so Request in plain text“250 kg of material per hour”Artificial intelligenceturns it into a specificationSizinghow many machines are neededAutomatic placementno overlaps, all connected3D reviewthe engineer adjusts if neededSketchUpmodel ready for the proposal

Hover to pause · click a step in the diagram to see the matching screen.

From text to 3DA demand written in the client's own words becomes a placed, connected layout, with no manual assembly.
Knows when it can'tIf the machines don't fit the site or can't connect, the system says so instead of inventing a solution.
Works with existing toolsThe result comes out as a SketchUp model or in a universal 3D format.

Architecture

The POC is a Python pipeline of decoupled stages, each reading and writing JSON. The request produces a structured prompt for an LLM, which returns only the specification — the model does no calculation. Sizing is deterministic: capacity rules define how many production lines and how many machines of each type the demand requires. The factory is modeled as a discrete 3D grid of cells; each machine occupies a block of cells according to its dimensions and declares typed inputs and outputs on specific faces, like Lego pieces — same type on opposite faces means a compatible connection.

Placement is solved with Google OR-Tools CP-SAT: cell and rotation variables (0°, 90°, 180°, 270°) for every machine, constraints for non-overlap, site limits and mandatory connectivity of every port to a compatible port on another machine; when no arrangement exists, the solver proves infeasibility. This version targets feasibility only — minimizing area, distances and cost is the next stage. A Three.js web interface lets the layout be reviewed and adjusted with magnetic snapping and port validation, and exporters generate a Ruby script for the SketchUp API and an STL file.

PythonLLM (structured prompt)Google OR-Tools · CP-SATThree.jsJSONRuby · SketchUp APISTL
CogniFox · Data platform
  1. POC
  2. Prototype
  3. MVP
  4. In production

From source to dashboard, with versioning and AI under control

A tool that turns scattered data — databases, spreadsheets, map files — into interactive dashboards anyone on the team can use. Whoever looks after the data connects the sources and builds the indicators; nothing reaches the dashboards without review and approval, and the full history of changes is kept. An AI assistant helps create new indicators and dashboards from a plain-text description, always as a proposal for someone to approve. I conceived and developed the platform, which, although still under development, is already in production at Atena.

Data scienceInteractive dashboardsMapsHistory and approvalArtificial intelligenceIntegration with other systems

For your startup: shows speed: from architecture to a version in real use within a few months, with AI helping without taking control away from decision-makers.

Where it is used

  • AtenaIn production — the dashboards teachers use to follow student progress
  • Version 1.2 betaUnder active development, already in daily use
  • DemoPublic bird-occurrence data for Brazil (GBIF)
Data platform — demo with public data (GBIF)
Data sources Query the source directly Datasets with health and approval Pipelines as a visual graph Widgets Interactive dashboards Scheduling AI assistant

How it works

derived drafts Data sourcedatabases · spreadsheets · maps Datasetextracted, kept up to date Pipelinecombines and transforms data Widgetchart · map · table Schedulingautomatic updates Dashboardlinked dashboards AI assistantproposes; the team approves

Hover to pause · click a step in the diagram to see the matching screen.

Versioned and auditableEvery change is recorded and only goes live after approval.
Secure by designThe tool only reads source data, never changes it — and nothing runs without approval.
EmbeddableDashboards can appear inside the company's other systems, with controlled access.

Architecture

CogniFox separates engine from interface: every entity is a JSON document with a Pydantic contract (structural validation) and business rules in dedicated validators (semantic validation) — read-only SQL, a closed node palette and DFS cycle detection, the same algorithm reused for pipelines, for signals between widgets and for dependencies between pipelines. Pipelines are graphs executed by Ibis on DuckDB, with static schema propagation node by node, which feeds the visual editor's autocomplete. Every dataset is materialized, the previous version becomes a backup and the health status (OK, BACKUP, FAILURE) propagates down the chain; an orchestrator infers execution order from data dependencies and APScheduler triggers cron runs.

The web layer is Flask, with projects and files in MinIO and sources in MySQL, PostgreSQL, SQLite, CSV or GeoJSON. Dashboards use Gridstack, ECharts and Leaflet, with signals between widgets that recompute only what is affected, and can be embedded in other systems through a Shadow-DOM Web Component with scoped, revocable JWT tokens. The AI assistant (LiteLLM, provider-agnostic) generates entities from the source's real schema; the answer goes through the same validators as the visual editor and, if it fails, the exact error is sent back to the model for up to three attempts — and the result always lands as a draft, subject to the same human approval. Custom code only enters as a catalogued, approved Script, and pipelines can be covered by JSON test cases without writing Python.

PythonFlaskPydanticIbisDuckDBAPSchedulerMinIOMySQLPostgreSQLSQLiteDrawflowGridstackEChartsLeafletWeb ComponentsJWTLiteLLMpytestDocker
Patas UFLA · Social project
  1. POC
  2. Prototype
  3. MVP
  4. In production

A network that helps lost pets find their way home

A collaborative network that brings owners, the community and volunteers together to search for lost pets. The owner registers the pet with photos and the place where it went missing; anyone can report seeing or taking in an animal, on the website or through Telegram. Artificial intelligence describes the photos and points out possible matches between lost pets and sightings, and volunteers review every step — including calling whoever says they have the animal before releasing the contact to the owner. Requirements were gathered with residents, veterinary clinics, pet shops and public agencies. Conceived with three other professors from the department; I designed the architecture and implemented the platform.

Social projectArtificial intelligenceMapsVolunteeringTelegramOpen source

For your startup: shows how to think through a complete product, from the user to launch: AI and people working together, with safety and outreach built in.

Status

  • UFLA outreach projectServing Lavras and nearby towns
  • Version 0.4 betaFinal testing stage
  • Open source (MIT license)Other cities and groups can adapt and use it

A UFLA outreach project — not consulting work.

Patas UFLA — collaborative network for finding lost pets
A network for everyone The pet's public page Ready-to-share poster Reporting a sighting

How it works

Ownerregisters the lost pet Communityreports sightings · web or bot Artificial intelligencedescribes photos and compares Volunteersreview and confirm Reunioncontact released safely Outreachposter with QR code

Hover to pause · click a step in the diagram to see the matching screen.

Safety firstContact is released only after a volunteer confirms the person, and locations are shown only approximately.
AI with peopleArtificial intelligence suggests; volunteers review and decide.
Ready to sharePosters with QR codes and ready-made texts to share on WhatsApp.

Architecture

Patas is a Django application on PostgreSQL with PostGIS, for geographic queries such as the distance between sightings, and pgvector, for similarity search between descriptions. Photos live in S3-compatible storage (MinIO, via django-storages); heavy processing runs in the background with Celery and Redis, and celery-beat schedules the periodic match scans. Google sign-in (django-allauth), a Telegram bot with a webhook for volunteers reporting from their phones, hierarchical roles from Level 0 to 5, an audit trail, volunteer scoring, and deployment with Docker Compose and continuous integration on GitHub Actions.

The AI pipeline uses a vision model through LiteLLM — compatible with local models served by Ollama — to check whether the photo is usable and to generate an identification-oriented description. Color and size are extracted with a controlled vocabulary and a Portuguese spaCy dependency parser, which tells apart, for instance, coat color from eye color. The description becomes an embedding, and matching combines cosine similarity, geographic proximity, time proximity and feature overlap (Jaccard) into a weighted score whose breakdown is stored to calibrate the weights with real data. People validate every step: Level 3 reviews descriptions, Level 4 confirms the match and verifies identity by phone before releasing contact, and the public map shows only an approximate area.

PythonDjangoPostgreSQLPostGISpgvectorCeleryRedisMinIOLiteLLMOllamaspaCyTelegram Bot APIGoogle OAuthLeafletDockerGitHub Actions
GeoProcess · Geospatial data platform
  1. POC
  2. Prototype
  3. MVP
  4. In production

Questions, dashboards and alerts over geospatial data

A platform for querying geographic data without being a specialist. The technical team prepares the databases and sets up ready-made questions; users pick the parameters and get the answer as maps, charts and tables, can revisit past queries, receive automatic alerts when something needs attention and explore interactive dashboards. I designed the architecture and implemented a large part of the system, with the collaboration of other developers, and I lead its technical evolution.

PythonGeospatialData importDashboardsMapsScheduled alerts

For your startup: shows the ability to take a system from prototype to production and keep it evolving, serving different companies and public agencies.

Where it has been used

  • Minas Gerais Agriculture Institute (IMA)In production
  • Brazilian Federal Prosecution Service (MPF)At prototype level
  • Vale S.A.Internal tool for the research team to add their data, under the name Sustainable Territory Management Platform
  • Suzano S.A.At prototype level, in a project between Zetta, UFLA's innovation agency, and the company
  • INPI registration — GeoProcessBR512024003312-2 (2024)
  • INPI registration — Suzano projectBR512025006681-3 (2025)

All of these are UFLA institutional projects I took part in as a professor — not consulting work.

Geospatial platform — demo data (IBGE, Brazil)
A project groups questions, dashboards and alerts The user asks a question The answer comes as charts… …crossing indicators… …and maps Every answer is stored Automatic alerts Interactive dashboards

How it works

scheduled Databasesintegrated by the technical team Projectquestions · dashboards · alerts Questionparameters chosen by the user Interactive dashboardfilters · maps · charts Answergenerated charts and maps Historystored answers Alertscheduled question + notice

Hover to pause · click a step in the diagram to see the matching screen.

For non-specialistsThey pick parameters and read maps and charts; the platform carries the complexity.
TraceableEvery answer stores its parameters, date and processing time.
Applied in real projectsIn production at IMA, prototypes with MPF and Suzano, and an internal research tool at Vale.

Architecture

GeoProcess is a distributed framework built around a question-and-answer model, split into three decoupled modules: the Portal (Django, with a Bootstrap/AdminLTE, Plotly and OpenLayers front end), the Gateway (FastAPI on Uvicorn) and the Consumers, Python services that actually answer the questions. Portal and Gateway talk over a web API; Gateway and Consumers exchange JSON messages through RabbitMQ (AMQP), in independent, asynchronous flows. Each consumer registers with the Gateway, announcing its project, questions and parameters — new analyses join the system without touching the Portal, and several instances of the same consumer can run in parallel for horizontal scalability.

The Gateway owns security and traceability: users sign in through Single Sign-On (OIDC), the Portal forwards the JWT and the Gateway decides which projects and questions each profile can see, logging every request and answer in PostgreSQL — which is where the history comes from. A shared library provides the consumers' base class and an answer contract that abstracts maps, charts, tables and messages; developers write only the query and the result assembly, while distribution, formatting and access control are handled by the platform. Alerts are scheduled questions that notify only when the answer is not empty, and a Visual Builder lets the answer screen be prototyped with the client (Wizard of Oz technique) and generates the consumer skeleton in Python. Spatial data lives in PostGIS and GeoServer, and operations are monitored with Prometheus and Grafana.

PythonDjangoFastAPIUvicornRabbitMQ (AMQP)PostgreSQLPostGISGeoServerPlotly DashOpenLayersOIDC / KeycloakJWTRedisPrometheusGrafana
Atena · Education platform
  1. POC
  2. Prototype
  3. MVP
  4. In production

Adaptive learning paths for teaching programming

A programming-education platform in which each student follows their own path: texts, videos, exercises and problems are chained together, and the next step depends on how the student answered. Exercises are graded instantly, with immediate feedback, which makes it possible to follow hundreds of students per term. The platform replaced the lecture classes of Programming Fundamentals for UFLA's engineering programs and has served thousands of students. I conceived the method and designed and implemented the platform; other professors produced the content. Its newest module, Atena Tutor, uses artificial intelligence to teach students how to solve problems step by step.

Personalized learningAutomatic gradingProgramming exercisesArtificial intelligenceGamification

For your startup: shows a product that changed the routine of thousands of users and keeps gaining new modules, such as the AI tutor.

Where it is used

  • UFLA — engineering programsProgramming Fundamentals I, in use since 2022
  • ResultsPass rate close to 80% after the method was adopted
  • Atena TutorBeta version, integrated with Atena

A UFLA institutional project — not consulting work.

Programming education platform
Course learning paths Learning objects Programming problems Graded activities Atena Tutor Owl's Nest Programming the owl

How it works

path follows the answer same grading engine Learning pathgraph of learning objects Learning objecttext · video · quiz · problem Automatic gradingcorrect · partial · incorrect Graded activityexams and exercises graded Atena Tutorstep-by-step solution with AI Teacher dashboardsprogress and grades Owl's NestPython steering the owl

Hover to pause · click a step in the diagram to see the matching screen.

Personalized learningEach student follows a different path, depending on what they already master.
Grading at scaleHundreds of students per term, with instant feedback on every problem.
AI under controlArtificial intelligence is used only where the result can be checked automatically.

Architecture

Atena is a Django application on MySQL/MariaDB, served by Gunicorn behind Nginx and authenticated through the university's CAS. The data model is built around learning objects: texts, videos, slides, notebooks, image maps, quizzes and problems inherit from a common base type, and each learning path is a graph in which every node points to the next one according to the result of the answer — correct, partial, incorrect, or the option chosen in a quiz. Paths can be drawn in a visual editor and are validated before publishing. Problems accept Python, Java, C and C++ and run in three modes: in the browser with Pyodide, as blocks with Blockly, or on the server inside an AppArmor-confined sandbox, with an execution pool controlled by locks and time limits.

Graded activities compare output against test cases — with similarity algorithms such as Levenshtein and Smith-Waterman — and inspect the syntax tree to require specific functions and parameters; exams can be restricted by IP and unlocked with a TOTP code. Atena Tutor is a separate service (Flask, SQLAlchemy/Alembic, PostgreSQL, Docker) with federated login through signed JWTs. An LLM generates reference solutions that are accepted only after passing the test cases, retrying from the detailed error; the flowchart is derived from the AST without AI, and the LLM only labels blocks already delimited by the parser — it never rewrites the code. Comprehension checks compare the student's answer using local embeddings, hints unlock by attempts and elapsed time, and analytics dashboards are integrated with CogniFox.

PythonDjangoMySQLGunicornNginxCASPyodideBlocklyAppArmorFlaskSQLAlchemyPostgreSQLDockerJWTLiteLLMsentence-transformersMermaid
Applied research

Prototypes with our own hardware and software

Research projects in which we built both the devices and the systems. They show that if your idea depends on sensors, connected devices or wireless communication, it also fits in a proof of concept.

Casa Assistiva · Accessibility research
  1. POC
  2. Prototype
  3. MVP
  4. In production

A smart home that adapts to the people who live in it

A research line on smart homes for people with disabilities and older adults. The same house can be controlled in six different ways — from a phone with a screen reader, with blocks the residents assemble themselves, with a sensor glove, with gestures in front of a camera, with voice commands in Portuguese, and even by thought, with a brain-activity sensor — so each person uses whatever works best for them. The prototypes were evaluated with real users, including people with visual impairments and older adults, and led to articles in international journals and a software registration with Brazil's patent office (INPI). Everything was designed and built by our team — the hardware, with the microcontroller and sensor boards installed in the appliances, the glove and the control modules, and the software, from the home hub to the control apps —, at a time when smart homes were not yet off-the-shelf products. I designed the architecture and built the prototypes, in partnership with Professor André Pimenta Freire, an expert in human-computer interaction.

AccessibilitySmart homeInternet of thingsArtificial intelligenceBrain-computer interfaceUser research

Results

  • International journal articlesPersonal and Ubiquitous Computing · Behaviour & Information Technology · Multimedia Tools and Applications
  • Brain-interface studyHome control through mental commands, evaluated with 30 participants
  • INPI registrationCasa Assistiva computer program — BR512018000396-6 (2018)
  • Alcance Lab — UFLAResearch funded by public agencies, including FINEP

A UFLA research project — not consulting work.

Casa Assistiva — illustrative images
By voice, in Portuguese By touchscreen Residents create their own rules With a gesture glove With gestures in front of a camera By thought

How it works

Phone and webtouch and screen readerBlocksresidents build rulesGlovehand gesturesCameragestures read by AIVoicecommands in PortugueseThoughtEEG headset Home hubreceives and routes Deviceslights · appliances

Hover to pause · click a step in the diagram to see the matching image.

Everyone their own wayTouch, blocks, gestures, camera, voice or thought: the house accepts whatever interaction the person can use.
Tested with real usersEvaluations with people with visual impairments and older adults guided every version.
Residents in controlHouse rules created by the users themselves, without coding.

Architecture

Home devices — lamps, outlets and appliances — are driven by ESP8266 microcontrollers that talk to a central broker over MQTT, a lightweight publish/subscribe protocol suited to home networks. Every interface publishes commands using the same topic scheme, so new interaction methods can be added without touching the devices. The first version is a Java (JSP) web application with per-room pages designed for screen readers; the latest version was rewritten in Python with Django.

End-user programming uses Blockly, with custom trigger blocks (time, sensors, appliance state) and action blocks, translated into rules run by the hub. The glove pairs an ESP8266 with the MPU-6050 accelerometer and gyroscope to recognize hand gestures; camera control uses TensorFlow.js with transfer learning on a pre-trained network, trained in the browser from a few of the user's own examples; and voice commands go through CoGrOO, a Portuguese language analyzer that extracts the action and the device from the sentence before it becomes an MQTT message. For people with severe motor limitations, an Emotiv EPOC+ EEG headset (14 channels, over Bluetooth) captures per-user trained mental commands that become home actions over the same MQTT bus; usability was evaluated with 30 participants using a think-aloud protocol and video analysis.

ESP8266MPU-6050MQTTJava · JSPPythonDjangoBlocklyTensorFlow.jsCoGrOOProcessingEmotiv EPOC+ (EEG)
Boi Feliz · IoT and AI proof of concept for agribusiness
  1. POC
  2. Prototype
  3. MVP
  4. In production

Smart collars that recognize cattle behavior

A cattle-monitoring proof of concept with collars that measure the animal's movements around the clock. The collars talk to each other and send data to a small field station; artificial intelligence learns to recognize what the animal is doing — walking, standing still, sitting, getting up or turning — and a dashboard shows it in real time. Behavior changes are often the first sign of illness, heat or stress, and following them closely in a large herd is impossible without technology. Tests were run with real animals — dogs, because with them each behavior could be requested on command during training (sit, lie down, walk, get up) and the exact activity recorded, something impossible to control with cattle in the pasture. We designed and built both the collar hardware and the software — from the program running on each collar to the field app and the dashboard.

LivestockInternet of thingsArtificial intelligenceSensorsReal time

Status

  • Proof of concept completedCollars, field station, app and dashboard working end to end
  • First resultsIn tests with dogs, about 3 out of 4 behaviors recognized correctly, with a still small dataset
  • What the POC showedRecognizing cattle behavior with low-cost collars is feasible; accuracy grows with more field data

A UFLA research project — not consulting work.

Boi Feliz — illustrative images
Sensor collar Data arrives on its own Testing with dogs Learning from the observer Live dashboard

How it works

Sensor collarmeasures the animal's movementsCollar networkno router, no internetField stationgathers the dataArtificial intelligencerecognizes the behaviorLive dashboardwhat each animal is doing Field applabels the data

Hover to pause · click a step in the diagram to see the matching image.

Wireless and low costCollars made from affordable parts that build their own network in the pasture.
Learns from the fieldWhoever watches the herd teaches the system through the app.
Real timeBehavior shows up on the dashboard as it happens.

Architecture

Each collar has an ESP8266 microcontroller with an MPU-6050 accelerometer and gyroscope, measuring angles and accelerations on three axes; a Kalman filter fuses both readings to estimate tilt with less noise. Collars exchange messages over ESP-NOW, a peer-to-peer protocol that needs no Wi-Fi router, and a collector node forwards the data over MQTT or serial to a Raspberry Pi station. Bluetooth links and direct collection on a phone were also tested, with a Flutter app used to label the behavior observed in the field.

For classification, each sample is a window of 100 readings of each signal; features are standardized and reduced with PCA and LDA, and logistic regression, linear and RBF-kernel SVM, decision tree, Random Forest and KNN were compared with cross-validation and hyperparameter search in scikit-learn pipelines. In the tests with dogs, the best models reached about 77% accuracy on the test set, on a still small dataset. A Streamlit dashboard reads the data in real time and fits polynomial regression curves to visualize each movement.

ESP8266MPU-6050ESP-NOWMQTTRaspberry PiKalman filterFlutterPythonscikit-learnStreamlit
Redes Veiculares · Vehicle-to-vehicle communication research
  1. POC
  2. Prototype
  3. MVP
  4. In production

Vehicles that warn each other about accidents, without internet

A prototype of direct vehicle-to-vehicle communication to spread accident alerts along the road. Each car carries a small GPS device that talks to the vehicles around it, with no internet or cell tower needed; when an accident happens, the alert is relayed from car to car to the drivers behind, with rules that keep the communication from getting congested. The system was tested with real cars on the streets of Lavras and in traffic simulations with many vehicles. We designed and built the hardware and the software — from the device installed in the cars to the analysis tools —, in partnership with Professor Luiz Henrique Andrade Correia, a networking expert.

MobilityRoad safetyInternet of thingsWireless communicationSimulation

Results

  • INPI registrationRedes Veiculares computer program — BR512019002553-9 (2019)
  • Field testsReal vehicles on the streets of Lavras, in 2019

A UFLA research project — not consulting work.

Vehicular Networks — illustrations and simulator
A device in every car The alert hops from car to car Tested on the streets And in simulation In the Eclipse SUMO simulator

How it works

protocol validation In-vehicle deviceGPS + short-range radioVehicle-to-vehicleno internet, no cell towerAlert relayedcar to car, without floodingDriver warnedbefore reaching the spot Street testsreal cars in Lavras Traffic simulationmany vehicles at once

Hover to pause · click a step in the diagram to see the matching image.

No internetVehicles form their own network and work even where there is no cell signal.
The warning arrives firstThe alert hops from car to car to drivers still approaching the accident.
On the street and in the simulatorTests with real cars and simulations with many vehicles validated the protocol.

Architecture

In each vehicle, an Android phone provides the GPS position to an ESP8266 microcontroller node, which talks to the others over ESP-NOW, a low-latency peer-to-peer protocol that needs no router. Nodes periodically exchange position, speed and a trust index for each neighbor, and relay messages with hop-count and retransmission control, with rules for disseminating accident alerts without flooding the network. The firmware also implements a mode following the European ETSI standard for cooperative vehicular messages, used as a comparison baseline.

A Java desktop application receives node data over sockets, shows vehicles on a map, generates reports and can emulate nodes, and integrates with the SUMO traffic simulator to test the protocol with vehicle flows on routes at 20 to 60 km/h. In field tests, each node logs its own and its neighbors' positions in JSON; Python scripts compare what each car knew about the others with their real positions, compute error and trust per node pair, and export GeoJSON and KML for visualization. Android and Flutter apps let the nodes be followed on a phone.

ESP8266ESP-NOWGPS (Android)JavaSUMOPythonGeoJSON · KMLFlutter

Ready to put your idea to the test?

Tell me in a few lines what you want to test, validate or present — and we'll find the best path together.