|
1 | | -import React, {useEffect, useRef, useState} from 'react'; |
| 1 | +import React, {useState} from 'react'; |
2 | 2 | import styles from './styles.module.css'; |
3 | | -import Testimonial from "./Testimonial"; |
4 | 3 | import TestimonialsTitle from "./Title"; |
5 | 4 |
|
6 | 5 | import Col from "antd/es/col" |
7 | 6 | import Row from "antd/es/row" |
| 7 | +import { Card } from 'antd'; |
8 | 8 |
|
9 | 9 | const Testimonials = () => { |
| 10 | + const testimonials = [ |
| 11 | + { |
| 12 | + name: "Kunal", |
| 13 | + position: "SRE", |
| 14 | + testimonial: "Deploying has never been easier: A single interface to manage your workloads on Kubernetes. 🔥 An easy way to get started on Kubernetes👌" |
| 15 | + }, |
| 16 | + { |
| 17 | + name: "Rosana", |
| 18 | + position: "SRE", |
| 19 | + testimonial: "Cyclops has transformed my Kubernetes management experience. Its intuitive form-based UI and Helm integration make deploying and monitoring applications straightforward and error-free. A must-try tool for anyone looking to simplify their Kubernetes operations!" |
| 20 | + }, |
| 21 | + { |
| 22 | + name: "Ken", |
| 23 | + position: "SRE", |
| 24 | + testimonial: "Cyclops utilizes Helm charts for application deployment, making Kubernetes more accessible to users with different levels of expertise." |
| 25 | + }, |
| 26 | + { |
| 27 | + name: "Adolfo", |
| 28 | + position: "SRE/DevOps", |
| 29 | + testimonial: "I enjoyed using cyclops because of it's simplicity and enhanced observability of kubernetes clusters as well as the seamless integrations with tools like prometheus and Grafana", |
| 30 | + }, |
| 31 | + { |
| 32 | + name: "Hanzel", |
| 33 | + position: "DevOps Engineer", |
| 34 | + testimonial: "I've been using Cyclops for a few months now in my projects to streamline the creation of applications in Kubernetes, and the experience has been excellent. I find the interface very intuitive, and the integration with Helm has significantly simplified the deployment process, allowing me to focus more on development rather than configuration. I've also recommended Cyclops to several friends who don't have extensive knowledge of Kubernetes, and they've found the tool incredibly useful for creating applications easily and without complications. I truly appreciate the work you and your team are doing with Cyclops, and I'm very excited to see how it evolves in the future.", |
| 35 | + }, |
| 36 | + { |
| 37 | + name: "Rodrigo", |
| 38 | + position: "Senior DevOps Engineer", |
| 39 | + testimonial: "I actually installed it and showed it in a presentation about how to create Internal Developers Portal. It was an example on how to use a ready to use product instead of using a framework like backstage. I found it very easy to understand and use, congratulations on getting it there 👏", |
| 40 | + }, |
| 41 | + { |
| 42 | + name: "Jesus", |
| 43 | + position: "Software Developer", |
| 44 | + testimonial: "Cyclops does an amazing job of simplifying the complexities of Kubernetes while boosting developer efficiency.", |
| 45 | + }, |
| 46 | + { |
| 47 | + name: "Hanshal", |
| 48 | + position: "DevOps", |
| 49 | + testimonial: "It's a really nice tool to manage and deploy Kubernetes.", |
| 50 | + }, |
| 51 | + { |
| 52 | + name: "Jurica", |
| 53 | + position: "Software Engineer", |
| 54 | + testimonial: "Love the tool! Helps me navigate the k8s mess a lot more easily.", |
| 55 | + }, |
| 56 | + { |
| 57 | + name: "Ajay", |
| 58 | + position: "Developer/DevOps Engineer", |
| 59 | + testimonial: "Amazing! Easy to use! A must-try tool to simplify their k8s operations! Loved it!", |
| 60 | + }, |
| 61 | + { |
| 62 | + name: "Anmol", |
| 63 | + position: "Software Developer (Blockhain Dev)", |
| 64 | + testimonial: "I really like the idea of Cyclops. It is so much easier for users who dont know or need to know about k8s. Why did this not exist before?", |
| 65 | + }, |
| 66 | + { |
| 67 | + name: "Raj", |
| 68 | + position: "Software Developer", |
| 69 | + testimonial: "I'm really impressed with the Cyclops UI so far. The community seems active and supportive, which is fantastic.", |
| 70 | + }, |
| 71 | + { |
| 72 | + name: "David", |
| 73 | + position: "SRE/DevOps", |
| 74 | + testimonial: "I really like it. I've been using it in my personal lab environments, and it's been excellent. I've also recommended it to a couple of friends who manage Kubernetes, and they've found it very useful as well.", |
| 75 | + }, |
| 76 | + { |
| 77 | + name: "Sergio", |
| 78 | + position: "SRE", |
| 79 | + testimonial: "Great project that cyclops UI is really like (as an SRE) a straighfoward way to create modules for dev teams without really in more complex ways. awesome work for the community", |
| 80 | + }, |
| 81 | + { |
| 82 | + name: "Prince", |
| 83 | + position: "Software Engineer", |
| 84 | + testimonial: "I'm impressed with its functionality. It worked seamlessly with a Minikube cluster, and I particularly loved the edit feature for modifying images and replicas. The rollback feature also stood out as a fantastic addition, making deployments much easier to manage.", |
| 85 | + }, |
| 86 | + { |
| 87 | + name: "Edgar", |
| 88 | + position: "DevOps", |
| 89 | + testimonial: "I did a quick demo to my students to show they how easy is deploy applications using cyclops. (It's a technology institute, and I teach classes for a DevOps bootcamp.)", |
| 90 | + }, |
| 91 | + { |
| 92 | + name: "Kaan", |
| 93 | + position: "R&D Engineer", |
| 94 | + testimonial: "I'm impressed by how it simplifies Kubernetes management and service orchestration. As a small company without a dedicated DevOps team, we understand the importance of user-friendly tools that don't require extensive specialized knowledge. What makes Cyclops perfect for us is its ability to simplify the management of various services. We're working on implementing CNCF products like APISIX, Keycloak, OpenFGA, Prometheus, and Grafana, and Cyclops could be a game-changer in how we handle these integrations.", |
| 95 | + }, |
| 96 | + { |
| 97 | + name: "Ashish", |
| 98 | + position: "Engineer", |
| 99 | + testimonial: "Cyclops is awesome, makes Kubernetes easy for devs.", |
| 100 | + } |
| 101 | + ] |
| 102 | + |
| 103 | + const column1Testimonials = testimonials.slice(0, 6); |
| 104 | + const column2Testimonials = testimonials.slice(6, 12); |
| 105 | + const column3Testimonials = testimonials.slice(12, 18); |
| 106 | + |
| 107 | + const [isHovered, setIsHovered] = useState({ |
| 108 | + col1: false, |
| 109 | + col2: false, |
| 110 | + col3: false |
| 111 | + }); |
| 112 | + |
| 113 | + const handleMouseEnter = (column) => { |
| 114 | + setIsHovered(prev => ({ |
| 115 | + ...prev, |
| 116 | + [column]: true |
| 117 | + })); |
| 118 | + }; |
| 119 | + |
| 120 | + const handleMouseLeave = (column) => { |
| 121 | + setIsHovered(prev => ({ |
| 122 | + ...prev, |
| 123 | + [column]: false |
| 124 | + })); |
| 125 | + }; |
| 126 | + |
| 127 | + const renderTestimonialColumn = (testimonials, columnKey) => { |
| 128 | + return ( |
| 129 | + <div |
| 130 | + onMouseEnter={() => handleMouseEnter(columnKey)} |
| 131 | + onMouseLeave={() => handleMouseLeave(columnKey)} |
| 132 | + className={styles.testimonialColumn} |
| 133 | + > |
| 134 | + <div |
| 135 | + className={`${styles.testimonialContent} ${styles[`column${columnKey.slice(-1)}`]} ${isHovered[columnKey] ? styles.paused : ''}`} |
| 136 | + > |
| 137 | + {testimonials.map((testimonial, index) => ( |
| 138 | + <div |
| 139 | + key={`${columnKey}-1-${index}`} |
| 140 | + style={{ |
| 141 | + padding: '10px', |
| 142 | + marginBottom: '20px', |
| 143 | + }} |
| 144 | + > |
| 145 | + <Card |
| 146 | + style={{ |
| 147 | + display: 'flex', |
| 148 | + flexDirection: 'column', |
| 149 | + justifyContent: 'center', |
| 150 | + minHeight: '200px', |
| 151 | + }} |
| 152 | + > |
| 153 | + <p style={{ |
| 154 | + fontSize: '1.2em', |
| 155 | + fontStyle: 'italic', |
| 156 | + marginBottom: '20px', |
| 157 | + lineHeight: '1.6' |
| 158 | + }}> |
| 159 | + "{testimonial.testimonial}" |
| 160 | + </p> |
| 161 | + <div style={{ |
| 162 | + marginTop: 'auto', |
| 163 | + paddingTop: '20px', |
| 164 | + borderTop: '1px solid #f0f0f0' |
| 165 | + }}> |
| 166 | + <strong>{testimonial.name}</strong> |
| 167 | + <br /> |
| 168 | + <span style={{ color: '#666' }}>{testimonial.position}</span> |
| 169 | + </div> |
| 170 | + </Card> |
| 171 | + </div> |
| 172 | + ))} |
| 173 | + {testimonials.map((testimonial, index) => ( |
| 174 | + <div |
| 175 | + key={`${columnKey}-2-${index}`} |
| 176 | + style={{ |
| 177 | + padding: '10px', |
| 178 | + marginBottom: '20px', |
| 179 | + }} |
| 180 | + > |
| 181 | + <Card |
| 182 | + style={{ |
| 183 | + display: 'flex', |
| 184 | + flexDirection: 'column', |
| 185 | + justifyContent: 'center', |
| 186 | + minHeight: '200px', |
| 187 | + }} |
| 188 | + > |
| 189 | + <p style={{ |
| 190 | + fontSize: '1.2em', |
| 191 | + fontStyle: 'italic', |
| 192 | + marginBottom: '20px', |
| 193 | + lineHeight: '1.6' |
| 194 | + }}> |
| 195 | + "{testimonial.testimonial}" |
| 196 | + </p> |
| 197 | + <div style={{ |
| 198 | + marginTop: 'auto', |
| 199 | + paddingTop: '20px', |
| 200 | + borderTop: '1px solid #f0f0f0' |
| 201 | + }}> |
| 202 | + <strong>{testimonial.name}</strong> |
| 203 | + <br /> |
| 204 | + <span style={{ color: '#666' }}>{testimonial.position}</span> |
| 205 | + </div> |
| 206 | + </Card> |
| 207 | + </div> |
| 208 | + ))} |
| 209 | + </div> |
| 210 | + </div> |
| 211 | + ); |
| 212 | + }; |
| 213 | + |
10 | 214 | return ( |
11 | | - <div |
12 | | - className={styles.featuresroot} |
13 | | - style={{overflow: "hidden"}} |
14 | | - > |
| 215 | + <div className={styles.featuresroot}> |
15 | 216 | <div className={styles.features}> |
16 | 217 | <Row align="middle"> |
17 | 218 | <TestimonialsTitle/> |
18 | 219 | </Row> |
19 | | - <Row gutter={[16, 16]}> |
20 | | - <Col xs={{ span: 20, offset: 2 }} md={{ span: 6, offset: 3 }}> |
21 | | - <Testimonial |
22 | | - name={"Rossana Suarez"} |
23 | | - position={"AWS Container Hero"} |
24 | | - avatar={"/img/rossana_suarez.jpeg"} |
25 | | - testimonial={<p>Deploying has never been easier: A single interface to manage your workloads |
26 | | - on Kubernetes. 🔥 <br/> An easy way to get started on <br/> Kubernetes👌</p>} |
27 | | - /> |
| 220 | + <Row gutter={[16, 16]} style={{ height: '700px', overflow: 'hidden' }}> |
| 221 | + <Col xs={24} sm={24} md={8}> |
| 222 | + {renderTestimonialColumn(column1Testimonials, 'col1')} |
28 | 223 | </Col> |
29 | | - <Col xs={{span: 20, offset: 2}} md={{span: 6, offset: 0}}> |
30 | | - <Testimonial |
31 | | - name={"Kunal Kushwaha"} |
32 | | - position={"DevRel manager at Civo"} |
33 | | - avatar={"/img/kunal_kushwaha.jpeg"} |
34 | | - testimonial={"Cyclops has transformed my Kubernetes management experience. Its intuitive form-based UI and Helm integration make deploying and monitoring applications straightforward and error-free. A must-try tool for anyone looking to simplify their Kubernetes operations!"} |
35 | | - /> |
| 224 | + <Col xs={0} sm={0} md={8}> |
| 225 | + {renderTestimonialColumn(column2Testimonials, 'col2')} |
36 | 226 | </Col> |
37 | | - <Col xs={{span: 20, offset: 2}} md={{span: 6, offset: 0}}> |
38 | | - <Testimonial |
39 | | - name={"Ken Godoy"} |
40 | | - position={"VP, DevOps"} |
41 | | - avatar={"/img/ken_godoy.jpeg"} |
42 | | - testimonial={"Cyclops utilizes Helm charts for application deployment, making Kubernetes more accessible to users with different levels of expertise."} |
43 | | - /> |
| 227 | + <Col xs={0} sm={0} md={8}> |
| 228 | + {renderTestimonialColumn(column3Testimonials, 'col3')} |
44 | 229 | </Col> |
45 | 230 | </Row> |
46 | 231 | </div> |
|
0 commit comments