# João Palmeiro > Personal website of João Palmeiro, Data Visualization Engineer at Feedzai. --- # AI I use AI directly for two purposes: coding and searching. I use it via chat interfaces, easily integrating them into my workflow. This way, access is similar to other tools like my notes/repos and the Internet. The outcome is adequate. ## Coding I use AI primarily for four coding-related tasks: 1. Code review/linting: I use AI to help validate code and detect potential issues and improvements. This approach is particularly useful when I am not proficient in a specific technology and can add relevant documentation to the prompt. 2. Code conversion: I use AI to convert code from one programming language to another (R to Python, for example). This way, I have an additional reference to implement my own version. 3. Example generation: I use AI to generate small demos combining different technologies. I take this approach when I can't find good examples online that include all the technologies I'm interested in. 4. Error debugging: I use AI to understand the cause and potential solutions for certain errors. I resort to this approach when I can't find useful information online. The initial prompt contains at least code, an instruction, and a set of conditions/requirements (specific major package versions, for example). Often, I also add additional content as context, such as a documentation page. I don't keep any of the prompts, so the prompt template is different every time. ## Searching I turn to AI when I have something concrete I want to find and only have a vague description in mind. I resort to it only after trying to find what I'm looking for in a search engine. --- # Open source contributions - Total: 149 - Projects: 70 | Repo | MR/PR | Year | | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---- | | [ansol/web-ansol.org](https://gitlab.com/ansol/web-ansol.org) | [Atualiza a página de contactos com o link do Mastodon](https://gitlab.com/ansol/web-ansol.org/-/merge_requests/95) | 2023 | | [antfu/case-police](https://github.com/antfu/case-police) | [feat: add GeoPandas, JupyterLab, and NumPy](https://github.com/antfu/case-police/pull/131) | 2022 | | [antfu/starter-vscode](https://github.com/antfu/starter-vscode) | [fix: update the deprecated VS Marketplace Shields.io badge to a Badgen one](https://github.com/antfu/starter-vscode/pull/26) | 2026 | | [badgen/badgen](https://github.com/badgen/badgen) | [feat: choose the text color based on the background to ensure contrast](https://github.com/badgen/badgen/pull/94) | 2026 | | [Blaizzy/mlx-audio](https://github.com/Blaizzy/mlx-audio) | [fix(docs): update outdated model links](https://github.com/Blaizzy/mlx-audio/pull/495) | 2026 | | [cdleon/awesome-terminals](https://github.com/cdleon/awesome-terminals) | [Deprecate Fig](https://github.com/cdleon/awesome-terminals/pull/36) | 2024 | | [chakra-ui/ark](https://github.com/chakra-ui/ark) | [Add accessible label to copy page widget menu trigger](https://github.com/chakra-ui/ark/pull/3837) | 2026 | | [chakra-ui/chakra-ui](https://github.com/chakra-ui/chakra-ui) | [fix(docs): set the aria-label for the extra options menu of the copy page widget](https://github.com/chakra-ui/chakra-ui/pull/10741) | 2026 | | [chekos/Datawrapper](https://github.com/chekos/Datawrapper) | [Add the `zoom` export parameter to the relevant method](https://github.com/chekos/Datawrapper/pull/13) | 2021 | | [crown-and-flint/open-film-database](https://gitlab.com/crown-and-flint/open-film-database) | [Add 3 Yashica film stocks](https://gitlab.com/crown-and-flint/open-film-database/-/merge_requests/2) | 2024 | | [crown-and-flint/open-film-database](https://gitlab.com/crown-and-flint/open-film-database) | [Add Ferrania P33](https://gitlab.com/crown-and-flint/open-film-database/-/merge_requests/3) | 2024 | | [crown-and-flint/open-film-database](https://gitlab.com/crown-and-flint/open-film-database) | [Add RETO film stocks](https://gitlab.com/crown-and-flint/open-film-database/-/merge_requests/5) | 2024 | | [crown-and-flint/open-film-database](https://gitlab.com/crown-and-flint/open-film-database) | [Update CANDIDO200 and CANDIDO400](https://gitlab.com/crown-and-flint/open-film-database/-/merge_requests/1) | 2024 | | [crown-and-flint/open-film-database](https://gitlab.com/crown-and-flint/open-film-database) | [Update dubblefilm film stocks](https://gitlab.com/crown-and-flint/open-film-database/-/merge_requests/6) | 2024 | | [crown-and-flint/open-film-database](https://gitlab.com/crown-and-flint/open-film-database) | [Update Kosmo Foto film stocks](https://gitlab.com/crown-and-flint/open-film-database/-/merge_requests/4) | 2024 | | [d3/d3-format](https://github.com/d3/d3-format) | [Add pt-PT locale](https://github.com/d3/d3-format/pull/108) | 2021 | | [datavisards/WebSeek](https://github.com/datavisards/WebSeek) | [Fix WebSeek GitHub URLs](https://github.com/datavisards/WebSeek/pull/3) | 2026 | | [deshaw/jupyterlab-execute-time](https://github.com/deshaw/jupyterlab-execute-time) | [Add CSS variables for background colors](https://github.com/deshaw/jupyterlab-execute-time/pull/126) | 2024 | | [DmytroLitvinov/awesome-flake8-extensions](https://github.com/DmytroLitvinov/awesome-flake8-extensions) | [Add flake8-import-conventions](https://github.com/DmytroLitvinov/awesome-flake8-extensions/pull/124) | 2023 | | [dssg-pt/covid19pt-data](https://github.com/dssg-pt/covid19pt-data) | [Adicionados os mapas de Portugal divididos por ARS e um tutorial.](https://github.com/dssg-pt/covid19pt-data/pull/15) | 2020 | | [dssg-pt/covid19pt-data](https://github.com/dssg-pt/covid19pt-data) | [Mapas atualizados sem erros nos 4 concelhos identificados.](https://github.com/dssg-pt/covid19pt-data/pull/27) | 2020 | | [dssg/aequitas](https://github.com/dssg/aequitas) | [Update project metadata for PyPI](https://github.com/dssg/aequitas/pull/220) | 2026 | | [dssg/aequitas](https://github.com/dssg/aequitas) | [Update visualizations](https://github.com/dssg/aequitas/pull/119) | 2022 | | [dustinspecker/awesome-eslint](https://github.com/dustinspecker/awesome-eslint) | [Add eslint-config-feedzai](https://github.com/dustinspecker/awesome-eslint/pull/205) | 2022 | | [enaqx/awesome-react](https://github.com/enaqx/awesome-react) | [Added some data visualization libraries](https://github.com/enaqx/awesome-react/pull/996) | 2019 | | [EugeneKay/git-jokes](https://github.com/EugeneKay/git-jokes) | [Added: COMMITment joke.](https://github.com/EugeneKay/git-jokes/pull/43) | 2018 | | [evilmartians/oklch-picker](https://github.com/evilmartians/oklch-picker) | [ARIA hide down SVG icon and elements](https://github.com/evilmartians/oklch-picker/pull/203) | 2026 | | [evilmartians/oklch-picker](https://github.com/evilmartians/oklch-picker) | [ARIA hide the 3D section when not visible and its elements](https://github.com/evilmartians/oklch-picker/pull/206) | 2026 | | [evilmartians/oklch-picker](https://github.com/evilmartians/oklch-picker) | [Fix the ARIA attribute on the GitHub link and hide its SVG icon from screen readers](https://github.com/evilmartians/oklch-picker/pull/201) | 2026 | | [farm-fe/farm-fe.github.io](https://github.com/farm-fe/farm-fe.github.io) | [fix: update the template used for Quick Start commands for `react`](https://github.com/farm-fe/farm-fe.github.io/pull/106) | 2024 | | [feedzai/AutoVizuA11y](https://github.com/feedzai/AutoVizuA11y) | [Add support for OpenAI-compatible API endpoints](https://github.com/feedzai/AutoVizuA11y/pull/60) | 2025 | | [feedzai/biy-paper](https://github.com/feedzai/biy-paper) | [Add alt text files for each chart](https://github.com/feedzai/biy-paper/pull/10) | 2026 | | [feedzai/biy-paper](https://github.com/feedzai/biy-paper) | [Add CITATION.cff](https://github.com/feedzai/biy-paper/pull/11) | 2026 | | [feedzai/biy-paper](https://github.com/feedzai/biy-paper) | [Add MAE charts for cluster and outlier counting](https://github.com/feedzai/biy-paper/pull/2) | 2025 | | [feedzai/biy-paper](https://github.com/feedzai/biy-paper) | [Add missing env var](https://github.com/feedzai/biy-paper/pull/8) | 2025 | | [feedzai/biy-paper](https://github.com/feedzai/biy-paper) | [Add the dataset files and paper links](https://github.com/feedzai/biy-paper/pull/5) | 2025 | | [feedzai/biy-paper](https://github.com/feedzai/biy-paper) | [Fix number formatting in alt text generation](https://github.com/feedzai/biy-paper/pull/7) | 2025 | | [feedzai/biy-paper](https://github.com/feedzai/biy-paper) | [Fix script for checking the status of OpenAI batches](https://github.com/feedzai/biy-paper/pull/9) | 2025 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Add Binder and PyPI badges, and update image URLs](https://github.com/feedzai/feedzai-altair-theme/pull/13) | 2022 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Add Changelog to `project_urls`](https://github.com/feedzai/feedzai-altair-theme/pull/15) | 2023 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Add CITATION.cff](https://github.com/feedzai/feedzai-altair-theme/pull/24) | 2026 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Add examples, types, and documentation](https://github.com/feedzai/feedzai-altair-theme/pull/4) | 2022 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Add GitHub Actions workflow to publish the package to PyPI](https://github.com/feedzai/feedzai-altair-theme/pull/9) | 2022 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Add license, copyright headers, and images](https://github.com/feedzai/feedzai-altair-theme/pull/7) | 2022 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Add package logo](https://github.com/feedzai/feedzai-altair-theme/pull/5) | 2022 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Add QA tools](https://github.com/feedzai/feedzai-altair-theme/pull/2) | 2022 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Add support for Altair 6 and test suite](https://github.com/feedzai/feedzai-altair-theme/pull/22) | 2026 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Add the boilerplate for a Python package](https://github.com/feedzai/feedzai-altair-theme/pull/1) | 2022 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Create the module with the Altair theme](https://github.com/feedzai/feedzai-altair-theme/pull/3) | 2022 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Document how to install the feedzai-altair-theme package in an environment without an Internet connection](https://github.com/feedzai/feedzai-altair-theme/pull/14) | 2022 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Fix Binder demo and add Colab badge](https://github.com/feedzai/feedzai-altair-theme/pull/18) | 2025 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Improve the GitHub Actions workflow after linting with zizmor and pinning versions with pinact](https://github.com/feedzai/feedzai-altair-theme/pull/23) | 2026 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Switch to uv for package management and Ruff for linting and formatting](https://github.com/feedzai/feedzai-altair-theme/pull/17) | 2025 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Update Altair to Altair 5.5.0](https://github.com/feedzai/feedzai-altair-theme/pull/19) | 2025 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Update classifiers](https://github.com/feedzai/feedzai-altair-theme/pull/8) | 2022 | | [feedzai/feedzai-altair-theme](https://github.com/feedzai/feedzai-altair-theme) | [Update uv config and bump mypy and Ruff](https://github.com/feedzai/feedzai-altair-theme/pull/25) | 2026 | | [feedzai/js-utilities](https://github.com/feedzai/js-utilities) | [fix(docs): fix typos and bad syntax in comments and documentation pages](https://github.com/feedzai/js-utilities/pull/5) | 2026 | | [feedzai/prettier-config](https://github.com/feedzai/prettier-config) | [Add package to share Prettier configuration](https://github.com/feedzai/prettier-config/pull/2) | 2022 | | [FogosPT/fogospt](https://github.com/FogosPT/fogospt) | [Document the requirements for running the project locally and add the missing license text](https://github.com/FogosPT/fogospt/pull/113) | 2025 | | [FogosPT/fogospt](https://github.com/FogosPT/fogospt) | [Standardize the margin of Leaflet map controls](https://github.com/FogosPT/fogospt/pull/110) | 2024 | | [hexpm/hexpm](https://github.com/hexpm/hexpm) | [Fix Bluesky logo](https://github.com/hexpm/hexpm/pull/1595) | 2026 | | [home-assistant/frontend](https://github.com/home-assistant/frontend) | [Fix focus ring for HaFilterChip](https://github.com/home-assistant/frontend/pull/51657) | 2026 | | [home-assistant/frontend](https://github.com/home-assistant/frontend) | [Fix sidebar layout to ensure all options are visible on mobile browsers](https://github.com/home-assistant/frontend/pull/51672) | 2026 | | [jawah/kiss-headers](https://github.com/jawah/kiss-headers) | [📝 Update GitHub-related links](https://github.com/jawah/kiss-headers/pull/55) | 2024 | | [jupyterlab-contrib/jupyter-ui-toolkit](https://github.com/jupyterlab-contrib/jupyter-ui-toolkit) | [Fix broken example link on Storybook](https://github.com/jupyterlab-contrib/jupyter-ui-toolkit/pull/135) | 2024 | | [jupyterlab/extension-cookiecutter-ts](https://github.com/jupyterlab/extension-cookiecutter-ts) | [Add `_version.py` to one of the `clean` scripts](https://github.com/jupyterlab/extension-cookiecutter-ts/pull/267) | 2022 | | [jupyterlab/extension-cookiecutter-ts](https://github.com/jupyterlab/extension-cookiecutter-ts) | [Add `yarn-error.log` to `.gitignore`](https://github.com/jupyterlab/extension-cookiecutter-ts/pull/264) | 2022 | | [jupyterlab/extension-cookiecutter-ts](https://github.com/jupyterlab/extension-cookiecutter-ts) | [Relax `.prettierignore` to format the root `package.json` as well](https://github.com/jupyterlab/extension-cookiecutter-ts/pull/256) | 2023 | | [jupyterlab/extension-examples](https://github.com/jupyterlab/extension-examples) | [Document the command to launch JupyterLab and watch for changes to the backend code for server extensions](https://github.com/jupyterlab/extension-examples/pull/274) | 2024 | | [jupyterlab/extension-template](https://github.com/jupyterlab/extension-template) | [Add Trove/PyPI classifiers for MIME renderers and themes](https://github.com/jupyterlab/extension-template/pull/89) | 2024 | | [jupyterlab/extension-template](https://github.com/jupyterlab/extension-template) | [Change `npm-run-all` to `npm-run-all2`](https://github.com/jupyterlab/extension-template/pull/91) | 2024 | | [jupyterlab/extension-template](https://github.com/jupyterlab/extension-template) | [Include `"keywords"` in the hatch-nodejs-version metadata hook plugin configuration](https://github.com/jupyterlab/extension-template/pull/85) | 2024 | | [jupyterlab/extension-template](https://github.com/jupyterlab/extension-template) | [Normalize `repository` URL trailing slash](https://github.com/jupyterlab/extension-template/pull/75) | 2024 | | [jupyterlab/extension-template](https://github.com/jupyterlab/extension-template) | [Update `jupyter_server` dependency specifier and follow `jupyterlab`](https://github.com/jupyterlab/extension-template/pull/87) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Add a command and instructions to serve documentation files locally](https://github.com/jupyterlab/jupyterlab/pull/16600) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Add the `scaleFactor` value from the embed options when creating the PNG representation for a Vega-based chart](https://github.com/jupyterlab/jupyterlab/pull/13610) | 2022 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Add untitled files to `.gitignore`](https://github.com/jupyterlab/jupyterlab/pull/16595) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Adjust the alignment and cursor of the running session icons in the status bar](https://github.com/jupyterlab/jupyterlab/pull/16748) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Adopt a theme CSS variable for the "expand a collapsed cell" button shadow](https://github.com/jupyterlab/jupyterlab/pull/16653) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Adopt the `--jp-border-radius` CSS variable in missing input fields](https://github.com/jupyterlab/jupyterlab/pull/16568) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Adopt theme CSS variables for generic input fields](https://github.com/jupyterlab/jupyterlab/pull/16548) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Clean up SVG icons from `@jupyterlab/ui-components` and update SVGO](https://github.com/jupyterlab/jupyterlab/pull/16678) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Convert `@jupyterlab/completer` type colors to theme CSS variables](https://github.com/jupyterlab/jupyterlab/pull/16656) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Fix lack of color contrast for the project version and license selected on the Licenses page](https://github.com/jupyterlab/jupyterlab/pull/16582) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Fix license table CSS selector to apply the selected row styles](https://github.com/jupyterlab/jupyterlab/pull/16547) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Fix the identifier to download licenses in JSON format](https://github.com/jupyterlab/jupyterlab/pull/16584) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Move `@jupyterlab/debugger` icons to `@jupyterlab/ui-components`](https://github.com/jupyterlab/jupyterlab/pull/16745) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Set the background color for the hover state of the New Launcher button](https://github.com/jupyterlab/jupyterlab/pull/16551) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Standardize Contextual Help placeholder according to TOC](https://github.com/jupyterlab/jupyterlab/pull/16572) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Standardize dialogs to shut down all kernels](https://github.com/jupyterlab/jupyterlab/pull/16629) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Standardize Property Inspector placeholder according to TOC](https://github.com/jupyterlab/jupyterlab/pull/16566) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Standardize the "go-to-line" input field using theme CSS variables](https://github.com/jupyterlab/jupyterlab/pull/16604) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Standardize the button role and label for single, dismissal buttons in dialogs](https://github.com/jupyterlab/jupyterlab/pull/16622) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Update JupyterLab wordmark color](https://github.com/jupyterlab/jupyterlab/pull/16567) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Update the copyright year in About JupyterLab and LICENSE](https://github.com/jupyterlab/jupyterlab/pull/16643) | 2024 | | [jupyterlab/jupyterlab](https://github.com/jupyterlab/jupyterlab) | [Update the CSS variable used for notebook cell shadows](https://github.com/jupyterlab/jupyterlab/pull/16546) | 2024 | | [kermanx/reactive-vscode](https://github.com/kermanx/reactive-vscode) | [fix(docs): fix the documentation command](https://github.com/kermanx/reactive-vscode/pull/38) | 2026 | | [kermanx/reactive-vscode](https://github.com/kermanx/reactive-vscode) | [fix(docs): set width and height for the reactive-vscode logo icon to display it](https://github.com/kermanx/reactive-vscode/pull/39) | 2026 | | [kermanx/reactive-vscode](https://github.com/kermanx/reactive-vscode) | [fix: update the deprecated VS Marketplace Shields.io badges to Badgen ones](https://github.com/kermanx/reactive-vscode/pull/40) | 2026 | | [lirantal/pypi-security-best-practices](https://github.com/lirantal/pypi-security-best-practices) | [Fix `uv.toml`/`pyproject.toml` config for `only-binary`](https://github.com/lirantal/pypi-security-best-practices/pull/3) | 2026 | | [marmelo/tech-companies-in-portugal](https://github.com/marmelo/tech-companies-in-portugal) | [Add Ethiack to Security and sort it](https://github.com/marmelo/tech-companies-in-portugal/pull/399) | 2024 | | [marmelo/tech-companies-in-portugal](https://github.com/marmelo/tech-companies-in-portugal) | [Add Marmalade Game Studio and Redcatpig](https://github.com/marmelo/tech-companies-in-portugal/pull/401) | 2024 | | [marmelo/tech-companies-in-portugal](https://github.com/marmelo/tech-companies-in-portugal) | [Add Motion and sort Enterprise Software section](https://github.com/marmelo/tech-companies-in-portugal/pull/462) | 2026 | | [marmelo/tech-companies-in-portugal](https://github.com/marmelo/tech-companies-in-portugal) | [Add Revolut and Talkdesk GitHub accounts](https://github.com/marmelo/tech-companies-in-portugal/pull/392) | 2024 | | [marmelo/tech-companies-in-portugal](https://github.com/marmelo/tech-companies-in-portugal) | [Add Synthetic Users](https://github.com/marmelo/tech-companies-in-portugal/pull/420) | 2024 | | [marmelo/tech-companies-in-portugal](https://github.com/marmelo/tech-companies-in-portugal) | [Add Unbabel and Salsify GitHub accounts](https://github.com/marmelo/tech-companies-in-portugal/pull/319) | 2022 | | [marmelo/tech-companies-in-portugal](https://github.com/marmelo/tech-companies-in-portugal) | [Add Vizzuality, Codacy, and Nmbrs GitHub accounts](https://github.com/marmelo/tech-companies-in-portugal/pull/395) | 2024 | | [marmelo/tech-companies-in-portugal](https://github.com/marmelo/tech-companies-in-portugal) | [Add YLD, PagerDuty, and Zendesk GitHub accounts](https://github.com/marmelo/tech-companies-in-portugal/pull/461) | 2026 | | [marmelo/tech-companies-in-portugal](https://github.com/marmelo/tech-companies-in-portugal) | [Add Zego](https://github.com/marmelo/tech-companies-in-portugal/pull/463) | 2026 | | [matplotlib/matplotblog](https://github.com/matplotlib/matplotblog) | [Added new blog post on stellar charts](https://github.com/matplotlib/matplotblog/pull/46) | 2021 | | [memcached/memcached.github.io](https://github.com/memcached/memcached.github.io) | [Update the logo in the navbar and update the manifest](https://github.com/memcached/memcached.github.io/pull/15) | 2026 | | [miguelsolorio/vscode-symbols](https://github.com/miguelsolorio/vscode-symbols) | [feat: associate `setup.cfg` to Python](https://github.com/miguelsolorio/vscode-symbols/pull/65) | 2023 | | [nanxiaobei/hugo-paper](https://github.com/nanxiaobei/hugo-paper) | [Add i18n support for Portuguese](https://github.com/nanxiaobei/hugo-paper/pull/90) | 2021 | | [npmx-dev/npmx.dev](https://github.com/npmx-dev/npmx.dev) | [feat(i18n): add pt-PT locale](https://github.com/npmx-dev/npmx.dev/pull/2639) | 2026 | | [npmx-dev/npmx.dev](https://github.com/npmx-dev/npmx.dev) | [feat(i18n): update pt-BR locale](https://github.com/npmx-dev/npmx.dev/pull/2625) | 2026 | | [npmx-dev/npmx.dev](https://github.com/npmx-dev/npmx.dev) | [fix(i18n): translate missing pt-PT strings for leaderboard and likes](https://github.com/npmx-dev/npmx.dev/pull/2682) | 2026 | | [nrjdalal/gitpick](https://github.com/nrjdalal/gitpick) | [feat: add support for Codeberg repos](https://github.com/nrjdalal/gitpick/pull/62) | 2026 | | [nunomaduro/nunomaduro.com](https://github.com/nunomaduro/nunomaduro.com) | [Fix extra space in one of the blog posts](https://github.com/nunomaduro/nunomaduro.com/pull/31) | 2023 | | [omoured/Alt4Blind](https://huggingface.co/datasets/omoured/Alt4Blind) | [Fix reference title](https://huggingface.co/datasets/omoured/Alt4Blind/discussions/3) | 2025 | | [onu-ui/onu-ui](https://github.com/onu-ui/onu-ui) | [feat(i18n): add pt locale](https://github.com/onu-ui/onu-ui/pull/127) | 2023 | | [onu-ui/onu-ui](https://github.com/onu-ui/onu-ui) | [fix(docs): fix typo in Message](https://github.com/onu-ui/onu-ui/pull/132) | 2023 | | [opengeos/anymap](https://github.com/opengeos/anymap) | [Fix Potree Examples link](https://github.com/opengeos/anymap/pull/81) | 2025 | | [pdm-project/pdm-expansions](https://github.com/pdm-project/pdm-expansions) | [Add "Python's Daring Moves" and update website](https://github.com/pdm-project/pdm-expansions/pull/24) | 2024 | | [pydantic/pydantic](https://github.com/pydantic/pydantic) | [Fix indentation of first note on mypy documentation page](https://github.com/pydantic/pydantic/pull/10405) | 2024 | | [python-poetry/tomlkit](https://github.com/python-poetry/tomlkit) | [Add types to the `append()` methods of the `Table` and `InlineTable` classes](https://github.com/python-poetry/tomlkit/pull/282) | 2023 | | [saadeghi/daisyui](https://github.com/saadeghi/daisyui) | [fix(docs): typos in the Portuguese translation](https://github.com/saadeghi/daisyui/pull/1482) | 2023 | | [spences10/sveltekit-embed](https://github.com/spences10/sveltekit-embed) | [feat: add support for Relive](https://github.com/spences10/sveltekit-embed/pull/428) | 2023 | | [spences10/sveltekit-embed](https://github.com/spences10/sveltekit-embed) | [fix(docs): add Zencastr to Available Components List](https://github.com/spences10/sveltekit-embed/pull/429) | 2023 | | [spences10/sveltekit-embed](https://github.com/spences10/sveltekit-embed) | [fix(docs): update README documentation for local development](https://github.com/spences10/sveltekit-embed/pull/430) | 2023 | | [squidfunk/mkdocs-material](https://github.com/squidfunk/mkdocs-material) | [Fetch and show the latest version for GitLab repositories](https://github.com/squidfunk/mkdocs-material/pull/7418) | 2024 | | [svg/svgo](https://github.com/svg/svgo) | [chore: export the `Output` type](https://github.com/svg/svgo/pull/2076) | 2024 | | [textlint/textlint](https://github.com/textlint/textlint) | [fix(docs): remove Lato from the documentation website](https://github.com/textlint/textlint/pull/1407) | 2024 | | [themesberg/flowbite](https://github.com/themesberg/flowbite) | [docs: change `mr-2` to `mr-3` on one of the loader buttons for consistency](https://github.com/themesberg/flowbite/pull/379) | 2023 | | [themesberg/flowbite-vue](https://github.com/themesberg/flowbite-vue) | [docs: add missing Button import](https://github.com/themesberg/flowbite-vue/pull/124) | 2022 | | [tiged/tiged](https://github.com/tiged/tiged) | [feat: add support for Codeberg](https://github.com/tiged/tiged/pull/97) | 2024 | | [trycua/cua](https://github.com/trycua/cua) | [Fix the links to Claude's documentation in the documentation](https://github.com/trycua/cua/pull/862) | 2026 | | [unconventionaldotdev/unbeheader](https://github.com/unconventionaldotdev/unbeheader) | [Fix supported file types URL](https://github.com/unconventionaldotdev/unbeheader/pull/19) | 2024 | | [vega/altair](https://github.com/vega/altair) | [fix(types): Change the height and width types of `alt.Chart()` from `int` to `float`](https://github.com/vega/altair/pull/3888) | 2025 | | [vega/vega-embed](https://github.com/vega/vega-embed) | [feat: update the `scaleFactor` property to allow setting different values](https://github.com/vega/vega-embed/pull/1051) | 2023 | | [vega/vega-embed](https://github.com/vega/vega-embed) | [fix(docs): update `padding` type and mention the Yarn version](https://github.com/vega/vega-embed/pull/1050) | 2023 | | [version-fox/vfox-php](https://github.com/version-fox/vfox-php) | [Fix typo in one of the vfox commands and other minor ones](https://github.com/version-fox/vfox-php/pull/7) | 2024 | | [web-infra-dev/rspress](https://github.com/web-infra-dev/rspress) | [fix(theme-default): Fix collapsed space between last updated text and time](https://github.com/web-infra-dev/rspress/pull/648) | 2024 | | [wesbos/awesome-uses](https://github.com/wesbos/awesome-uses) | [Add João Palmeiro](https://github.com/wesbos/awesome-uses/pull/2105) | 2026 | | [woltapp/wolt-python-package-cookiecutter](https://github.com/woltapp/wolt-python-package-cookiecutter) | [Update `actions/setup-python` version](https://github.com/woltapp/wolt-python-package-cookiecutter/pull/30) | 2023 | | [xdesro/personalsit.es](https://github.com/xdesro/personalsit.es) | [Add joao.town](https://github.com/xdesro/personalsit.es/pull/1298) | 2026 | | [yeonjuan/html-eslint](https://github.com/yeonjuan/html-eslint) | [fix(docs): change `indent` to `@html-eslint/indent` to be clearer](https://github.com/yeonjuan/html-eslint/pull/123) | 2023 | | [yeonjuan/html-eslint](https://github.com/yeonjuan/html-eslint) | [fix(docs): swap the correct and incorrect examples for `require-meta-viewport`](https://github.com/yeonjuan/html-eslint/pull/122) | 2023 | | [zengxingchen/LLM-Visualization-Paper-List](https://github.com/zengxingchen/LLM-Visualization-Paper-List) | [Add Benchmark It Yourself (BIY): Preparing a Dataset and Benchmarking AI Models for Scatterplot-Related Tasks paper](https://github.com/zengxingchen/LLM-Visualization-Paper-List/pull/6) | 2026 | | [zengxingchen/LLM-Visualization-Paper-List](https://github.com/zengxingchen/LLM-Visualization-Paper-List) | [Improve banner alt text](https://github.com/zengxingchen/LLM-Visualization-Paper-List/pull/8) | 2026 | --- # João Palmeiro - Pronouns: he/him - Location: Porto, Portugal (UTC+00:00 or +01:00) - Contact: joaopalmeiro@proton.me ## Profile A mix of data visualization practitioner, researcher, and software engineer. Experienced in developing interfaces and tools from ideation to production code, including project management. Used to working on accessibility and with AI/ML. Mainly familiar with the Python ecosystem and web technologies like React. Open to contributing where most needed and using any tech stack. ## Experience ### Data Visualization Engineer at Feedzai - Since Apr 2024 - Public highlights: - [Benchmark It Yourself (BIY): Preparing a Dataset and Benchmarking AI Models for Scatterplot-Related Tasks](https://arxiv.org/abs/2510.06071) - [Here and Now: Reusing Code at Feedzai with JupyterLab Snippets](https://medium.com/feedzaitech/here-and-now-reusing-code-at-feedzai-with-jupyterlab-snippets-ff3b8d880e50) ### Full-Stack Developer at Jungle - Jan 2023 - Apr 2024 - Public highlights: - [Parallel Coordinates module](https://www.linkedin.com/posts/jungle.ai_new-year-new-canopy-activity-7155942462610419712-HzH-/) ### Data Visualization Engineer at Feedzai - Mar 2021 - Jan 2023 - Public highlights: - [Data+Shift: Supporting visual investigation of data distribution shifts by data scientists](https://arxiv.org/abs/2204.14025) - [A case study on implementing screen reader accessibility in dynamic visualizations](https://diglib.eg.org/handle/10.2312/evp20221134) - [Analyzing Data Drift: How We Designed Visualizations to Support Feature Investigation](https://medium.com/feedzaitech/analyzing-data-drift-how-we-designed-visualizations-to-support-feature-investigation-e408d4de7e9f) - [Styling Altair Charts with the feedzai-altair-theme](https://medium.com/feedzaitech/styling-altair-charts-with-the-feedzai-altair-theme-f3dcd27b3b68) ### Research Intern at Feedzai - Nov 2019 - Feb 2021 - Public highlights: - [MevaL: A Visual Machine Learning Model Evaluation Tool for Financial Crime Detection](https://run.unl.pt/entities/publication/d2eae352-67e1-449b-9e2d-0cb714a0e898) ### Engineering Intern at Feedzai - Jul 2019 - Aug 2019 - Public highlights: - [Plotting the first point of the Feedzai Charting Library.](https://medium.com/feedzaitech/plotting-the-first-point-of-the-feedzai-charting-library-50f21b4a5e01) ## Find out more - Full CV: - [LinkedIn](https://www.linkedin.com/in/joaopalmeiro/) - [149 open source contributions](https://joao.town/contribs/) - Projects: - [GitHub](https://github.com/joaopalmeiro) - [GitLab](https://gitlab.com/joaommpalmeiro) - [Codeberg](https://codeberg.org/joaopalmeiro) - [Hugging Face](https://huggingface.co/joaompalmeiro) - [Mastodon](https://ciberlandia.pt/@joaopalmeiro) --- # Links - [Bluesky](https://bsky.app/profile/joaopalmeiro.bsky.social) - [Hex](https://hex.pm/users/palmeiro) - [Letterboxd](https://letterboxd.com/joaopalmeiro/) - [npm](https://www.npmjs.com/~joaopalmeiro) - [PSNProfiles](https://psnprofiles.com/palmeirox) - [PyPI](https://pypi.org/user/joaopalmeiro/) - [TMDB](https://www.themoviedb.org/u/joaopalmeiro) --- # Uses ## Hardware - Headphones: Sony ULT WEAR - Laptop: MacBook Air (M2, 2022) ## Software - Code editor: Visual Studio Code - Git client: GitHub Desktop - Java version manager: SDKMAN! - Media player: IINA - Node.js version manager: fnm - Office suite: LibreOffice - Offline navigation: Organic Maps - Online navigation: Google Maps - PNG optimizer: Oxipng - Podcast player: Pocket Casts - Search engine: Kagi - Terminal: Ghostty - Terminal prompt: Starship - Translator and proofreader: Kagi Translate - VPN: Proton VPN - Window manager: Rectangle