Tofu Maps — личные списки мест на карте

Pet project · Public demo · Web
Роль: Product Designer (end-to-end) + разработка (HTML/CSS/JS + Flask)
Статус: Public demo · tofumaps.com
Product Hunt: #5 Product of the Day 2025 - по настоящее время

Я сделал Tofu Maps как “плейлисты, но на карте”: сервис, где можно быстро собрать список мест, добавить заметки и поделиться ссылкой на просмотр или совместное редактирование — без регистрации и онбординга. В основе — local-first хранение с облачной синхронизацией “по требованию” только при шаринге. Проект про продуктовые компромиссы: меньше фич → больше доверия и понятности.

tofumaps-1


Контекст

Я постоянно сохраняю места: кафе, сервисы, улицы, точки “вернуться позже”. Со временем это превращается в хаос: - метки разбросаны по разным приложениям - нет ощущения “личного журнала мест” - шаринг ломается из-за разных карт у друзей и отсутствия общего формата


Проблема

Карты отлично решают навигацию, но слабо решают сценарий личных списков и совместного планирования: - сложно быстро собрать подборку “вот 12 мест” - неудобно добавлять контекст (почему это место важно) - совместное редактирование часто требует аккаунтов и установки одинаковых приложений


Цель продукта

Сделать инструмент, который:

  • превращает точки в осмысленные списки
  • позволяет делиться и редактировать вместе
  • не требует регистрации и обучения

Lists of places are like playlists — but on a map.

tofumaps-1 tofumaps-1


Роль и вклад

Я сделал проект end-to-end: - discovery, формулировка сценариев, приоритизация фич - UX / IA / UI - прототипирование - разработка первой версии (Flask, HTML/CSS/JS, OSM)


Ключевые решения

Старт без аккаунта

Регистрация — главный фрикцион для сценария “быстро собрать места”.

Решение: авторизация через ссылки: - view-link → просмотр - edit-link → редактирование и коллаб

Ссылка стала минимальной формой доступа: пользователю не нужно ничего “создавать”, чтобы увидеть ценность.


Local-first + Cloud on demand

Я разделил хранение на два слоя:

Local-first (по умолчанию) - данные живут в браузере - мгновенно и приватно - приложение ощущается быстрым, даже при слабой связи

Cloud on demand (только при шаринге) - включается, когда пользователь делится списком - мультидевайс и совместная работа - серверная часть остаётся “опцией”, а не обязательным условием

Это компромисс между приватностью/скоростью и коллаборацией.


Минимальный набор фич под реальные сценарии

В первую версию вошло только то, что закрывает базовые потребности: - создание списка мест - добавление заметки к месту - добавление мест по поиску или кликом по карте - открыть место в навигаторе - шейр по ссылке или QR-коду


Трудности и честные ограничения

Данные OSM: бесплатно ≠ полно

OpenStreetMap открыт и бесплатен, но на карте может не быть нужных POI.
Чтобы не ломать сценарий “я хочу сохранить место сейчас”, я добавил форму для ручного добавления отсутствующих данных.

Коллаборация: пока не real-time

Текущая реализация не позволяет двум пользователям параллельно править одну карту без конфликтов.
Сейчас это осознанное ограничение MVP: лучше стабильный single-editor, чем “полуработающий real-time”.


Результат

  • Рабочий продукт, которым я пользуюсь сам (dogfooding)
  • Public demo без онбординга: ценность понятна за секунды
  • Product Hunt: #5 launch of the Day
  • Основная ценность — доверие и простота: “открыл → понял → сохранил → поделился”

Метрики (операционные)

  • Расходы на домен: $20/год
  • Расходы на сервер: $4–6/мес

Что дальше

  • Real-time коллаборация (конфликты, блокировки, курсоры/присутствие)
  • Кастомизация списков и точек (иконки/цвета/порядок/теги)
  • Roadmap на год вперёд: планирую последовательно добавить множество фич и развивать продукт итерациями

Мой тейк

Tofu Maps — про продуктовые компромиссы: - иногда не добавить фичу — лучше, чем добавить - иногда UX важнее growth - иногда архитектура должна подчиняться сценарию пользователя (local-first), а не “как принято”


Технологии

OSM · Flask · HTML · CSS · JavaScript