Технічна прозорість
Відкритий код
Увесь вихідний код Covey є публічно доступним на Codeberg. Будь-хто може його переглянути, зробити внесок та розвивати далі.
Огляд архітектури
Covey складається з чотирьох сервісів, які взаємодіють через Docker Compose:
| Сервіс | Роль |
|---|---|
| Frontend | Веб-інтерфейс, побудований на Preact, обслуговується через nginx |
| Backend | API та комунікація в реальному часі з Express та Socket.io |
| База даних | PostgreSQL 16 для зберігання даних |
| Traefik | Зворотний проксі з автоматичним управлінням TLS-сертифікатами |
Принципи проєктування
Preact замість React
Ми використовуємо Preact (3 КБ) замість React (40 КБ), щоб додаток завантажувався швидко навіть на старих пристроях та повільних з'єднаннях. API майже ідентичний.
Progressive Web App (PWA)
Covey поширюється як PWA — магазин додатків не потрібен. Встановлюйте безпосередньо з браузера, працює офлайн для базових функцій та отримує push-сповіщення як звичайний додаток.
Прості прапорці функцій
Функції активуються через змінні середовища, а не складні системи. Просто, надійно та без зовнішніх залежностей.
Polling як пріоритет для сумісності
Socket.io налаштований починати з HTTP polling і потім оновлюватися до WebSocket. Це гарантує, що старіші браузери можуть під'єднатися безпосередньо.
Рендеринг карт з OpenStreetMap
Ми використовуємо Leaflet з OpenStreetMap — абсолютно безкоштовно, без ключа API та з відкритим кодом.
Внутрішньопроцесні воркери
Фонові завдання (закінчення терміну запитів, видалення за GDPR) виконуються як заплановані процеси в тому ж процесі Node — зовнішня черга завдань не потрібна.
Потік даних
- Статичний контент: Браузер → Traefik → nginx → HTML/JS/CSS
- Виклики API: Браузер → Traefik → Express → PostgreSQL
- Реальний час: Браузер → Traefik → Socket.io (оновлення з polling до WebSocket)
CI/CD
Репозиторій коду розміщений на Codeberg з Woodpecker CI для автоматичних тестів та збірок. Кожен push запускає тести бекенду та фронтенду, а також перевіряє, що продакшн-збірка працює коректно.
Рішення з безпеки
- JWT з HS256 — Безстанова автентифікація з 24-годинним терміном дії.
- Псевдонімні імена — Імена з BankID ніколи не відображаються автоматично.
- Haversine замість PostGIS — Простіше, легше та достатньо для міського масштабу.
- Обмеження частоти в пам'яті — Redis не потрібен для розгортання на одному сервері.
Хостинг
Covey розміщений на VPS у GleSYS в Стокгольмі, що працює на відновлюваній енергії. TLS-сертифікати керуються автоматично через Let's Encrypt.