SurgeUp — Як ми робимо стартап для YouTube-креаторів.
Як ми робимо стартап для YouTube-креаторів і чому відмовились від ботів
В Україні зараз понад 100 тисяч активних YouTube-каналів. Більшість із
них — маленькі творці зі 100-5000 підписників, які роками мріють пробитися
у рекомендації. Стандартний шлях — створювати якісний контент і чекати
органічного росту. Це працює, але повільно: середньому каналу потрібно
6-18 місяців до перших 1000 підписників.
Альтернатива яку пропонує ринок — накрутка ботів. Дешева, швидка, і
вбиває канал. YouTube алгоритм за 24-48 годин виявляє ботів, видаляє
підписників, і канал зникає з рекомендацій назавжди.
Третій шлях — взаємодопомога між креаторами. Це і є SurgeUp.
## Як працює платформа
Ідея проста: ти заробляєш бали виконуючи завдання інших креаторів —
підписуєшся, лайкаєш, коментуєш їхні відео. Витрачаєш ці бали на
просування свого каналу — отримуєш реальні підписки, лайки, коментарі
від інших YouTube-творців.
Економічно це працює так: креатор платить 15 балів за підписку, виконавець
отримує 12. Різниця — комісія системи 20%. Старт безкоштовний — 500 балів
автоматично нараховуються при реєстрації, цього вистачає на 33 підписки
або 50 лайків.
Алгоритмічно — це органічний ріст, а не накрутка. YouTube бачить реальних
користувачів з активних каналів, які генерують справжній watch time, лайки,
коментарі. Канал не отримує штрафу і часто потрапляє в рекомендації.
## Технічна архітектура
— Frontend: Flutter (Web + Android з єдиного codebase)
— Backend: NestJS, PostgreSQL, TypeORM
— Hosting: Railway (auto-deploy from GitHub master)
— Auth: Google OAuth (тільки для підключення YouTube; основна реєстрація
через email + bcrypt)
Підписуйтеся на наші соцмережі
— Платежі: Stripe Live (Apple Pay / Google Pay / cards)
— Аналітика: GA4, Google Search Console
YouTube інтеграція — виключно через офіційний YouTube Data API v3.
Підключення каналу через OAuth 2.0 з мінімально необхідними scopes
(read-only для базової інформації каналу). Жодних паролів ми не зберігаємо,
жодних автоматизацій що порушують YouTube TOS не використовуємо.
## Найболючіші уроки за 4 місяці
### 1. Google OAuth Verification — це окремий проєкт
Якщо твій додаток працює з YouTube/Gmail/Drive scopes — Google вимагає
verification. Процес довгий (2-3 тижні мінімум), 6-пунктовий, і помилки
у будь-якому з них = повторний review.
Нас зафлажили на пункті «Branding guidelines»: App name «SurgeUp» на
OAuth consent screen не збігався з контентом нашого homepage. Хоча на
сайті всюди було «SurgeUp» — як логотип-картинка і в `<title>` тегу.
Але reviewer шукає **plain text** на сторінці. Через CSS background
он бачить тільки HTML-DOM.
Виправили: додали wordmark «SurgeUp» поряд з логотипом у header, hero
eyebrow над H1, і в footer. Re-submit зробили через Reply у треді
Trust & Safety (не Save у Console — це окрема пастка).
### 2. SEO з нуля — місяці, не тижні
Новий домен потрапляє в Google Search Console одразу, але Google
починає реально ранжувати тільки через 4-12 тижнів. Backlinks мають
найбільший вплив, але їх не купити (тобто можна, але це знов про ботів).
Що ми зробили за один день:
— Title + meta description з ключовими словами
— JSON-LD: Organization, SoftwareApplication, FAQPage (валідовано через
Google Rich Results Test)
— Sitemap.xml з усіма публічними URL + robots.txt
— Web manifest + повний favicon-set (16/32/96/192/512 + apple-touch)
— Header/Footer уніфіковано на всіх сторінках з wordmark
— PageSpeed: 91 mobile, 97 desktop
Чекаємо органічного трафіку. Перший Google traffic зазвичай починається
з long-tail запитів за 6-8 тижнів.
### 3. NestJS + закомічений `dist/` — антипатерн
Це наш найдорожчий fuckup. Початкова конфігурація проєкту мала
`npm run build = echo «skipped»` — TypeScript компіляція виключена,
а скомпільовані `dist/*.js` закомічені у git. Railway просто запускав
`node dist/main`.
Це створює clear-cut проблему: коли треба було виправити 32 TS-помилки
(legacy типізаційні неточності), Claude Code виправив `src/*.ts`, але
не перекомпілював `dist/`. Тестів локально не було. Push → Railway
запускає старий dist → працює як раніше → «ok, виправлено».
А наступний крок (зміни в `User entity`) Claude Code випадково додав
у dist, і там з'явився `design:type = Object` для `youtubeUrl`, що
unsupported у Postgres. Прод впав повністю з
`DataTypeNotSupportedError`.
Rollback на попередній deploy врятував. Потім великий refactor:
додали `npm run build` що реально компілює TypeScript, і convention
що entity-файли не міняються без локального runtime-тесту.
## Що зараз
Платформа в production у Ukraine. ~50 активних користувачів за перші
тижні. Перші платежі у live Stripe. Telegram-канал @surgeup_app з
постами про маркетинг, безпеку, ріст YouTube.
Чекаємо завершення Google OAuth verification (2-5 робочих днів), тоді
зможемо повноцінно онбордити нових користувачів без warning-screen
«Unverified app».
Якщо ти YouTube-креатор з UA-аудиторією — спробуй: surgeup.app. Якщо
ти будуєш peer-to-peer платформу — пиши, обмінюємось досвідом.