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

В 2017 году я готовился к IELTS, и мне дали совет, который дают всем: смотрите фильмы с субтитрами.

Этот совет отправил меня искать инструмент вполне определённого рода. Не стриминг — поиск по фразам. Вводишь предложение и видишь, как его произносят, в контексте, в том фильме, где оно попалось. Я такой нашёл. Эстонский сайт, судя по домену .ee, название которого я начисто забыл.

Он ничего у себя не хранил. Он собирал встроенные плееры с видеохостингов и делал их доступными для поиска. Это различие имело значение и технически, и юридически, и тогда я особо не задумывался ни о том, ни о другом — мне просто показалось, что это остроумно.

Потом сайт закрылся. Без объявлений, без объяснений. Я несколько лет искал замену и не нашёл.

В 2021 году я решил сделать свой.

Название

Я попросил друга, потому что придумывать названия — не мой конёк.

Его логика была в том, что сайт лёгкий. Он ничего не хранит у себя: ни видеофайлов, ни загрузок, ни гигабайтов на диске. Он держит указатели на то, что лежит где‑то ещё, — как дискета, которая вмещает очень мало и вполне этим довольна.

VideoFloppy. Так и прижилось.

Что это такое

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

Вы добавляете видео с YouTube или другого хостинга, кладёте его в альбом, делитесь им или оставляете себе. Можно подписываться на других пользователей. Сейчас содержимое — это в основном трейлеры с YouTube, музыкальные клипы и то, что собрали пользователи; мои собственные альбомы — это преимущественно диско семидесятых и восьмидесятых и неприлично много Modern Talking.

На мой сервер ничего не загружается. Каждое видео проигрывается с того хостинга, где оно и так живёт, а значит, трафик берёт на себя их CDN, а мой VPS остаётся дешёвым и почти простаивает. Это было осознанное архитектурное решение, и именно оно — единственная причина, по которой проект прожил пять лет, не стоив мне ничего существенного.

К DMCA я отношусь серьёзно. Есть форма для жалоб, и когда они приходили — около одиннадцати видео за все годы — я удалял. Это вся история споров вокруг проекта.

Как проект строился между двумя работами

Я тогда работал в международной компании и одновременно в одном из агентств Министерства здравоохранения. VideoFloppy собирался в промежутках.

MVP занял примерно два месяца: сначала регистрация, потом альбомы, потом сохранение видео. Полноценная версия — около полугода. Не потому что задача была сложной, а потому что на неё приходилось часа четыре‑пять в неделю.

Я упоминаю это, потому что в статьях про пет‑проекты такое обычно опускают. Интересным ограничением была не техника. Интересным ограничением было то, что у меня два работодателя, а проекту достаётся остаток.

Техническая часть

Бэкенд — N‑tier Architecture на.NET, и это было целью упражнения не меньше, чем сам сайт. Мне хотелось построить нормально разложенную по слоям систему с нуля, чтобы никто не проверял и никто не торопил. Вот этой частью я действительно горжусь.

Фронтенд — Blazor Server. Я пришёл из Razor Pages, и синтаксис оказался достаточно знакомым, чтобы переход прошёл естественно.

Единственное, на чём я споткнулся, — IP‑адреса. Blazor Server выполняется на сервере, поэтому запросы к моему API уходили с IP хостинга, а не пользователя. Задним числом очевидно; в час ночи — не очень. Решение: забирать клиентский IP на уровне Blazor и передавать его в API в зашифрованном виде. Это из тех проблем, с которыми сталкиваешься, только когда строишь что‑то настоящее.

Для уведомлений я добавил alertify.js, потому что стандартные браузерные алерты навевают тоску, а хотелось, чтобы сайт был чуть дружелюбнее.

Позже я перевёл проект с .NET Core 3.1 на.NET 6. Оказалось менее болезненно, чем я ожидал: главное структурное изменение — исчезновение Startup.cs и переезд всего в Program.cs. По сути аккуратное копирование, а не переписывание.

Всё это крутится на самом дешёвом VPS у Contabo, запаса которого хватает, чтобы держать несколько проектов сразу.

И написано всё это руками. ChatGPT к тому моменту уже существовал. Я им не пользовался — не из принципа, а просто потому что не пришло в голову. Если я вернусь к проекту, первым делом прогоню по нему проверку на уязвимости с помощью ИИ.

Семь языков, выбранных не наугад

Интерфейс есть на английском, польском, русском, испанском, немецком, французском и итальянском. Переводы сделаны Google Translate по Excel‑файлу со строками, так что об их изяществе я ничего не утверждаю.

Выбор был не сентиментальным. Это языки, на которых говорят во многих странах, а не в одной, и они попадают в регионы, за просмотры из которых видеоплатформы реально платят. Китайского нет: интернет там ограничен настолько, что ни мой сайт, ни встраиваемые хостинги до пользователя не дойдут, — да и коммерческой ценности такие просмотры не имеют.

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

Экономика

Есть VIP‑тариф. Он даёт десятикратные лимиты: сто альбомов вместо десяти и так далее.

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

На практике вот вся история выручки.

Один пользователь из Италии однажды заплатил один доллар через PayPal. Транзакция сорвалась по техническим причинам на моей стороне, так что он не получил то, за что заплатил. Я подарил ему год VIP бесплатно, а потом починил оплату. Позже PayPal что‑то поменял в своём API, и я перевёл платежи на криптовалюту.

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

Текущее состояние проекта

Зарегистрированных пользователей — десятки. Реального трафика почти нет, большая часть того, что показывает аналитика, — боты. Я никогда его не рекламировал. Я никогда всерьёз не пытался его продвигать.

Проект сейчас в режиме поддержки, а не разработки. Последнее, что я помню из починенного, — ошибка CORS. Когда‑нибудь, может быть, перепишу фронтенд на Angular — в основном чтобы посмотреть, каково это.

Интерфейс недоделан — и это самое точное слово. Архитектура — нет.

Стоило ли оно того

Я не делал VideoFloppy ради денег, поэтому он не разочаровал меня тем, что их не принёс.

Что я получил взамен: реализацию N‑tier Architecture, спроектированную целиком мной; реальный опыт с Blazor Server ещё до того, как он появился в вакансиях, на которые я откликался; миграцию между версиями.NET на системе, которую я понимал полностью; и небольшой набор задач — клиентские IP, CORS, платёжные API, локализация, — с которыми я столкнулся как владелец, а не как исполнитель.

Каждая из них с тех пор пригодилась в оплачиваемой работе.

И где‑то там живёт человек в Италии, к которому я испытываю пожизненную благодарность, — он заплатил доллар за сайт, который незнакомец из Тбилиси сделал потому, что исчез другой сайт.

Проект по‑прежнему работает: videofloppy.com. Ему от вас ничего не нужно. Но он есть, он работает, и спустя пять лет мне кажется, что в этом и есть смысл.


Это перевод моей статьи, впервые опубликованной на Medium.

А у вас есть проект, которым почти никто не пользуется, но который вы всё равно поддерживаете? Интересно, чем такие вещи оправдывают перед собой другие. ?

Комментарии (0)