Интерактивная карта 21 795 заброшенных городов, покинутых посёлков, затопленных деревень и древних руин со всего мира. Данные из Wikidata, описания из Википедии, фото из Wikimedia Commons. Причина опустения определяется автоматически по тексту статьи.
Проблема
Информация о заброшенных поселениях разбросана по статьям Википедии, форумам сталкеров и локальным краеведческим сайтам. Нет единого места, где можно увидеть все города-призраки на карте, отфильтровать по причине опустения и быстро получить контекст — когда и почему место перестало существовать.
Решение
Карта, которая агрегирует данные из Wikidata (объекты с типом «город-призрак», «заброшенная деревня», «затопленное поселение», «руины», «древний город»), обогащает их описаниями из Википедии и фотографиями из Wikimedia Commons, а затем классифицирует причину опустения по тексту статьи.
Пользователь видит все 21 795 мест на интерактивной карте, может фильтровать по причине (золотая лихорадка, шахты, катастрофа, затопление, война, экономический спад, древние руины) и по типу поселения, искать по названию и открывать случайный город-призрак.
Ключевые решения
- Wikidata как единый источник. SPARQL-запросы к Wikidata дают структурированные данные: координаты, дату упразднения, тип поселения, ссылку на статью Википедии. Не нужен ручной сбор — база обновляется автоматически.
- Автоклассификация причин. В Wikidata причину опустения почти никогда не указывают. Алгоритм анализирует описание и текст статьи Википедии, ищет ключевые маркеры (gold rush, mine, dam, flood, earthquake, war, evacuation, economic decline) и присваивает категорию. На странице места видно, по какой фразе сделан вывод.
- Мультиязычность. Интерфейс на 7 языках (русский, английский, испанский, немецкий, французский, португальский, итальянский). Описание места подтягивается из статьи Википедии на языке пользователя.
- Производительность с 21K+ маркерами. Кластеризация точек на карте (OpenFreeMap + OpenMapTiles) для плавной работы даже на мобильных устройствах.
Что получилось и где ограничения
На карте 21 795 мест. Причину опустения классификатор определил для 4 990 мест (около 23%): древние руины — 3 436, экономический спад — 375, шахты и рудники — 364, война и выселение — 313, затопление — 222, катастрофа — 184, золотая лихорадка — 96. У остальных 16 805 мест (около 77%) в статье нет достаточно ясной причины, и сайт честно показывает «причина не указана». Данные обновляются из Wikidata раз в неделю.
Чему научил проект
- Честная классификация лучше красивой. Можно было бы подогнать причину под каждое место. Вместо этого сайт показывает, по какой фразе из статьи сделан вывод, а остальное помечает как неизвестное.
- Основа карты взята из FilmSpots. Повторное использование стека и конвейера данных ускорило запуск: не пришлось строить карту и выгрузку данных с нуля.
- Аналитика без cookies. Вместо Яндекс Метрики и Google Analytics я подключил Vercel Web Analytics: она работает без cookies и не собирает персональные данные посетителей.
Стек и роль
Стек: Next.js (Turbopack) · React · TypeScript · OpenFreeMap · Wikidata SPARQL · Wikipedia API · Wikimedia Commons · Vercel
Роль: продукт, дизайн, разработка — полный цикл. От идеи и проектирования данных до деплоя и поддержки.
Статьи по теме
- От гипотез к качественным данным: роль продакта в data-продуктах
- Growth hacking без мифов: продукты, метрики и быстрые эксперименты
Ссылки
- ghosttowns.vercel.app — сайт проекта


