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/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/sber.png", 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?
                p.pt-1.fz20 Reach&nbsp;us out on&nbsp;the Ignite dev list, and we&rsquo;ll add it&nbsp;to&nbsp;this page
            .poweredbanner__right
                //- a.button(href="#").poweredbanner__button Lets go
    // /.poweredbanner


    include ../_components/powered-videos.pug




            
