extend ../_components/base.pug

block pagetitle
    title Proven Business Cases - Apache Ignite in Use
    meta(name="description", content="All publicly disclosed business cases of Apache Ignite. Explore dozens of Ignite case-studies across various industries.")
    link(rel="canonical", href="https://ignite.apache.org/use-cases/provenusecases.html")

    meta(property="og:title", content="Proven Business Cases - Apache Ignite in Use")
    meta(property="og:type", content="article")
    meta(property="og:url", content="https://ignite.apache.org/use-cases/provenusecases.html")
    meta(property="og:image", content="/img/og-pic.png")
    meta(property="og:description", content="All publicly disclosed business cases of Apache Ignite. Explore dozens of Ignite case-studies across various industries.")

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


block main
    - global.pageHref = "use-cases/provenusecases.html"
    - config.hdrClassName = "hdr__grey hdr__white"
    include ../_components/header.pug


    section.grayhero 
        .container 
            h1.grayhero__h1.h1.
                Apache Ignite Is Chosen
                By&nbsp;Leading Companies
                Across The World
            .grayhero__logos.flexi
                span.grayhero__logo
                    img(src="/img/poweredby/logos/microsoft.svg", alt="") 
                span.grayhero__logo
                    img(src="/img/poweredby/logos/netflix.svg", alt="") 
                span.grayhero__logo
                    img(src="/img/poweredby/logos/apple.png", alt="") 
                span.grayhero__logo
                    img(src="/img/poweredby/logos/dreamworks.png", alt="") 
                span.grayhero__logo
                    img(src="/img/poweredby/logos/yahoo.svg", alt="") 
                span.grayhero__logo
                    img(src="/img/poweredby/logos/bloomberg.svg", alt="")
                span.grayhero__logo
                    img(src="/img/poweredby/logos/paypal.svg", alt="") 
                span.grayhero__logo
                    img(src="/img/poweredby/logos/banco-do-brasil.svg", alt="")
    // /.grayhero



    section.powered2.container
        h2.h4 Explore Featured Stories
        p.powered2__descr.h5.pt-2 You can find dozens of&nbsp;Apache Ignite case-studies across various industries:
        .powered2__grid.pt-5
            .powered2item eCommerce
            .powered2item Pharma & Healthcare
            .powered2item Financial Services
            .powered2item Banking
            .powered2item Internet of things
            .powered2item Logistics & Transportation
            .powered2item Retail
            .powered2item Leisure & Hospitality
            .powered2item Entertainment
            .powered2item Defense
            .powered2item Gaming
            .powered2item Biotech
            .powered2item Software & SaaS
            .powered2item Telecommunications
    // /.powered2

    section.poweredbanner.container
        .poweredbanner__bg.flexi
            .poweredbanner__left.flexi 
                p.h4 
                    strong Do&nbsp;you have an&nbsp;Apache Ignite use-case to&nbsp;share?
                .pt-1.fz20
                    | Reach out to us on the 
                    span.cmty-pushupwrap(data-poplink="cont-link1")
                        span 
                            em dev mailing list
                        .pushup(data-pop="cont-link1")
                            p By sending a 
                                a(href="mailto:dev-subscribe@ignite.apache.org?subject=Subscribe&body=Hello") default e-mail
                            p By sending Hello to this e-mail <b>dev-subscribe@ignite.apache.org</b>
                    | and we’ll add it to this page
            .poweredbanner__right
                //- a.button(href="#").poweredbanner__button Lets go
    // /.poweredbanner


    include ../_components/powered-videos.pug




            
