ProjetosProjects

ProjetosProjects

Um pouco do que já construí, do que faço hoje e do que quero fazer. As ideias surgiram por necessidade ou curiosidade e algumas hoje são úteis não só para mim, mas para mais pessoas. A bit of what I have built, what I am working on now and what I want to make next. The ideas came out of necessity or curiosity, and some of them are now useful not only to me but to other people too.

Norteprivadoprivate

aplicativo de finanças pessoaispersonal finance app

estadostatus
Em uso pessoalIn personal use
feito combuilt with
Next.js e PostgresNext.js and Postgres

o que éwhat it is

Um app para saber quanto dinheiro eu tenho de verdade.An app to know how much money I actually have.

O saldo do banco pode enganar, porque uma parte dele já está comprometida com a fatura, com assinaturas e com futuras contas que o banco não considera. O Norte leva tudo isso em conta e mostra o que sobra de verdade. Assim dá para saber quanto gastar sem tomar um susto depois.The bank balance can be misleading, because part of it is already spoken for by the card bill, subscriptions and upcoming bills the bank doesn't account for. Norte takes all of that into account and shows what is really left, so I know how much I can spend without a bad surprise later.

  1. saldo do bancobank balance
  2. −faturacard bill
  3. −comprometidos futurosupcoming commitments
  4. =o que sobra hojewhat is left today

Ligado à minha conta e meu cartão. Uso diário.Connected to my account and my card. Daily use.

o que fazwhat it does

  • As compras chegam sozinhas do banco, tanto da conta quanto do cartão.Transactions come in on their own from the bank, from both the account and the card.
  • Cada compra ganha uma categoria sozinha, por regras, e a IA só entra quando o lugar é novo.Each purchase gets a category on its own, by rules, and AI only steps in when the place is new.
  • O mês dele vai de uma fatura a outra, e não do dia 1 ao dia 30.Its month runs from one card bill to the next, not from the 1st to the 30th.
  • Assinaturas e Pix que se repetem já saem do disponível antes de serem cobrados.Subscriptions and recurring transfers come out of the available amount before they are charged.
  • Projeta o saldo dos próximos 60 dias, para eu ver com antecedência se alguma semana vai apertar.Projects the balance over the next 60 days, so I can see ahead of time if some week is going to be tight.

As telas ainda são provisórias.The screens are still provisional.

Norte

demo
Norte's home screen

Organizador pessoalPersonal organizerprivadoprivate

aplicativo de organização pessoalpersonal organization app

estadostatus
Em uso todos os diasIn use every day
feito combuilt with
Kotlin, Compose, AndroidKotlin, Compose, Android

o que éwhat it is

Um app para organizar a semana de quem divide o tempo entre faculdade, estágio e pesquisa.An app for organizing the week of someone who splits their time between university, an internship and research.

Começou contando quantas faltas eu ainda podia ter em cada matéria e virou o lugar onde ficam as aulas, as provas, as tarefas e as horas de estágio.It started by counting how many classes I could still miss in each course and became the place for my classes, exams, tasks and internship hours.

o que fazwhat it does

  • hojetoday

    Mostra o dia de hoje e sugere qual tarefa fazer agora, explicando o porquê.Shows today and suggests which task to do now, explaining why.

  • faltasabsences

    Conta as faltas de cada matéria e avisa quando alguma está em risco.Counts the absences in each course and warns when one is at risk.

  • gradetimetable

    Monta as matérias a partir de um PDF ou de uma foto da grade, e só grava depois que eu reviso.Sets up courses from a PDF or a photo of the timetable, and only saves them after I review.

  • estágiointernship

    Marca as horas de estágio e quanto falta para a meta do mês.Logs internship hours and how far I am from the month's target.

Capturas de uma versão beta.Screenshots from a beta version.

Fundamentos de ProgramaçãoFundamentals of Programming

material aberto para aprender Pythonopen material for learning Python

The repository banner, a terminal window titled Fundamentos de Programação
estadostatus
Aberto e mantidoOpen and maintained
feito combuilt with
Python, Markdown, Jupyter

o que éwhat it is

Tudo da disciplina de Fundamentos de Programação da UFPR num lugar só, para aprender Python do zero.Everything from UFPR’s Fundamentals of Programming course in one place, to learn Python from scratch.

Escrevi enquanto era monitor, explicando do jeito que eu gostaria de ter encontrado quando estava aprendendo. Hoje, professores da disciplina indicam o material para os alunos deles.I wrote it while I was a teaching assistant, explaining things the way I wish I had found them when I was learning. Today, professors who teach the course point their students to it.

o que temwhat is in it

AulasLessons
19 aulas em sequência, do ambiente de programação aos objetos.19 lessons in order, from setting up the environment to objects.
Exercícios de debugDebugging exercises
19 programas com erro para achar e consertar.19 programs with a bug to find and fix.
ListasProblem sets
As 7 listas oficiais da disciplina, com gabarito.The course’s 7 official problem sets, with answers.
ProjetoProject
Uma Copa do Mundo de pênaltis jogada no terminal.A World Cup penalty shoot-out played in the terminal.

E também glossário, referência rápida, FAQ, apêndices e material cedido pelos professores.Plus a glossary, a quick reference, an FAQ, appendices and material shared by the professors.

o que precisa saberwhat you need to know

Como usarHow to use it
Para ler, basta abrir o repositório no navegador. Para rodar, Python e um editor, e a aula 01 ensina a instalar.To read it, just open the repository in a browser. To run the code, Python and an editor, and lesson 01 shows how to install them.
Sem gabarito no debugNo answer key for debugging
De propósito. Cada exercício mostra a saída esperada, então dá para saber quando acertou.On purpose. Each exercise shows the expected output, so you know when you got it right.
É abertoIt’s open
O código é MIT e o texto é CC BY-SA 4.0, fora as listas oficiais e o material dos professores. Achou um erro? Dá para abrir uma issue.The code is MIT and the text is CC BY-SA 4.0, except the official problem sets and the professors’ material. Found a mistake? You can open an issue.

Matemática, do básico ao avançado

Guia de matemáticaMathematics guide

estadostatus
Em andamentoIn progress
páginaspages
570, ainda em rascunho570, still in draft

o que éwhat it is

Comecei com a vontade de escrever um guia no 2º ano do ensino médio, quando dava aulas particulares de matemática. No começo eu rascunhava coisas simples nele, mais como um bloco de anotações de como ensinar, pra me guiar nas aulas. Com o tempo ele foi evoluindo, e quando entrei no curso de Matemática comecei a estudar mais a fundo e a avançar mais no guia. Ele cresceu bastante, e falta revisar muita coisa.I started out wanting to write a guide in my second year of high school, when I was tutoring math. At first I sketched simple things in it, more like a notebook on how to teach, to guide me during lessons. Over time it grew, and when I started my Mathematics degree I began studying more deeply and moving the guide further along. It got quite big, and a lot of it still needs revising.

hojetoday

Está parado, mas às vezes escrevo rascunhos nele sobre coisas novas que aprendo. Nem todas as páginas estão formatadas como essas que divulguei, porque é um material inacabado.It is on hold, but sometimes I still draft things in it about new stuff I learn. Not every page is formatted like the ones shown here, because it is an unfinished piece of work.

A capaThe cover

Gerador de orçamentosQuote generatorprivadoprivate

aplicativo de orçamentos para empresasquote app for businesses

estadostatus
Em uso por duas empresasIn use by two companies
feito combuilt with
SvelteKit, TypeScript, pdfmakeSvelteKit, TypeScript, pdfmake
no navegadorin the browser The app open in a wide browser window, with the month's total highlighted and the list of recent quotes
a saídathe output First page of a quote PDF generated by the app, with fictitious demo data
o PDFthe PDFPDF gerado que a empresa envia para o cliente, com logo, dados do cliente, itens e tudo mais. Sim, minha empresa fictícia valoriza muito a mão de obra.the generated PDF the company sends to the client, with logo, client details, items and everything else. Yes, my fictitious company really values labor.
o appthe app

o que éwhat it is

Um app que monta orçamentos e gera o PDF pronto para mandar ao cliente. Quem usa preenche o cliente e os itens, o app faz a conta, e o documento sai com a logo e os dados da empresa. A manutenção fica comigo.An app that builds quotes and generates a PDF ready to send to the client. You fill in the client and the items, the app does the math, and the document comes out with the company's logo and details. I take care of the maintenance.

o que fazwhat it does

  • Funciona sem internet, no celular e no computador.Works without internet, on the phone and on the computer.
  • Cada empresa tem a sua logo, as suas cores e o seu modelo de PDF.Each company has its own logo, colors and PDF layout.
  • O total da tela, o do PDF e o valor do Pix saem sempre do mesmo número.The total on screen, the one in the PDF and the Pix amount always come from the same number.

IA veicularVehicle AIprivadoprivate

Contagem e classificação de veículosVehicle counting and classification

estadostatus
Em uso oficial desde outubroIn official use since October
contagemcount0
Trecho real de uma câmera de rodovia. A caixa em volta do caminhão fica vermelha no instante em que ele é contado.A real clip from a road camera. The box around the truck turns red the moment it is counted.

o que éwhat it is

Um sistema que assiste aos vídeos das câmeras de rodovia, encontra cada veículo, conta quantos passaram e diz que tipo de veículo é. A empresa onde trabalho já usava uma versão própria, e desde agosto de 2026 eu cuido sozinho da melhoria dela.A system that watches road camera footage, finds every vehicle, counts how many went by and says what kind of vehicle each one is. The company I work for already had its own version, and since August 2026 I have been in charge of improving it on my own.

resultadoresultA contagem de dia passou de 82 a 88% de acerto para 94 a 97%.Daytime counting went from 82 to 88% accuracy to 94 to 97%.

o caminho de cada quadrothe path of every frame

  1. VídeoVideoa gravaçãothe footage
  2. DetecçãoDetectionacha os veículosfinds the vehicles
  3. DeduplicaçãoDeduplicationtira as repetidasdrops duplicates
  4. RastreamentoTrackingsegue cada umfollows each one
  5. CruzamentoCrossingconta na linhacounts at the line
  6. ClassificaçãoClassificationdiz o tiponames the type
resultadosresultsComparação com o sistema originalCompared with the original system

Acerto, a cada 100 veículosAccuracy, out of every 100 vehicles

O anel inteiro é 100% dos veículos. O cinza é o que o sistema original já acertava; o verde é o que passou a acertar.The full ring is 100% of vehicles. Grey is what the original system already got right; green is what it now gets right.

  1. Contagem de diaDaytime count

    Antes, 82 a 88%; hoje, 94 a 97%. Variação de +9 a +15 p.p.Before, 82 to 88%; today, 94 to 97%. Change of +9 to +15 pp.

  2. Contagem à noite e com clima ruimCount at night and in bad weather

    Antes, 60 a 72%; hoje, 88 a 94%. Variação de +16 a +34 p.p.Before, 60 to 72%; today, 88 to 94%. Change of +16 to +34 pp.

  3. Classificação geral dos veículosGeneral vehicle classification

    Antes, 80 a 88%; hoje, 99,87%. Variação de +12 a +20 p.p.Before, 80 to 88%; today, 99.87%. Change of +12 to +20 pp.

Erros, em relação ao originalErrors, relative to the original

O anel inteiro é a quantidade de erros do sistema original. O pedaço cortado é o que deixou de acontecer.The full ring is the number of errors in the original system. The cut-out piece is what no longer happens.

  1. Veículos contados mais de uma vezVehicles counted more than once

    Antes, 100; hoje, 20 a 40. Variação de −60 a 80%.Before, 100; today, 20 to 40. Change of −60 to 80%. 10 a 15% → 2 a 5% dos veículos. 10–15% → 2–5% of vehicles.

  2. Troca de classe no mesmo veículoClass switching on the same vehicle

    Antes, 100; hoje, 55 a 60. Variação de −40 a 45%.Before, 100; today, 55 to 60. Change of −40 to 45%.

  3. Veículo partido em vários rastrosVehicle split into several tracks

    Antes, 100; hoje, 60 a 65. Variação de −35 a 40%.Before, 100; today, 60 to 65. Change of −35 to 40%.

como foi medidohow it was measuredMedido contra a contagem manual de dias inteiros, com a quantidade exata de veículos por classe a cada 30 minutos, e revisando cada detecção nos programas da empresa. Mais de 100 rodadas de teste e mais de 800 horas de vídeo processadas ao longo do processo. A classificação geral separa 6 classes, foi treinada com mais de 20 mil imagens e é medida no conjunto de teste. Valores aproximados.Measured against the manual count of whole days, with the exact number of vehicles per class every 30 minutes, and by reviewing every detection in the company's tools. More than 100 test runs and more than 800 hours of video processed along the way. General classification separates 6 classes, was trained on more than 20,000 images and is measured on the test set. Approximate values.

Calculadora POOOOP calculator

primeiro projetofirst project

estadostatus
ConcluídoFinished
feito combuilt with
Python, Tkinter
organizaçãostructure
modelo, tela e controle (MVC)model, view and controller (MVC)

o que éwhat it is

Uma calculadora com interface gráfica, feita em Python para praticar orientação a objetos. Foi meu primeiro projeto, e o mais clássico de quem está começando.A calculator with a graphical interface, written in Python to practice object-oriented programming. It was my first project, and the classic one for anyone starting out.

o detalhethe detail

Quis que ela fizesse a conta de verdade, e não só entregasse o texto para uma função pronta da linguagem. Ela respeita a ordem das operações, resolve os parênteses de dentro para fora, guarda o histórico e trata os erros sem fechar o programa. Cada operação é uma classe própria, então para criar uma nova basta escrever a classe e registrá-la.I wanted it to actually do the math, not just hand the text to a ready-made function of the language. It respects the order of operations, solves parentheses from the inside out, keeps a history and handles errors without crashing. Each operation is its own class, so adding a new one just means writing the class and registering it.

demo · clique para pausardemo · click to pausetestando umas contas com parênteses e potência.trying out some sums with parentheses and exponents.

ULA de 8 bits8-bit ALU

circuitos digitaisdigital circuits

estadostatus
ConcluídoFinished
feito combuilt with
Logisim-evolutionLogisim-evolution

o que éwhat it is

A ULA é a parte do processador que faz as contas. Montei uma de 8 bits no Logisim, sozinho, como trabalho da disciplina de Circuitos Digitais. Ela soma, subtrai, multiplica e eleva ao quadrado, e toda a lógica foi feita só com portas NAND.The ALU is the part of the processor that does the math. I built an 8-bit one in Logisim, on my own, as an assignment for the Digital Circuits course. It adds, subtracts, multiplies and squares, and all of its logic is built from NAND gates alone.

o arquivothe file

Para baixar, é só clicar em ula.circ.To download it, just click ula.circ.

Cronômetro de voltasLap timer

circuitos digitaisdigital circuits

estadostatus
ConcluídoFinished
feito combuilt with
Logisim-evolutionLogisim-evolution

o que éwhat it is

Um cronômetro para uma corrida de dois carros, feito no Logisim como trabalho da disciplina de Circuitos Digitais. Ele marca cada volta, soma o tempo total da corrida e mostra a diferença entre os dois carros. O tempo é contado com flip-flops JK, em centésimos de segundo.A timer for a race between two cars, built in Logisim as an assignment for the Digital Circuits course. It records each lap, adds up the total race time and shows the gap between the two cars. Time is counted with JK flip-flops, in hundredths of a second.

o arquivothe file

Para baixar, é só clicar em cronometro.circ.To download it, just click cronometro.circ.

TESSERA-20

processador de 20 bits20-bit processor

estadostatus
ConcluídoFinished
feito combuilt with
Logisim-evolution, Python

o que éwhat it is

O TESSERA-20 é um processador de 20 bits que eu projetei sozinho para a disciplina de Projetos Digitais e Microprocessadores. Defini o conjunto de instruções, escrevi em Python um montador e um emulador para servir de referência e montei a CPU no Logisim-evolution, executando uma instrução por ciclo.TESSERA-20 is a 20-bit processor I designed on my own for the Digital Projects and Microprocessors course. I defined the instruction set, wrote an assembler and an emulator in Python to serve as a reference, and built the CPU in Logisim-evolution, running one instruction per cycle.

a instrução que eu escolhithe instruction I chose

A MADD foi escolha minha. Ela multiplica e soma numa instrução só, que é exatamente o que a multiplicação de matrizes faz a cada termo, então cada produto custa um ciclo a menos do que com MUL e ADD separados.MADD was my own choice. It multiplies and adds in a single instruction, which is exactly what matrix multiplication does for each term, so every product takes one cycle less than with separate MUL and ADD.

como eu conferihow I checked it

Cada bloco do circuito foi testado separado, e a unidade de controle passou por todas as 1.048.576 palavras possíveis de 20 bits. Os programas rodam no circuito e no emulador, e o resultado só vale quando os dois terminam iguais, registrador por registrador e em cada posição da memória.Each block of the circuit was tested on its own, and the control unit went through all 1,048,576 possible 20-bit words. Programs run on the circuit and on the emulator, and a result only counts when both end the same, register by register and at every memory position.

os arquivosthe files

O circuito está em tessera20.circ, e a folha com todas as instruções está em green-card.pdf.The circuit is in tessera20.circ, and the sheet with every instruction is in green-card.pdf.

SW ra, 1(sp)0x51201

Em binário, 0101 0001 0010 0000 0001. O campo op, nos bits 19 a 16, vale 5, que é SW, e vai para a unidade de controle. O campo rs2, nos bits 15 a 12, vale 1, o registrador ra, e o campo rs1, nos bits 11 a 8, vale 2, o registrador sp. Os dois são lidos no banco de registradores. O imediato, nos bits 7 a 0, vale 1 e vai para o bloco dos imediatos.In binary, 0101 0001 0010 0000 0001. The op field, in bits 19 to 16, is 5, which is SW, and goes to the control unit. The rs2 field, in bits 15 to 12, is 1, register ra, and the rs1 field, in bits 11 to 8, is 2, register sp. Both are read from the register file. The immediate, in bits 7 to 0, is 1 and goes to the immediates block.

Uma linha do fatorial, já montada. Os 20 bits se dividem em quatro campos, e cada um vai para um bloco do circuito. A ULA soma sp + 1, e a RAM guarda ra nesse endereço, que é como a função salva o endereço de retorno antes de chamar a si mesma.One line from the factorial program, assembled. The 20 bits split into four fields, and each one goes to a block of the circuit. The ALU adds sp + 1, and the RAM stores ra at that address, which is how the function saves its return address before calling itself.

Mini-Jacket SolarOffshore Solar Mini-Jacketprivadoprivate

Estrutura auxiliar para integrar energia solar a plataformas offshoreAn auxiliary structure to bring solar power to offshore platforms

estadostatus
Protótipo construídoPrototype built
áreafield
Engenharia estrutural e energia renovávelStructural engineering and renewable energy
aplicaçãoapplication
Plataformas offshore fixasFixed offshore platforms

O projeto surgiu da ideia de aproveitar a estrutura de plataformas offshore que já existem para incorporar geração de energia solar.The project came from the idea of using the structure of offshore platforms that already exist to add solar power generation.

É um projeto integrador pedido pela Petrobras. A proposta foi desenvolver uma estrutura auxiliar do tipo mini-jacket, capaz de sustentar painéis fotovoltaicos e permitir sua integração ao sistema elétrico da plataforma.It is an integrative project requested by Petrobras. The proposal was to design an auxiliary mini-jacket structure, able to hold photovoltaic panels and connect them to the platform's electrical system.

VersõesVersions

Registro do desenvolvimento, da versão mais recente até a primeira.A record of development, from the latest version back to the first.

em andamentoin progress

CorrigindoFixing

  • Erros encontrados no uso diário.Bugs found in daily use.

ModificandoChanging

  • Acabamento visual das telas.Visual polish across the screens.
0.14.0

Animação de aberturaOpening animation

AdicionadoAdded

  • Animação de abertura, em que as estrelas da Ursa Menor se ligam e a Polaris vira a marca do Norte.Opening animation, in which the stars of Ursa Minor connect and Polaris becomes Norte's mark.
  • Ícone do app para a tela inicial do celular.App icon for the phone's home screen.
0.13.0

Nova interfaceNew interface

Interface refeita depois de algumas semanas de uso. A lógica não mudou.Interface rebuilt after a few weeks of use. The logic didn't change.

ModificadoChanged

  • Menos telas, cada uma com um assunto.Fewer screens, each about one thing.
  • Navegação por abas na parte de baixo da tela.Tab navigation at the bottom of the screen.
  • Assinaturas passaram a ter uma área própria.Subscriptions got their own area.
Home screen before the new interface
Home screen after the new interface
0.12.0

Versão para celularMobile version

Primeira versão de uso diário.First version in daily use.

AdicionadoAdded

  • Instalação na tela inicial do celular.Installable on the phone's home screen.
  • Telas adaptadas para o celular.Screens adapted for the phone.
  • Novo foco para mobile.A new mobile-first focus.
Norte's icon on the phone
0.11.0

Previsão e retrospectivaForecast and retrospective

AdicionadoAdded

  • Previsão até o fim do ciclo da fatura, com quanto deve sobrar.Forecast to the end of the billing cycle, with how much should be left.
  • Quanto posso gastar, calculado só com a renda já confirmada.How much I can spend, calculated only with income that's already confirmed.
  • Retrospectiva de cada ciclo fechado.A retrospective of every closed cycle.
Norte's forecast
0.10.0

Estatísticas e buscaStatistics and search

AdicionadoAdded

  • Estatísticas por categoria, por dia da semana e comparando com o mês anterior.Statistics by category, by day of the week and compared with the previous month.
  • Busca e filtro nas movimentações.Search and filters for transactions.
  • Parcelas com estorno aparecem marcadas na lista.Instalments that were refunded are marked in the list.

ModificadoChanged

  • Erros passaram a aparecer na tela com o motivo.Errors now show up on screen with the reason.
Statistics at the time
0.9.0

Lançamentos planejados e assinaturasPlanned entries and subscriptions

AdicionadoAdded

  • Lançamentos planejados, para compromissos futuros que não passam pelo cartão.Planned entries, for future commitments that don't go through the card.
  • Assinaturas, que se repetem todo mês sem data de fim.Subscriptions, which repeat every month with no end date.

ModificadoChanged

  • O disponível passou a descontar os compromissos do ciclo.The available amount now deducts the cycle's commitments.

CorrigidoFixed

  • Compras feitas no dia do fechamento iam para a fatura errada.Purchases made on the closing day went to the wrong statement.
  • O valor da fatura a vencer era calculado errado.The amount of the upcoming statement was calculated wrong.
  • Compromissos programados que já tinham sido pagos continuavam sendo descontados. Agora o app confere o pagamento.Scheduled commitments that had already been paid were still being deducted. Now the app checks the payment.
0.8.0

Sincronização automática e backupAutomatic sync and backup

AdicionadoAdded

  • Sincronização automática uma vez por dia.Automatic sync once a day.
  • Cópia de segurança diária do banco de dados.Daily backup of the database.

CorrigidoFixed

  • Transações entravam duas vezes quando a sincronização automática e a manual rodavam juntas.Transactions came in twice when the automatic and the manual sync ran together.
  • Transações que estavam no banco e nunca tinham sido trazidas agora são buscadas de novo.Transactions that were at the bank and had never been brought in are now fetched again.
0.7.0

Login e publicaçãoLogin and deployment

AdicionadoAdded

  • Login com a conta Google, liberado só para e-mails autorizados.Login with a Google account, open only to authorized e-mails.
  • Endereço próprio.Its own address.
Norte's login screen
0.6.0

Conexão com o bancoBank connection

AdicionadoAdded

  • Conexão com o banco pelo Open Finance. As transações chegam sem exportar arquivo.Bank connection through Open Finance. Transactions arrive without exporting any file.
  • Sincronização manual a qualquer momento.Manual sync at any time.

ModificadoChanged

  • Os dados saíram do navegador e foram para um banco de dados.The data left the browser and moved to a database.
Transactions at the time
0.5.0

Nome e identidade visualName and visual identity

O organizador financeiro passou a se chamar Norte, pela ideia de achar um rumo quando a gente se perde com dinheiro.The finance organizer became Norte, from the idea of finding a direction when you get lost with money.

ModificadoChanged

  • Nome do app.The app's name.

AdicionadoAdded

  • Marca nova, uma estrela de oito pontas com um anel, a partir da Polaris, a estrela que aponta o norte.A new mark, an eight-pointed star with a ring, based on Polaris, the star that points north.
  • Fundo de céu noturno.A night sky background.

RemovidoRemoved

  • Os cometas do fundo, que tiravam a atenção dos números e eram desnecessariamente custosos.The comets in the background, which pulled attention away from the numbers and were needlessly costly.
Sketch of Norte's logo
0.4.0

IA como reserva na categorizaçãoAI as a fallback for categorization

AdicionadoAdded

  • Estabelecimentos que nenhuma regra conhece vão para uma IA, que sugere a categoria.Merchants that no rule knows go to an AI, which suggests the category.

ModificadoChanged

  • Regras e memória continuam vindo primeiro. O app funciona sem a IA, e a correção manual vence.Rules and memory still come first. The app works without the AI, and a manual correction wins.
0.3.0

Categorização automáticaAutomatic categorization

AdicionadoAdded

  • Regras de categoria por estabelecimento.Category rules by merchant.
  • Memória por estabelecimento. Uma categoria corrigida vira regra para as próximas.Memory by merchant. A corrected category becomes a rule for the next ones.
  • Categorias próprias, como comida dividida em cinco, Presentes, Assinaturas e uma só para o Max.My own categories, like food split into five, Gifts, Subscriptions and one just for Max.
0.2.0

Importação de extratosStatement import

AdicionadoAdded

  • Importação do extrato da conta e da fatura em CSV, e de arquivos OFX.Import of the account and card statements as CSV, and of OFX files.
  • Relatório de cada importação, com o que entrou e o que já existia.A report for each import, with what came in and what was already there.
  • Parcelas reconhecidas e agrupadas pela compra.Instalments recognized and grouped by purchase.
  • Desfazer uma importação inteira e ignorar uma transação sem apagar.Undo a whole import and ignore a transaction without deleting it.
0.1.0

Primeira versãoFirst version

Ainda com o nome provisório de organizador financeiro.Still under the working name of finance organizer.

AdicionadoAdded

  • Lançamento manual de entradas e saídas.Manual entry of income and expenses.
  • Disponível calculado pelo ciclo da fatura, e não pelo mês.Available amount calculated by the billing cycle, not by the month.
  • Lógica financeira escrita com testes antes do código.Financial logic written with tests before the code.

Como surgiuHow it started

Sempre fui ensinado a cuidar dos meus gastos. Comecei em cadernos, depois passei para planilhas, e quanto mais os gastos cresciam, mais ficava claro que eu precisava de um jeito melhor de organizar.I was always taught to look after my spending. I started with notebooks, then moved to spreadsheets, and the more my spending grew, the clearer it became that I needed a better way to organize it.

Testei alguns aplicativos que já fazem isso prontos, mas nenhum fazia o que eu queria da forma que eu queria. Quando comecei a entender mais de programação, resolvi fazer o meu. Era um jeito de ter algo pensado para mim e, ao mesmo tempo, de entender coisas que eu usava sem saber como funcionavam, como uma API, o login com o Google e a conexão com o banco.I tried a few apps that already do this out of the box, but none of them did what I wanted the way I wanted. When I started understanding more about programming, I decided to make my own. It was a way to have something designed for me and, at the same time, to understand things I used without knowing how they worked, like an API, signing in with Google and the connection to the bank.

A pergunta base que eu queria responder era “quanto do meu dinheiro eu posso gastar agora?”. O saldo não necessariamente respondia isso. Se eu tenho R$ 1.500 na conta e R$ 600 para pagar para alguém na semana que vem, na prática tenho R$ 900, e era esse número que eu queria ver.The basic question I wanted to answer was “how much of my money can I spend right now?”. The balance didn’t necessarily answer that. If I have R$ 1,500 in my account and R$ 600 to pay someone next week, in practice I have R$ 900, and that was the number I wanted to see.

Comecei no fim de junho de 2026. A primeira versão fazia só isso, mostrava quanto eu tinha de verdade, contando pelo ciclo da fatura do cartão e não pelo mês. Desde o começo eu tinha a ideia de que ele também contasse as assinaturas, os Pix fixos que mando para outras pessoas e qualquer outro gasto que não passa pelo cartão, mas no começo isso ficou só na ideia. Entrou algumas semanas depois.I started at the end of June 2026. The first version did only that, it showed how much I really had, counting by the card’s billing cycle and not by the month. From the start I had the idea that it should also count subscriptions, the recurring Pix transfers I send to other people and any other expense that doesn’t go through the card, but at first that stayed just an idea. It came in a few weeks later.

O nome veio da ideia de que quem está perdido com dinheiro procura um norte. A marca e a identidade do app saíram da Polaris, a estrela que aponta o norte e que os navegantes usavam para se guiar, e da Ursa Menor, a constelação dela.The name came from the idea that whoever is lost with money looks for a north. The app’s mark and identity came from Polaris, the star that points north and that sailors used to find their way, and from Ursa Minor, its constellation.

Desde setembro, quando ele ficou bom de usar no celular, olho o app literalmente todos os dias. Ainda não está pronto, tenho bugs para corrigir e um visual final para criar (por enquanto é só um provisório gerado), mas já foi muito útil para mim.Since September, when it became good to use on my phone, I check the app literally every day. It isn’t finished yet, I have bugs to fix and a final visual design to create (for now it’s just a generated placeholder), but it has already been really useful to me.

Como funcionaHow it works

Como uma compra no cartão vira parte do número da tela inicial, e por que cada passo é assim.How a card purchase becomes part of the number on the home screen, and why each step works the way it does.

Chega do bancoIt arrives from the bank

Todo dia às 6h, o app pede ao serviço de Open Finance as transações desde a última sincronização, com sete dias de margem para trás. Também dá para sincronizar na hora, e uma trava deixa rodar uma sincronização por vez. Extratos em CSV ou OFX e lançamentos à mão continuam entrando, então os dados não param se a conexão cair.Every day at 6am, the app asks the Open Finance service for the transactions since the last sync, with seven days of margin going back. You can also sync on the spot, and a lock lets only one sync run at a time. CSV or OFX statements and manual entries still come in, so the data doesn't stop if the connection drops.

Por quêWhyO serviço limita quantas vezes os dados podem ser atualizados. Uma vez por dia basta, e de manhã o app já está em dia.The service limits how often the data can be refreshed. Once a day is enough, and in the morning the app is already up to date.

Já existe?Is it already there?

Cada compra ganha uma impressão digital feita dos dados dela. Se a impressão já existe, a compra é ignorada. Se é a versão real de algo que eu tinha planejado, ela toma o lugar do planejado. Uma transação que o banco deixa de informar não é apagada, fica marcada para eu conferir.Each purchase gets a fingerprint made from its data. If the fingerprint already exists, the purchase is ignored. If it's the real version of something I had planned, it takes the place of the plan. A transaction the bank stops reporting isn't deleted, it's flagged for me to check.

Que lugar é esseWhat place is this

O app limpa a descrição do banco, tirando o prefixo da maquininha e a parcela, e fica com o estabelecimento. Se ele já tem categoria, ela vem da memória. Se é inédito, só o texto vai para um modelo de linguagem, sem valor, data nem saldo, e a resposta vira memória para as próximas compras.The app cleans up the bank's description, dropping the card machine prefix and the instalment, and keeps the merchant. If it already has a category, it comes from memory. If it's new, only the text goes to a language model, with no amount, date or balance, and the answer becomes memory for the next purchases.

Por quêWhyClassificar tudo com IA custaria a cada compra e erraria de um jeito difícil de prever. Assim o custo é quase nenhum, o app funciona com a IA fora do ar, e uma correção minha vira regra daquele lugar que a IA nunca sobrescreve.Classifying everything with AI would cost on every purchase and fail in ways that are hard to predict. This way the cost is close to nothing, the app works with the AI down, and a correction of mine becomes a rule for that place that the AI never overwrites.

Em que ciclo ela caiWhich cycle it falls into

O app conta pelo ciclo da fatura, de um fechamento ao outro, e não pelo mês. O dia do fechamento já pertence ao ciclo novo, regra conferida contra o extrato depois que as compras desse dia caíam na fatura errada.The app counts by the card's billing cycle, from one closing date to the next, not by the month. The closing day already belongs to the new cycle, a rule checked against the statement after purchases from that day were landing on the wrong bill.

Por quêWhyO dinheiro que sai num dia 5 pode ser de compras do mês anterior. Contado pelo mês, o número não batia com o que eu podia gastar.The money that leaves on the 5th may be for last month's purchases. Counted by the month, the number didn't match what I could actually spend.

Vira parte do númeroIt becomes part of the number

A compra entra na fatura reservada, e a tela inicial mostra o que sobra de verdade.The purchase goes into the reserved card bill, and the home screen shows what's really left.

Por quêWhyO saldo vem do banco, e não da soma das transações, porque juros e IOF nunca viram lançamento. E o disponível nunca conta renda que ainda vai entrar, porque ela pode atrasar ou não vir.The balance comes from the bank, not from adding up transactions, because interest and taxes never become entries. And the available amount never counts income that's still to come, because it can be late or not come at all.

Daqui até o fechamentoFrom here to the closing date

O segundo número da tela é uma projeção, o disponível mais a renda já confirmada, menos o que ainda costumo gastar até o fechamento. Esse gasto é a mediana do mesmo trecho dos ciclos anteriores, alinhados pelo fechamento, porque os ciclos têm tamanhos diferentes. Uma assinatura é sugerida quando o mesmo lugar aparece em três meses seguidos, e só passa a ser descontada depois que eu confirmo.The second number on the screen is a forecast, the available amount plus income already confirmed, minus what I usually still spend before the closing date. That spending is the median of the same stretch in previous cycles, lined up by the closing date, because cycles have different lengths. A subscription is suggested when the same place shows up three months in a row, and it's only deducted after I confirm it.

Em voltaAround it

O app só lê, não move dinheiro. A entrada é só pela conta Google, numa lista fechada de e-mails. Os dados ficam num banco na nuvem, com uma cópia diária. A lógica do dinheiro fica separada da tela e é escrita junto com os testes, 655 ao todo, com todo valor guardado em centavos inteiros.The app only reads, it doesn't move money. Sign-in is only through a Google account, on a closed list of e-mails. The data lives in a cloud database, with a daily backup. The money logic is kept apart from the screens and written together with its tests, 655 in all, with every amount stored in whole cents.

Limites que eu conheçoLimits I know about

  • Um cartão só. Com dois cartões de fechamentos diferentes não existe um ciclo único.One card only. With two cards closing on different days there's no single cycle.
  • Sincronizar fora do horário pede, antes, atualizar a conexão com o banco.Syncing outside the schedule first requires refreshing the bank connection.
  • O backup roda no meu computador. Se ele estiver desligado no horário, aquele dia fica sem cópia.The backup runs on my computer. If it's off at that time, that day has no copy.

Como foi feitoHow it was madeO Norte foi feito com um assistente de IA no desenvolvimento. Eu penso o app e tomo as decisões, da ideia à lógica do dinheiro e ao que cada tela precisa mostrar. A IA escreve parte do código e o visual provisório a partir do que eu defino, e eu reviso e testo cada parte.Norte was built with an AI coding assistant. I design the app and make the decisions, from the idea to the money logic and what each screen needs to show. The AI writes part of the code and the provisional design from what I define, and I review and test every part.

VersõesVersions

Registro do desenvolvimento, da versão mais recente até a primeira.A record of development, from the latest version back to the first.

em andamentoin progress

CorrigindoFixing

  • Erros e problemas encontrados no uso diário.Bugs and problems found in daily use.

ModificandoChanging

  • Acabamento visual das telas.Visual polish across the screens.
  • Ajustes nas funcionalidades que já existem.Adjustments to the features that already exist.
0.15.0

Aba TarefasTasks tab

AdicionadoAdded

  • Fila de tarefas ordenada sozinha, pela importância, pelo prazo e pelo tempo que cada uma pede.A task queue that sorts itself by importance, deadline and how much time each one needs.
  • O motivo da posição de cada tarefa, escrito em uma frase.The reason for each task's position, written in one sentence.
  • Fixar, começar ou adiar uma tarefa, em vez de arrastar.Pin, start or snooze a task, instead of dragging it.

ModificadoChanged

  • Barra de baixo com seis abas, Hoje, Agenda, Tarefas, Faculdade, Estágio e Mais.Bottom bar with six tabs, Today, Calendar, Tasks, University, Internship and More.
The Organizer's “Tasks” screen, with the task suggested for right now highlighted and the next ones in the queue below
0.14.0

Nova interfaceNew interface

ModificadoChanged

  • Hoje, Agenda, Faculdade e Estágio com cartões, faixa de estado e destaques.Today, Calendar, University and Internship with cards, a status strip and highlights.
The Organizer's “Today” screen, with the day's next appointment highlighted, the day's list and the tasks
0.13.0

AcabamentoFinishing touches

AdicionadoAdded

  • Desfazer depois de apagar ou concluir.Undo after deleting or completing.
  • Histórico do estágio.Internship history.

RemovidoRemoved

  • A versão para computador, que eu não usava.The desktop version, which I didn't use.

ModificadoChanged

  • Aparência, Inbox, notificações e widget revistos um por um.Appearance, Inbox, notifications and widget reviewed one by one.
  • Verde passou a significar uma coisa só no app, saldo de horas positivo.Green now means only one thing in the app, a positive hours balance.
0.12.0

Hoje, Agenda e Faculdade refeitasToday, Calendar and University rebuilt

ModificadoChanged

  • Hoje resume o dia em uma linha, com as concluídas e uma prévia de amanhã.Today sums up the day in one line, with what's done and a preview of tomorrow.
  • A semana da Agenda vai de domingo a sábado, com conflito de horário e deslocamento na própria linha do dia.The Calendar week runs from Sunday to Saturday, with time conflicts and travel on the day's own line.
  • Risco de reprovação por falta em três tons, com o limite de faltas numa barra e a grade da semana.Risk of failing for absences in three shades, with the absence limit as a bar and the week's timetable.

CorrigidoFixed

  • Valores em dinheiro guardados em centavos, sem erro de arredondamento.Money amounts stored in cents, with no rounding errors.
  • Saldo de horas contando só os dias já fechados.Hours balance counting only days that are already closed.
0.11.0

Primeira versão de uso diárioFirst version in daily use

Instalada no celular, passou a ser o lugar onde organizo a semana.Installed on my phone, it became the place where I plan my week.

AdicionadoAdded

  • Versão instalável para Android.An installable Android version.

ModificadoChanged

  • Só as permissões que o app usa de verdade. Ele não acessa a internet e tudo fica no aparelho.Only the permissions the app really uses. It doesn't access the internet and everything stays on the device.
0.10.0

Planejamento e calendários externosPlanning and external calendars

AdicionadoAdded

  • Proposta de blocos de tarefa no tempo livre, respeitando quanto cabe em cada dia.Suggested task blocks in free time, respecting how much fits in each day.
  • Leitura dos calendários do celular, sem alterar nada neles.Reading the phone's calendars, without changing anything in them.
  • Deslocamento entre compromissos, com aviso da hora de sair.Travel between appointments, with a reminder of when to leave.
0.9.0

IC, projetos e conhecimentoResearch, projects and knowledge

AdicionadoAdded

  • Área da iniciação científica, com tarefas e eventos ligados à pesquisa e referências guardadas no aparelho.An area for my undergraduate research, with tasks and events tied to the research and references stored on the device.
  • Projetos, com as próprias tarefas e recursos.Projects, with their own tasks and resources.
  • Conhecimento, ligado aos projetos.Knowledge, linked to the projects.
0.8.0

EstágioInternship

AdicionadoAdded

  • Perfil do estágio.Internship profile.
  • Entrada e saída, com pausas e atividades.Clock-in and clock-out, with breaks and activities.
  • Horas do mês, com meta.Hours for the month, with a target.
  • Aviso de sessões sobrepostas.A warning for overlapping sessions.
0.7.0

Importação assistidaAssisted import

AdicionadoAdded

  • Importação de PDF com texto, de foto da grade e de CSV. A leitura da foto acontece no próprio aparelho.Import from text PDFs, from a photo of the timetable and from CSV. The photo is read on the device itself.
  • Revisão antes de aplicar, mostrando de onde veio cada dado e a confiança.A review before applying, showing where each item came from and how confident the reading is.
0.6.0

Notas e avaliaçõesGrades and assessments

AdicionadoAdded

  • Avaliações de cada disciplina.Assessments for each course.
  • Cálculo de notas, com quanto falta para passar.Grade calculation, with how much is still needed to pass.
0.5.0

FaculdadeUniversity

AdicionadoAdded

  • Semestres, disciplinas e horários.Terms, courses and timetables.
  • Aulas na agenda e no próximo compromisso.Classes in the calendar and in the next appointment.
  • Faltas e frequência, com o risco de reprovação por falta.Absences and attendance, with the risk of failing for absences.
The Organizer's “University” screen, with the term's progress, the next class and the courses with the absences in each
0.4.0

Recorrência, calendário e widgetsRecurrence, calendar and widgets

AdicionadoAdded

  • Eventos que se repetem, com exceções em datas específicas.Repeating events, with exceptions on specific dates.
  • Calendário diário, semanal e mensal.Daily, weekly and monthly calendar.
  • Widgets na tela inicial, com o próximo compromisso, o dia e atalhos.Home screen widgets, with the next appointment, the day and shortcuts.
Notebook page with the drawing of the calendar widgets on the phone's home screen
The Organizer's “Calendar” screen, with the week at the top, Tuesday's classes in time order and the tasks with deadlines
0.3.0

Lembretes e notificaçõesReminders and notifications

AdicionadoAdded

  • Lembretes com notificação, que funcionam sem internet.Reminders with notifications, which work without internet.

CorrigidoFixed

  • O app fechava ao abrir em alguns casos.The app closed on launch in some cases.
  • Lembretes de um evento editado não eram reagendados.Reminders for an edited event weren't rescheduled.
0.2.0

Tarefas, eventos e InboxTasks, events and Inbox

AdicionadoAdded

  • Tarefas e eventos.Tasks and events.
  • Inbox, para anotar rápido e organizar depois.Inbox, to jot things down quickly and organize them later.
  • Agenda do dia.The day's schedule.
0.1.0

FundaçãoFoundation

AdicionadoAdded

  • Uma base só para Android e computador.A single codebase for Android and desktop.
  • Dados guardados no aparelho, funcionando sem internet.Data stored on the device, working without internet.
  • Sincronização entre aparelhos já prevista, testada contra um servidor de teste.Sync between devices already planned, tested against a test server.
  • Sistema de design e navegação que se adapta ao tamanho da tela.A design system and navigation that adapts to the screen size.
0.0.0

Controle de faltasAttendance tracker

AdicionadoAdded

  • Marcar, em cada aula, se faltei ou não.Mark, for each class, whether I was absent or not.
  • Cálculo da frequência de cada disciplina.Attendance calculated for each course.

Como surgiuHow it started

Esse material nasceu na monitoria de Fundamentos de Programação. Eu queria algo que ajudasse os alunos que eu atendia, e também porque sempre considerei que escrever e explicar o conteúdo era um bom jeito de eu mesmo entender melhor alguns conceitos.This material was born in my teaching assistant work for Fundamentals of Programming. I wanted something that would help the students I supported, and also because I always felt that writing and explaining the content was a good way for me to understand some concepts better myself.

No começo eu imaginava algo bem menor. Comecei em maio de 2026, num repositório que ficava só no meu computador, e usava ele como base nas aulas e nas ajudas. Conforme fui escrevendo, vi que dava para juntar quase tudo que um aluno precisa num lugar só, e o material foi crescendo junto com a monitoria.At first I pictured something much smaller. I started in May 2026, in a repository that lived only on my computer, and used it as a base in the lessons and help sessions. As I kept writing, I saw I could gather almost everything a student needs in one place, and the material grew along with the teaching assistant work.

Montei um FAQ com as dúvidas que apareciam nos atendimentos. Algumas iam além do que a disciplina pedia. Em vez de deixar esses assuntos de fora, criei apêndices para quem tivesse curiosidade de continuar. Nunca quis que o material servisse só para passar na prova. Queria que ele também mostrasse um caminho para quem começasse a gostar de programação.I put together a FAQ from the questions that came up in the sessions. Some went beyond what the course asked for. Instead of leaving those topics out, I created appendices for anyone curious enough to keep going. I never wanted the material to be just for passing the exam. I wanted it to also show a path for anyone starting to enjoy programming.

Quando a monitoria acabou, revisei tudo e publiquei no GitHub, aberto para qualquer pessoa. Depois entrei em contato com professores da disciplina, e alguns passaram a indicar o repositório para os alunos deles, o que deu ao projeto uma continuidade que eu não esperava.When the teaching assistant work ended, I reviewed everything and published it on GitHub, open to anyone. Later I reached out to professors of the course, and some of them started recommending the repository to their students, which gave the project a continuity I didn’t expect.

Ainda quero acrescentar material, como mais provas antigas e mais projetos, corrigir o que puder ser melhorado e continuar atualizando conforme ele for usado. Como é aberto, qualquer pessoa pode sugerir uma correção ou inserção de alguma coisa.I still want to add material, like more old exams and more projects, fix whatever can be improved and keep updating it as it gets used. Since it’s open, anyone can suggest a correction or add something.

VersõesVersions

Registro do desenvolvimento, da versão mais recente até a primeira.A record of development, from the latest version back to the first.

em andamentoin progress

AdicionandoAdding

  • Melhorias pedidas no uso diário das duas empresas.Improvements asked for in the two companies' daily use.

CorrigindoFixing

  • Erros encontrados no uso.Bugs found in use.
0.10.0

Computador e segurançaDesktop and security

AdicionadoAdded

  • Versão própria para tela larga, com barra lateral.A layout of its own for wide screens, with a sidebar.
  • Aviso antes de descartar uma alteração não salva.A warning before discarding an unsaved change.
  • Número da versão visível no app.The version number visible in the app.

ModificadoChanged

  • Logo e assinatura conferidos no envio, pelo tipo e pelo tamanho.Logo and signature checked on upload, by type and size.
  • A cópia de segurança deixou de levar dados de senha.The backup no longer carries password data.
0.9.0

Situação da proposta e contaProposal status and account

AdicionadoAdded

  • Situação de cada proposta, enviada, aceita ou recusada.The status of each proposal, sent, accepted or declined.
  • Recuperar a senha pelo e-mail e ver a força da senha ao criar.Password recovery by e-mail, and password strength shown when creating one.
  • Política de privacidade e exclusão da conta.Privacy policy and account deletion.

CorrigidoFixed

  • O valor do Pix e o valor total podiam sair diferentes. Agora os dois vêm da mesma conta.The Pix amount and the total could come out different. Now both come from the same calculation.
  • Colar um valor completo, como “R$ 1.250,00”, agora funciona.Pasting a full amount, like “R$ 1.250,00”, now works.
  • A numeração não volta mais para baixo do maior número já emitido.Numbering no longer goes back below the highest number already issued.
  • Editar o mesmo orçamento em duas abas avisa o conflito em vez de sobrescrever.Editing the same quote in two tabs warns about the conflict instead of overwriting.
  • Campos vazios da empresa não aparecem mais no cabeçalho do PDF.Empty company fields no longer show up in the PDF header.
0.8.0

Nova interfaceNew interface

ModificadoChanged

  • Visual refeito, com ícones próprios e menos caixas.Visuals redone, with its own icons and fewer boxes.
  • Cadastro da empresa em passos.Company sign-up in steps.
  • Cor da interface escolhida por empresa.Interface colour chosen per company.

AdicionadoAdded

  • Ícone do app, uma folha dobrada com o total em destaque.App icon, a folded sheet with the total highlighted.
Current app home screen, highlighting the month's total and recent quotes
0.7.0

Clientes e catálogoClients and catalogue

AdicionadoAdded

  • Tela de clientes.Clients screen.
  • Catálogo de itens.Item catalogue.
  • Salvar cliente ou item novo sem sair do orçamento.Save a new client or item without leaving the quote.
  • Endereço preenchido pelo CEP.Address filled in from the postal code.
  • Desconto, frete e rascunho de orçamento.Discount, shipping and quote drafts.
  • Cópia de segurança dos dados.Data backup.
0.6.0

PDF refeitoPDF redone

ModificadoChanged

  • Cabeçalho centralizado.Centred header.
  • Total logo depois do último item e bloco final preso ao rodapé da página.Total right after the last item, and the closing block pinned to the bottom of the page.
  • QR do Pix sempre no mesmo lugar.Pix QR code always in the same place.

AdicionadoAdded

  • Assinatura opcional.Optional signature.
  • O PDF gerado fica guardado no app, para abrir de novo pelo histórico.The generated PDF is kept in the app, to open again from the history.
First page of a quote PDF generated by the app, with fictitious demo data
0.5.0

ReescritaRewrite

AdicionadoAdded

  • Cadastro, para os responsáveis de cada empresa gerarem os próprios PDFs.Sign-up, so the people in charge at each company can make their own PDFs.
  • Conta opcional, com sincronização entre aparelhos.Optional account, with sync across devices.
  • Instalação no celular e no computador.Installable on phone and computer.
  • PDF gerado pelo próprio app, sem depender da impressão do navegador.PDF generated by the app itself, without relying on the browser's print.

ModificadoChanged

  • Os dados passaram a ficar guardados no aparelho, e o app continua funcionando sem internet.Data is now stored on the device, and the app still works without internet.
0.4.0

Validade e campos obrigatóriosValidity and required fields

AdicionadoAdded

  • Validade da proposta nas duas empresas.Proposal validity for both companies.
  • Máscara de CPF e CNPJ.CPF and CNPJ input masks.
  • Aviso dos campos obrigatórios antes de gerar.A warning about required fields before generating.

ModificadoChanged

  • Visual novo da tela inicial.A new look for the home screen.
0.3.0

Segunda empresaSecond company

ModificadoChanged

  • O modelo deixou de ser fixo. Logo, dados e detalhes passaram a ser configuráveis para cada empresa.The template stopped being fixed. Logo, details and settings became configurable per company.

AdicionadoAdded

  • Escolha da empresa antes de começar o orçamento.Choosing the company before starting the quote.

CorrigidoFixed

  • O PDF ficava desalinhado e pouco agradável em alguns orçamentos, principalmente com muitos itens ou textos longos.The PDF came out misaligned and unpleasant in some quotes, mostly ones with many items or long texts.
Commercial terms in the HTML version, with payment shortcuts, notes, delivery time and warranty
0.2.0

Layout flexívelFlexible layout

ModificadoChanged

  • O PDF deixou de usar posições fixas e passou a aceitar mais de uma página.The PDF stopped using fixed positions and started handling more than one page.

CorrigidoFixed

  • Itens do fim da lista eram cortados quando o orçamento passava do tamanho da página.Items at the end of the list were cut off when the quote ran past the page.
0.1.0

Primeira versãoFirst version

Um arquivo HTML só, sem servidor, com um modelo fixo.A single HTML file, no server, with a fixed template.

AdicionadoAdded

  • Formulário com cliente, itens e condições.A form with client, items and terms.
  • PDF gerado pela impressão do navegador.PDF generated through the browser's print.
  • Funcionamento sem internet.Works without internet.
The quote generator's first version, a form on a single page

VersõesVersions

Registro do desenvolvimento, da versão mais recente até a primeira.A record of development, from the latest version back to the first.

em andamentoin progress

AdicionandoAdding

  • Um classificador próprio para as classes específicas de caminhões e ônibus, ainda em treinamento.A classifier of my own for the specific truck and bus classes, still in training.
3.0.0

Classificador próprioIn-house classifier

ModificadoChanged

  • A classificação geral, entre caminhão, ônibus, moto, carro, pedestre e ciclista, passou para uma CNN modificada e treinada por mim.General classification, between truck, bus, motorcycle, car, pedestrian and cyclist, moved to a modified CNN that I trained.

AdicionadoAdded

  • Conjunto próprio de recortes de veículos, tirados das próprias detecções, para treinar e testar.An in-house set of vehicle crops, taken from the detections themselves, for training and testing.
  • 99,87% de acerto na classificação geral, medido no conjunto de teste.99.87% accuracy in general classification, measured on the test set.
A real crop of a truck with a trailer, detected by the system on a highway
2.3.0

Noite e clima ruimNight and bad weather

ModificadoChanged

  • Ajustes acumulados na detecção e no rastreamento, pensando nas imagens de noite e com clima ruim.Accumulated adjustments to detection and tracking, aimed at night-time and bad-weather footage.
2.2.0

Rastreamento e recortesTracking and crops

ModificadoChanged

  • Ajustes no rastreador, para o mesmo veículo não se partir em vários rastros.Tracker adjustments, so the same vehicle doesn't break into several tracks.

AdicionadoAdded

  • O melhor recorte de cada veículo ao longo do trajeto, usado na classificação.The best crop of each vehicle along its path, used for classification.
2.1.0

Deduplicação antes do rastreamentoDeduplication before tracking

AdicionadoAdded

  • Remoção das detecções repetidas do mesmo veículo antes do rastreamento, para ele não ser contado duas vezes.Removal of repeated detections of the same vehicle before tracking, so it isn't counted twice.
2.0.0

Novo detectorNew detector

ModificadoChanged

  • O detector antigo deu lugar a um transformer de detecção treinado por mim.The old detector gave way to a detection transformer I trained.

AdicionadoAdded

  • Comparação com o detector antigo nos mesmos vídeos, rodada a rodada.Comparison with the old detector on the same videos, run by run.
1.0.0

Sistema originalOriginal system

AdicionadoAdded

  • Detector de uma família de modelos mais antiga.A detector from an older model family.
  • Rastreamento de cada veículo entre os quadros do vídeo.Tracking of each vehicle across the video frames.
  • Contagem quando o veículo cruza uma linha.Counting when the vehicle crosses a line.
  • Classe decidida por votação entre as detecções de cada veículo.Class decided by a vote among each vehicle's detections.

Como surgiuHow it started

No estágio, eu costumava corrigir bugs, fazer mudanças nos softwares, criar programas auxiliares para algumas tarefas e cuidar da manutenção de alguns aparelhos. Meu contato com a IA de contagem de veículos era só com o que ela gerava, os relatórios e os arquivos para verificação manual. Aos poucos fui perguntando sobre ela e me interessando mais.At my internship, I usually fixed bugs, made changes to the software, built helper programs for some tasks and looked after the maintenance of some of the equipment. My contact with the vehicle counting AI was only through what it produced, the reports and the files for manual checking. Little by little I started asking about it and getting more interested.

Era um dos sistemas mais usados da empresa, feito por ela mesma. Ele recebia algumas atualizações, mas o cerne continuava o mesmo, e a equipe comentava bastante que ele estava dando problemas. Ao mesmo tempo, na iniciação científica, eu estava estudando e pesquisando IA. Vendo a forma como o modelo detectava os veículos, eu já tinha estudado o suficiente para saber que dava para melhorar, mudando bastante o processo para a detecção ficar melhor.It was one of the company’s most used systems, built in-house. It got a few updates, but its core stayed the same, and the team often mentioned that it was having problems. At the same time, in my undergraduate research, I was studying and researching AI. Seeing the way the model detected vehicles, I had already studied enough to know it could be improved, by changing the process quite a bit so detection would get better.

Então fui conversar com meu supervisor. Falei dos problemas que eles comentavam, disse que acreditava ser capaz de melhorar aquilo e que conseguiria tomar conta disso. Ele acreditou no meu conhecimento e me deu um voto de confiança, e em 19 de agosto de 2026 eu assumi sozinho a melhoria da IA. Eu queria aprender mais, entender melhor e aplicar o que vinha aprendendo na pesquisa, e já tinha uma ideia de como faria.So I went to talk to my supervisor. I brought up the problems they kept mentioning, said I believed I could improve it and that I could take charge of it. He trusted my knowledge and gave me a vote of confidence, and on 19 August 2026 I took over improving the AI on my own. I wanted to learn more, understand it better and apply what I was learning in my research, and I already had an idea of how I would do it.

A base do programa continuou. Troquei os modelos, coordenei a construção do conjunto de dados e treinei os modelos. Eu já treinava modelos para estudar, mas esse foi o primeiro grande trabalho fora dos estudos, e o primeiro conjunto de dados que montei quase do zero, com uma quantidade enorme de dados.The base of the program stayed. I replaced the models, coordinated building the dataset and trained the models. I already trained models to study, but this was my first big piece of work outside my studies, and the first dataset I built almost from scratch, with a huge amount of data.

O treinamento, as decisões, as estatísticas e as análises ficaram 100% comigo. Para montar o conjunto de dados e fazer as contagens manuais, eu coordenava, escolhendo quais eu queria e guiando quem faria, e recebia os dados. A contagem manual sempre existiu na empresa, e usei como régua para comparar cada mudança. Também usei IA como assistente para implementar alguns testes, códigos e mudanças, sempre guiada por mim, e eu revisava o que ela fazia.The training, the decisions, the statistics and the analysis were 100% mine. To build the dataset and do the manual counts, I coordinated, choosing which ones I wanted and guiding whoever would do them, and received the data. The manual count had always existed at the company, and I used it as the yardstick to compare every change. I also used AI as an assistant to implement some tests, code and changes, always guided by me, and I reviewed what it did.

Desde o começo de outubro a versão nova é usada oficialmente, e já mostrou ganhos claros. Mas ainda estou evoluindo. Quero montar um classificador muito especializado nas classes de veículos que a empresa usa, porque não existe, pelo menos que eu ou alguém da empresa tenha encontrado, nenhum modelo de código aberto nem conjunto de dados público que classifique os veículos dessa forma. Também quero deixar o processamento o mais rápido que eu conseguir.Since early October the new version has been officially in use, and it has already shown clear gains. But I’m still improving it. I want to build a highly specialized classifier for the vehicle classes the company uses, because there’s no open-source model or public dataset that classifies vehicles this way, at least none that I or anyone at the company has found. I also want to make the processing as fast as I can.

Como funcionaHow it works

Do vídeo da rodovia aos dois arquivos que a empresa usa. Em cada etapa, o que ela faz e por que é assim.From the highway video to the two files the company uses. At each stage, what it does and why it works that way.

O caminho de um veículoA vehicle's path

O sistema recebe vídeos gravados de câmeras fixas e as linhas de contagem de cada câmera. Cada veículo passa por sete etapas.The system takes recorded videos from fixed cameras and each camera's counting lines. Each vehicle goes through seven stages.

1DetecçãoDetection

Um transformer de detecção procura os veículos em todos os quadros do vídeo e marca cada um com uma caixa, uma classe ampla e uma confiança.A detection transformer looks for vehicles in every frame of the video and marks each one with a box, a broad class and a confidence.

Por quêWhyTroquei o detector antigo na primeira semana, porque a família dele ficava atrás de outras nos testes que eu já tinha feito na iniciação científica. Foi a mudança que mais moveu o resultado. Pular quadros deixaria tudo duas vezes mais rápido, mas o rastro se perdia, então todos os quadros são processados.I replaced the old detector in the first week, because its model family lagged behind others in tests I had already run in my research. It was the change that moved the results the most. Skipping frames would make everything twice as fast, but tracks got lost, so every frame is processed.

2DeduplicaçãoDeduplication

Duas caixas que se sobrepõem muito, com tamanhos parecidos e centros próximos, são o mesmo veículo, mesmo que o detector tenha dado classes diferentes. Fica a de maior confiança, sem fundir nem alterar nenhuma.Two boxes that overlap heavily, with similar sizes and close centres, are the same vehicle, even if the detector gave them different classes. The one with the highest confidence stays, without merging or changing either.

Por quêWhyO detector novo não elimina caixas repetidas, e o mesmo veículo virava dois rastros e era contado duas vezes. Juntar os rastros depois também foi testado, e era um custo a mais à toa. Limpar antes de rastrear resolve na origem.The new detector doesn't remove repeated boxes, and the same vehicle turned into two tracks and was counted twice. Merging tracks afterwards was also tested, and it was extra cost for nothing. Cleaning up before tracking fixes it at the source.

3RastreamentoTracking

O rastreador liga as caixas de um quadro às do seguinte e dá a cada veículo uma identidade que dura o trajeto inteiro. Um veículo que some por alguns quadros, atrás de outro, tem um período de tolerância antes de ser dado como perdido.The tracker links the boxes in one frame to those in the next and gives each vehicle an identity that lasts the whole way. A vehicle that disappears for a few frames, behind another one, gets a grace period before it's considered lost.

Por quêWhyUm rastro recém-criado era descartado se não fosse reencontrado logo no quadro seguinte, e veículos novos sumiam no primeiro tropeço. Agora ele tem a mesma tolerância que um rastro antigo, e um teste garante isso.A newly created track was dropped if it wasn't found again in the very next frame, and new vehicles vanished at the first stumble. Now it gets the same grace period as an older track, and a test guarantees it.

4CruzamentoCrossing

Cada câmera tem linhas de contagem desenhadas sobre a imagem, com o sentido de cada uma. Quando o caminho de um veículo cruza a linha, ele é contado naquele sentido.Each camera has counting lines drawn over the image, each with its direction. When a vehicle's path crosses the line, it's counted in that direction.

5Escolha do recortePicking the crop

Enquanto o veículo passa, o sistema guarda os melhores recortes dele, com uma nota que soma a confiança, o tamanho, a nitidez e a distância da borda da imagem. Isso precisa acontecer durante o vídeo, porque depois só a posição fica guardada.While the vehicle passes, the system keeps its best crops, with a score that adds up confidence, size, sharpness and distance from the edge of the image. This has to happen during the video, because afterwards only the position is kept.

6ClassificaçãoClassification

A classe ampla sai de uma votação entre todas as detecções do veículo e nunca é apagada. Quando ela é caminhão, carro, moto ou ônibus, o melhor recorte vai para uma CNN modificada e treinada por mim, uma única vez, quando o rastro termina, e a resposta dela é a classe que vai para o arquivo.The broad class comes from a vote across all of the vehicle's detections and is never erased. When it's truck, car, motorcycle or bus, the best crop goes to a modified CNN that I trained, a single time, when the track ends, and its answer is the class that goes into the file.

Por quêWhyAs classes de veículo são muito próximas, e a votação do detector, que precisa achar e classificar ao mesmo tempo, não resolvia as confusões. Um modelo só para classificar se sai bem melhor. Ao carregar, ele é conferido contra as classes e o formato esperados, e o sistema se recusa a rodar se não baterem.Vehicle classes are very close to each other, and the detector's vote, which has to find and classify at the same time, couldn't sort out the confusions. A model that only classifies does much better. When it loads, it's checked against the expected classes and format, and the system refuses to run if they don't match.

7SaídaOutput

Cada vídeo gera dois arquivos, um no formato que os programas de conferência da empresa já leem e outro detalhado, com cada veículo e como ele foi classificado.Each video produces two files, one in the format the company's checking software already reads and a detailed one, with each vehicle and how it was classified.

Por quêWhyQuem opera o sistema continua com a mesma tela e o mesmo fluxo, e o arquivo antigo manteve o formato. A troca inteira aconteceu sem ninguém reaprender nada e sem mexer nos outros programas da empresa.Whoever runs the system still has the same screen and the same workflow, and the old file kept its format. The whole switch happened without anyone relearning anything and without touching the company's other software.

Os dadosThe data

Não existe conjunto de dados público nem modelo aberto para as classes que a empresa usa. Os recortes saem das próprias detecções do sistema, em vídeos que os funcionários já tinham revisado e classificado, e eu reviso e limpo cada lote antes de entrar no conjunto. Ele tem a cara exata dos vídeos que o sistema processa.There's no public dataset or open model for the classes the company uses. The crops come from the system's own detections, in videos the staff had already reviewed and classified, and I review and clean each batch before it goes into the dataset. It looks exactly like the videos the system processes.

Como uma mudança é testadaHow a change is tested

Toda mudança roda nos mesmos vídeos que a versão anterior e é comparada com a contagem manual de dias inteiros, a cada 30 minutos e por classe, e com a revisão das detecções nos programas da empresa. Primeiro num trecho de 30 a 60 minutos, e só as melhores configurações vão para o dia inteiro. Foram mais de 100 rodadas assim, e a comparação com o sistema original está no index.html.Every change runs on the same videos as the previous version and is compared with the manual count of whole days, every 30 minutes and by class, and with a review of the detections in the company's software. First on a 30 to 60 minute stretch, and only the best settings move on to the whole day. There were about 103 rounds like this, and the comparison with the original system is in index.html.

Por quêWhyUma mudança pode melhorar o dia e piorar a noite, ou cortar duplicados e perder veículos. Sem uma referência fixa, não dá para saber. Por isso cada mudança também é uma opção de configuração, e voltar à anterior é trocar uma linha.A change can improve the day and worsen the night, or cut duplicates and lose vehicles. Without a fixed reference, there's no way to tell. That's why each change is also a configuration option, and going back to the previous one is a one-line change.

GarantiasGuarantees

A prévia do vídeo na tela só lê o que já foi decidido em cada quadro, e um teste confere que ela nunca muda a contagem. O motor antigo ficou no repositório como histórico, sem nenhum módulo novo depender dele. São 540 testes em 80 arquivos.The on-screen video preview only reads what was already decided in each frame, and a test checks that it never changes the count. The old engine stayed in the repository as history, with no new module depending on it. There are 540 tests in 80 files.

Limites que eu conheçoLimits I know about

  • O sistema processa vídeos já gravados, não ao vivo.The system processes recorded videos, not live ones.
  • Processar todo quadro com um detector grande leva tempo, e a velocidade é uma das próximas frentes.Processing every frame with a large detector takes time, and speed is one of the next areas of work.
  • Os tipos de caminhão e de ônibus ainda dependem de um classificador em treinamento.Truck and bus types still depend on a classifier in training.

esc