Por que seu portfólio em C# decide tudo, ou Como não se perder entre centenas de currículos
\n\nVocê aprendeu a sintaxe, entendeu de classes, interfaces e até escreveu alguns programas de console. Parabéns, você deixou de ser um "zero". Mas o problema é: para uma vaga de desenvolvedor Junior C#, chegam 50 a 100 candidaturas. Como o RH ou o tech lead vai perceber que você é aquele diamante, e não mais um "garantia de emprego" de cursos?
\n\nA resposta é simples: seu portfólio em C#. Não uma lista de tecnologias, mas projetos vivos que podem ser tocados (ou pelo menos executados localmente). Neste artigo, reuni 7 ideias para portfólio de desenvolvedor C# — do simples ao nível médio de dificuldade. Cada ideia não é apenas "faça uma calculadora", mas um caso completo com explicações sobre por que é legal e qual código escrever.
\n\nCritérios de seleção: o que torna um projeto "melhor" para o portfólio
\n\nAntes de mergulhar no código, vamos combinar: o projeto no portfólio deve resolver três tarefas:
\n- \n
- Mostrar domínio do stack — não apenas C#, mas ASP.NET Core, Entity Framework, trabalho com API. \n
- Demonstrar compreensão de arquitetura — padrões, SOLID, separação de responsabilidades. \n
- Resolver um problema real — mesmo que seja um utilitário para você, ele deve ser útil. \n
Intencionalmente não incluí aqui "Lista de Tarefas" ou "Calculadora" — isso é básico, que já não impressiona ninguém. Vamos lá!
\n\n1. Bot do Telegram para gerenciamento de tarefas (com lembretes)
\n\nBots do Telegram são o formato ideal para portfólio. São compactos, visualmente compreensíveis e trabalham com API real. Seu bot receberá comandos, salvará tarefas no banco de dados e enviará lembretes.
\n\nPor que isso é legal:
\n- \n
- Trabalho com API externa (Telegram Bot API). \n
- Tarefas em segundo plano (Hangfire ou BackgroundService). \n
- Entity Framework Core + SQLite (ou PostgreSQL). \n
Exemplo de código: iniciando serviço em segundo plano para lembretes
\npublic class ReminderService : BackgroundService\n{\n private readonly IServiceProvider _services;\n private readonly ILogger<ReminderService> _logger;\n\n public ReminderService(IServiceProvider services, ILogger<ReminderService> logger)\n {\n _services = services;\n _logger = logger;\n }\n\n protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n using (var scope = _services.CreateScope())\n {\n var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();\n var now = DateTime.UtcNow;\n var dueTasks = db.Tasks.Where(t => t.DueDate <= now && !t.IsNotified).ToList();\n\n foreach (var task in dueTasks)\n {\n // Envio de mensagem via TelegramClient\n await SendTelegramMessage(task.UserId, $"Lembrete: {task.Title}");\n task.IsNotified = true;\n }\n await db.SaveChangesAsync();\n }\n await Task.Delay(TimeSpan.FromMinutes(1), stoppingToken);\n }\n }\n}\n\n\nDica: adicione os comandos /start, /add, /list, /done. E obrigatoriamente — um Dockerfile, para que o bot seja iniciado com um clique.
\n\n2. Parser de páginas web com exportação para Excel
\n\nCrie um aplicativo de console que faça parsing, por exemplo, de produtos do Ozon ou Wildberries (ou qualquer outro site) e salve o resultado em um arquivo .xlsx. Isso mostrará que você sabe trabalhar com HTML, HTTP e bibliotecas como EPPlus ou ClosedXML.
\n\nO que usamos:
\n- \n
- HttpClient para requisições. \n
- HtmlAgilityPack ou AngleSharp para parsing. \n
- EPPlus para geração de Excel. \n
Exemplo de código: parsing de títulos