PageSourceSearch

https://www.chess-boost.com/contact

html chess-boost.com collected 2026-10-08 11:31:46 UTC 14,279 bytes, 358 lines download raw bytes

1
2
3
4<head>
5    <link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,400;0,500;0,700;0,800;0,900;1,300;1,400;1,600;1,800&display=swap" rel="stylesheet">
6    <link rel="stylesheet" type="text/css" href="/static/base_style.css?v=4b55ee0">
7    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css">
8
9    <meta name="viewport" content="width=device-width, initial-scale=1">
10
11    
11<script src="https://cdn.jsdelivr.net/npm/reefjs@7/dist/reef.min.js"></script>
11
12
13    
14    <!--
15    <meta name="twitter:card" content="summary"></meta>
16    <meta name="twitter:site" content="@theMMAStats"></meta>
17    <meta name="twitter:title" content="MMAstats - statistics and ratings"></meta>
18    <meta name="twitter:description" content="Weekly updated cross-promotional MMA statistics and ratings based on ELO for
19    mula"></meta>
20    <meta name="twitter:image" content="https://mmastats.org/static/MMAstats.jpg">
21    -->
22
23    <!--
24    <link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png">
25    <link rel="icon" type="image/png" sizes="96x96" href="/static/favicon-96x96.png">
26    <link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png">
27    -->
28
29    <link rel="icon" type="svg+xml" href="/static/favicon.svg">
30
31    <meta property="og:type" content="website"></meta>
32    <meta property="og:url" content="https://www.chess-boost.com"></meta>
33    <meta property="og:title" content="Chess Boost - improve and analyze your chess game"></meta>
34    <meta property="og:description" content="Book individual or group chess lessons from our best coaches, or use our novel tools to analyze chess. Coaching available for kids and for adults."></meta>
35    <meta property="og:image" content="https://www.chess-boost.com/static/share-chessboost-green.jpg">
36
37    <meta name="description" content="Book individual or group chess lessons from our best coaches, or use our novel tools to analyze chess. Coaching available for kids and for adults.">
38
39    <link rel="canonical" href="https://www.chess-boost.com"/>
40
41    <!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 68 bytes, lines 41-42
41
42    <script async src="https://www.googletagmanager.com/gtag/js?id=
42G-DX20TKNGZF
vendor: 16 bytes, lines 42-43
42"></script>
43    
43<script>
44        
vendor: 152 bytes, lines 44-48
44window.dataLayer = window.dataLayer || [];
45        function gtag(){dataLayer.push(arguments);}
46        gtag('js', new Date());
47
48        gtag('config', '
48G-DX20TKNGZF
vendor: 8 bytes, lines 48-49
48');
49    
49</script>
49
50    <!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 68 bytes, lines 50-51
50
51    <script async src="https://www.googletagmanager.com/gtag/js?id=
51UA-183377203-1
vendor: 21 bytes, lines 51-53
51">
52    </script>
53    
53<script>
54    
vendor: 140 bytes, lines 54-58
54window.dataLayer = window.dataLayer || [];
55    function gtag(){dataLayer.push(arguments);}
56    gtag('js', new Date());
57
58    gtag('config', '
58UA-183377203-1
vendor: 8 bytes, lines 58-59
58');
59    
59</script>
59
60
61    <!-- Google Tag Manager -->
62<script>
vendor: 327 bytes, lines 62-66
62(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
63new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
64j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
65'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
66})(window,document,'script','dataLayer','
66GTM-WR5GF26
vendor: 3 bytes, line 66
66');
66</script>
66
67<!-- End Google Tag Manager -->
vendor: 80 bytes, lines 67-72
67
68
69    
70    <script src="https://www.google.com/recaptcha/api.js"></script>
71
72    
72<link rel="stylesheet" type="text/css" href="/static/checkout_style.css?v=4b55ee0">
73    <title>Chess Boost - Contact</title>
74
75</head>
76
77<body>
78    <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 78-79
78
79<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
79GTM-WR5GF26
vendor: 83 bytes, lines 79-80
79"
80height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
81<!-- End Google Tag Manager (noscript) -->
82
83    <div class="cb-cart-bg" id="cart_bg"></div>
84    <div id="cart" class="cb-cart"></div>
85    
86<script>
87    class ReefCart {
88        constructor(cartId, callbacks, items = []) {
89            this.cartId = cartId;
90
91            this.callbacks = callbacks ? callbacks : {};
92            const defaultCallbacks = {
93                onAdd: function() {},
94                onRemove: function() {},
95            }
96
97            for (let key of Object.keys(defaultCallbacks)) {
98                if (!this.callbacks.hasOwnProperty(key)) {
99                    this.callbacks[key] = defaultCallbacks[key];
100                }
101            }
102
103            console.log("Init with items: ", items);
104
105            this.comp = new Reef(cartId, {
106                data: {
107                    items: items,
108                },
109
110                template: function(props) {
111                    const totalPrice = props.items.reduce((a, b) => a + parseFloat(b.price), 0);
112
113                    function formatDescription(desc) {
114                        return desc.substring(0, 35) + ((desc.length > 35) ? "..." : "");
115                    }
116
117                    let tableHtml = "";
118                    for (let item of props.items) {
119                        const dateText = ('date' in item) ? `DATE: ${item.date}  TIME: ${item.time}` : formatDescription(item.description);
120                        const subLen = 15;
121                        const itemTitle = (item.title.length > subLen) ? item.title.substring(0, subLen) + "..." : item.title;
122                        tableHtml += `
123                            <tr class="cb-cart-row">
124                                <td class="cb-cart-cell cb-cart-title-cell">
125                                    <div class="cb-circle cb-cart-circle">
126                                        <img src="/static/lesson.svg">
127                                    </div>
128                                    <div class="cb-cart-item-info">
129                                        <h4>${itemTitle}</h4>
130                                        <span class="cb-cart-date-span">${dateText}</span>
131                                    </div>
132                                </td>
133                                <td class="cb-cart-cell cb-cart-price-cell">
134                                    $ ${item.price}
135                                </td>
136                                <td class="cb-cart-cell cb-cart-remove-cell">
137                                    <i class="fas fa-times-circle" onclick="cart.remove(${item.id})"></i>
138                                </td>
139                            </tr>
140                        `;
141                    }
142
143                    return `
144                        <div class="cb-cart-header">
145                            <span>your cart</span>
146                        </div>
147                        
148                        <table class="cb-cart-table">
149                            ${tableHtml}
150                        </table>
151
152                        <h3 class="cb-cart-total-price">TOTAL: <b>$ ${totalPrice}<b></h3>
153
154                        <div class="cb-cart-footer-div">
155                            <button class="cb-basic-btn cb-cart-footer-btn cb-dark-btn" onclick="cart.toggleShow()">Back to shopping</button>
156                            <form action="/checkout">
157                                <input type="submit" class="cb-btn-shadow cb-basic-btn cb-cart-footer-btn" value="Checkout">
158                            </form>
159                        </div>
160                    `;
161                }
162            });
163
164            this.comp.render();
165        }
166
167        async add(item) {
168            this.comp.data.items.push(item);
169            this.show();
170
171            const response = await fetch(`/api/cart/add/${item.id}`, {
172                method: 'POST',
173                credentials: 'same-origin',
174            });
175
176            const data = await response.json();
177
178            // TODO: handle errors when we fail to add to the cart
179            if (data.status === 'OK') {
180                console.log(data);
181                this.callbacks.onAdd(item.id);
182            }
183        }
184
185        async remove(itemId) {
186            const index = this.comp.data.items.map(item => item.id).indexOf(itemId);
187            this.comp.data.items.splice(index, 1);
188            if (index == -1) {
189                // TODO: let's flash an error or something
190                console.error("Somehow this element doesn't exist: ", this.comp.data.items, itemId);
191            } else {
192                const response = await fetch(`/api/cart/remove/${itemId}`);
193                const data = await response.json();
194                // TODO: we have to handle errors when we fail to remove from the cart
195                console.log(data);
196                this.callbacks.onRemove(itemId);
197            }
198        }
199
200        show() {
201            document.getElementById('cart_bg').classList.add('cb-cart-show');
202            document.querySelector(this.cartId).classList.add('cb-cart-show');
203        }
204
205        toggleShow() {
206            document.getElementById('cart_bg').classList.toggle('cb-cart-show');
207            document.querySelector(this.cartId).classList.toggle('cb-cart-show');
208        }
209
210        setCallbacks(callbacks) {
211            this.callbacks = callbacks;
212        }
213
214        has(itemId) {
215            return this.comp.data.items.some(item => item.id == itemId);
216        }
217    }
218</script>
218
219
220    
220<script>
221        const items = [
222            
223        ];
224        var cart = new ReefCart('#cart', null, items);
225    </script>
225
226
227    <div class="cb-top-bg">
228        <div class="cb-top-bg-img "></div>
229        <div class="cb-top-content">
230            <header>
231                <nav>
232                    <ul class="cb-navbar-menu">
233                        <li class="cb-navbar-logo">
234                            <a href="/">
235                                <img src="/static/chessboost-svetli.svg">
236                            </a>
237                        </li>
238
239                        
240                            <li class="cb-navbar-item ">
241                                <a href="/booklessons">Book a lesson</a>
242                            </li>
243                        
244                            <li class="cb-navbar-item ">
245                                <a href="/studies">Courses</a>
246                            </li>
247                        
248                            <li class="cb-navbar-item ">
249                                <a href="/analyse">Analyse</a>
250                            </li>
251                        
252                            <li class="cb-navbar-item ">
253                                <a href="/coaches">Coaches</a>
254                            </li>
255                        
256                            <li class="cb-navbar-item cb-navbar-item-active">
257                                <a href="/contact">Contact</a>
258                            </li>
259                        
260
261                        <li class="cb-navbar-pm" onclick="cart.show()">
262                            <i class="fas fa-shopping-cart fa-2x"></i>
263                        </li>
264
265                        
266                            <li class="cb-navbar-login cb-navbar-pm"><a class="cb-basic-btn" href="/login">Log in</a></li>
267                        
268
269                        <li class="cb-navbar-toggle">
270                            <i class="fas fa-bars fa-2x"></i>
271                        </li>
272                    </ul>
273                </nav>
274            </header>
275
276            
277    <div class="cb-main">
278        <h1>Contact</h1>
279    </div>
280    
281<script>
282    function addFlash(text, type) {
283        const list = document.querySelector(".cb-flash-list");
284        const newElem = document.createElement('li');
285        newElem.classList.add('cb-flash-error');
286        const img = type === 'cb-flash-error' ? 'fa-times' : 'fa-check-square';
287        newElem.innerHTML = `
288            <i class="fas ${img}"></i>
289            ${text}
290        `;
291        list.appendChild(newElem);
292    }
293</script>
293
294
295
296    <ul class="cb-flash-list">
297    
298    </ul>
299
300
301        </div>
302    </div>
303
304    <div class="cb-middle-bg">
305        
306    <div class="cb-main cb-row">
307        <div class="cb-contact-text">
308            <h2>Chess Boost</h2>
309            <p>If you have any questions or requests, please don't hesitate to contact us. You can use the form on this page, or directly email [email protected]</p>
310        </div>
311        <form action="" class="cb-manual-analysis-form" method="POST">
312            <input id="csrf_token" name="csrf_token" type="hidden" value="Ijg1MWRkODI5MWM5ZjhmNDdkMjNlNGRiYTI3ZGU1Mjk0YzllOWFlMTYi.asd_Ig.-hjgq49IM5OSNXFtEBUSCP7F-eA">
313            <input class="cb-manual-analysis-input" id="name" name="name" placeholder="Name" required type="text" value="">
314            <input class="cb-manual-analysis-input" id="email" name="email" placeholder="Email" required type="email" value="">
315            <textarea class="cb-manual-analysis-input" id="message" name="message" placeholder="Message" required>
316</textarea>
vendor: 90 bytes, lines 316-318
316
317            
318<script src='https://www.google.com/recaptcha/api.js' async defer></script>
319<div class="g-recaptcha" data-sitekey="6Lf4NagaAAAAAE527MHVNGQAPvHE784LNLEGwYZF" id="recaptcha"></div>
320
321            <input class="cb-manual-analysis-input cb-basic-btn" id="send" name="send" type="submit" value="Send">
322        </form>
323    </div>
324
325    </div>
326
327    <footer>
328        <div class="cb-row cb-sb-ac cb-edge-row">
329            <div class="cb-copyright">@ Chess Boost</div>
330
331            <div class="cb-row">
332                <span>Follow us @</span>
333                <a class="cb-footer-social-link" href="https://www.instagram.com/chessboost/">
334                    <i class="fab fa-instagram"></i>
335                </a>
336                <a class="cb-footer-social-link" href="https://www.facebook.com/thechessboost">
337                   <i class="fab fa-facebook-square"></i>
338                </a>
339            </div>
340        </div>
341    </footer>
342
343    
343<script>
344        const menuEl = document.querySelector('.cb-navbar-menu');
345        const toggleEl = document.querySelector('.cb-navbar-toggle');
346
347        function menuToggle(event) {
348            if (menuEl.classList.contains("cb-navbar-menu-active")) {
349                toggleEl.innerHTML = '<i class="fas fa-bars fa-2x"></i>';
350            } else {
351                toggleEl.innerHTML = '<i class="fas fa-times fa-2x"></i>';
352            }
353            menuEl.classList.toggle("cb-navbar-menu-active")
354        }
355
356        toggleEl.addEventListener('click', menuToggle, false);
357    </script>
357
358</body>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.