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
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:
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