尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Карта поездок: глобус, маршруты по городам, заметки с фото. Владелец входит по паролю и редактирует. Все остальные видят публичную версию только для просмотра.
npm install
cp .env.example .env.local # впишите ADMIN_PASSWORD, остальное можно оставить пустым
npm run dev # http://localhost:3000
Без DATABASE_URL данные хранятся во встроенной базе в папке .data, ничего ставить не нужно.
При первом запуске атлас заполняется демо-поездками. Нужен Node.js 20.9 или новее.
Чтобы войти: «Ещё» → «Вход для владельца» → пароль из ADMIN_PASSWORD.
| Гость | Владелец | |
|---|---|---|
| Смотреть публичные поездки | ✓ | ✓ |
| Видеть скрытые («Кто видит: Только я») | — | ✓ |
| Добавлять, править, удалять, грузить фото | — | ✓ |
| Ссылка на поездку | ✓ (публичные) | ✓ |
| Карточка PNG | ✓ (публичные) | ✓ |
| Видео-пролёт MP4 | — | ✓ |
| Бэкап и восстановление | — | ✓ |
Права проверяет сервер, а не интерфейс: без входа API отвечает 401 на любое изменение.
Кнопка «Поделиться» в шапке поездки:
/t/yaponiya-2025 открывает атлас сразу на поездке. В Telegram у неё появится превью с маршрутом.git remote add origin [email protected]:ВАШ_ЛОГИН/atlas.git
git push -u origin main
Репозиторий можно делать приватным — Vercel с ним работает. В git не попадают
.env.local, папка .data (локальная база) и node_modules — это настроено в .gitignore.
Проще всего прямо из Vercel: проект → Storage → Create Database → Neon →
регион Frankfurt (или ближайший к вам) → Connect to project. Vercel сам добавит
переменную DATABASE_URL во все окружения.
Или вручную на neon.tech: создать проект → Connect →
включить Connection pooling → скопировать строку
(postgresql://…-pooler….neon.tech/neondb?sslmode=require…) и вставить в DATABASE_URL.
Таблицы создаются сами при первом открытии сайта. Атлас на проде стартует пустым
(демо-поездки только локально; если они нужны и на проде — SEED_DEMO=1).
Import Project → выбрать репозиторий. Framework определится как Next.js, команды сборки менять не нужно. Перед Deploy — Environment Variables:
| Переменная | Обязательна | Что вписать |
|---|---|---|
ADMIN_PASSWORD | да | пароль владельца, 12+ символов |
SESSION_SECRET | да | случайная строка: openssl rand -base64 32 |
DATABASE_URL | да | строка Neon (pooled). Если база подключена через Storage — уже есть |
SITE_URL | нет | свой домен, если подключите: https://atlas.example.com |
SEED_DEMO | нет | 1 — заполнить пустую базу демо-поездками |
Ставьте переменные для Production (и Preview, если пользуетесь превью-сборками). После изменения переменных нужен Redeploy — сами они в работающий сайт не подтянутся.
Без DATABASE_URL сайт на Vercel покажет понятную ошибку: встроенная база там
не работает, диск у Vercel временный.
Если превью в Telegram не появилось с первого раза — Telegram кеширует ссылки; отправьте ссылку боту @WebpageBot, он обновит превью.
ADMIN_PASSWORD в Vercel → Redeploy. Чтобы заодно
разлогинить все устройства, поменяйте и SESSION_SECRET.fra1 для Neon eu-central-1), так сайт отвечает быстрее.ADMIN_PASSWORD=ваш-пароль docker compose up -d
Поднимутся приложение и Postgres. Сверху нужен HTTPS (например, Caddy), иначе на телефоне не заработают «Поделиться» и вход.
В превью: «Ещё» → «Скачать бэкап». Здесь: «Ещё» → «Данные» → «Восстановить из бэкапа». Фото, загруженные в превью, жили только в браузере и не переносятся. Их нужно загрузить заново.
npm test # логика, база, API и интерфейс (Vitest) — около минуты
npm run test:e2e # сквозные сценарии в настоящем Chromium — 5–7 минут
npm run test:all # типы + всё вышеперечисленное
Перед первым test:e2e один раз скачайте браузер: npx playwright install chromium.
В GitHub тесты запускаются сами на каждый push (.github/workflows/test.yml).
Что проверяется:
tests/unit): адреса поездок, склонения, проверка входящих данных, подпись и срок сессии, лимит попыток входа, разбор ссылок Google Maps, импорт старых бэкапов, сценарий камеры видео (плавность, все города, линия перемены дат), отрисовка кадров ролика.tests/db): встроенный Postgres и настоящий драйвер postgres.js по сети — схема, демо при первом запуске, адреса без дублей, транзакции с откатом, каскадное удаление, видимость скрытых поездок, хранение фото и их уборка.tests/api): права гостя и владельца на каждом маршруте, защита от запросов с чужих сайтов, валидация, загрузка фото (подмена типа, размер), разворот коротких ссылок без выхода за пределы Google, карточки PNG и OG-превью.tests/components): формы, панели в режиме гостя и владельца, шаринг, добавление мест, сохранение на сервер с «Отменить», откат при ошибке сети, очередь сохранений, шторка (быстрые тапы, свайпы, клавиатура).e2e): полный путь в браузере против собранного сервера — гость, вход, скрытые поездки, заметка с фото, публикация, удаление с отменой, бэкап, выход. Плюс настоящая сборка видео-пролёта: проверяется, что получился проигрываемый MP4 H.264 720×900 нужной длины с маршрутом и текстом в кадре. Тайлы карты, геокодер и Unsplash в тестах подменяются, интернет не нужен.app/api/ — API: вход, поездки, фото, карточка, разворот коротких ссылок Google Mapslib/trips-repo.ts, lib/db.ts — база (Postgres или встроенная)lib/auth.ts — сессия владельцаlib/card.tsx — карточка и превью ссылкиlib/export-video.ts — видео-пролётcomponents/ — интерфейс