<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>🍋 Igor Vieira</title><description>Notes on technology, web development, and the craft of software engineering</description><link>https://igorprvieira.com/</link><item><title>Building a To-Do List with Vue.js and vue-cli - Part I</title><link>https://igorprvieira.com/blog/2017-05-01-vamos-falar-de-vuejs/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2017-05-01-vamos-falar-de-vuejs/</guid><description>Start a Vue.js to-do list with vue-cli and webpack: render tasks with v-for, add them with v-model and @submit.prevent, remove them with splice.</description><pubDate>Sun, 30 Apr 2017 00:00:00 GMT</pubDate></item><item><title>Simple e2e Testing in Vue.js - Part II</title><link>https://igorprvieira.com/blog/2017-05-02-simples-test-e2e-em-vuejs/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2017-05-02-simples-test-e2e-em-vuejs/</guid><description>Write a first end-to-end test for a Vue.js to-do list with Nightwatch and Selenium: check the title, add a task and remove it. Part II.</description><pubDate>Mon, 01 May 2017 00:00:00 GMT</pubDate></item><item><title>Connecting a Vue.js To-Do App to a REST API with vue-router and vue-resource - Part III</title><link>https://igorprvieira.com/blog/2017-06-14-back-to-vue/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2017-06-14-back-to-vue/</guid><description>Add vue-router and vue-resource to a Vue.js to-do app, create a TaskService class, and list and save tasks from a Node and MongoDB API. Part III.</description><pubDate>Wed, 14 Jun 2017 00:00:00 GMT</pubDate></item><item><title>Deleting and Editing Tasks in a Vue.js App with vue-router - Part IV</title><link>https://igorprvieira.com/blog/2017-06-15-perto-do-fim/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2017-06-15-perto-do-fim/</guid><description>Add delete and edit to a Vue.js to-do app: a deleteTask service call, an Info view on /info/:id, getTaskById and an update form. Part IV.</description><pubDate>Thu, 15 Jun 2017 00:00:00 GMT</pubDate></item><item><title>Adding Firebase Comments to a Vue.js App with VueFire - Part V</title><link>https://igorprvieira.com/blog/2017-07-04-firebase/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2017-07-04-firebase/</guid><description>Add per-task comments to a Vue.js to-do app with Firebase Realtime Database and VueFire: create a project, a service, and add and remove comments.</description><pubDate>Tue, 04 Jul 2017 00:00:00 GMT</pubDate></item><item><title>Linting a Vue.js App with the Airbnb ESLint Config - Part VI</title><link>https://igorprvieira.com/blog/2017-07-15-airbnb/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2017-07-15-airbnb/</guid><description>Add eslint-config-airbnb to a Vue.js project, adjust the rules in .eslintrc.js and fix the reported errors with lint:fix. Part VI of the Vue.js series.</description><pubDate>Sat, 15 Jul 2017 00:00:00 GMT</pubDate></item><item><title>E2E Tests to Verify Our Application - Part VII</title><link>https://igorprvieira.com/blog/2017-07-18-e2e-test-all-application/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2017-07-18-e2e-test-all-application/</guid><description>Nightwatch end-to-end tests for a Vue.js to-do app: one spec that adds a task and one that edits it. Part VII of the Vue.js series.</description><pubDate>Tue, 18 Jul 2017 00:00:00 GMT</pubDate></item><item><title>Back to Basics: Testing a React To-Do List with React Testing Library</title><link>https://igorprvieira.com/blog/2021-03-10-back-to-basics/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2021-03-10-back-to-basics/</guid><description>Three simple React Testing Library tests for a to-do list: adding items, counting list items and removing an item, using data-testid and user-event.</description><pubDate>Wed, 10 Mar 2021 00:00:00 GMT</pubDate></item><item><title>Vite Setup Config - Part 1</title><link>https://igorprvieira.com/blog/2023-03-29-vite-setup-config/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-03-29-vite-setup-config/</guid><description>Vite setup with Eslint, Prettier, Storybook, Styled-components, Jest and Playwright</description><pubDate>Wed, 29 Mar 2023 00:00:00 GMT</pubDate></item><item><title>Vite Setup Eslint and Prettier - Part 2</title><link>https://igorprvieira.com/blog/2023-03-30-vite-setup-eslint-prettier/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-03-30-vite-setup-eslint-prettier/</guid><description>ESLint and Prettier config for a Vite React TypeScript project: React Hooks rules, import ordering, VS Code fix on save and lint scripts. Part 2.</description><pubDate>Thu, 30 Mar 2023 00:00:00 GMT</pubDate></item><item><title>Vite Setup with Storybook - Part 3</title><link>https://igorprvieira.com/blog/2023-03-31-vite-setup-storybook/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-03-31-vite-setup-storybook/</guid><description>Add Storybook to a Vite React TypeScript project with the Vite builder, a stories.tsx file per component and path aliases in viteFinal. Part 3.</description><pubDate>Fri, 31 Mar 2023 00:00:00 GMT</pubDate></item><item><title>Vite Setup with Styled-Components - Part 4</title><link>https://igorprvieira.com/blog/2023-04-01-vite-setup-styled-components/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-04-01-vite-setup-styled-components/</guid><description>Add styled-components to a Vite React TypeScript app with a global reset, a typed theme and a Storybook ThemeProvider decorator. Part 4.</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate></item><item><title>How to deploy pocketbase with Fly.io</title><link>https://igorprvieira.com/blog/2023-04-02-pocketbase/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-04-02-pocketbase/</guid><description>Run PocketBase in Docker, then deploy it to Fly.io with fly launch, a persistent pb_data volume and fly deploy.</description><pubDate>Tue, 04 Apr 2023 00:00:00 GMT</pubDate></item><item><title>Vite Setup with Jest - Part 5</title><link>https://igorprvieira.com/blog/2023-04-02-vite-setup-jest/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-04-02-vite-setup-jest/</guid><description>Configure Jest and React Testing Library in a Vite React TypeScript project with Babel, jsdom and a styled-components test wrapper. Part 5.</description><pubDate>Sun, 02 Apr 2023 00:00:00 GMT</pubDate></item><item><title>Vite Setup with Playwright - Part 6</title><link>https://igorprvieira.com/blog/2023-04-03-vite-setup-playwright/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-04-03-vite-setup-playwright/</guid><description>Add Playwright end-to-end tests to a Vite React app and organize them with a page object class. Part 6 of the Vite setup series.</description><pubDate>Mon, 03 Apr 2023 00:00:00 GMT</pubDate></item><item><title>Rust API - Health Checker - Part I</title><link>https://igorprvieira.com/blog/2023-04-14-building-rust-api-crud/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-04-14-building-rust-api-crud/</guid><description>Start a Rust REST API with Cargo and Actix Web: SQLx, serde and chrono dependencies and a GET /api/healthchecker route. Part I of the Rust API series.</description><pubDate>Fri, 14 Apr 2023 00:00:00 GMT</pubDate></item><item><title>Rust API - Database and Migrations - Part II</title><link>https://igorprvieira.com/blog/2023-04-19-database-and-migrations/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-04-19-database-and-migrations/</guid><description>Run Postgres and pgAdmin with Docker Compose and create a tasks table with sqlx-cli migrations for a Rust API. Part II of the Rust API series.</description><pubDate>Sat, 22 Apr 2023 00:00:00 GMT</pubDate></item><item><title>Rust API - Adding Task Creation Route - Part III</title><link>https://igorprvieira.com/blog/2023-05-31-add-create-router/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-05-31-add-create-router/</guid><description>Connect an Actix Web API to Postgres with a SQLx PgPool and add a POST /api/task route that inserts a task. Part III of the Rust API series.</description><pubDate>Wed, 31 May 2023 00:00:00 GMT</pubDate></item><item><title>Rust API - Creating the Get All Route with Rust - Part IV</title><link>https://igorprvieira.com/blog/2023-06-08-get-all-rust/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-06-08-get-all-rust/</guid><description>Add a paginated GET /api/tasks route to an Actix Web and SQLx API using page and limit query parameters. Part IV of the Rust API series.</description><pubDate>Thu, 08 Jun 2023 00:00:00 GMT</pubDate></item><item><title>Rust API - Creating the Get by ID Route with Rust - Part V</title><link>https://igorprvieira.com/blog/2023-06-09-get-by-id-rust/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-06-09-get-by-id-rust/</guid><description>Add a GET /api/tasks/{id} route to an Actix Web API that reads a UUID from the path and fetches one task with SQLx. Part V of the Rust API series.</description><pubDate>Fri, 09 Jun 2023 00:00:00 GMT</pubDate></item><item><title>Rust API - Creating the Delete by ID Route with Rust - Part VI</title><link>https://igorprvieira.com/blog/2023-06-10-delete-by-id-rust/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-06-10-delete-by-id-rust/</guid><description>Add a DELETE /api/tasks/{id} route to an Actix Web and SQLx API that returns 204 No Content. Part VI of the Rust API series.</description><pubDate>Sat, 10 Jun 2023 00:00:00 GMT</pubDate></item><item><title>Rust API - Creating the Update by ID Route with Rust - Part VII</title><link>https://igorprvieira.com/blog/2023-06-11-update-by-id-rust/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-06-11-update-by-id-rust/</guid><description>Add a PATCH /api/tasks/{id} route to an Actix Web and SQLx API, updating only the fields sent in the body. Part VII of the Rust API series.</description><pubDate>Sun, 11 Jun 2023 00:00:00 GMT</pubDate></item><item><title>Rust API - Adding Logs with Rust - Part VIII</title><link>https://igorprvieira.com/blog/2023-06-12-logs-rust/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2023-06-12-logs-rust/</guid><description>Add request logging to an Actix Web API with the Logger middleware and env_logger, with RUST_LOG set to actix_web=info. Part VIII of the Rust API series.</description><pubDate>Mon, 12 Jun 2023 00:00:00 GMT</pubDate></item><item><title>Restarting Looktme, a Side Project with React, Vite, Tailwind and TypeScript</title><link>https://igorprvieira.com/blog/2024-03-20-looktme-project/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2024-03-20-looktme-project/</guid><description>Restarting Looktme, a side project that creates social media posts for you, built with React, Vite, Tailwind and TypeScript.</description><pubDate>Wed, 20 Mar 2024 00:00:00 GMT</pubDate></item><item><title>QRCode Generator in Rust</title><link>https://igorprvieira.com/blog/2024-04-02-qrcode-generator/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2024-04-02-qrcode-generator/</guid><description>Build a terminal QR code generator in Rust with the qrcode crate: read text from stdin, confirm, and render the code as Unicode characters.</description><pubDate>Tue, 02 Apr 2024 00:00:00 GMT</pubDate></item><item><title>Zipping a Directory in Rust with the zip and walkdir Crates</title><link>https://igorprvieira.com/blog/2024-04-16-rust-compressor/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2024-04-16-rust-compressor/</guid><description>A small Rust CLI that asks for a folder path and output name, walks the directory with walkdir and writes every file into a ZIP archive.</description><pubDate>Tue, 16 Apr 2024 00:00:00 GMT</pubDate></item><item><title>Make Peace with My Bias Against AI</title><link>https://igorprvieira.com/blog/2025-010-make-peace-with-my-bias-against-ai/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2025-010-make-peace-with-my-bias-against-ai/</guid><description>A skeptic&apos;s notes on becoming a heavy user of AI tools at work and on Solo, and using the saved time for Rust, math, reading and family.</description><pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Okay, I Was Wrong: Rethinking How I Use AI on Complex Tasks</title><link>https://igorprvieira.com/blog/2025-010-okay-i-was-wrong/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2025-010-okay-i-was-wrong/</guid><description>Notes after spending 14 hours on refactoring tasks I expected to be simple, and the questions it raised about AI tools, real productivity and cost.</description><pubDate>Mon, 20 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Building Solo: My Own HTTP Client in Rust and Tauri</title><link>https://igorprvieira.com/blog/2025-06-21-solo/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2025-06-21-solo/</guid><description>Why I started Solo, an HTTP client built with Rust and Tauri 2, after Insomnia logins and updates kept interrupting my API debugging.</description><pubDate>Sat, 21 Jun 2025 00:00:00 GMT</pubDate></item><item><title>How I made data tables actually usable on Mobile</title><link>https://igorprvieira.com/blog/2025-12-26-how-i-made-data-tables-actually-usable-on-mobile/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2025-12-26-how-i-made-data-tables-actually-usable-on-mobile/</guid><description>Practical UX improvements for tables and tabs on small screens</description><pubDate>Fri, 26 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Responsive Container Heights: Why max() Beats calc() for Scroll Control</title><link>https://igorprvieira.com/blog/2025-12-30-responsive-container-heights/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2025-12-30-responsive-container-heights/</guid><description>Why min-height: max(100vh, 1030px) beats calc(100vh + 300px) for pages with absolutely positioned content: scroll on small screens, none on large ones.</description><pubDate>Mon, 29 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Thinking in match: Applying Rust’s Type-Driven Branching Model in TypeScript</title><link>https://igorprvieira.com/blog/2026-01-03-thinking-in-match-applying-rusts-type-driven-branching-model-in-typescript/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2026-01-03-thinking-in-match-applying-rusts-type-driven-branching-model-in-typescript/</guid><description>How to get Rust match-style exhaustive branching in TypeScript with union types, Record maps, switch with a never check, and discriminated unions.</description><pubDate>Sat, 03 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Basic ways to protect yourself from AI bot attacks</title><link>https://igorprvieira.com/blog/2026-02-02-basic-ways-to-protect-yourself-from-ai-bot-attacks/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2026-02-02-basic-ways-to-protect-yourself-from-ai-bot-attacks/</guid><description>A real-world account and a practical, layered guide to reducing risks against increasingly sophisticated automated attacks powered by AI.</description><pubDate>Mon, 02 Feb 2026 00:00:00 GMT</pubDate></item><item><title>[pt-BR] - Formas básicas de se proteger de ataques de bots de AI</title><link>https://igorprvieira.com/blog/2026-02-02-formas-basicas-de-se-proteger-de-ataques-de-bots-de-ai/</link><guid isPermaLink="true">https://igorprvieira.com/blog/2026-02-02-formas-basicas-de-se-proteger-de-ataques-de-bots-de-ai/</guid><description>Um relato real e um guia prático, em camadas, para reduzir riscos frente a ataques automatizados cada vez mais sofisticados impulsionados por AI.</description><pubDate>Mon, 02 Feb 2026 00:00:00 GMT</pubDate></item><item><title>var, let and const in JavaScript: Scope and Reassignment with Examples</title><link>https://igorprvieira.com/blog/a-new-step/</link><guid isPermaLink="true">https://igorprvieira.com/blog/a-new-step/</guid><description>The difference between var, let and const in JavaScript, with examples of block scope, a ReferenceError, and why a const array can still change.</description><pubDate>Sun, 10 May 2015 00:00:00 GMT</pubDate></item><item><title>Deploying a Node.js ES2015 App with Babel and Express to Heroku</title><link>https://igorprvieira.com/blog/nodejs-es2015-heroku/</link><guid isPermaLink="true">https://igorprvieira.com/blog/nodejs-es2015-heroku/</guid><description>Write an Express app with ES2015 imports, run it with babel-node, and deploy it to Heroku with a Procfile and git push heroku master.</description><pubDate>Tue, 22 Nov 2016 00:00:00 GMT</pubDate></item><item><title>JavaScript Arrow Functions: Implicit Return and the Undefined Trap</title><link>https://igorprvieira.com/blog/talk-about-arrow-function-again/</link><guid isPermaLink="true">https://igorprvieira.com/blog/talk-about-arrow-function-again/</guid><description>How JavaScript arrow functions return values: one-line implicit return, why a block body without return gives undefined, and arrow methods in objects.</description><pubDate>Sun, 10 May 2015 00:00:00 GMT</pubDate></item></channel></rss>