Davi Aguiar

Product-Minded.

Software Engineer.

Not just
writing code.
Building
products.

The difference is not the language or the framework. It is what gets decided before the first line, and what gets automated after the last one.

MCP workflows
Custom AI skills
Automated pipelines
Spec-driven development
Architecture
High-complexity business problems
Engineering efficiency
Projects01 / 02
Open source

Axios

Expense accountability for field teams, the pain I watched from the inside, then chose to solve.

01 · Expense reports: field cash, e-invoices verified with the tax authority
02 · Fund management: prepaid balance as a statement
03 · Reimbursement: the flow that used to be email
04 · ERP export: an approved batch becomes an import file
01Expense reportadvance paid in the fieldinvoice and tax ID checked03Reimbursementpaid out of pocketno external checkapprovedapproved02Fundbalance debitedneverexport queueexpense reportsreimbursements04Export batchboth lanes, one file for the ERPERP fileexported once, never reverts
Two lanes that never exchange anything until the export file
Why it exists

Reimbursement was email.

Three years at a construtech watching it from the inside: the employee paid out of pocket, photographed the receipt, sent it to finance and waited, no status, no payment forecast, no trail. Petty cash had software and even corporate cards, and the data still lived scattered across systems that never talked to each other. Every rule in Axios exists because I watched it be missing.

Reimbursement, end to end
Draft
Under review
Approved
Payment scheduled
Paid
Domain

Module 3 never touches Module 2.

Reimbursement is post-paid, funds are prepaid. Mixing them is the classic mistake in this domain, so it is held by a test rather than by discipline. Two more locks come from the same place: a fund only closes at exactly R$ 0.00, and an exported batch never reverts, and that is what stops the same expense being paid twice.

One report, four surfacesR$ 0,01 + R$ 33,33 + R$ 1.234,56
ScreenR$ 1.267,90
PDFR$ 1.267,90
Fund debitR$ 1.267,90
Exported fileR$ 1.267,90
Never a float. Immutable value object over bcmath, decimal columns.
ExpenseReportService::approve
return DB::transaction(function () use ($expenseReportId, $fundId) { $expenseReport = ExpenseReport::with('items') ->lockForUpdate() ->findOrFail($expenseReportId); Gate::authorize('approve', $expenseReport); $amountTotal = $expenseReport->total(); ...});
One reimbursement, from the request to the ERP export
Audit

30 defects found, every fix pinned by a test.

326 planned cases, 303 executed, and the eight reports published in full. It closed IDOR between providers, privilege escalation on the user routes, an ERP access token any authenticated user could overwrite, sessions that survived deactivation, and credential material written to the log. Four more appeared only by running the system rather than reading it: a slug drifted from its migration, a gate pointing at the wrong module, a route mismatch, a field-name mismatch.

Systems in production

From the first commit to clients in operation.

Co-ownership and leadership of multi-tenant SaaS products in production: from laying down the codebase to the daily operation of real companies, with sales, invoices and money going through the system every day.

  • Started the codebase: Laravel and Nuxt setup, migrations, auth
  • Access profiles with per-module permissions, enforced on every route
  • NF-e (55) and NFC-e (65) issued on sped-nfe, behind a swappable provider
  • Tax engine: CFOP, NCM, tax situations and the issuer profile
  • Numbering in a short transaction, the tax authority call outside it
  • Money in cents, DANFE and DANFCE, certificate, CSC, series and environment
  • WebSockets on Laravel Reverb, broadcast per tenant
  • Channel auth checks the tenant before the permission
  • Polling fallback that steps up when the socket drops
  • Point of sale, sales history and sale cancellation
  • Online ordering: storefront, checkout, order tracking and the order board
  • Touch-first mobile app for floor staff and a self-service kiosk mode
  • Bookings agenda with a timeline, arrivals and live updates; stock module rebuilt
  • End-to-end flows in Playwright, written as page objects
  • Feature and unit suites in PHPUnit for permissions, sales, bookings and fiscal
  • A custom AI QA skill that files one Jira bug per defect, never twice
Multi-tenant SaaS01 / 05
  • Started the codebase: Laravel and Nuxt setup, migrations, auth
  • Access profiles with per-module permissions, enforced on every route
Skills
  • Laravel
  • Nuxt
  • TypeScript
  • Vue
  • PHP
  • MySQL
  • Laravel Reverb
  • Playwright
  • PHPUnit
  • WebSockets
  • Multi-tenancy
  • NF-e / NFC-e
Other projects

The ledger.

Alternative projects: development of landing pages and scripts for importing data from different systems and databases. The learning process is constant and involves problem-solving, adapting to new technologies, and understanding different business contexts.

Case notes

A landing page for a custom furniture maker, delivered solo end to end: Nuxt 4, a scroll-pinned horizontal section, and conversion straight to WhatsApp instead of a form nobody reads. The videos left the bundle for a CDN that negotiates format and quality per client, 26 MB less to download. The pin switches itself off on mobile, returning every element to normal flow.

rlmoveis.com.br
Case notes

The product's own marketing page, built in Next.js and framer-motion: a hero whose mock recedes as you scroll into the page, then a four-act story scrubbed by the scrollbar: capture, audit, settle, export. The interface on screen is drawn as components instead of screenshotted, so nothing goes stale and everything can move. The background grid reacts to the cursor with its origin pinned to the document, so the pattern never jumps between sections, and it drops itself entirely on touch: no listeners attached. Every scroll transform sits behind reduced-motion.

Spreadsheet-to-system data import, working directly in MySQL. A client spreadsheet never arrives in the agreed format: the work is reconciling what came with what the schema accepts before the first INSERT, because a client database has no undo.

Six months migrating clients off their previous systems and into Eixo Desktop, reading the source in Firebird, Postgres or MySQL depending on what each one ran. Working across engines is what teaches you where standard SQL ends and each vendor's dialect begins.

Bruning's app on the stores, a sibling of Eixo-Web and worked on alongside it. Occasional involvement, in React, features and fixes shipped whenever mobile came up in the queue.

Education

The formal record.

A technologist degree in Systems Analysis and Development, and ten professional qualifications earned along the way, 1,600 hours in all. Every document is verifiable with its issuer.

  • Infrastructure

    Distributed and mobile systems

    Unisul · 160 h · DEC 2025
  • Infrastructure

    Distributed and mobile systems, with AWS

    Unisul · 160 h · DEC 2025
  • Business

    Innovation, sustainability and business competitiveness

    Unisul · 160 h · DEC 2025
  • Engineering

    Software engineering models, methods and techniques

    Unisul · 160 h · JUL 2025
  • Engineering

    Software management and quality

    Unisul · 160 h · JUL 2025
  • Engineering

    Usability, web, mobile and game development

    Unisul · 160 h · DEC 2024
  • Engineering

    Software modeling

    Unisul · 160 h · JUL 2024
  • Engineering

    Programming computational solutions

    Unisul · 160 h · JUL 2024
  • Infrastructure

    Computer systems and security

    Unisul · 160 h · DEC 2023
  • Infrastructure

    Computing environments and connectivity

    Unisul · 160 h · DEC 2023
Higher education · Technologist

Systems Analysis
and Development

UnisulJULY 2026
494.494.a64b81b0c060Validate
Vision

Great products are born from diverse experiences. My recent explorations through cultural and tech hubs like Liverpool reinforce my drive to understand how software impacts global markets. In the era of Generative AI, my focus is on continuously raising the technical bar, aiming for post-graduate studies in complex systems architecture and seeking challenges that require building products ready for global scale.