← Blog

Семейный центр документов с отказоустойчивостью к опечаткам на базе FastAPI и Meilisearch

DEENESRUUK

В каждом доме скапливается одна и та же разрозненная куча: руководство по котлу, рецепт, который кто-то сделал скриншотом, ссылка на школьный портал, PDF с гарантией. start.khanoff.com — моя попытка собрать всё это за одним прощающим поисковым окном для всей семьи.

Стек

  • FastAPI + Jinja2/HTMX — страницы, отрендеренные на сервере, с достаточной интерактивностью, но без SPA. Быстро загружается на телефоне и просто в понимании.
  • PostgreSQL для данных.
  • Meilisearch для поиска — и вот в чем дело: он толерантен к опечаткам. Члены семьи не помнят точных имен файлов; они вводят приблизительно то, что имеют в виду, а нужный документ всё равно всплывает.
  • Immich обрабатывает медиафайлы (фотографии и видео) вместо того, чтобы изобретать хранилище медиа.
  • Вход по волшебной ссылке через почтовый сервер дома (poste.io) — не нужно запоминать пароли; вы просто нажимаете на ссылку в своей электронной почте.
  • Это PWA, поэтому он устанавливается на главный экран телефонов и настольных компьютеров.

Создано для людей, а не для администраторов

Всё это собрано владельцем и работает в нескольких контейнерах Docker за nginx. Но цель проектирования никогда не была «чистая архитектура» ради самой себя — целью было то, чтобы нетехнический член семьи мог открыть его, ввести полувспоминное слово и найти нужное. Поиск с учетом опечаток плюс простой, дружелюбный интерфейс делают больше для принятия пользователями, чем любая полировка бэкенда.

Та же философия, другая область применения

Как и в моих других самохостинговых инструментах, движущиеся части расположены так, чтобы повседневный путь был предельно простым и устойчивым: поиск и просмотр всегда работают, медиа хранятся в системе, созданной для этого, а вход — одним кликом. Изощренность остается незаметной для человека, который просто пытается найти пароль от Wi-Fi.

Прозрачность: большинство постов здесь написаны с помощью ИИ, а неанглийские версии переведены локальной LLM и вычитаны. Заметили ошибку? Напишите мне.