Проект: PLACELIST — собираем точки с карты  Публичный пост
5 марта 2024  811
PLACELIST — собираем точки с карты

Не претендую на уникальность, но и не ChatGPT сгенерировал. Все написанное выстрадано руками :)

У нас была проблема

Куча приложений карт, еще больше флажков в каждом приложении и непонятно как всем этим управлять, где какое место найти.

Здесь мои точки с Google Maps, некоторые списки почему-то иногда не отображаются или отображаются только в вебе. Еще больше точек по России в Яндекс Картах и Юго-Восточной Азии.
Точки для хайкинга у меня в Organic Maps (оффлайн, ну).

И мы ее почти решили

Placelist (пер. список мест) — это приложение, где ты сохраняешь свои метки с разных карт в списки, делишься ими с друзьями (или нет) и кайфуешь от организованности.

Функционал

Что приложение может:
📍Добавить место с карты и пошэрить его
📍Создать список мест и пошэрить его
📍Быстро посмотреть точку на карте (в приложении)
📍Открыть точку на карте (отдельное приложение)
📍Менеджить список вместе с друзьями

Что приложение не может (пока):
🤖 Сгенерировать список мест по вашему промпту
🌍 Делать списки мест публичными (весь интернет увидит что вы там насохраняли)
📣 Делиться ссылкой на место
👥 Ролевая система для списоков — создатель, модератор, вьювер
💅🏻 Менять тему приложения, чтобы было так, как тебе нравится
📁 Создавать папки для плейслистов
🍻 и много другого — мы даже роадмап сделали!

Платформы

Сначала iOS просто потому что только в это пока можем. Далее web, потом Android.
Для iOS еще сделаем AppClip, чтобы люди без приложения могли открывать ваши списки удобнее чем в вебе.

Стэк

Backend

  1. Python FastAPI (решили отдохнуть от Django)
  2. Pydantic для валидации моделек
  3. Alembic для миграций
  4. SQLAlchemy — ORM
  5. Postgresql для БД
  6. Redis для сессионного хранилища
  7. Bash и Cron для регулярных чисток и сбора кэша
  8. Докеризация с компоузом, чтобы все это стартовать

Монолит поделен на функциональные модули user, placelist, place и тд, как apps в Django.

Frontend
Пока только статичная страничка, но потом полноценное web-приложение.

  1. Node.js (вместо модного Bun)
  2. Nextjs + React
  3. Axios для HTTP

Мобилка (iOS)

  1. Модульное приложение на базе Tuist
  2. Sourcery для кодогенераци
  3. Вёрстка на SwiftUI и немножко UIKit
  4. Redux-like архитектура на базе TCA
  5. CoreData для данных

Процесс

Когда мы начинали, я думал это «приключение на 20 минут». Ведь мы уже делали сайд-проекты и теперь то не совершим предыдущих ошибок. В общем, fail fast во всей красе.

не ну мы
не ну мы

Спустя год мы все еще не закончили, но уже виден конец. Релиз намечен, waitlist запущен и вот я пишу для вас эту статью. Красота!

тоже мы, но через год
тоже мы, но через год

Ошибки (или нет?)

Мы сделали много ошибок, расскажу про те, что больше всего отзываются.

1. Делать дизайн и следовать ему

В январе 2023 года я попросил свою hot wife сделать дизайн.

Так выглядел процесс поиска концепта
Так выглядел процесс поиска концепта

Получили симпатичный дизайн с хорошим UX.

Тут 1/5 всех макетов
Тут 1/5 всех макетов

Почему это ошибка?
Потому что fail fast не подразумевает времени на создание UI-kit, сложную и долгую верстку и время на обсуждение дизайна. Надо было делать прототип на коленке и тестить на друзьях-путешественниках.

2. FastAPI на бэке

Не пойми меня неправильно, FastAPI — классный фреймворк, чтобы чувствовать себя программистом, а не фреймворкером (привет Django), но мы тут про бизнес, а не хобби. Поэтому надо было брать быстрое и знакомое — Django.

В итоге пришлось разбираться с Alembic, дружить его с SQLAlchemy и смотреть как валидироваться через Pydantic, писать авторизацию с нуля. Круто, но не про бизнес.

3. Проблемы с реализацией SwiftUI на iOS

SwiftUI - классный фреймворк, но с проблемами кастомизации. В одном месте ты сильно выигрываешь в простоте вёрстки, а потом тратишь всё остальное время на костыли и попытки скрестить его с UIKit для реализации недостающих элементов.

Реализация кастомных компонентов на SwiftUI — боль, которую -можно- нужно было избежать. Четверть времени разработки заняла реализация навигации, которая достаточно примитивна в SwiftUI.

Если бы мы начинали сейчас, мы бы использовали SwiftUI только для простых экранов, отдавая предпочтение UIKit в основном функционале.

Деньги

Мы пока ничего не заработали, но уже потратили!

🐳 $5/месяц — сервер на Digital Ocean.
💰 $100/год — заносим Тиму Куку, чтобы он дал аккаунт настоящего iOS-разработчика.

Будущие расходы

✈️ $2800 — билеты в Тайланд для меня и моей жены. Надо же как-то за дизайн платить!
🐳 $40/месяц — с запуском приложения вырастет и мощность серверов.
💼 $1500/год — упрощенное ЮЛ в Германии, чтобы Stripe подключить. Вместе с налоговиком (Steuerberater) чуть больше получается, но пока точно не знаю сколько.

Пиши в комментарий за что мне еще придется платить! 🥹

Монетизация

Обязательно будет, но не сразу и не тупая. Наша идея такая: мы хотим, чтобы люди могли использовать приложение бесплатно, но больше плейслистов — это больше денег на сервер.
Скорее-всего будет подписка, которая разблокирует уникальные скинчики для приложения и неограниченные плейслисты / точки.

Мы все еще посчитаем и заранее пришлем письмо с изменениями. Уже созданные плейслисты удалять не будем, но для новых, скорее-всего, придется купить подписку.

Дай мне знать в комментариях, если ты считаешь такую монетизацию говном! 💩

Мы

📱 Миша Кузьмин (iOS)
👋🏼 Вася Попов (я — бэк и фронт)
💅🏻 Анжелика Довнар (hot wife — дизайн)

Совет прошлому мне, настоящему тебе

Может это и прописные истины, но мне дались с трудом.

Хобби или бизнес

⚡️ Выбери: ты нашел себе новое хобби или делаешь бизнес? На хобби ты тратишь деньги, бизнес зарабатывает деньги (должен).
В бизнесе делай на том, на чем быстрее и думай про то, что ты не в корпорате.
В хобби делай че в кайф — тестируй гипотезы, изучай идеи, пробуй то, что раньше не делал.

Шаутаут автору презентации
Шаутаут автору презентации

Что читать и смотреть?

  1. На эту тему у Вастрика есть хорошая статья
  2. Ютуб YC поможет вдохновиться и ответить на базовые вопросы

Регулярность > «Щас сяду и все напишу сразу»

Если проект больше, чем на пару дней, то лучше выбрать время среди недели, когда ты всегда будешь заниматься только этим проектом.

Кроме случаев, когда проект — это реально одно форма на реакте. Тут можно и пропушить себя немного.

Что дальше?

А дальше — совершать новые ошибки!

Сейчас мы запустили лист ожидания, куда ты можешь записаться и получить имейл, когда мы сделаем релиз. Все бесплатно и без смс!

Спасибо, что прочитал/а. Буду рад ответить на вопросы или обсудить почему это не заработает в комментариях 🙃

29 комментариев 👇
Yury Kuznetsov DevOps, недорого, самовывоз 6 марта в 10:23

Побуду человеком, который всё портит :)
Идея очень хорошая, пост написан интересно, но как же, простите, заебали ранние доступы и листы ожидания! Вижу в профиле Германию, понимаю вайбы, но термин на приложение - это уже слишком.

Я - твоя ЦА. Я прочитал рекламу, я хочу твой продукт. Кривой, косой, но сейчас. Я готов писать тебе развернутые комменты "что не так", готов терпеть неудобства ранней версии, но дай пощупать!

Если я хочу пиццу - я заказываю пиццу, а не лист ожидания на пиццу. Когда подойдет очередь - я уже тысячу раз забуду тебя, твой пост и твой продукт, и смахну уведомление в спам.

Тем более, ты пришёл к Клубу (но делаешь это без уважения). Ты не инвесторам впариваешь грандиозные планы, ты своим друзьям пришел рассказать про свой проект. Но вместо проекта - пустые обещания и красивый лендинг.

Интересно было бы тебе читать посты "как я перееду в Америку", "как я получу свой первый оффер в Гугл", "Как я заработаю миллион а потом выгорю"?

Прости за токсичность, удачи тебе и твоему проекту.

  Развернуть 1 комментарий

@FEARmeR, все в порядке! Спасибо, что написал

  Развернуть 1 комментарий
Миша Безверхий управляющий изделием Команда Клуба 5 марта в 17:00

Хороший пост, интересно было.
Наверное, не согласен с тем, что делать дизайн — ошибка, ошибка — делать его таким большим с самого начала. Нужен просто дизайнер, который тоже понимает концепцию фэйл фаст :)

Небольшой фидбэк по стилю: в Клубе плохо работают байты на комментарии типа "пиши в комментариях, что еще" — отдает вайбом какого-то инстаграма, как будто ты smm-гуру, а остальные — твои несмышленные подпищеке.

А тут все же в основном сообщество равных, и такую позицию считают и не только не откомментируют то, что ты хотел, но и могут не дать какой-то обратной связи, котороу дали бы :)

  Развернуть 1 комментарий

@mixbez, спасибо за фидбэк! Не считаю себя выше других, хотел разжечь дискуссию.

  Развернуть 1 комментарий

Интересно интересно!
Попробовал бы!

Только жаль , что пост для клуба, а в итоге надо записываться в лист ожидания!

  Развернуть 1 комментарий

@vasyaivanovpv, как релиз сделаем, пришлем письмо!

  Развернуть 1 комментарий

@vasilypopov_, да я не записывался)

  Развернуть 1 комментарий
Yury Kupriyanov Смотритель ютуба 6 марта в 15:00

Записался в очередь и буду ждать. А пока вопрос каким образом можно вкачать будет метки с условного яндекса/гугла ?

  Развернуть 1 комментарий

@Yurecccc, спасибо!
По вопросу: к разным сервисам разный подход. Гугл очень неохотно дает доступ к твоим спискам, но способ есть — мы в приложении даем понятную инструкцию как это сделать

  Развернуть 1 комментарий

Привет!

Рекомендую следить за проектом https://www.corner.inc/. Команда из долины, делают похожий сервис. Но я думаю, что вы про него в курсе :)

Буду ждать запуска. Удачи!

  Развернуть 1 комментарий

@m_nemkevich, привет! спасибо, сервис видел, слежу :)

  Развернуть 1 комментарий

Подскажу не прошенный совет:

  • продукт прикольный, пока не доконца ясен вэлью его, но у меня у самого свалка, насколкьо для меня это критично? да только в моменте когда пишут друзья о том, что едут в спб и чтобы я скинул им места классные, в теории я просто давно уже собрал список и кидаю его (это вопрос про частотность проблемы)
  • когда собираешь вейтлист, бери за это бабки, так ты сразу проверишь настолько ли болит, просто вейтлист, ты поймешь примерно нихуя, ибо воронка дальше может быть 0, а деньги очень понятный фактор* (это вопрос про валидацию идеи)*
  • про дизайн верно все было и про разработку тоже, можно было вообще лендос пильнуть, или в фигме прототип собрать и дать друзьям потыкаться, - вставим тут слово кастедвчик (это вопрос про скорость)

А в остальном, круто что YC посмотрел, там как раз про все это рассказывается.

Ну и будем следить, че там дальше у тебя получится!

  Развернуть 1 комментарий

@gaserd, Я: ворчу что бесят очереди на приложение
Сергей: предлагает сделать очередь платной :)

  Развернуть 1 комментарий

@FEARmeR, да все так.

В моей логике, если вы ворчите на очередь, то возможно и не так сильно то вам это и нужно.

Если бы реально нужно было, вы бы уже сломя голову писали создателю, искали контакты и говорили что готовы выступить добровольцем на любые тесты.

А деньги, тут выступают лакмусовой бумажкой, просто я сравнительно недавно делал именно такой тест в компании одной, мы сделали платный вейтлист и это работает очень хорошо, если людям нужно это, они и заплатят за вейтлист, и подождут, и все на свете сделают - если они видят в этом прямой вэлью.

  Развернуть 1 комментарий

Привет! Классная идея. В лист ожидания вписался. А какие примерные сроки релиза?

  Развернуть 1 комментарий

@atatarintsev, привет! Метим в июнь-июль. Спасибо, что вписался

  Развернуть 1 комментарий
Наталья Стусь фронтенд разработчик 6 марта в 13:52

Была практически такая же идея, даже начали что-то делать по ней :))
стало очень актуально, когда все вокруг номады или одновременно переехавшие, все делятся друг с другом списками мест, а менеджерить это в гугл-картах никак, там даже управление списками засунуто в какую-то дальнюю жопу, каждый раз не могу вспомнить где это.

  Развернуть 1 комментарий

@natix, круто! Если выпустите свое, пришли пост, интересно.
Гугл карты — боль, да :(

  Развернуть 1 комментарий

Отличный проект. Записался в вейтлист

  Развернуть 1 комментарий

А есть видение, каким будет сервис лет так через 5-10, если все получится?

  Развернуть 1 комментарий

@vasyaivanovpv, не могу сказать про 10 лет, но про 5 лет я думал.
Хочется, чтобы сервис пошел стопам спотифай в части социального взаимодействия:

  1. публичные плейслисты, на которые каждый может подписаться и глобальный поиск по приложению (это уже на роадмапе есть).
  2. Публичные профили (которые можно зафоловить?)
  3. Даже мини-страницы под каждый плейслист, где можно подробнее описать каждое место, фотографии приложить, рассказать историю.

В чати бизнеса:

  1. Дедубликация сохраненных мест по всему приложению даст возможность владельцу ресторана создавать страницу своего места, которая будет открываться по нажатию на сохраненное место в плейслисте.
  2. Возможно в какой-то момент появятся отзывы для отдельных категорий мест (рестораны, кафе).
  Развернуть 1 комментарий

@vasilypopov_, а карта появится?

  Развернуть 1 комментарий

@vasyaivanovpv, да, на макетах в посте нет, но она по плану в первом релизе

  Развернуть 1 комментарий

@vasilypopov_, от мапбокса?

  Развернуть 1 комментарий

@vasyaivanovpv, у нас первый релиз — это iOS, поэтому бесплатные Apple Maps пока

  Развернуть 1 комментарий

@vasilypopov_, то есть в целом это будет карта со списками мест но без навигации?

  Развернуть 1 комментарий

@vasyaivanovpv, да, навигацию надо будет строить в другом приложении. Мы постараемся сделать переход удобным

  Развернуть 1 комментарий

@vasilypopov_, ради интереса спрошу, а разве с картой и списком точек, это не станет ЕЩЕ ОДНОЙ картой куда все складируется? Типа есть гугл, эро, органик Марс, яндекс - теперь вот вы..

Второй вопрос отсюда же - что если POI нет в эпл мапс? Кафешка не отмечена или природная достопримечательность не существует, как вы это парсите?

  Развернуть 1 комментарий

@chu_guevara, рад ответить.
Первый вопрос: возможно, если ты не понял юзкейс, значит это не твоя боль! Мы не картографический сервис, карта нужна только чтобы отображать точки с других карт и помочь людям удобно их менеджерить. Мы не делаем маршруты, мы собираем точки с любых карт и показываем у нас, чтобы потом эти точки можно было открыть в любой карте (не важно, есть там место или нет).

Второй вопрос:
Мы не матчим точки с разных карт на точки эпол карт. Это было бы странно и жестко привязывало бы нас к провайдеру карт :) мы показываем твою точку с любой карты на карте выбранного нами провайдера. Глубже рассказывать не хочу да и не зачем — лучше увидеть, когда запустимся.

Надеюсь смог ответить

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб