(function(bannerClassName) { const sendEvent = (token, action) => { const value = 'Branding ' + token + ' – ' + action; if (window.dataLayer !== undefined) { window.dataLayer.push({ event: 'data_event', data_description: value, }); } else { console.log('GA send: ' + value); } }; const oneBeforePageChange = (callback) => { if (typeof Air === 'object') { const ajaxify = Air.import('module.ajaxify'); ajaxify.one('Before page changed', () => { try { if (callback) { callback(); } } catch (error) { console.log(error); } }); } }; const onLinkClick = (e) => { const link = e.target; const href = link.getAttribute('href'); sendEvent(href, 'Click'); link.removeEventListener('click', onLinkClick); }; const branding = document.querySelector(bannerClassName); if (!branding) { return; } const links = branding.querySelectorAll('a'); for (let i = 0; i < links.length; i += 1) { const isVisible = getComputedStyle(links[i]).display !== 'none'; const href = links[i].getAttribute('href'); if (isVisible) { sendEvent(href, 'Show'); } links[i].addEventListener('click', onLinkClick); } oneBeforePageChange(() => { for (let i = 0; i < links.length; i += 1) { links[i].removeEventListener('click', onLinkClick); } }); })('.entry-native-branding');

Rooms. Часть 1. Как я сам делаю проект для сообществ онлайн

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

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

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

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

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

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

Расскажу немного о самом проекте.

Уже более 7 лет я так или иначе возвращаюсь к теме создания и управления Сообществами. То она утихает, то снова загорается яркой лампочкой над головой. Еще в далеком 2013 году я хотел создать в России нечто наподобие зарубежного meetup, где каждый может создать свое сообщество по интересам и организовывать встречи оффлайн. Бег по утрам, конные прогулки, встречи разработчиков, дневной сон на работе: такие и еще куча других групп прекрасно существовали на одном ресурсе. Вы могли найти своих людей буквально по любому интересу.

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

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

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

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

В отличие от чатов в мессенджерах (оставьте их для личных переписок и общения, наконец!) и сообществ в ВК, в Rooms это будет удобно организовано для участников: разные комнаты внутри сообщества, как в Discord, уведомления о мероприятиях, тематические посты и некоторые другие фишки.

Если вам будет интересно следить за ходом разработки, приглашаю присоединиться к Телеграм каналу - https://t.me/startupbombit

Следующий первый пост про разработку уже с некоторыми итогами по работе будет через неделю-две.

(function(bannerClassName) { const sendEvent = (token, action) => { const value = 'Branding ' + token + ' – ' + action; if (window.dataLayer !== undefined) { window.dataLayer.push({ event: 'data_event', data_description: value, }); } else { console.log('GA send: ' + value); } }; const oneBeforePageChange = (callback) => { if (typeof Air === 'object') { const ajaxify = Air.import('module.ajaxify'); ajaxify.one('Before page changed', () => { try { if (callback) { callback(); } } catch (error) { console.log(error); } }); } }; const onLinkClick = (e) => { const link = e.target; const href = link.getAttribute('href'); sendEvent(href, 'Click'); link.removeEventListener('click', onLinkClick); }; const branding = document.querySelector(bannerClassName); if (!branding) { return; } const links = branding.querySelectorAll('a'); for (let i = 0; i < links.length; i += 1) { const isVisible = getComputedStyle(links[i]).display !== 'none'; const href = links[i].getAttribute('href'); if (isVisible) { sendEvent(href, 'Show'); } links[i].addEventListener('click', onLinkClick); } oneBeforePageChange(() => { for (let i = 0; i < links.length; i += 1) { links[i].removeEventListener('click', onLinkClick); } }); })('.entry-article-footer');
0
Комментарии
-3 комментариев
Раскрывать всегда
{"hash":"fa79e45e","params":{"id":"https%3A%2F%2Ffront.sber.link%2Fvoteplaer%2Fpl%2F61%3Fautoplay%3D1","service":3,"title":"\u0412\u044b\u0439\u0442\u0438 \u043d\u0430 \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u044b\u0439 \u0440\u044b\u043d\u043e\u043a","isLegacy":true,"isHidden":false}}