Семейный центр документов с отказоустойчивостью к опечаткам на базе FastAPI и Meilisearch
В каждом доме скапливается одна и та же разрозненная куча: руководство по котлу, рецепт, который кто-то сделал скриншотом, ссылка на школьный портал, PDF с гарантией. start.khanoff.com — моя попытка собрать всё это за одним прощающим поисковым окном для всей семьи.
Стек
- FastAPI + Jinja2/HTMX — страницы, отрендеренные на сервере, с достаточной интерактивностью, но без SPA. Быстро загружается на телефоне и просто в понимании.
- PostgreSQL для данных.
- Meilisearch для поиска — и вот в чем дело: он толерантен к опечаткам. Члены семьи не помнят точных имен файлов; они вводят приблизительно то, что имеют в виду, а нужный документ всё равно всплывает.
- Immich обрабатывает медиафайлы (фотографии и видео) вместо того, чтобы изобретать хранилище медиа.
- Вход по волшебной ссылке через почтовый сервер дома (poste.io) — не нужно запоминать пароли; вы просто нажимаете на ссылку в своей электронной почте.
- Это PWA, поэтому он устанавливается на главный экран телефонов и настольных компьютеров.
Создано для людей, а не для администраторов
Всё это собрано владельцем и работает в нескольких контейнерах Docker за nginx. Но цель проектирования никогда не была «чистая архитектура» ради самой себя — целью было то, чтобы нетехнический член семьи мог открыть его, ввести полувспоминное слово и найти нужное. Поиск с учетом опечаток плюс простой, дружелюбный интерфейс делают больше для принятия пользователями, чем любая полировка бэкенда.
Та же философия, другая область применения
Как и в моих других самохостинговых инструментах, движущиеся части расположены так, чтобы повседневный путь был предельно простым и устойчивым: поиск и просмотр всегда работают, медиа хранятся в системе, созданной для этого, а вход — одним кликом. Изощренность остается незаметной для человека, который просто пытается найти пароль от Wi-Fi.
Прозрачность: большинство постов здесь написаны с помощью ИИ, а неанглийские версии переведены локальной LLM и вычитаны. Заметили ошибку? Напишите мне.