Розробка Q&A-платформи (Запитання та відповіді)
Q&A-платформа — структурована база знань, побудована завдяки запитанням і відповідям спільноти. Ключові механіки: голосування за корисні відповіді, позначення "прийнятої відповіді", система репутації, теги як навігація. Еталони: Stack Overflow, Quora, Mail.ru Ответы.
Модель даних
Question
├── title (індексується для пошуку)
├── body (багатий текст, з прикладами коду)
├── tags[] → Tag
├── votes_count (денормалізований лічильник)
├── answers_count
├── accepted_answer_id → Answer
└── author_id → User
Answer
├── question_id → Question
├── body (багатий текст)
├── votes_count
├── is_accepted BOOLEAN
└── author_id → User
Vote
├── user_id, votable_type, votable_id
├── value INT (1 або -1)
└── PRIMARY KEY (user_id, votable_type, votable_id)
Система голосування та репутації
Голосування — центральна механіка. Правила, аналогічні Stack Overflow:
- +10 до репутації автора за кожне голосування "за" на відповідь
- +5 за голосування "за" на запитання
- −2 за голосування "проти" (та −1 для того, хто голосував)
- +15 за прийняту відповідь
Репутація розблоковує привілеї: на N репутації — можна редагувати чужі запитання, голосувати за закриття, без CAPTCHA.
Запобігання маніпуляції голосами: неможливо голосувати за власні пости, IP-обмеження, алгоритм виявлення vote ring.
Теги як навігація
Теги — основний спосіб знайти контент. Кожне запитання має 1–5 тегів. Сторінка тегу — список запитань з цим тегом + опис тегу (вікі-стаття на тему).
Автодоповнення тегів при створенні запитання: Meilisearch або PostgreSQL ILIKE для існуючих тегів. Синоніми тегів: javascript та js → один тег.
Виявлення дублікатів
При створенні запитання — автоматичний пошук подібних. Якщо знайдено дублікат — запитання може бути закрито зі посиланням на оригінал. Пошук подібних: Elasticsearch з нечітким пошуком або векторний пошук (вбудовування речень для семантичної подібності).
Форматування коду
Для технічних Q&A — обов'язкове виділення синтаксису. В редакторі: Markdown із потрійними зворотними комами ```python. Рендеринг: highlight.js або Prism.js з автоматичним виявленням мови.
Модерація спільнотою
- Флаги: користувачі позначають невідповідний контент
- Закриття запитання: запитання не за темою, дублікати, занадто широкі — закриваються голосуванням
- Редагування чужих постів — вище порога репутації та через review queue
- Причина відхилення: при відхиленні пропонованої правки — пояснення причини
Gamification
Значки за досягнення: перша відповідь, прийнята відповідь, 100 голосів "за", N днів поспіль. Leaderboard за місяць/рік за репутацією.
Графік проекту
MVP (запитання/відповіді, голосування, теги, прийнята відповідь, базова репутація): 6–10 тижнів. Повнофункціональна Q&A-платформа з gamification, модерацією, пошуком, мобільним додатком: 3–5 місяців.







