В рубрике DOU Проекторвсе желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на editors@dou.ua.
Добрый день, меня зовут Евгений Козак. Я выпускник и сотрудник КПИ, а также CEO IT-сообщества в Киевском политехническом институте — KPIhub. Занимаюсь разными низовыми инициативами в КПИ, в частности в области IT. Примерно год назад я писал об истории создания одного из наших студенческих проектов — виртуального тура по кампусу КПИ. Сейчас хочу рассказать о ресурсе календаря событий — KPI Events.
Идея
Студенты — одна из самых активных категорий людей, и они являются движущей силой в инициативе и проведении мероприятий в разных сферах (наука, спорт, отдых и т. д.). Каждый день проходит множество открытых интересных лекций, конференций, стажировок, встреч и много-много всего.
Очень сложно иногда отследить интересные для себя события без единого ресурса, где бы такие мероприятия были собраны и классифицированы. Как показала практика, лучшие вузы мира создали сами для себя подобные ресурсы (автономные системы событий), например, MIT, Гарвард.
Идея реализовать такой pet-проект появилась и у нас. Не с первого раза, но у нас получилось собрать команду и запустить продукт, интегрировать его с другими сервисами и отпустить в плаванье.
Реализация
Я начал с написания ТЗ, которое мы утвердили с администрацией КПИ, так как это официальный ресурс университета и размещен в его домене. Такого online-ресурса в КПИ не было, потому нам легко и быстро дали «зеленый» свет. Идею поддержали на уровне ректората.
Мы собрали команду из
Всей технической частью занимался Лёша. Первым делом надо было определиться со стеком технологий, который лучше всего подходил для проекта. На тот момент Леша неплохо знал Java EE и игрался с Python. В итоге для реализации проекта, по его мнению, больше подошел Python вместе с его веб-фреймворком Django.
Этот фреймворк позволял в короткие сроки сделать готовый прототип, а также легко масштабировать приложение. Лёша взялся проектировать задуманное нашей командой KPIhub. Для БД выбрали MySql, ее возможностей вполне хватало для такого простого CRUD приложения. Так как этот проект нацелен на студентов, которые частенько сидят в интернете со смартфонов, нам нужен был адаптивный сайт. И тут было решено использовать для адаптивной верстки CSS Framework Bootstrap.
Основные возможности нашего сервиса: предлагать события, сортировать их по дате и категориям, добавлять события в свою персональную ленту и просматривать события от выбранной организации.
Для реализации всего этого было недостаточно простого functional based views в Django, и мы использовали class based views. Это позволило внедрить полезные фичи ООП. Все данные категорий, событий и организаций надо как-то распределить в нашей БД. Для этого спроектировали такую структуру для события:
Командой мы решили, что выкладывать события будут организации, которые предварительно должны были пройти верификацию у модераторов KPI Events. Представители организации получают доступ к админке кабинета их организации на сайте и выкладывают события там от имени своей организации.
Чтобы любой пользователь мог легко разобраться с админпанелью, мы написали собственный максимально простой веб-интерфейс для администрирования организации, который тоже адаптирован под мобильные устройства.
Пример интерфейса для организации KPI Events:
Командой мы решили, что до релиза у юзера должна быть возможность добавлять события к себе в Google календарь, и дайджест событий на день должен выкладываться на наш Telegram каналавтоматически. Для реализации фичи с Google календарем пришлось разобраться с Google Calendar API, и уже через день эта фича была готова.
С телеграмом тоже все просто: создаем Telegram Bot, устанавливаем либу для Telegram Bot API и пишем скрипт, который достает все события на текущий день и отправляет на наш канал. Осталось только вызывать этот скрипт каждый день в определенное время. Берем cron и прописываем, в какое время запускать наш скрипт, и все готово. Можно было прописать настройки прямо на сервере через crontab, но лучше пусть эти настройки хранятся в самом проекте. Для этого берем библиотеку django-crontab и записываем все у себя:
Также немало времени было уделено фронтенду, а именно грамотному распределению кнопок, иконок и фильтров. С логотипом нам помогла наша знакомая Настя.
Результат
Мы получили удобную площадкус простым интерфейсом для размещения новостей («предложкой») и их фильтрацией по категориям. Каждый может создать свою ленту событий, чтобы не пропустить ивент или подписаться на конкретную организацию. Матрица доступа позволяет создавать организации, которые модерируют свои мероприятия. Также в пару кликов легко добавить интересное мероприятие в свой Google календарь.
Создан канал в Telegram, куда в автоматическом режиме генерируются дайджесты событий. Благодаря большому интересу комьюнити КПИ на нас начали активно подписываться и репостить в другие большие каналы. Чуть больше, чем за 2 недели на нашем канале уже 500+ подписчиков, и он входит в ТОП-80 каналов Украины. Также было несколько тематических заметок на официальных ресурсах университета. Мы стараемся дальше придумывать интересные фичи и автоматизировать работу ресурса.
Проект будет интересен не только студентам университета, но и всем жителям Киева, так как в КПИ проходит много мероприятий с открытым доступом для всех. В свою очередь абитуриенты не пропустят дни открытых дверей или просто посмотрят, что и когда проходит в университете, и смогут посетить мероприятие.
В перспективе можем рассматривать внедрение такого продукта в других университетах и сферах.