extend _components/base.pug

block pagetitle
    title Events Watch Video 

block css 
    link(rel="stylesheet", href="../css/events.css?ver=" + config.version)

block main
    - global.pageHref = "events.html"
    include ./_components/header.pug



    section.eventhero
        .container
            .eventhero__main
                h2.h2.
                    Join The Apache Ignite <br>
                    Community At&nbsp;Conferences, <br>
                    Summits And Other Events
                .h5.pt-3.
                    The community meets online and offline regularly. <br>
                    Join our meetup groups and events to learn from <br>Ignite experts or to share your Ignite experience.
            img.eventhero__img(src="/img/events/b1-mainpic.svg", alt="Join the Apache Ignite Community at Conferences, Summits and Other Events")
    // /.eventhero


    section.cmtynavblock 
        .container
            ul.cmtynavblock__list.flexi 
                li
                    a.cmtynavblock__active(href="#summit")  Ignite Summit
                li
                    a(href="#meetups") Meetups Worldwide
                li
                    a(href="#upcoming") Upcoming Events
                li
                    a(href="#past") Past Events
    // /.cmtynavblock



    section.event-featured.container 
        p.capstext Featured Event
        a(href="https://ignite-summit.org/schedule/", target="_blank").event-featured__banner.pt-5
            picture
                source(srcset="/img/events/event-banner-vert.jpg" media="(max-width: 767px)")
                img(src="/img/events/event-banner.jpg", alt="")
            //- .event-featured__placeholder(style="background:#E8F2FA; height:340px;")
    // /.event-featured



    section.evsummit.container#summit
        .evsummit__date.flexi 
            .evsummit__day 16
            .evsummit__month.h5 NOVEMBER <br>2021
        .evsummit__info.flexi.pt-5
            .evsummit__logo 
                img(src="/img/events/b2-summit.svg", alt="")
            .evsummit__descr
                h3.h3 Apache Ignite Summit
                p.h5.pt-2.
                    This virtual conference will feature speakers from industry-leading companies <br>
                    and hundreds of participants from all over the world. 
        .evsummit__blocks.pt-5.flexi 
            a(href="#", target="_blank").evsummblock.evsummblock--speaker
                p.h4.evsummblock__title Watch Summit videos and learn more about in-memory computing technology
                p.fz20.pt-1x.evsummblock__descr A full collection of Apache Ignite Summit presentations
                p.evsummblock__listtitle.pt-4
                    span.button Watch Summit Videos 
    // /.evsummit
        

    section.event-planet#meetups
        .container
            .event-planet__wrap.flexi 
                .event-planet__main 
                    h3.h3.pb-1 Apache Ignite Meetups Worldwide
                    p.h5.pt-5 Meet the community&nbsp;&mdash; developers, experts, and practitioners&nbsp;&mdash; face-to-face, virtually, or&nbsp;onsite in&nbsp;your city.
                .event-planet__pic 
                    img(src="/img/events/b4-world.svg", alt="")
    // /.event-planet
        


    section.event-virtual.container 
        .eventvirt.flexi 
            .eventvirt__left 
                h3.h4 Virtual Apache Ignite Meetup
                p.pt-2 Join Ignite users, developers, committers, contributors, and architects from all over the world and&nbsp;get access to&nbsp;the online-talks and presentations by&nbsp;Apache Ignite experts and practitioners.
            .eventvirt__right 
                a.button(href="#") Join Virtual Meetup

        .event-virtbot.flexi
            .event-virtbot__col
                h4.h4 Recordings Of Past Meetups
                p.pt-2 Find a collection of past Virtual Apache Ignite Meetup <br>presentations, talks, and webinars.
                .event-recording.pb-2
                    a(href="#").event-recorditem.videoscr.glightbox
                        .event-recpic(style="border-radius:10px; background:#F6F6F6;")
                    a(href="#").event-recorditem.videoscr.glightbox
                        .event-recpic(style="border-radius:10px; background:#F6F6F6;")
                    a(href="#").event-recorditem.videoscr.glightbox
                        .event-recpic(style="border-radius:10px; background:#F6F6F6;")
                a.event-recbutton.button.button--shadow(href="https://www.youtube.com/playlist?list=PLMc7NR20hA-LQ0GR1QW5SDQflMOuPUqDQ", target="_blank")
                    i.
                        <svg width="9" height="10" viewBox="0 0 9 10" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <path d="M8.71423 4.99993L0.142805 9.94865L0.142805 0.0512134L8.71423 4.99993Z"/>
                        </svg>
                    span Watch Virtual Meetup videos 

            .event-virtbot__col
                h4.h4 Upcoming Virtual Meetup
                p.pt-2.event-virtbot__gray November 16, 2021
                .event-dynamicsect
                a.button.button--shadow.event-recmorebutton(href="https://www.meetup.com/ru-RU/Apache-Ignite-Virtual-Meetup/events/280383112/", target="_blank") Learn more
    // /.event-virtual



    section.eventyoucity.container 
        h2.h4 Apache Ignite Meetups In Your City
        .eventyoucity__wrap.pt-5
            article.eventyoucity__item
                .eventyoucity__icon 
                    img(src="/img/events/flag-uk.svg", alt="")
                .eventyoucity__town.h5
                    strong London
                    span Apache Ignite Meetup
                .eventyoucity__action 
                    a.button.button--shadow(href="#")
                        img(src="/img/events/icon-plus.svg", alt="")
                        span Join 
            article.eventyoucity__item
                .eventyoucity__icon 
                    img(src="/img/events/flag-ru.svg", alt="")
                .eventyoucity__town.h5
                    strong St.Petersburg
                    span Apache Ignite Meetup
                .eventyoucity__action 
                    a.button.button--shadow(href="#")
                        img(src="/img/events/icon-plus.svg", alt="")
                        span Join 
            article.eventyoucity__item
                .eventyoucity__icon 
                    img(src="/img/events/flag-ru.svg", alt="")
                .eventyoucity__town.h5
                    strong Moscow
                    span Apache Ignite Meetup
                .eventyoucity__action 
                    a.button.button--shadow(href="#")
                        img(src="/img/events/icon-plus.svg", alt="")
                        span Join
            article.eventyoucity__last
                p.fz20.pb-3 Start an onsite Apache Ignite Meetup in your city.
                small Take the first step.
                small Send us a note to <br><a href="mailto:dev@ignite.apache.org">dev@ignite.apache.org</a> <br>and we'll see what can be done.
    // /.eventyoucity



    section.eventupcoming.container#upcoming 
        .capstext.pb-1 Upcoming Events Schedule
        .eventupcoming__wrap.pt-4
            h2.h4.eventupcoming__head.pb-5 Online events (2)
            article.eventcomingitem.flexi 
                .eventcomingitem__left
                    p.eventcomingitem__num 21
                    p.eventcomingitem__month SEPTEMBER
                    p.eventcomingitem__year.pt-3 2021
                .eventcomingitem__main
                    p.eventcomingitem__title.h5 Distributed Java Databases Under the Hood: Main Components and Interactions Between Them
                    p.eventcomingitem__descr.pt-1 We will describe the minimal architecture of distributed data storage—the main components and how these components work together.
                    a.eventcomingitem__more(href="#")  Learn more details
                .eventcomingitem__right
                    .eventcomingitem__mic
                        .eventcomingitem__speaker Valentin Kulichenko
                    .eventcomingitem__loc
                        .eventcomingitem__locblock
                            img(src="/img/events/icon-pero.png", alt="")
                        .eventcomingitem__camera Online event
            // /.eventcomingitem

            article.eventcomingitem.flexi 
                .eventcomingitem__left
                    p.eventcomingitem__num 23
                    p.eventcomingitem__month SEPTEMBER
                    p.eventcomingitem__year.pt-3 2021
                .eventcomingitem__main
                    p.eventcomingitem__title.h5 Apache Ignite Extensions – Modularization 
                    p.eventcomingitem__descr.pt-1 Apache Ignite Extensions to allow Apache Ignite codebase host core modules capabilities and migrate 3rd party integrations in a separate repository.
                    a.eventcomingitem__more(href="#") Learn more details
                .eventcomingitem__right
                    .eventcomingitem__mic
                        .eventcomingitem__speaker Saikat Maitra
                    .eventcomingitem__loc
                        .eventcomingitem__locblock
                            img(src="/img/events/icon-pero.png", alt="")
                        .eventcomingitem__camera Online event
            // /.eventcomingitem

        .eventupcoming__wrap.pt-4
            h2.h4.py-4 Offline events (4)
            article.eventcomingitem.flexi 
                .eventcomingitem__left
                    p.eventcomingitem__num 20
                    p.eventcomingitem__month SEPTEMBER
                    p.eventcomingitem__year.pt-3 2021
                .eventcomingitem__main
                    .eventcomingitem__complextitle.flexi
                        img.eventcomingitem__logo(src="/img/events/content/event1.png", alt="")
                        p.eventcomingitem__title.h5 Apache Ignite. Now with CDC!
                    p.eventcomingitem__descr.pt-2 Nikolay Izhikov, Apache Ignite PMC, will introduce the audience to Change Data Capture and share how it's organized in Apache Ignite
                    a.eventcomingitem__more(href="#") Learn more details
                .eventcomingitem__right
                    .eventcomingitem__mic
                        .eventcomingitem__speaker Nikolay Izhikov
                    .eventcomingitem__loc
                        .eventcomingitem__locblock Saint-Petersburg, Russia
                        .eventcomingitem__camera Online event
            // /.eventcomingitem

            article.eventcomingitem.flexi 
                .eventcomingitem__left
                    p.eventcomingitem__num 23
                    p.eventcomingitem__month SEPTEMBER
                    p.eventcomingitem__year.pt-3 2021
                .eventcomingitem__main
                    .eventcomingitem__complextitle.flexi
                        img.eventcomingitem__logo(src="/img/events/content/event2.png", alt="")
                        p.eventcomingitem__title.h5 Organization of testing distributed systems on the example of a real Java project
                    p.eventcomingitem__descr.pt-2 First offline meeting in 2021! Ignite Committers will talk about recently updated features. Dmitry Gorchakov will introduce the case – building a distributed system of "super services" on Apache Ignite.
                    a.eventcomingitem__more(href="#") Learn more details
                .eventcomingitem__right
                    .eventcomingitem__mic
                        .eventcomingitem__speaker.
                            Ivan Bessonov<br>
                            Maxim Muzafarov<br>
                            Dmitry Gorchakov
                    .eventcomingitem__loc 
                        .eventcomingitem__locblock Moscow, Russia
            // /.eventcomingitem
    // /.eventupcoming




    section.eventspast#past.container
        h3.capstext.pb-5 Past Events
        .eventspast__tablinks.flexi 
            button.eventpast__link(data-tablink="e2021").active 2021
            button.eventpast__link(data-tablink="e2021") 2020
            button.eventpast__link(data-tablink="e2021") 2019
            button.eventpast__link(data-tablink="e2021") 2018
            button.eventpast__link(data-tablink="e2021") 2017
            button.eventpast__link(data-tablink="e2021") 2016
            button.eventpast__link(data-tablink="e2021") 2015
            button.eventpast__link(data-tablink="e2021") 2014
        .eventspast__tabs
            .eventspast__tab 
                article.eventcard
                    .eventcard__date September 2, 2021
                    h3.h5.pt-3 Building a low-code BaaS platform on Apache Ignite
                    .eventcard__info.pt-2 
                        .eventcard__speaker Courtney Robinson
                            small (Hypi, co-founder and CEO)
                        .eventcard__loc Virtual Apache Ignite Meetup
                    a.eventcard__button.button.button--shadow Learn more details
                article.eventcard
                    .eventcard__date September 2, 2021
                    h3.h5.pt-3 Apache Ignite 3.0.0 Alpha 2 Build Community Gathering
                    .eventcard__info.pt-2 
                        .eventcard__speaker.eventcard__speaker--one Valentin Kulichenko
                        .eventcard__loc Virtual Apache Ignite Meetup
                    a.eventcard__button.button.button--shadow Learn more details
                article.eventcard
                    .eventcard__date June 19, 2021
                    h3.h5.pt-3 Apache Ignite on Kubernetes
                    .eventcard__info.pt-2 
                        .eventcard__speaker.eventcard__speaker--one Colin Capriati
                        .eventcard__loc Virtual Apache Ignite Meetup
                    a.eventcard__button.button.button--shadow Learn more details
            // /.eventspast__tab
            .eventspast__bottom.pt-5
                a.eventspast__more.jsLoadMoreEvents(href="#")  Show more
    // /.eventspast
        



    