Хотел ленту новостей без двух вещей: дублей (одно событие из пяти каналов с разными заголовками) и потока негатива по утрам.
Получился Telegram-бот, который по умолчанию показывает только хорошие и нейтральные новости — а тяжёлый контент включается в настройках на 4 уровнях. Плюс он убирает дубли, переводит RU↔EN и подстраивает выдачу под твои реакции 🔥 ❤️ 😢.
Но самое интересное — он живёт на одной машине Fly.io за ~$5 в месяц. В статье разбираю, как:
заменил Postgres + pgvector на встраиваемый sqlite-vec и убрал отдельную БД-машину;
гоняю типизацию, перевод и оценку тональности через бесплатные LLM на OpenRouter (счёт $0–1/мес);
считаю эмбеддинги локально на fastembed/ONNX без внешних API;
собрал рекомендательное ядро на «векторе вкуса» с EWMA и анти-баблом.
И, конечно, грабли: sqlite-vec, который ломался на arm64; vec0 без INSERT OR REPLACE; fastembed, сменивший пулинг между версиями; и LLM, которая «подкручивала» оценки негатива, пока я не дал ей чёткую рубрику.
👉 Бот живой, можно потрогать: @futur_e_news_bot