Прокачка на C#: 7 проектов для портфолио, которые впечатлят работодателя

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Почему ваше портфолио на C# решает всё, или Как не затеряться среди сотен резюме

Вы выучили синтаксис, разобрались с классами, интерфейсами и даже написали пару консольных программ. Поздравляю, вы перестали быть «нулём». Но вот беда: на одну вакансию Junior C# разработчика приходит 50–100 откликов. Как HR или техлид поймёт, что вы — тот самый алмаз, а не очередной «гарант трудоустройства» с курсов?

Ответ прост: ваше портфолио на C#. Не список технологий, а живые проекты, которые можно пощупать (или хотя бы запустить локально). В этой статье я собрал 7 идей для портфолио C# разработчика — от простых до среднего уровня сложности. Каждая идея — это не просто «сделайте калькулятор», а полноценный кейс с пояснениями, почему он крутой и какой код писать.

Критерии отбора: что делает проект «лучшим» для портфолио

Прежде чем кидаться в код, давайте договоримся: проект в портфолио должен решать три задачи:

  • Показывать владение стеком — не просто C#, а ASP.NET Core, Entity Framework, работа с API.
  • Демонстрировать понимание архитектуры — паттерны, SOLID, разделение ответственности.
  • Решать реальную проблему — даже если это утилита для себя, она должна быть полезной.

Я намеренно не включил сюда «To-Do List» или «Калькулятор» — это база, которая уже никого не впечатляет. Поехали!

1. Telegram-бот для управления задачами (с напоминаниями)

Telegram-боты — идеальный формат для портфолио. Они компактны, визуально понятны и работают с реальным API. Ваш бот будет принимать команды, сохранять задачи в базу данных и присылать напоминания.

Почему это круто:

  • Работа с внешним API (Telegram Bot API).
  • Фоновые задачи (Hangfire или BackgroundService).
  • Entity Framework Core + SQLite (или PostgreSQL).

Пример кода: запуск фонового сервиса для напоминаний

public class ReminderService : BackgroundService
{
    private readonly IServiceProvider _services;
    private readonly ILogger<ReminderService> _logger;

    public ReminderService(IServiceProvider services, ILogger<ReminderService> logger)
    {
        _services = services;
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            using (var scope = _services.CreateScope())
            {
                var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
                var now = DateTime.UtcNow;
                var dueTasks = db.Tasks.Where(t => t.DueDate <= now && !t.IsNotified).ToList();

                foreach (var task in dueTasks)
                {
                    // Отправка сообщения через TelegramClient
                    await SendTelegramMessage(task.UserId, $"Напоминание: {task.Title}");
                    task.IsNotified = true;
                }
                await db.SaveChangesAsync();
            }
            await Task.Delay(TimeSpan.FromMinutes(1), stoppingToken);
        }
    }
}

Совет: добавьте команды /start, /add, /list, /done. И обязательно — Dockerfile, чтобы бот запускался одной кнопкой.

2. Парсер веб-страниц с экспортом в Excel

Создайте консольное приложение, которое парсит, например, товары с Ozon или Wildberries (или любой другой сайт) и сохраняет результат в .xlsx файл. Это покажет, что вы умеете работать с HTML, HTTP и библиотеками вроде EPPlus или ClosedXML.

Что используем:

  • HttpClient для запросов.
  • HtmlAgilityPack или AngleSharp для парсинга.
  • EPPlus для генерации Excel.

Пример кода: парсинг заголовков статей с PythonLib

public async Task<List<Article>> ParseArticlesAsync(string url)
{
    var articles = new List<Article>();
    using var client = new HttpClient();
    var response = await client.GetStringAsync(url);
    var doc = new HtmlDocument();
    doc.LoadHtml(response);

    var nodes = doc.DocumentNode.SelectNodes("//h2[@class='entry-title']/a");
    if (nodes != null)
    {
        foreach (var node in nodes)
        {
            articles.Add(new Article
            {
                Title = node.InnerText.Trim(),
                Link = node.GetAttributeValue("href", string.Empty)
            });
        }
    }
    return articles;
}

Почему это полезно: работодатель видит, что вы умеете собирать данные из открытых источников — навык, востребованный в аналитике и ETL-процессах.

3. REST API для библиотеки (ASP.NET Core + Identity)

Классический CRUD, но с авторизацией и ролями. Сделайте API для управления книгами: пользователи могут брать/возвращать книги, администратор — добавлять/удалять.

Стек:

  • ASP.NET Core Web API (.NET 8).
  • Entity Framework Core + SQL Server.
  • JWT аутентификация + Identity.
  • Swagger для документации.

Пример контроллера (с атрибутами ролей):

[ApiController]
[Route("api/[controller]")]
[Authorize(Roles = "Admin")]
public class BooksController : ControllerBase
{
    private readonly AppDbContext _db;
    public BooksController(AppDbContext db) => _db = db;

    [HttpPost]
    public async Task<IActionResult> AddBook([FromBody] BookDto dto)
    {
        var book = new Book { Title = dto.Title, Author = dto.Author, IsAvailable = true };
        _db.Books.Add(book);
        await _db.SaveChangesAsync();
        return CreatedAtAction(nameof(GetBook), new { id = book.Id }, book);
    }

    [HttpGet("{id}")]
    [AllowAnonymous]
    public async Task<IActionResult> GetBook(int id)
    {
        var book = await _db.Books.FindAsync(id);
        if (book == null) return NotFound();
        return Ok(book);
    }
}

Добавьте тесты (xUnit) и CI/CD через GitHub Actions — это покажет уровень выше среднего.

4. Десктопное приложение на WPF с MVVM

Несмотря на тренд веба, десктопные приложения на C# всё ещё востребованы (особенно в корпоративном секторе). Сделайте менеджер паролей или заметок с шифрованием.

Почему это ценно:

  • MVVM — must have для WPF.
  • Работа с файловой системой и криптографией (AES).
  • UI/UX на XAML.

Пример ViewModel (INotifyPropertyChanged):

public class MainViewModel : INotifyPropertyChanged
{
    private string _noteContent;                

Блоги

Рекомендаций по книгам