← Назад к курсу

10 примеров проектов

1. Telegram-бот для заказа еды

Цель: 50K пользователей, 5K заказов/день

Функционал:

  • Просмотр меню с категориями и фильтрами
  • Добавление товаров в корзину
  • Выбор времени доставки (слоты по 30 минут)
  • Онлайн-оплата через платежные системы
  • Отслеживание статуса заказа в реальном времени
  • История заказов с повторением
  • Реферальная система с бонусами
  • Push-уведомления о статусах
  • Оценка заказа и отзывы

Стек реализации:

  • Backend: FastAPI + Aiogram (асинхронная обработка сообщений)
  • БД: PostgreSQL (заказы, пользователи) + Redis (сессии, кэш меню)
  • Хранение: MinIO/S3 для фото блюд
  • Очереди: Celery + RabbitMQ для фоновых задач
  • Платежи: Stripe/ЮKassa интеграция
  • Деплой: Docker на VPS, вебхуки Telegram

Схема БД:

Users(user_id BIGINT, phone VARCHAR, address JSONB, language VARCHAR, created_at TIMESTAMP)
Categories(category_id SERIAL, name VARCHAR, image_url VARCHAR, sort_order INTEGER)
Dishes(dish_id SERIAL, category_id INT, name VARCHAR, description TEXT, price DECIMAL, 
       image_url VARCHAR, is_available BOOLEAN, cooking_time_minutes INT)
Carts(cart_id SERIAL, user_id BIGINT, session_id UUID, created_at TIMESTAMP)
CartItems(item_id SERIAL, cart_id INT, dish_id INT, quantity INT, notes TEXT)
Orders(order_id SERIAL, user_id BIGINT, total_amount DECIMAL, status VARCHAR, 
       delivery_time TIMESTAMP, address JSONB, payment_status VARCHAR, created_at TIMESTAMP)
OrderItems(item_id SERIAL, order_id INT, dish_id INT, quantity INT, price_at_time DECIMAL)

Расчет нагрузки:

  • Сообщений в день: 5K заказов × 10 сообщений = 50K (~35/мин)
  • Пиковая нагрузка: обед 12:00-14:00 - 2000 заказов/час (~33/мин)
  • Хранение фото: 5K блюд × 500KB = 2.5GB/месяц
  • Сессии Redis: 50K пользователей × 50KB = 2.5GB
  • Требования: 2 CPU, 4GB RAM, 50GB SSD

2. Сайт юридических услуг

Цель: 10K посетителей/месяц, 100 консультаций/день

Функционал:

  • Онлайн-запись на консультацию с выбором времени
  • Личный кабинет клиента с историей обращений
  • CRM система для юристов с напоминаниями
  • Электронный документооборот с подписанием
  • Оплата услуг онлайн с инвойсами
  • База знаний с законодательством и FAQ
  • Видеоконсультации через интеграцию
  • Отзывы о юристах и рейтинговая система

Стек реализации:

  • Backend: Django + Django REST Framework
  • Frontend: React или Django Templates
  • БД: PostgreSQL с Full-Text Search
  • Поиск: Elasticsearch для законодательной базы
  • Файлы: S3 + CloudFront для документов
  • Платежи: Stripe/ЮKassa с автоматическими инвойсами
  • Видео: Jitsi/ScaledRTC интеграция

Схема БД:

Clients(client_id SERIAL, name VARCHAR, email VARCHAR UNIQUE, phone VARCHAR, 
        company VARCHAR, created_at TIMESTAMP)
Lawyers(lawyer_id SERIAL, user_id INT, specialization VARCHAR[], rating DECIMAL, 
        experience_years INT, consultation_price DECIMAL, bio TEXT)
Services(service_id SERIAL, name VARCHAR, description TEXT, base_price DECIMAL, 
         duration_minutes INT, category VARCHAR)
Appointments(appointment_id SERIAL, client_id INT, lawyer_id INT, service_id INT, 
             datetime TIMESTAMP, status VARCHAR, notes TEXT, meeting_link VARCHAR)
LegalDocuments(doc_id SERIAL, appointment_id INT, file_url VARCHAR, doc_type VARCHAR, 
               signed_at TIMESTAMP, hash VARCHAR)
Payments(payment_id SERIAL, appointment_id INT, amount DECIMAL, status VARCHAR, 
         transaction_id VARCHAR, paid_at TIMESTAMP)
KBArticles(article_id SERIAL, title VARCHAR, content TEXT, category VARCHAR, 
           lawyer_id INT, views_count INT)

Расчет нагрузки:

  • Трафик: 10K × 3MB/страница = 30GB/месяц
  • Документы: 100 × 5MB = 500MB/день, 15GB/месяц
  • Поисковые запросы: 500/день к Elasticsearch
  • Видеоконсультации: 20 одновременных сессий
  • Требования: 4 CPU, 8GB RAM, 200GB SSD + отдельный Elasticsearch

3. Сервис коротких ссылок

Цель: 100M редиректов/месяц, 1M новых ссылок/месяц

Функционал:

  • Создание короткой ссылки с кастомным алиасом
  • Статистика переходов в реальном времени
  • Группировка ссылок по проектам
  • API для разработчиков с лимитами
  • Просмотр географии переходов
  • UTM-метки и аналитика
  • Срок действия ссылок
  • Брендированные домены

Стек реализации:

  • Backend: FastAPI (высокая производительность)
  • БД: PostgreSQL (метаданные) + Redis (кэш редиректов)
  • Аналитика: ClickHouse для агрегации статистики
  • Кэш: Redis LRU кэш на 1M популярных ссылок
  • Брокер: Kafka для потоковой обработки кликов
  • Балансировщик: Nginx с кэшированием 301 редиректов

Схема БД:

Users(user_id SERIAL, email VARCHAR UNIQUE, api_key VARCHAR, plan_type VARCHAR, 
      rate_limit INT, created_at TIMESTAMP)
Links(link_id SERIAL, user_id INT, original_url TEXT, short_code VARCHAR UNIQUE, 
      title VARCHAR, clicks_count BIGINT, created_at TIMESTAMP, expires_at TIMESTAMP)
LinkGroups(group_id SERIAL, user_id INT, name VARCHAR, created_at TIMESTAMP)
LinkGroupMembers(id SERIAL, link_id INT, group_id INT)
-- ClickHouse для кликов
CREATE TABLE clicks (
    click_id UUID,
    link_id INT,
    ip_address String,
    user_agent String,
    referrer String,
    country String,
    city String,
    device String,
    clicked_at DateTime
) ENGINE = MergeTree()
ORDER BY (link_id, clicked_at)

Расчет нагрузки:

  • Пик: 5000 редиректов/сек (18000/час)
  • Redis: кэш 1M ссылок × 200 байт = 200MB
  • ClickHouse: 100M × 500 байт = 50GB/месяц
  • Пропускная: 5K RPS × 300 байт = 1.5MB/сек
  • Архитектура: Шардирование по хэшу короткого кода
  • Требования: 8 CPU, 16GB RAM, Redis кластер 3 нода

4. API для мобильного банка

Цель: 500K пользователей, 10M операций/месяц

Функционал:

  • Просмотр баланса и истории операций
  • Переводы между счетами и по номеру телефона
  • Оплата услуг (ЖКХ, мобильная связь, налоги)
  • Блокировка/разблокировка карты
  • Уведомления о операциях в реальном времени
  • Валютные курсы и конвертация
  • Биометрия для входа
  • Инвестиции и депозиты

Стек реализации:

  • Архитектура: Микросервисы на FastAPI
  • Сервисы: auth, accounts, transactions, notifications, cards
  • Аутентификация: JWT + OAuth 2.0 + биометрия
  • БД: PostgreSQL (основное) + Cassandra (история)
  • Кэш: Redis Sentinel кластер
  • WebSocket: для push-уведомлений
  • Безопасность: HashiCorp Vault для ключей

Схема БД:

-- PostgreSQL
Clients(client_id SERIAL, phone VARCHAR UNIQUE, email VARCHAR, 
        password_hash VARCHAR, is_active BOOLEAN, created_at TIMESTAMP)
Accounts(account_id SERIAL, client_id INT, account_number VARCHAR UNIQUE, 
         balance DECIMAL, currency VARCHAR, type VARCHAR, created_at TIMESTAMP)
Cards(card_id SERIAL, account_id INT, card_number VARCHAR, expiry_date DATE, 
      cvv_hash VARCHAR, is_blocked BOOLEAN, daily_limit DECIMAL)
-- Cassandra для транзакций
CREATE TABLE transactions (
    transaction_id UUID,
    from_account_id INT,
    to_account_id INT,
    amount DECIMAL,
    type VARCHAR,
    status VARCHAR,
    description TEXT,
    created_at TIMESTAMP,
    PRIMARY KEY (from_account_id, created_at)
) WITH CLUSTERING ORDER BY (created_at DESC);

Расчет:

  • RPS: 10M/30д/86400сек ≈ 4 запроса/сек (пик до 50/сек)
  • Cassandra: 10M × 1KB = 10GB/месяц
  • WebSocket: 100K одновременных подключений × 50KB = 5GB RAM
  • Rate limiting: 100 запросов/мин на пользователя
  • Требования: Kubernetes кластер, минимум 10 нод

5. Платформа онлайн-курсов

Цель: 100K студентов, 1000 курсов, 10K параллельных стримов

Функционал:

  • Каталог курсов с фильтрами и рейтингами
  • Видео-лекции с субтитрами
  • Интерактивные тесты и задания
  • Отслеживание прогресса обучения
  • Автоматическая выдача сертификатов
  • Форум и чаты по курсам
  • Личный кабинет с рекомендациями
  • Мобильное приложение для обучения

Стек реализации:

  • Backend: Django (админка, курсы, прогресс)
  • Видео: HLS стриминг через CDN
  • БД: PostgreSQL с индексами для поиска
  • Хранилище: S3 для видео + CloudFront CDN
  • Поиск: Elasticsearch по курсам и лекциям
  • WebSocket: Django Channels для чатов
  • Кэш: Redis для прогресса и рекомендаций

Схема БД:

Students(student_id SERIAL, email VARCHAR UNIQUE, name VARCHAR, 
         subscription_end DATE, current_course_id INT)
Instructors(instructor_id SERIAL, user_id INT, bio TEXT, 
            specialization VARCHAR[], rating DECIMAL)
Courses(course_id SERIAL, instructor_id INT, title VARCHAR, 
        description TEXT, price DECIMAL, category VARCHAR, 
        difficulty VARCHAR, students_count INT, created_at TIMESTAMP)
Lessons(lesson_id SERIAL, course_id INT, title VARCHAR, 
        video_url VARCHAR, duration INT, order_number INT, 
        is_free BOOLEAN, materials JSONB)
Progress(progress_id SERIAL, student_id INT, lesson_id INT, 
         completed_at TIMESTAMP, score INT, time_spent INT)
Quizzes(quiz_id SERIAL, lesson_id INT, question TEXT, 
        options JSONB, correct_answer VARCHAR, points INT)
Certificates(certificate_id UUID, student_id INT, course_id INT, 
             issued_at TIMESTAMP, download_url VARCHAR)

Расчет:

  • Видеотрафик: 10K × 1.5Mbps = 15Gbps (пиковая)
  • Хранение видео: +500GB/месяц новых материалов
  • Чат сообщения: 100K × 10 сообщений = 1M/день
  • PostgreSQL: 100K × 5 курсов × 20 уроков = 10M записей прогресса
  • CDN: 80% трафика через edge кэши
  • Требования: Медиасерверы + CDN, основное приложение 16CPU/32GB

6. Агрегатор новостей

Цель: 1M посетителей/день, парсинг 1000 источников

Функционал:

  • Автоматический парсинг новостей по расписанию
  • Категоризация с помощью ML
  • Персонализированная лента новостей
  • Поиск по архиву с фильтрами
  • Подписки на темы и авторов
  • Экспорт новостей в RSS/JSON
  • Модерация дубликатов
  • Аналитика популярности

Стек реализации:

  • Парсинг: Scrapy кластер (20 воркеров)
  • Backend: FastAPI для API
  • БД: PostgreSQL для метаданных
  • Кэш: Redis для главной страницы
  • Очереди: Celery для фонового парсинга
  • ML: scikit-learn для категоризации
  • Поиск: Elasticsearch для полнотекстового поиска

Схема БД:

Sources(source_id SERIAL, name VARCHAR, url VARCHAR, 
        category VARCHAR, parsing_interval INT, last_parsed_at TIMESTAMP)
Articles(article_id SERIAL, source_id INT, title VARCHAR, 
         content TEXT, url VARCHAR UNIQUE, published_at TIMESTAMP, 
         category VARCHAR, sentiment_score DECIMAL, image_url VARCHAR)
Tags(tag_id SERIAL, name VARCHAR UNIQUE, description TEXT)
ArticleTags(id SERIAL, article_id INT, tag_id INT)
Users(user_id SERIAL, email VARCHAR, preferences JSONB, created_at TIMESTAMP)
ReadHistory(id SERIAL, user_id INT, article_id INT, read_at TIMESTAMP)
Subscriptions(id SERIAL, user_id INT, tag_id INT, created_at TIMESTAMP)
MLModels(model_id SERIAL, name VARCHAR, version VARCHAR, 
         accuracy DECIMAL, deployed_at TIMESTAMP)

Расчет:

  • Парсинг: 1000 источников × 4 раза/час = 4000 запросов/час
  • Трафик парсинга: 4000 × 500KB = 2GB/час
  • Хранение: 100K статей/день × 10KB = 1GB/день, 30GB/месяц
  • Elasticsearch: 3M статей × 20KB = 60GB индекс
  • Парсинг кластер: 8CPU/16GB, основной сервер 4CPU/8GB
  • Кэш главной: Redis 2GB, обновление каждые 5 минут

7. Сервис каршеринга

Цель: 10K авто, 100K поездок/месяц

Функционал:

  • Поиск ближайших авто на карте
  • Бронирование на определенное время
  • Открытие дверей по QR-коду/приложению
  • Оплата по минутам/километрам
  • Отслеживание поездки в реальном времени
  • История поездок с детализацией
  • Поддержка 24/7 через чат
  • Система штрафов и бонусов

Стек реализации:

  • Микросервисы: FastAPI (booking, tracking, billing, support)
  • Геоданные: PostGIS для пространственных запросов
  • Телеметрия: TimescaleDB для метрик
  • WebSocket: обновление позиций каждые 5 сек
  • Redis GEO: кэш позиций автомобилей
  • Платежи: Stripe с подписками
  • Мониторинг: Grafana + Prometheus

Схема БД:

Users(user_id SERIAL, license_number VARCHAR, rating DECIMAL, 
      balance DECIMAL, is_verified BOOLEAN, created_at TIMESTAMP)
Cars(car_id SERIAL, model VARCHAR, license_plate VARCHAR UNIQUE, 
     location GEOGRAPHY, battery_level INT, is_available BOOLEAN, 
     hourly_rate DECIMAL, maintenance_due DATE)
Trips(trip_id SERIAL, user_id INT, car_id INT, start_time TIMESTAMP, 
      end_time TIMESTAMP, start_location GEOGRAPHY, end_location GEOGRAPHY, 
      total_cost DECIMAL, distance_km DECIMAL, status VARCHAR)
Payments(payment_id SERIAL, trip_id INT, amount DECIMAL, 
         payment_method VARCHAR, status VARCHAR, created_at TIMESTAMP)
-- TimescaleDB для телеметрии
CREATE TABLE telemetry (
    time TIMESTAMPTZ NOT NULL,
    car_id INT NOT NULL,
    location GEOGRAPHY,
    speed DECIMAL,
    battery INT,
    engine_temp DECIMAL
);
SELECT create_hypertable('telemetry', 'time');
ParkingZones(zone_id SERIAL, name VARCHAR, polygon GEOGRAPHY, 
             max_cars INT, hourly_rate DECIMAL)

Расчет:

  • Геозапросы: 10K пользователей × 1 запрос/мин = 10K/мин
  • Телеметрия: 10K авто × 1 точка/сек = 864M точек/день
  • TimescaleDB: 864M × 100 байт = 86GB/день (после сжатия ~8GB)
  • WebSocket: 10K одновременных соединений × 50KB = 500MB RAM
  • Требования: GPU для геоиндексов, TimescaleDB кластер

8. Система тикетов (поддержка)

Цель: 500 агентов, 10K тикетов/день

Функционал:

  • Создание тикета через веб-форму/email
  • Автоматическое назначение агентам
  • Приоритеты (низкий, средний, высокий, критичный)
  • Прикрепление файлов и скриншотов
  • История переписки с таймлайном
  • Контроль SLA (время ответа, решение)
  • База знаний с часто задаваемыми вопросами
  • Отчеты по эффективности агентов

Стек реализации:

  • Backend: Django с встроенной админкой
  • БД: PostgreSQL с Full-Text Search
  • Redis: очередь писем и нотификаций
  • WebSocket: live-chat для общения
  • MinIO: хранилище для вложений
  • Celery Beat: автоматическое эскалация тикетов
  • Email: отправка через SMTP/API

Схема БД:

Clients(client_id SERIAL, email VARCHAR UNIQUE, company VARCHAR, 
        plan_type VARCHAR, created_at TIMESTAMP)
Agents(agent_id SERIAL, user_id INT, name VARCHAR, department VARCHAR, 
       max_tickets INT, current_tickets INT, is_available BOOLEAN)
Tickets(ticket_id SERIAL, client_id INT, agent_id INT, subject VARCHAR, 
        category VARCHAR, priority VARCHAR, status VARCHAR, 
        created_at TIMESTAMP, first_response_at TIMESTAMP, 
        resolved_at TIMESTAMP, sla_deadline TIMESTAMP)
Messages(message_id SERIAL, ticket_id INT, sender_type VARCHAR, 
         content TEXT, is_internal BOOLEAN, sent_at TIMESTAMP)
Attachments(attachment_id SERIAL, message_id INT, file_url VARCHAR, 
            file_name VARCHAR, file_size BIGINT, mime_type VARCHAR)
KBArticles(article_id SERIAL, title VARCHAR, content TEXT, 
           category VARCHAR, tags VARCHAR[], views_count INT, 
           helpful_count INT, created_at TIMESTAMP)
SLAMetrics(metric_id SERIAL, ticket_id INT, first_response_time INT, 
           resolution_time INT, agent_id INT, created_at DATE)

Расчет:

  • Тикеты: 10K/день = ~7/мин, пик 100/мин
  • Сообщения: 10K × 5 сообщений = 50K/день
  • Хранение вложений: 10K × 2MB = 20GB/день, 600GB/месяц
  • PostgreSQL: индексы на ticket_id, status, created_at
  • Требования: 8CPU, 16GB RAM, отдельный MinIO сервер

9. IoT платформа для умного дома

Цель: 1M устройств, 10K сообщений/сек

Функционал:

  • Регистрация и аутентификация устройств
  • Сбор телеметрии в реальном времени
  • Автоматизация через правила (если-то)
  • Push-уведомления на события
  • История показаний с графиками
  • Удаленное управление устройствами
  • Мониторинг энергопотребления
  • Интеграция с голосовыми помощниками

Стек реализации:

  • Backend: FastAPI для REST API
  • MQTT: Mosquitto для устройств (1M подключений)
  • БД: TimescaleDB для временных рядов
  • Redis Pub/Sub: события между сервисами
  • Apache Spark: агрегация данных для аналитики
  • WebSocket: дашборды в реальном времени
  • Кэш: Redis для состояний устройств

Схема БД:

Users(user_id SERIAL, email VARCHAR UNIQUE, subscription_plan VARCHAR, 
      created_at TIMESTAMP, trial_end DATE)
Devices(device_id SERIAL, user_id INT, device_type VARCHAR, name VARCHAR, 
        location VARCHAR, firmware_version VARCHAR, last_seen TIMESTAMP, 
        is_online BOOLEAN, mqtt_topic VARCHAR)
Sensors(sensor_id SERIAL, device_id INT, sensor_type VARCHAR, unit VARCHAR, 
        min_value DECIMAL, max_value DECIMAL, precision INT)
-- TimescaleDB для показаний
CREATE TABLE readings (
    time TIMESTAMPTZ NOT NULL,
    sensor_id INT NOT NULL,
    value DECIMAL,
    location VARCHAR
);
SELECT create_hypertable('readings', 'time');
Automations(automation_id SERIAL, user_id INT, name VARCHAR, 
            trigger_condition JSONB, action JSONB, is_active BOOLEAN, 
            last_triggered TIMESTAMP)
Notifications(notification_id SERIAL, user_id INT, device_id INT, 
              message TEXT, severity VARCHAR, sent_at TIMESTAMP, 
              read_at TIMESTAMP)
Rules(rule_id SERIAL, automation_id INT, condition_type VARCHAR, 
      condition_params JSONB, action_order INT)
DeviceLogs(log_id SERIAL, device_id INT, event_type VARCHAR, 
           details JSONB, occurred_at TIMESTAMP)

Расчет:

  • MQTT подключения: 1M × 16KB = 16GB TCP буферов
  • Телеметрия: 10K сообщений/сек = 864M/день
  • TimescaleDB: 864M × 50 байт = 43GB/день (сжатие 10:1 = 4.3GB)
  • Redis: состояния 1M устройств × 2KB = 2GB
  • Масштабирование: MQTT кластер, шардирование TimescaleDB

10. Маркетплейс для фрилансеров

Цель: 100K фрилансеров, 50K проектов/месяц

Функционал:

  • Размещение проектов с бюджетом и сроками
  • Поиск фрилансеров по навыкам и рейтингу
  • Портфолио с работами и отзывами
  • Чат между заказчиком и исполнителем
  • Escrow система для безопасных платежей
  • Отзывы и рейтинговая система
  • Арбитраж при спорах
  • Уведомления о новых проектах
  • Система скидок и промокодов

Стек реализации:

  • Backend: Django (сложная бизнес-логика)
  • Поиск: Elasticsearch по профилям и проектам
  • БД: PostgreSQL с транзакциями
  • Redis: кэш рейтингов и рекомендаций
  • WebSocket: Django Channels для чата
  • Платежи: Stripe Connect для escrow
  • Уведомления: Email + WebSocket
  • Deploy: Kubernetes для масштабирования

Схема БД:

Clients(client_id SERIAL, company VARCHAR, budget_range VARCHAR, 
        rating DECIMAL, projects_posted INT, created_at TIMESTAMP)
Freelancers(freelancer_id SERIAL, user_id INT, specialization VARCHAR[], 
            hourly_rate DECIMAL, rating DECIMAL, completed_projects INT, 
            total_earned DECIMAL, is_available BOOLEAN)
Skills(skill_id SERIAL, name VARCHAR UNIQUE, category VARCHAR)
FreelancerSkills(id SERIAL, freelancer_id INT, skill_id INT, level INT)
Projects(project_id SERIAL, client_id INT, title VARCHAR, description TEXT, 
         budget DECIMAL, currency VARCHAR, deadline DATE, status VARCHAR, 
         created_at TIMESTAMP, skills_required JSONB)
Bids(bid_id SERIAL, project_id INT, freelancer_id INT, amount DECIMAL, 
     delivery_days INT, proposal TEXT, status VARCHAR, created_at TIMESTAMP)
Contracts(contract_id SERIAL, project_id INT, freelancer_id INT, 
          total_amount DECIMAL, escrow_status VARCHAR, created_at TIMESTAMP, 
          completed_at TIMESTAMP)
Milestones(milestone_id SERIAL, contract_id INT, description TEXT, 
           amount DECIMAL, status VARCHAR, due_date DATE, completed_at TIMESTAMP)
Reviews(review_id SERIAL, contract_id INT, reviewer_id INT, reviewee_id INT, 
        rating INT, comment TEXT, created_at TIMESTAMP)
Messages(message_id SERIAL, contract_id INT, sender_id INT, 
         content TEXT, attachments JSONB, sent_at TIMESTAMP, read_at TIMESTAMP)
Disputes(dispute_id SERIAL, contract_id INT, initiator_id INT, 
         reason TEXT, status VARCHAR, resolution TEXT, created_at TIMESTAMP)

Расчет:

  • Поисковые запросы: 100K × 10 запросов = 1M/день
  • Сообщения в чате: 50K проектов × 20 сообщений = 1M/день
  • Платежи: 50K × $500 = $25M транзакций/месяц
  • Комиссия: 10% от $25M = обработка $2.5M
  • Elasticsearch: 100K профилей × 10KB = 1GB индекс
  • Требования: High-availability кластер, PCI DSS compliance для платежей