Finding the words for people's experience
Encontrando as palavras para contar sua experiência
Writing a CV can be difficult even when you have plenty to put in it. You know what you've done, but deciding what matters and how to explain it is another task. If you're looking for your first job, it can be hard to know what counts as experience at all.
I built and run CV Maker to help with that. It guides people through describing their experience, then uses AI to turn their answers into a draft they can review and edit.
People with work experience can start with an existing CV. Those starting their careers get questions about coursework, personal projects, small jobs, and community activities. In both cases, the focus is on what they actually did, rather than how impressive their job title sounds.
Escrever um currículo pode ser difícil mesmo quando você tem bastante coisa para colocar nele. Você sabe o que fez, mas decidir o que vale destacar e como explicar já é outra tarefa. Para quem está procurando o primeiro emprego, pode ser difícil até saber o que conta como experiência.
Criei e mantenho o CV Maker para ajudar nisso. Ele orienta as pessoas a descrever suas experiências e usa IA para transformar as respostas em um rascunho que elas podem revisar e editar.
Quem já tem experiência profissional pode começar com um currículo existente. Quem está começando recebe perguntas sobre trabalhos de faculdade, projetos pessoais, pequenos serviços e atividades na comunidade. Nos dois casos, o foco está no que a pessoa fez, e não em ter um cargo com um nome impressionante.
A draft you can make your own
Um rascunho para deixar com a sua cara
After payment, users work through a questionnaire, with optional follow-up questions to fill in details. They can name a target role to give the writing more direction, or leave it open. Bilingual sessions include a translation step.
Once the draft is ready, users can rewrite the text, try different templates, adjust colors, and preview the PDF before exporting it. The generated text is a starting point. The person whose name goes on the CV decides what stays.
That also shapes how the AI works. The writing process includes checks for unsupported claims and incorrectly formatted output, with a limited number of correction attempts. Those checks help catch problems, but they don't replace a careful read. The original draft and the user's edits are saved separately.
Depois do pagamento, a pessoa responde a um questionário, com perguntas complementares opcionais para acrescentar detalhes. Ela pode indicar um cargo de interesse para direcionar a escrita ou seguir sem definir um. As sessões bilíngues incluem uma etapa de tradução.
Com o rascunho pronto, é possível reescrever o texto, experimentar modelos, ajustar as cores e visualizar o PDF antes de exportar. O texto gerado é um ponto de partida. Quem vai colocar o nome no currículo decide o que fica.
Isso também orienta o funcionamento da IA. O processo de escrita inclui verificações para identificar afirmações sem respaldo nas respostas e problemas no formato do conteúdo gerado, com um número limitado de tentativas de correção. Essas verificações ajudam a encontrar problemas, mas não substituem uma leitura cuidadosa. O rascunho original e as edições da pessoa são salvos separadamente.
The interface calls the API. Sessions are saved; queued jobs run in AI and PDF workers. Final PDFs go to storage.A interface chama a API. Sessões ficam salvas; tarefas vão aos workers de IA e PDF. Os PDFs finais vão para o armazenamento.
- Web interfaceInterface webNext.js · questionnaire and reviewNext.js · questionário e revisão
- Application APIAPI da aplicaçãoFastAPI · sessions and job progressFastAPI · sessões e progresso
- Saved workTrabalho salvoPostgreSQL · inputs, output, editsPostgreSQL · respostas e edições
- Job queueFila de tarefasRedis · queued work and progressRedis · tarefas e progresso
- AI workerWorker de IAParsing, writing, and translationLeitura, escrita e tradução
- PDF workerWorker de PDFPlaywright · final PDF exportsPlaywright · exportações finais
- Finished filesArquivos finaisCloudflare R2 · PDF storageCloudflare R2 · PDFs
Behind the editor
Por trás do editor
A lot of the engineering is about what happens while someone waits. Writing a CV, translating it, and producing a PDF take time. Questionnaire progress is saved, and checkpoints in the writing process allow recovery if generation is interrupted. The browser receives progress updates and can fall back to checking the job's status if the live connection drops.
Next.js runs the interface, while FastAPI coordinates the application. PostgreSQL stores the answers, generated content, and edits. Redis queues the slower work for background workers, with AI tasks and final PDF exports handled separately.
Playwright turns HTML templates into PDFs, and Cloudflare R2 stores the finished files. Final exports have a dedicated worker, while previews still involve the API. Keeping those paths distinct matters when managing memory use, response times, and retries. Docker Compose brings the services together, with Nginx routing traffic and database migrations keeping the stored data aligned with the code.
Boa parte do trabalho de engenharia está no que acontece enquanto alguém espera. Escrever um currículo, traduzi-lo e gerar um PDF leva tempo. O progresso do questionário é salvo, e o processo de escrita tem pontos de recuperação para retomar o trabalho se a geração for interrompida. O navegador recebe atualizações de progresso e pode consultar o status da tarefa caso a conexão de atualizações ao vivo caia.
O Next.js cuida da interface, enquanto o FastAPI coordena a aplicação. O PostgreSQL armazena as respostas, o conteúdo gerado e as edições. O Redis organiza as tarefas mais demoradas em filas para processamento em segundo plano, com as tarefas de IA separadas da exportação dos PDFs finais.
O Playwright transforma os modelos HTML em PDFs, e o Cloudflare R2 armazena os arquivos prontos. As exportações finais têm um processo dedicado, chamado worker, enquanto as prévias ainda passam pela API. Essa separação importa na hora de gerenciar o uso de memória, os tempos de resposta e as novas tentativas após uma falha. O Docker Compose reúne os serviços, o Nginx direciona o tráfego e as migrações do banco mantêm a estrutura dos dados em sintonia com o código.
Why I enjoyed building it
Por que gosto de trabalhar nesse projeto
CV Maker brings together the parts of a product I like working on: helping someone through an unfamiliar task and building the systems that support them along the way. Payment confirmation, saved drafts, recovery, and downloads all need attention, even if they rarely get noticed when they work.
The part I find most interesting is how those details affect the experience. Someone needs to know whether their answers were saved, whether the work is still running, and what they can change before downloading the result. I want them to leave with a CV they've checked and feel comfortable putting their name on.
O CV Maker reúne partes do desenvolvimento de um produto em que gosto de trabalhar: ajudar alguém a realizar uma tarefa pouco familiar e construir os sistemas que dão suporte a esse processo. Confirmação de pagamento, rascunhos salvos, recuperação de falhas e downloads precisam de atenção, mesmo que quase ninguém perceba esses detalhes quando tudo funciona.
O que mais me interessa é como esses detalhes afetam a experiência de uso. A pessoa precisa saber se as respostas foram salvas, se o processamento continua e o que pode mudar antes de baixar o resultado. Quero que ela saia com um currículo que revisou e no qual se sinta à vontade para colocar o próprio nome.