Neste desafio, você irá construir um agente de terminal em Node.js capaz de ler um arquivo grande de logs com streams, ingerir os dados em um banco SQLite e responder perguntas em linguagem natural usando IA para gerar consultas SQL seguras e respostas baseadas nos registros armazenados.
Estrutura, regras e requisitos do projeto
Use este checklist para ajudar a organizar a sua entrega
Confira os resultados esperados do projeto

Envie o projeto para ver a resolução
Ao enviar seu projeto, você poderá conferir os resultados esperados
Neste desafio, você irá construir uma aplicação de terminal em Node.js capaz de processar um arquivo de logs potencialmente grande, armazenar esses dados em um banco SQLite e responder perguntas em linguagem natural usando IA para criar consultas SQL.
O objetivo é praticar fundamentos do runtime do Node.js em um projeto que combina entrada e saída via terminal, leitura eficiente de arquivos grandes com streams, banco de dados nativo, variáveis de ambiente, testes e integração com um modelo de linguagem.
Times de tecnologia costumam lidar com grandes volumes de logs para entender comportamento de usuários, acessos, falhas, padrões de uso e métricas operacionais.
Neste projeto, você irá simular esse cenário a partir de um arquivo de logs de acesso. A aplicação deve ler esse arquivo de forma eficiente, ingerir os dados em um banco SQLite e disponibilizar um agente de terminal que permite fazer perguntas como:
Quantos acessos existem no banco? Quais empresas aparecem nos logs? Quais cargos acessaram o sistema recentemente? Qual cidade teve mais acessos?
A geração de um arquivo de logs falso pode ser usada apenas como apoio para desenvolvimento e testes. O propósito central do desafio é lidar com a leitura e o processamento de um arquivo grande sem carregá-lo inteiro em memória.
Depois da ingestão, a aplicação deve transformar a pergunta em uma consulta SQL, mostrar a query sugerida, pedir confirmação antes de executar e então gerar uma resposta textual baseada nos dados retornados.
Este desafio foi pensado para reforçar conceitos importantes do runtime do Node.js:
Ao final do desafio, a aplicação deve oferecer os seguintes recursos:
Use SQLite por meio do módulo nativo node:sqlite.
A aplicação deve criar uma tabela chamada access_logs com os seguintes campos:
CREATE TABLE IF NOT EXISTS access_logs ( ip TEXT NOT NULL, username TEXT NOT NULL, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT NOT NULL, location TEXT NOT NULL, job_area TEXT NOT NULL, company TEXT NOT NULL, job_title TEXT NOT NULL,
O projeto trabalha com um arquivo access.log contendo registros de acesso.
Cada linha do arquivo deve conter um objeto JSON independente, seguindo o formato JSON Lines:
{"ip":"192.168.0.1","username":"johndoe","first_name":"John","last_name":"Doe","email":"john@example.com","location":"Sao Paulo","job_area":"Engineering","company":"Rocketseat","job_title":"Developer","id":"uuid","timestamp":"2026-06-15T10:00:00.000Z"}
Para facilitar o desenvolvimento, você pode ter um script auxiliar de seed responsável por gerar registros falsos nesse formato. Esse script também deve seguir como forma de praticar a escrita de arquivos usando streams.
O script de ingestão é uma das partes centrais do desafio. Ele deve:
O script principal deve iniciar uma interface interativa no terminal.
Fluxo esperado:
A aplicação deve executar apenas consultas de leitura.
Bloqueie comandos como:
INSERT, UPDATE, DELETE, DROP, ALTER, CREATE, REPLACE, PRAGMA, ATTACH, DETACH, VACUUM
Também é recomendável orientar o modelo a:
Use perguntas como estas para testar a aplicação:
Neste desafio, você irá construir uma aplicação de terminal em Node.js capaz de processar um arquivo de logs potencialmente grande, armazenar esses dados em um banco SQLite e responder perguntas em linguagem natural usando IA para criar consultas SQL.
O objetivo é praticar fundamentos do runtime do Node.js em um projeto que combina entrada e saída via terminal, leitura eficiente de arquivos grandes com streams, banco de dados nativo, variáveis de ambiente, testes e integração com um modelo de linguagem.
Times de tecnologia costumam lidar com grandes volumes de logs para entender comportamento de usuários, acessos, falhas, padrões de uso e métricas operacionais.
Neste projeto, você irá simular esse cenário a partir de um arquivo de logs de acesso. A aplicação deve ler esse arquivo de forma eficiente, ingerir os dados em um banco SQLite e disponibilizar um agente de terminal que permite fazer perguntas como:
Quantos acessos existem no banco? Quais empresas aparecem nos logs? Quais cargos acessaram o sistema recentemente? Qual cidade teve mais acessos?
A geração de um arquivo de logs falso pode ser usada apenas como apoio para desenvolvimento e testes. O propósito central do desafio é lidar com a leitura e o processamento de um arquivo grande sem carregá-lo inteiro em memória.
Depois da ingestão, a aplicação deve transformar a pergunta em uma consulta SQL, mostrar a query sugerida, pedir confirmação antes de executar e então gerar uma resposta textual baseada nos dados retornados.
Este desafio foi pensado para reforçar conceitos importantes do runtime do Node.js:
Ao final do desafio, a aplicação deve oferecer os seguintes recursos:
Use SQLite por meio do módulo nativo node:sqlite.
A aplicação deve criar uma tabela chamada access_logs com os seguintes campos:
CREATE TABLE IF NOT EXISTS access_logs ( ip TEXT NOT NULL, username TEXT NOT NULL, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT NOT NULL, location TEXT NOT NULL, job_area TEXT NOT NULL, company TEXT NOT NULL, job_title TEXT NOT NULL,
O projeto trabalha com um arquivo access.log contendo registros de acesso.
Cada linha do arquivo deve conter um objeto JSON independente, seguindo o formato JSON Lines:
{"ip":"192.168.0.1","username":"johndoe","first_name":"John","last_name":"Doe","email":"john@example.com","location":"Sao Paulo","job_area":"Engineering","company":"Rocketseat","job_title":"Developer","id":"uuid","timestamp":"2026-06-15T10:00:00.000Z"}
Para facilitar o desenvolvimento, você pode ter um script auxiliar de seed responsável por gerar registros falsos nesse formato. Esse script também deve seguir como forma de praticar a escrita de arquivos usando streams.
O script de ingestão é uma das partes centrais do desafio. Ele deve:
O script principal deve iniciar uma interface interativa no terminal.
Fluxo esperado:
A aplicação deve executar apenas consultas de leitura.
Bloqueie comandos como:
INSERT, UPDATE, DELETE, DROP, ALTER, CREATE, REPLACE, PRAGMA, ATTACH, DETACH, VACUUM
Também é recomendável orientar o modelo a:
Use perguntas como estas para testar a aplicação: