1<!DOCTYPE html><html lang="en"><head ><title>Our Best Projects | Devhouse</title> 2 <meta name="keywords" content=""> 3 <meta name="description" content="We love bold ideas. We design & develop products for people that dare to do things differently. We focus on creating value in these areas by converting your idea into actual web and mobile applications with a long terms support and care." /> 4 <meta name="robots" content="index, follow" /> 5 <meta charset="utf-8" /> 6 <base href="/" /> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=5"> 8 <link rel="canonical" href="https://www.devhouse.pro/works" /> 9 10 <meta property="og:title" content="Our Best Projects | Devhouse"/> 11 <meta property="og:type" content="website"/> 12 <meta property="og:url" content="https://www.devhouse.pro/works"/> 13 <meta property="og:image" content="https://mars-images.imgix.net/1629450591629?auto=compress"/> 14 <meta property="og:site_name" content="Devhouse"/> 15 <meta property="og:description" content="We love bold ideas. We design & develop products for people that dare to do things differently. We focus on creating value in these areas by converting your idea into actual web and mobile applications with a long terms support and care."/> 16 17 <meta property="twitter:title" content="Our Best Projects | Devhouse"> 18 <meta property="twitter:description" content="We love bold ideas. We design & develop products for people that dare to do things differently. We focus on creating value in these areas by converting your idea into actual web and mobile applications with a long terms support and care."> 19 <meta property="twitter:image" content="https://mars-images.imgix.net/1629450591629?auto=compress"> 20 <meta property="twitter:card" content="summary_large_image"> 21 <style>[v-cloak], [x-cloak] { display: none !important;}</style> 22 <link rel="icon" href="https://mars-images.imgix.net/logo-dev.png?auto=compress&w=1200&fit=max"> 23<meta name="theme-color" content="#ffffff">
23<script src="/assets/js/mars.js" type="module"></script>
23<link href="/assets/css/theme.css" rel="stylesheet"></link><link rel="preconnect" href="https://fonts.googleapis.com"></link><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="true"></link><link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700;800&display=swap" rel="stylesheet"></link><link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css"></link>
23<script defer="true" src="/mars/proxy?url=https://unpkg.com/swiper/swiper-bundle.min.js"></script>
23<style>* { 24 padding: 0; 25 margin: 0; 26 box-sizing: border-box; 27 font-family: Open Sans, sans-serif; 28} 29 30body { 31 overflow-x: hidden; 32 margin: 0 auto; 33 background-color: #fff; 34} 35 36body.noscroll { 37 position: fixed; 38 width: 100%; 39 height: 100%; 40 overflow-y: hidden; 41} 42 43main { 44 max-width: 1920px; 45 margin: 0 auto; 46} 47 48ul { 49 list-style: none; 50 padding: 0; 51 margin: 0; 52} 53 54[v-cloak], 55[x-cloak] { 56 display: none !important; 57} 58 59.text-decoration-none { 60 text-decoration: none; 61} 62 63.text-center { 64 text-align: center; 65} 66 67.spacing { 68 padding-left: 100px; 69 padding-right: 100px; 70} 71 72.strict-spacing { 73 margin-left: 100px; 74 margin-right: 100px; 75} 76 77@media only screen and (max-width: 1024px) { 78 .spacing { 79 padding-left: 40px; 80 padding-right: 40px; 81 } 82 83 .strict-spacing { 84 margin-left: 40px; 85 margin-right: 40px; 86 } 87} 88 89@media only screen and (max-width: 512px) { 90 .spacing { 91 padding-left: 15px; 92 padding-right: 15px; 93 } 94 95 .strict-spacing { 96 margin-left: 15px; 97 margin-right: 15px; 98 } 99} 100 101.text-devhouse-green { 102 color: var(--devhouse-green); 103} 104 105.text-light { 106 color: #F8F8F8 !important; 107} 108 109.overflow-hidden { 110 overflow: hidden; 111} 112 113.swiper-slide { 114 height: auto; 115 z-index: 2; 116 cursor: default; 117} 118 119@media(min-width: 768px){ 120 .d-md-block{ 121 display: block!important; 122 } 123} 124 125:root { 126 --devhouse-green: #6BB551; 127 --devhouse-green-light: #6BB551; 128 --primary: #202020; 129 --secondary: #666666; 130 --light-gray: #E0E0E0; 131 --font-size-1: 14px; 132 --font-size-2: 16px; 133 --font-size-3: 20px; 134 --font-size-4: 22px; 135 --font-size-5: 24px; 136 --font-size-6: 32px; 137 --font-size-7: 40px; 138 --font-size-8: 50px; 139 --font-size-9: 60px; 140 --font-size-10: 70px; 141 --font-size-11: 120px; 142 --font-size-12: 150px; 143} 144 145/* icons */ 146@font-face { 147 font-family: "icomoon"; 148 src: url("https://cdn.devhouse.pro/assets/img/icomoon.eot"); 149 src: url("https://cdn.devhouse.pro/assets/img/icomoon.eot?idymiv#iefix") 150 format("embedded-opentype"), 151 url("https://cdn.devhouse.pro/assets/img/icomoon.ttf?idymiv") 152 format("truetype"), 153 url("https://cdn.devhouse.pro/assets/img/icomoon.woff?idymiv") 154 format("woff"), 155 url("https://cdn.devhouse.pro/assets/img/icomoon.svg?idymiv#icomoon") 156 format("svg"); 157 font-weight: normal; 158 font-style: normal; 159 font-display: block; 160} 161 162[class^="icon-"], 163[class*=" icon-"] { 164 /* use !important to prevent issues with browser extensions that change fonts */ 165 font-family: "icomoon" !important; 166 font-style: normal; 167 font-weight: normal; 168 font-variant: normal; 169 text-transform: none; 170 line-height: 1; 171 172 /* Better Font Rendering =========== */ 173 -webkit-font-smoothing: antialiased; 174 -moz-osx-font-smoothing: grayscale; 175} 176 177.icon-ellipse:before { 178 content: "\e900"; 179 font-size: 32px; 180 color: transparent; 181} 182 183.icon-arrow-right:before { 184 content: "\e901"; 185} 186 187.icon-arrow-left:before { 188 content: "\e902"; 189} 190 191.icon-arrow-right, 192.icon-arrow-left, 193.icon-ellipse:before { 194 transition: 0.2s; 195 cursor: pointer; 196} 197 198.icon-ellipse { 199 border: 1px solid #E0E0E0; 200 border-radius: 50%; 201} 202 203.icon-arrow-right, 204.icon-arrow-left { 205 z-index: 1; 206 font-size: var(--font-size-1); 207} 208 209.icon-arrow-right { 210 transform-origin: 0% 100%; 211} 212 213.icon-arrow-left { 214 transform-origin: 100% 0%; 215} 216 217.noisy-bg { 218 background: linear-gradient(#202020f5, #202020f5), no-repeat center/cover url("https://mars-images.imgix.net/upload-ce1d599e-0536-425c-a0e8-186179e2df14.gif?auto=compress&w=600"); 219} 220 221@media only screen and (max-width: 512px) { 222 .button-wrapper span { 223 display: none; 224 } 225 226 .noisy-bg { 227 background: #202020; 228 } 229 230 .cookieinfo { 231 display: flex; 232 flex-direction: column-reverse; 233 } 234 235 .cookieinfo-close { 236 float: unset !important; 237 } 238}</style></head><body class="">
vendor: 63 bytes, line 238
238<script async src="https://www.googletagmanager.com/gtag/js?id=
238G-Y68WTBSN65
vendor: 12 bytes, line 238
238"></script>
239<script> 240 window.webMesurementId = 'G-Y68WTBSN65'; 241
vendor: 134 bytes, lines 241-245
241window.dataLayer = window.dataLayer || []; 242 function gtag(){dataLayer.push(arguments);} 243 gtag('js', new Date()); 244 245 gtag('config', '
245G-Y68WTBSN65
vendor: 7 bytes, lines 245-247
245'); 246 247
247if (typeof window.onerror == "object") { 248 window.onerror = function (err, url, line) { 249 if (window.gtag) { 250 gtag('event', 'exception', { 251 description: line + " " + err, 252 fatal: false 253 }); 254 } 255 }; 256 console.log('GA error tracking initialized'); 257 } 258</script>
258<style>body.noscroll { position: fixed; width: 100%; height: 100%; overflow-y: hidden; } 259.xmodal-overlay { 260 position: fixed; 261 left: 0; 262 top: 0; 263 width: 100%; 264 height: 100%; 265 background: rgba(0,0,0,0); 266 z-index: 9999; 267 box-sizing: border-box; 268 overflow-y: scroll; 269 overflow-x: hidden; 270 transition: background .25s ease-out; 271 scroll-behavior: smooth; 272} 273 274.xmodal-overlay.no-padding { 275 padding: 0px; 276} 277 278.xmodal-overlay::-webkit-scrollbar { 279 width: 0px; 280 background: transparent; 281} 282 283.xmodal-overlay.open { 284 background: rgba(0,0,0,.45); 285} 286 287.xmodal-container { 288 position: fixed; 289 top: 200%; 290 bottom: 0; 291 left: 0; 292 width: 100%; 293 height: 100%; 294 min-width: 100%; 295 max-width: 100%; 296 max-height: 100%; 297 margin: auto; 298 box-shadow: 0 8px 16px 0 rgba(0,0,0,.2); 299 background-color: #fff; 300 z-index: 100; 301 scroll-behavior: smooth; 302 transition: top .25s ease; 303 overflow-y: auto; 304} 305 306.xmodal-container.auto-height { 307 transform: scaleY(0); 308 transform-origin: bottom; 309 transition: transform 0.25s ease; 310} 311 312.xmodal-container.sidebar, .xmodal-container.sidebar.left { 313 position: absolute; 314 top: 0!important; 315 bottom: 0!important; 316 max-height: 100%; 317 min-height: 100%; 318 height: 100%; 319 margin-top: 0!important; 320 margin-bottom: 0!important; 321 min-width: unset; 322 width: 85%; 323} 324 325.xmodal-container.sidebar.left { 326 left: 0!important; 327 margin-left: -85%; 328 border-top-left-radius: 0; 329 border-bottom-left-radius: 0; 330 transition: margin-left .25s ease; 331} 332 333.xmodal-container.sidebar.right { 334 right: 0!important; 335 border-top-right-radius: 0; 336 border-bottom-right-radius: 0; 337 margin-right: -85%; 338 transition: margin-right .25s ease; 339} 340 341.open > .xmodal-container { 342 top: 0; 343 transform: scaleY(1); 344} 345 346.open > .xmodal-container.auto-height { 347 height: auto; 348 top: auto; 349 margin-top: 0; 350 margin-bottom: 0; 351} 352 353.open > .xmodal-container.sidebar { 354 transform: scaleX(1); 355} 356 357.open > .xmodal-container.sidebar.left { 358 margin-left: 0!important; 359} 360 361.open > .xmodal-container.sidebar.right { 362 margin-right: 0!important; 363} 364 365.xmodal-container.round-corners { 366 border-radius: 12px 12px 0 0; 367 margin-top: 12px; 368} 369 370.open > .xmodal-container.round-corners.auto-height { 371 max-height: calc(100% - 24px); 372 margin-top: 0; 373 margin-bottom: 0; 374} 375 376.xmodal-container.round-corners:before { 377 position: absolute; 378 top: -8px; 379 left: 0; 380 right: 0; 381 margin: auto; 382 width: 44px; 383 height: 4px; 384 background: var(--color-gray200); 385 content: " "; 386 border-radius: 9px; 387} 388 389.xmodal-header { 390 position: relative; 391 display: block; 392 height: 0; 393 box-sizing: border-box; 394 z-index: 10; 395 padding: 0; 396 border-top-left-radius: 4px; 397 border-top-right-radius: 4px; 398} 399 400.round-corners .xmodal-header { 401 border-radius: 16px 16px 0 0; 402} 403 404.xmodal-header.show { 405 padding: 12px 16px; 406 height: 48px; 407 background-color: #fff; 408 box-shadow: 0 1px 0 0 var(--color-gray200); 409} 410 411.xmodal-header-text { 412 display: none; 413} 414 415.xmodal-header.show .xmodal-header-text { 416 display: inline-block; 417 vertical-align: middle; 418 font-weight: 700; 419 overflow: hidden; 420 text-overflow: ellipsis; 421 white-space: nowrap; 422 max-width: calc(100% - 24px); 423} 424 425.xmodal-close-button { 426 position: absolute; 427 top: 12px; 428 right: 12px; 429 padding: 0; 430 vertical-align: middle; 431 display: inline-block; 432 width: 24px; 433 height: 24px; 434 z-index: 9999; 435 cursor: pointer; 436 font-size: 20px; 437 text-align: center; 438 line-height: 24px; 439 opacity: .6; 440 background: url("data:image/svg+xml,%3Csvg width='18' height='18' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m10.53634,9.00012l6.52972,-6.52992c0.42494,-0.42474 0.42494,-1.1115 0,-1.53624c-0.42474,-0.42474 -1.1115,-0.42474 -1.53624,0l-6.52992,6.52992l-6.52972,-6.52992c-0.42494,-0.42474 -1.1115,-0.42474 -1.53624,0c-0.42494,0.42474 -0.42494,1.1115 0,1.53624l6.52972,6.52992l-6.52972,6.52992c-0.42494,0.42474 -0.42494,1.1115 0,1.53624c0.21168,0.21187 0.49,0.31831 0.76812,0.31831c0.27812,0 0.55625,-0.10644 0.76812,-0.31831l6.52972,-6.52992l6.52992,6.52992c0.21187,0.21187 0.49,0.31831 0.76812,0.31831c0.27812,0 0.55625,-0.10644 0.76812,-0.31831c0.42494,-0.42474 0.42494,-1.1115 0,-1.53624l-6.52972,-6.52992zm0,0'/%3E%3C/svg%3E") no-repeat center; 441} 442 443.xmodal-close-button:hover { 444 opacity: 1; 445} 446 447.xmodal-close-button.hide { 448 display: none; 449} 450 451.xmodal-body { 452 max-height: 100%; 453 margin-top: 0; 454 height: 100%; 455 box-sizing: border-box; 456 overflow-y: auto; 457 scroll-behavior: smooth; 458} 459 460.xmodal-header.show + .xmodal-body { 461 margin-top: 0; 462 height: calc(100% - 48px); 463} 464 465.xmodal-footer + .xmodal-body { 466 margin-top: 0; 467 height: calc(100% - 64px); 468} 469 470.xmodal-header.show + .xmodal-footer + .xmodal-body { 471 margin-top: 0; 472 /* height: calc(100% - 48px - 64px); */ 473 margin-bottom: 64px; 474 height: calc(100% - 48px); 475} 476 477.xmodal-content { 478 padding: 16px; 479} 480 481.xmodal-footer { 482 position: absolute; 483 bottom: 0; 484 left: 0; 485 right: 0; 486 display: flex; 487 align-items: center; 488 justify-content: flex-end; 489 padding: .8rem; 490 border-top: 1px solid var(--color-gray200); 491 background-color: #fff; 492} 493 494.xmodal-container.round-corners .xmodal-footer { 495 bottom: 12px; 496} 497 498.xmodal-footer > button { 499 margin-left: .5rem; 500} 501 502.no-padding .xmodal-content { 503 padding: 0; 504} 505 506.no-padding-h .xmodal-content { 507 padding-left: 0; 508 padding-right: 0; 509} 510 511.no-padding-v .xmodal-content { 512 padding-top: 0; 513 padding-bottom: 0; 514} 515 516.xmodal-spinner { 517 min-height: 250px; 518} 519 520.xmodal-content > .card-body { 521 padding: 0!important; 522} 523 524@media screen and (max-width: 768px){ 525 .xmodal-container.sidebar, .xmodal-container.sidebar.left { 526 width: 100%; 527 } 528} 529 530@media (min-width: 640px) { 531 532 .xmodal-overlay { 533 padding: 32px 0; 534 display: flex; 535 flex-direction: column; 536 } 537 538 .xmodal-container { 539 position: relative; 540 top: unset !important; 541 border-radius: 4px; 542 width: 960px; 543 min-width: unset; 544 height: auto; 545 bottom: unset; 546 opacity: 0; 547 transition: opacity .25s ease; 548 } 549 550 .xmodal-container.top { 551 margin-top: 0; 552 } 553 554 .xmodal-container.sidebar { 555 width: 25%; 556 } 557 558 .xmodal-container.sidebar.left { 559 margin-left: -85%; 560 } 561 562 .xmodal-container.sidebar.right { 563 margin-right: -85%; 564 } 565 566 .open > .xmodal-container { 567 opacity: 1; 568 } 569 570 .xmodal-container.round-corners { 571 border-radius: 16px; 572 margin-top: auto; 573 overflow: hidden; 574 } 575 576 .xmodal-container.auto-height { 577 margin: auto !important; 578 transform: unset; 579 transform-origin: unset; 580 } 581 582 .xmodal-header.show { 583 padding: 12px 24px; 584 } 585 586 .xmodal-content { 587 padding: 24px; 588 } 589 590 .xmodal-container.round-corners .xmodal-footer { 591 bottom: 0; 592 } 593} 594 595.min-h-100{ 596 min-height: 100%; 597}</style><template id="xmodal-template"> 598 <div id="xmodal" class="xmodal-overlay" style="display: none;"> 599 <div id="xmodal_container" class="xmodal-container"> 600 <div id="xmodal_header" class="xmodal-header show"> 601 <span id="xmodal_header_title" class="xmodal-header-text"></span> 602 <div id="xmodal_close" class="xmodal-close-button"></div> 603 </div> 604 <div class="xmodal-body">
605 <div id="xmodal_content" class="xmodal-content"> 606 <div class="xmodal-spinner d-flex justify-content-center align-items-center w-100"> 607 <div class="spinner-border text-primary mx-auto"></div> 608 </div> 609 </div> 610 </div> 611 </div> 612 </div> 613</template>
613<script v-pre type="module">const data = JSON.parse(decodeURIComponent("%7B%22_blockName%22%3A%22Modal%22%2C%22Id%22%3A%22objee93c297097541de9bd12c5e74cc4f27%22%2C%22children%22%3Anull%2C%22isMobile%22%3Afalse%7D"));class XModal { 614 constructor(id) { 615 this.id = id; 616 this._listeners = new Map(); 617 618 const template = document.getElementById('xmodal-template').content.cloneNode(true); 619 template.getElementById('xmodal').setAttribute('id', 'xmodal_' + id); 620 621 622 template.getElementById('xmodal_container').setAttribute('id', 'xmodal_container_' + id); 623 624 template.getElementById('xmodal_header').setAttribute('id', 'xmodal_header_' + id); 625 template.getElementById('xmodal_header_title').setAttribute('id', 'xmodal_header_title_' + id); 626 template.getElementById('xmodal_close').setAttribute('id', 'xmodal_close_' + id); 627 template.getElementById('xmodal_content').setAttribute('id', 'xmodal_content_' + id); 628 629 document.body.appendChild(template); 630 631 this.root = document.getElementById('xmodal_' + id); 632 633 this.root.style.zIndex = 9999 + this.id; 634 635 this.container = document.getElementById('xmodal_container_' + id); 636 this.header = document.getElementById('xmodal_header_' + id); 637 this.headerTitle = document.getElementById('xmodal_header_title_' + id); 638 this.closeBtn = document.getElementById('xmodal_close_' + id); 639 this.spinner = `<div class="xmodal-spinner d-flex justify-content-center align-items-center"><div class="spinner-border text-success"></div></div>`; 640 this.content = document.getElementById('xmodal_content_' + id); 641 this.closeByEscape = true; 642 643 this.root.addEventListener('click', (e) => this._closeHandler(e)); 644 this.closeBtn.addEventListener('click', (e) => this._closeHandler(e)); 645 } 646 647 async open(urlOrDom, options, onLoadCallback, postRequestData) { 648 if (!urlOrDom) { 649 return; 650 } 651 652 if (options) { 653 if (options.domId) this.root.setAttribute('data-dom-id', options.domId); 654 655 if (options.center) this.content.classList.add('d-flex', 656 'align-items-center', 'min-h-100', 'text-center', 'w-100'); 657 658 this.noCloseOnOverlay = options.noCloseOnOverlay || false; 659 this.closeByEscape = options.closeByEscape === undefined ? true : options.closeByEscape; 660 if (options.hideModalHeader) { 661 this.header.classList.remove('show'); 662 } 663 664 if (options.dark) { 665 this.container.style.backgroundColor = options.dark === true ? 'black' : options.dark; 666 } 667 668 if (options.hideCloseButton) { 669 this.closeBtn.classList.add('hide'); 670 } 671 672 if (options.roundCorners) { 673 this.container.classList.add('round-corners'); 674 } 675 676 if (options.autoHeight) { 677 this.container.classList.add('auto-height'); 678 } 679 680 if (options.noPadding) { 681 this.container.classList.add('no-padding'); 682 } 683 684 if (options.noPaddingHorizontal) { 685 this.container.classList.add('no-padding-h'); 686 } 687 688 if (options.noPaddingVertical) { 689 this.container.classList.add('no-padding-v'); 690 } 691 692 if (options.width) { 693 this.container.style.width = options.width; 694 } 695 696 if (options.height) { 697 this.container.style.height = options.height; 698 } 699 700 if (options.fullScreen) { 701 this.container.style.width = '100%'; 702 this.container.style.height = '100vh'; 703 this.container.style.borderBottomRightRadius = '0'; 704 this.container.style.borderBottomLeftRadius = '0'; 705 this.root.classList.add('no-padding'); 706 } 707 708 if (options.position && options.position === 'top') { 709 this.container.classList.add('top'); 710 } 711 712 if (options.sidebar) { 713 this.container.classList.add('sidebar'); 714 if (options.sidebarPosition === 'left') { 715 this.container.classList.add('left'); 716 if (options.width) { 717 this.container.style.marginLeft = '-' + options.width; 718 } 719 } else if (options.sidebarPosition === 'right') { 720 this.container.classList.add('right'); 721 if (options.width) { 722 this.container.style.marginRight = '-' + options.width; 723 } 724 } 725 } 726 } 727 728 this.root.style.display = ''; 729 setTimeout(() => { this.root.classList.add('open'); }, 10); 730 731 if (typeof urlOrDom === 'string') {
732 try { 733 const response = await window.postRequest(urlOrDom, { isModal: true, modalId: this.id, ...(postRequestData || {}) }); 734 $(this.content).html(typeof (response.data) === 'string' ? response.data : response.data.html); 735 this.headerTitle.textContent = options && options.title ? options.title : (response.data.PageTitle || response.data.pageTitle); 736 // setTimeout(() => { SITE.updateImages(); }, 700); 737 if (onLoadCallback && typeof onLoadCallback === 'function') { 738 onLoadCallback(this); 739 } 740 } 741 catch (ex) { 742 alert("Something went wrong, please try again: ".concat(ex.message)) 743 } 744 } else if (typeof urlOrDom === 'object' && urlOrDom.cloneNode) { 745 $(this.content).html(urlOrDom); 746 } 747 748 if (options && options.buttons && options.buttons.length) { 749 const footer = document.createElement('div'); 750 footer.id = "xmodal_footer_" + this.id; 751 footer.classList.add('xmodal-footer'); 752 options.buttons.forEach(i => { 753 const btn = document.createElement('button'); 754 if (i.id) { btn.id = i.id; }; 755 btn.className = i.className || 'btn'; 756 btn.type = i.type || 'button'; 757 btn.innerText = i.label; 758 btn.onclick = i.callback; 759 footer.appendChild(btn); 760 }); 761 762 this.header.after(footer); 763 } 764 } 765 766 close(instantly) { 767 this.root.classList.remove('open'); 768 instantly ? this._destroy() : setTimeout(() => this._destroy(), 250); 769 } 770 771 set onClose(callback) { 772 this._on('close', callback); 773 } 774 775 set onClosed(callback) { 776 this._on('closed', callback); 777 } 778 779 _on(label, callback) { 780 this._listeners.has(label) || this._listeners.set(label, []); 781 this._listeners.get(label).push(callback); 782 } 783 784 _trigger(label, ...args) { 785 if (this._listeners.has(label)) { 786 this._listeners.get(label).forEach((listener) => { 787 listener(...args); 788 }); 789 } 790 } 791 792 _closeHandler(e) { 793 if (e.target !== this.root && e.target !== this.closeBtn) { 794 return; 795 } 796 797 e.stopPropagation(); 798 if (this.noCloseOnOverlay && e.target === this.root) { 799 return; 800 } 801 802 this._trigger('close'); 803 this.close(); 804 } 805 806 _destroy() { 807 this.root.remove(); 808 this._trigger('closed'); 809 } 810} 811 812if (!window['Modal']) { 813 const mars = new MarsBlock('xmodal', data, { 814 _instances: [], 815 _init: function () { 816 // Track Escape key press 817 const self = this; 818 document.onkeydown = function (e) { 819 e = e || window.event; 820 let isEscape = false;
821 if ("key" in e) { 822 isEscape = (e.key === "Escape" || e.key === "Esc"); 823 } else { 824 isEscape = (e.keyCode === 27); 825 } 826 827 const instances = self._instances; 828 if (isEscape && instances.length && instances[instances.length - 1].closeByEscape) { 829 self.close(); 830 } 831 }; 832 }, 833 _reset: function () { 834 if (this._instances.length) { 835 return; 836 } 837 838 document.body.classList.remove('noscroll'); 839 document.body.style.top = ''; 840 841 if (this.scrollTop !== undefined) { 842 window.scrollTo({ top: this.scrollTop, behavior: 'instant' }); 843 } 844 845 this.scrollTop = undefined; 846 }, 847 _getScroll: function () { 848 if (window.pageYOffset != undefined) { 849 return [pageXOffset, pageYOffset]; 850 } else { 851 let sx, sy, d = document, r = d.documentElement, b = d.body; 852 sx = r.scrollLeft || b.scrollLeft || 0; 853 sy = r.scrollTop || b.scrollTop || 0; 854 return [sx, sy]; 855 } 856 }, 857 getModal: function (id) { 858 if (id) { 859 return this._instances.find(i => i.id === id); 860 } 861 862 return null; 863 }, 864 open: async function (urlOrDom, options, onLoadCallback, postRequestData) { 865 if (!urlOrDom) { 866 return; 867 } 868 869 if (options && options.width && data.isMobile) options.width = '100%'; 870 871 if (options && options.closePrevious && this._instances.length) { 872 this._instances.pop().close(true); 873 } 874 875 if (this._instances.length === 0) { 876 this.scrollTop = (this._getScroll())[1]; 877 document.body.classList.add('noscroll'); 878 document.body.style.top = -this.scrollTop + 'px'; 879 } 880 881 const id = this._instances.length + 1; 882 const modal = new XModal(id); 883 this._instances.push(modal); 884 modal.onClose = () => this.close(id); 885 modal.onClosed = () => this._reset(); 886 await modal.open(urlOrDom, options, onLoadCallback, postRequestData); 887 return modal; 888 }, 889 close: function (instantly, id) { 890 if (id) { 891 const index = this._instances.findIndex(i => i.id === id); 892 this._instances[index].close(instantly); 893 this._instances.splice(index, 1); 894 return; 895 } 896 897 const lastModal = this._instances.pop(); 898 if (lastModal) { 899 lastModal.close(instantly); 900 } 901 }, 902 }); 903 904 mars._init(); 905 window['Modal'] = window['Modal'] || mars; 906} 907</script>
907<header id="objb560d7fb37184c97aae79ef2422c90fa" class="w-100 mx-auto position-sticky d-flex align-items-center"><style>/* nav bar styles */ 908header { 909 height: 72px; 910 top: -20px; 911 transition: 0.4s; 912 z-index: 99; 913} 914 915nav { 916 max-width: 1920px; 917 margin: 0 auto; 918 height: 52px; 919 top: 0; 920} 921 922@media only screen and (max-width: 512px) { 923 header { 924 height: 48px; 925 padding-top: 16px !important; 926 padding-bottom: 16px !important; 927 top: 0; 928 } 929 930 nav { 931 height: 48px; 932 } 933} 934 935header { 936 background: transparent; 937} 938 939nav img { 940 width: 140px; 941 margin-right: 128px; 942} 943 944@media only screen and (max-width: 768px) { 945 nav img { 946 margin-right: 64px; 947 } 948} 949 950@media only screen and (max-width: 370px) { 951 nav img { 952 margin-right: 64px; 953 } 954} 955 956nav a { 957 transition: all 0.5s ease; 958 color: black; 959 position: relative; 960} 961 962nav a.nav-bar-link-underlined:after { 963 background: none repeat scroll 0 0 transparent; 964 bottom: -2px; 965 content: ""; 966 display: block; 967 height: 2px; 968 left: 50%; 969 position: absolute; 970 background: var(--devhouse-green); 971 transition: width 0.3s ease 0s, left 0.3s ease 0s; 972 width: 0; 973} 974 975nav a.nav-bar-link-underlined:hover:after { 976 width: 100%; 977 left: 0; 978} 979 980.nav-bar-link { 981 font-size: var(--font-size-2); 982 cursor: pointer; 983} 984 985@media only screen and (max-width: 860px) { 986 .nav-bar-link { 987 display: none; 988 } 989} 990 991/* nav bar button */ 992.menu-btn { 993 width: 52px; 994 height: 52px; 995 cursor: pointer; 996 transition: all .5s ease-in-out; 997 z-index: 99; 998} 999 1000.menu-btn__burger { 1001 width: 24px; 1002 height: 3px; 1003 background: #FFF; 1004 box-shadow: 0 2px 6px 0 rgba(255, 101, 47, .2); 1005 transition: all .5s ease-in-out; 1006} 1007 1008.menu-btn__burger, 1009.menu-btn__burger::before, 1010.menu-btn__burger::after { 1011 content: ''; 1012 position: absolute; 1013 height: 3px; 1014 background:#000; 1015 border-radius: 6px; 1016 box-shadow: 0 2px 6px 0 rgba(255, 101, 47, .2); 1017 transition: all .5s ease-in-out; 1018} 1019 1020.menu-btn__burger::before { 1021 width: 30px; 1022 transform: translateY(-8px); 1023} 1024 1025.menu-btn__burger::after { 1026 width: 20px; 1027 transform: translateY(8px); 1028} 1029 1030.menu-btn.open .menu-btn__burger::before, 1031.menu-btn.open .menu-btn__burger::after { 1032 background-color: #fff; 1033} 1034 1035/* nav bar button animation */ 1036.menu-btn.open .menu-btn__burger { 1037 transform: translateX(-52px); 1038 background: transparent; 1039 box-shadow: none; 1040} 1041 1042.menu-btn.open .menu-btn__burger::before { 1043 width: 36px; 1044 transform: rotate(45deg) translate(36px, -36px); 1045} 1046 1047.menu-btn.open .menu-btn__burger::after { 1048 width: 36px; 1049 transform: rotate(-45deg) translate(36px, 36px); 1050} 1051 1052.nav-bar-link.link-highlighted { 1053 background: #6BB551; 1054 color: white; 1055 padding: 10px 25px; 1056} 1057 1058.nav-bar-link.link-highlighted:hover { 1059 color: black!important; 1060 background-color: #9CD737; 1061 transform: scale(1.05); 1062} 1063 1064/* scroll */ 1065 1066.hide-navbar { 1067 top: -120px !important; 1068}</style><nav class="py-3 d-flex align-items-center justify-content-between position-sticky spacing w-100"> 1069 1070 <div class="d-flex align-items-center"> 1071 <a href="/"><img id="nav-bar-logo" src="https://mars-images.imgix.net/logo%20(1)%202.png%20800x200?auto=compress" alt="devhouse"/></a> 1072 <a href="/works" 1073 class="mr-5 text-decoration-none position-relative nav-bar-link nav-bar-link-underlined">Works</a><a href="/about" 1074 class="mr-5 text-decoration-none position-relative nav-bar-link nav-bar-link-underlined">About us</a><a href="/blogpost/our-handbook" 1075 class="mr-5 text-decoration-none position-relative nav-bar-link nav-bar-link-underlined">Our handbook</a> 1076 </div> 1077 1078 <div class="d-flex align-items-center"> 1079 <a class="mr-5 text-decoration-none font-weight-bold position-relative nav-bar-link link-highlighted" 1080 onclick="Modal.open('/api/QuoteRequest', {width: '750px', height: '100%', roundCorners: true, noCloseOnOverlay: true, title: 'Quote request'})">+ Get a quote</a> 1081 <div class="menu-btn position-relative d-flex align-items-center justify-content-center"> 1082 <div class="menu-btn__burger rounded"></div> 1083 </div> 1084 </div> 1085 1086</nav>
1086<script v-pre type="module">const data = JSON.parse(decodeURIComponent("%7B%22_blockName%22%3A%22NavBar%22%2C%22Id%22%3A%22objb560d7fb37184c97aae79ef2422c90fa%22%2C%22navBarContent%22%3A%7B%22logo%22%3A%22https%3A%2F%2Fmars-images.imgix.net%2Flogo%2520(1)%25203.png%2520800x200%3Fauto%3Dcompress%22%2C%22darkLogo%22%3A%22https%3A%2F%2Fmars-images.imgix.net%2Flogo%2520(1)%25202.png%2520800x200%3Fauto%3Dcompress%22%2C%22leftMenu%22%3A%5B%7B%22linkTitle%22%3A%22Works%22%2C%22url%22%3A%22%2Fworks%22%7D%2C%7B%22linkTitle%22%3A%22About%20us%22%2C%22url%22%3A%22%2Fabout%22%7D%2C%7B%22linkTitle%22%3A%22Our%20handbook%22%2C%22url%22%3A%22%2Fblogpost%2Four-handbook%22%7D%5D%2C%22rightMenu%22%3A%5B%7B%22linkTitle%22%3A%22%2B%20Get%20a%20quote%22%2C%22url%22%3A%22%2Fget-a-quote%22%7D%5D%7D%2C%22lightLogo%22%3Afalse%2C%22children%22%3Anull%7D"));// header menu 1087const menuBtn = document.querySelector('.menu-btn'); 1088const navBarButtons = document.querySelectorAll('nav .nav-bar-link'); 1089const logo = document.querySelector('nav').querySelector('img'); 1090const navLinks = document.querySelector('.nav-links'); 1091let menuOpen = false; 1092 1093menuBtn.addEventListener('click', () => { 1094 if (!menuOpen) { 1095 menuBtn.classList.add('open'); 1096 navLinks.classList.add('open'); 1097 menuOpen = true; 1098 navBarButtons.forEach(item => { 1099 item.style.opacity = 0; 1100 item.style.visibility = 'hidden'; 1101 }) 1102 1103 setTimeout(() => { 1104 logo.src = data.navBarContent.logo; 1105 }, 200); 1106 1107 disableScroll(); 1108 } else { 1109 menuBtn.classList.remove('open'); 1110 navLinks.classList.remove('open'); 1111 menuOpen = false; 1112 navBarButtons.forEach(item => { 1113 item.style.opacity = 1; 1114 item.style.visibility = 'visible'; 1115 }); 1116 1117 setTimeout(() => { 1118 logo.src = data.lightLogo ? data.navBarContent.logo : data.navBarContent.darkLogo; 1119 }, 200) 1120 enableScroll(); 1121 } 1122}) 1123 1124function disableScroll() { 1125 let scrollTop = window.pageYOffset || document.documentElement.scrollTop; 1126 let scrollLeft = window.pageXOffset || document.documentElement.scrollLeft; 1127 1128 window.onscroll = function () { 1129 window.scrollTo(scrollLeft, scrollTop); 1130 }; 1131} 1132 1133function enableScroll() { 1134 window.onscroll = function () { }; 1135} 1136 1137// career anchor 1138const careerButton = document.querySelector('.careerAnchor'); 1139 1140careerButton.addEventListener('click', () => { 1141 const jobsBlock = document.querySelector('#JobsBlock'); 1142 if (jobsBlock) { 1143 menuBtn.classList.remove('open'); 1144 navLinks.classList.remove('open'); 1145 menuOpen = false; 1146 navBarButtons.forEach(item => { 1147 item.style.opacity = 1; 1148 item.style.visibility = 'visible'; 1149 }); 1150 setTimeout(() => { 1151 logo.src = data.lightLogo ? data.navBarContent.logo : data.navBarContent.darkLogo; 1152 }, 200); 1153 enableScroll(); 1154 jobsBlock.scrollIntoView({ behavior: 'smooth', block: 'center' }); 1155 } else { 1156 window.location.href = "/about#JobsBlock"; 1157 } 1158}) 1159 1160// navbar animation 1161let lastScrollTop = 0; 1162function onScroll() { 1163 const st = window.pageYOffset || document.documentElement.scrollTop; 1164 const header = document.querySelector('header'); 1165 const logo = document.querySelector('#nav-bar-logo'); 1166 if (st > lastScrollTop) { 1167 header.classList.add('hide-navbar'); 1168 } else { 1169 header.classList.remove('hide-navbar'); 1170 } 1171 1172 if (document.querySelector('[data-dark-header]')) { 1173 if (window.scrollY >= window.innerHeight) { 1174 header.classList.add('navbar-background', 'noisy-bg'); 1175 } else { 1176 header.classList.remove('navbar-background', 'noisy-bg'); 1177 } 1178 } 1179 lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling 1180} 1181 1182document.addEventListener('scroll', onScroll); 1183onScroll();</script>
1183</header><main id="content" role="main"><div id="DevhouseMasterPage" class="" data-master-content><div id="obj6ce58c7760ed4ef09ae80b791176fcff"><style>/* navbar styling */ 1184 1185.menu-btn__burger, 1186.menu-btn__burger::before, 1187.menu-btn__burger::after { 1188 background: #000; 1189} 1190 1191.menu-btn.open .menu-btn__burger::before, 1192.menu-btn.open .menu-btn__burger::after { 1193 background-color: #fff; 1194} 1195 1196main { 1197 margin: -72px auto 0 auto; 1198} 1199 1200/* elements styles */ 1201 1202#obj6ce58c7760ed4ef09ae80b791176fcff img { 1203 width: 82px; 1204 margin-bottom: 20px; 1205} 1206 1207#obj6ce58c7760ed4ef09ae80b791176fcff h2 { 1208 font-size: var(--font-size-7); 1209 font-weight: 800; 1210 margin-bottom: 30px; 1211} 1212 1213@media only screen and (max-width: 512px) { 1214 #obj6ce58c7760ed4ef09ae80b791176fcff h2 { 1215 font-size: var(--font-size-6); 1216 margin-bottom: 20px; 1217 } 1218} 1219 1220#obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__text-wrapper { 1221 padding-top: 100px; 1222 padding-bottom: 80px; 1223 padding-left: 100px; 1224} 1225 1226@media only screen and (max-width: 1440px) { 1227 #obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__text-wrapper { 1228 padding-left: 0; 1229 padding-right: 0; 1230 } 1231} 1232 1233@media only screen and (max-width: 512px) { 1234 #obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__text-wrapper { 1235 padding-top: 40px; 1236 } 1237} 1238 1239#obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__text-wrapper p { 1240 margin-bottom: 20px; 1241 color: var(--secondary); 1242 font-size: var(--font-size-1); 1243 max-width: 400px; 1244} 1245 1246@media only screen and (max-width: 1440px) { 1247 #obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__text-wrapper p { 1248 width: 75%; 1249 max-width: unset; 1250 } 1251} 1252 1253@media only screen and (max-width: 768px) { 1254 #obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__text-wrapper p { 1255 width: 100%; 1256 } 1257} 1258 1259#obj6ce58c7760ed4ef09ae80b791176fcff .devhouse-works__years h5 { 1260 font-size: var(--font-size-5) 1261} 1262 1263#obj6ce58c7760ed4ef09ae80b791176fcff .devhouse-works__years p { 1264 color: var(--primary); 1265 width: 100%; 1266} 1267 1268@media only screen and (max-width: 1440px) { 1269 #obj6ce58c7760ed4ef09ae80b791176fcff .devhouse-works__years p { 1270 width: 100%; 1271 } 1272} 1273 1274@media only screen and (max-width: 512px) { 1275 #obj6ce58c7760ed4ef09ae80b791176fcff .devhouse-works__years { 1276 justify-content: flex-start; 1277 } 1278 1279 #obj6ce58c7760ed4ef09ae80b791176fcff .devhouse-works__years div:nth-child(n + 3) { 1280 display: none; 1281 } 1282 1283 #obj6ce58c7760ed4ef09ae80b791176fcff .devhouse-works__years p { 1284 width: 100% !important; 1285 } 1286} 1287 1288#obj6ce58c7760ed4ef09ae80b791176fcff a span { 1289 font-size: var(--font-size-2); 1290 font-weight: 700; 1291} 1292 1293#obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery__item-button:hover .icon-arrow-right { 1294 transform: scaleX(1.2); 1295} 1296 1297@media only screen and (max-width: 768px) { 1298 #obj6ce58c7760ed4ef09ae80b791176fcff .titleAndLogoContainer { 1299 margin-bottom: 40px; 1300 } 1301 1302 #obj6ce58c7760ed4ef09ae80b791176fcff .titleAndLogoContainer img, 1303 #obj6ce58c7760ed4ef09ae80b791176fcff .titleAndLogoContainer h2 { 1304 margin-bottom: 0 !important; 1305 } 1306} 1307 1308@media only screen and (max-width: 512px) { 1309 #obj6ce58c7760ed4ef09ae80b791176fcff .titleAndLogoContainer { 1310 margin-bottom: 20px; 1311 } 1312} 1313 1314#obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__image-wrapper { 1315 width: 45%; 1316 min-width: 45%; 1317} 1318 1319@media only screen and (max-width: 1024px) { 1320 #obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__image-wrapper { 1321 width: 100%; 1322 height: 600px; 1323 padding-left: 40px; 1324 padding-right: 40px; 1325 } 1326} 1327 1328#obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__image-wrapper .image-wrapper { 1329 width: 100%; 1330 height: 100%; 1331 overflow: hidden; 1332 object-fit: cover; 1333 object-position: center; 1334} 1335 1336#obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__image-wrapper .image-wrapper img { 1337 display: none; 1338} 1339 1340#obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__image-wrapper .image-wrapper video { 1341 height: 100%; 1342 width: 100%; 1343 object-fit: cover; 1344} 1345 1346@media only screen and (max-width: 512px) { 1347 #obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__image-wrapper { 1348 height: 290px; 1349 margin-bottom: 30px; 1350 padding-left: 10px; 1351 padding-right: 10px; 1352 } 1353 1354 #obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__image-wrapper .image-wrapper img, 1355 #obj6ce58c7760ed4ef09ae80b791176fcff .position-sticky img { 1356 height: 100%; 1357 display: block; 1358 object-fit: cover; 1359 object-position: center; 1360 } 1361 1362 #obj6ce58c7760ed4ef09ae80b791176fcff .works-gallery-item__image-wrapper .image-wrapper video { 1363 display: none; 1364 } 1365}</style><div id="objb1fdbdd76ed14422bed7ddeb7b5a586c" class="nav-links w-100 position-fixed d-flex flex-column justify-content-around pt-5"><style>.nav-links { 1366 height: 100vh; 1367 top: 0; 1368 background-color: var(--primary); 1369 1370 clip-path: circle(0 at 100% 0%); 1371 -webkit-clip-path: circle(0 at 100% 0%); 1372 transition: all 1s ease-out; 1373 z-index: 98; 1374 pointer-events: none; 1375 display: none; 1376} 1377 1378.nav-links.open { 1379 clip-path: circle(150% at 100% 0%); 1380 -webkit-clip-path: circle(150% at 100% 0%); 1381 pointer-events: all; 1382 display: flex; 1383} 1384 1385@media only screen and (max-width: 512px) { 1386 .nav-links { 1387 clip-path: unset; 1388 transition: all 0.3s ease-in; 1389 opacity: 0; 1390 } 1391 1392 .nav-links.open { 1393 opacity: 1; 1394 } 1395} 1396 1397.nav-links ul { 1398 column-count: 2; 1399 -webkit-column-count: 2; 1400 -moz-column-count: 2;
1401 column-gap: 100px; 1402 -webkit-column-gap: 100px; 1403 -moz-column-gap: 100px; 1404} 1405 1406@media only screen and (max-width: 1440px) { 1407 .nav-links ul { 1408 margin-top: 64px !important; 1409 } 1410} 1411 1412@media only screen and (max-width: 768px) { 1413 .nav-links ul { 1414 column-count: 1; 1415 -webkit-column-count: 1; 1416 -moz-column-count: 1; 1417 } 1418} 1419 1420@media only screen and (max-width: 512px) { 1421 .nav-links ul { 1422 margin-top: 0 !important; 1423 } 1424} 1425 1426.nav-links ul li { 1427 margin-bottom: 80px; 1428} 1429 1430@media only screen and (max-width: 768px) { 1431 .nav-links ul li { 1432 margin-bottom: 56px; 1433 } 1434 1435 .nav-links ul li:last-child { 1436 margin-bottom: 0; 1437 } 1438} 1439 1440@media only screen and (max-width: 512px) { 1441 .nav-links ul li { 1442 margin-bottom: 16px; 1443 } 1444} 1445 1446@media only screen and (max-width: 370px) { 1447 .nav-links ul li { 1448 margin-bottom: 21px; 1449 } 1450} 1451 1452.nav-links ul li a { 1453 color: #DADADA; 1454 font-size: var(--font-size-9); 1455 font-weight: 800; 1456 cursor: pointer; 1457} 1458 1459@media only screen and (max-width: 1280px) { 1460 .nav-links ul li a { 1461 font-size: var(--font-size-8); 1462 } 1463} 1464 1465@media only screen and (max-width: 768px) { 1466 .nav-links ul li a { 1467 font-size: var(--font-size-3); 1468 } 1469} 1470 1471#objb1fdbdd76ed14422bed7ddeb7b5a586c img { 1472 width: 32px; 1473} 1474 1475#objb1fdbdd76ed14422bed7ddeb7b5a586c h3 a { 1476 font-size: var(--font-size-6); 1477 color: var(--devhouse-green); 1478} 1479 1480@media only screen and (max-width: 768px) { 1481 #objb1fdbdd76ed14422bed7ddeb7b5a586c h3 a { 1482 font-size: var(--font-size-6); 1483 color: var(--devhouse-green); 1484 } 1485} 1486 1487@media only screen and (max-width: 370px) { 1488 #objb1fdbdd76ed14422bed7ddeb7b5a586c h3 a { 1489 font-size: var(--font-size-5); 1490 } 1491} 1492 1493@media only screen and (max-width: 768px) { 1494 .header-menu__social-media-wrapper { 1495 flex-direction: column; 1496 align-items: unset !important; 1497 } 1498 1499 .header-menu__social-media-wrapper .d-flex{ 1500 margin-bottom: 32px; 1501 } 1502} 1503 1504@media only screen and (max-width: 512px) { 1505 .header-menu__social-media-wrapper { 1506 margin-bottom: 32px; 1507 } 1508} 1509 1510.text-devhouse-green { 1511 color: #6BB551 !important; 1512} 1513 1514.careerAnchor { 1515 cursor: pointer; 1516}</style><ul class="mt-5 spacing"> 1517 <li><a class="text-uppercase text-decoration-none undefined" 1518 href=/works >Works</a></li><li><a class="text-uppercase text-decoration-none undefined" 1519 href=/blog >Blog</a></li><li><a class="text-uppercase text-decoration-none text-devhouse-green" 1520 href=/ >Get a quote</a></li><li><a class="text-uppercase text-decoration-none undefined" 1521 href=/about >About us</a></li><li><a class="text-uppercase text-decoration-none undefined" 1522 href=/blogpost/our-handbook >Our handbook</a></li><li><a class="text-uppercase text-decoration-none undefined" 1523 href=/contacts >Contacts</a></li> 1524</ul> 1525<div class="header-menu__social-media-wrapper d-flex justify-content-between align-items-center spacing"> 1526 <div class="d-flex"> 1527 <a class="mr-5" href="https://www.instagram.com/devhouse_/"><img class="h-auto" src="https://mars-images.imgix.net/instagram.png 80x80?auto=compress&w=80&auto=format,enhance" alt="social media icon" /></a><a class="mr-5" href="https://www.facebook.com/devhouse.pro"><img class="h-auto" src="https://mars-images.imgix.net/facebook.png 80x80?auto=compress&w=80&auto=format,enhance" alt="social media icon" /></a> 1528 </div> 1529 <div> 1530 <h3><a class="text-decoration-none" href="mailto:[email protected]">[email protected]</a></h3> 1531 </div> 1532</div></div><section id="BlocksParent"><style>.blocks-wrapper { 1533 display: grid; 1534 grid-template: repeat(2, 1fr) / 55% 45%; 1535 background-color: #fff; 1536} 1537 1538@media only screen and (max-width: 1024px) { 1539 .blocks-wrapper { 1540 grid-template: repeat(3, auto) / 100%; 1541 } 1542} 1543 1544.parallax-image__wrapper { 1545 grid-row: 1 / 3; 1546 grid-column: 2; 1547 overflow: clip; 1548 background-color: undefined; 1549} 1550 1551@media only screen and (max-width: 1024px) { 1552 .parallax-image__wrapper { 1553 grid-row: 2; 1554 grid-column: 1; 1555 margin-left: 40px; 1556 margin-right: 40px; 1557 } 1558} 1559 1560@media only screen and (max-width: 512px) { 1561 .parallax-image__wrapper { 1562 margin-left: 10px; 1563 margin-right: 10px; 1564 height: 290px; 1565 } 1566} 1567 1568.parallax-image__wrapper .position-sticky { 1569 top: 0; 1570} 1571 1572@media only screen and (max-width: 512px) { 1573 #BlocksParent .position-sticky { 1574 height: 290px; 1575 } 1576} 1577 1578#BlocksParent video { 1579 min-height: 100vh; 1580 transform: scale(1.2); 1581 object-fit: cover; 1582 object-position: center; 1583} 1584 1585@media only screen and (max-width: 1024px) { 1586 #BlocksParent video { 1587 width: 100%; 1588 min-height: 600px; 1589 height: 600px; 1590 } 1591} 1592 1593@media only screen and (max-width: 512px) { 1594 #BlocksParent video { 1595 display: none; 1596 } 1597} 1598 1599.parallax-image__wrapper img { 1600 display: none; 1601} 1602 1603@media only screen and (max-width: 512px) { 1604 .parallax-image__wrapper img { 1605 width: 100%; 1606 display: block; 1607 } 1608}</style><div class="blocks-wrapper"><div id="BlocksParent" class="works-header__text-wrapper d-flex flex-column justify-content-between w-100 spacing"><style>.works-header__text-wrapper { 1609 padding-top: 172px; 1610 padding-bottom: 80px; 1611 padding-left: 100px; 1612 height: 100vh; 1613} 1614 1615@media only screen and (max-width: 768px) { 1616 .works-header__text-wrapper { 1617 padding-left: 40px; 1618 height: 50vh; 1619 } 1620} 1621 1622@media only screen and (max-width: 512px) { 1623 .works-header__text-wrapper { 1624 padding-top: 160px; 1625 padding-bottom: 60px; 1626 padding-left: 10px; 1627 } 1628} 1629 1630#BlocksParent h1 { 1631 top: 100px; 1632 font-size: var(--font-size-11); 1633 font-weight: 800; 1634} 1635 1636@media only screen and (max-width: 1440px) { 1637 #BlocksParent h1 { 1638 font-size: 100px; 1639 } 1640} 1641 1642@media only screen and (max-width: 1280px) { 1643 #BlocksParent h1 { 1644 font-size: 80px; 1645 } 1646} 1647 1648@media only screen and (max-width: 512px) { 1649 #BlocksParent h1 { 1650 font-size: var(--font-size-8); 1651 } 1652} 1653 1654#BlocksParent aside { 1655 font-size: var(--font-size-3); 1656} 1657 1658@media only screen and (max-width: 512px) { 1659 #BlocksParent aside { 1660 width: 100% !important; 1661 font-size: var(--font-size-2); 1662 } 1663}</style><h1 class="text-uppercase">Works</h1> 1664<aside class="w-75">
1664We love bold ideas. We design & develop products for people that dare to do things differently. We focus on creating value in these areas</aside></div><div id="obj93695fd9b54a400c808a8a1d4eb43902" class="d-flex"><style>@media only screen and (max-width: 768px) { 1665 #obj93695fd9b54a400c808a8a1d4eb43902 .titleAndLogoContainer { 1666 flex-direction: row-reverse; 1667 } 1668}</style><div class="works-gallery-item__text-wrapper d-flex flex-column justify-content-center spacing strict-spacing"><div class="titleAndLogoContainer"> 1669 <img src="https://mars-images.imgix.net/cielogo.png?auto=compress" alt="Project logo"/> 1670 <h2><a href="https://www.cakeiteasy.no/ " target="_blank" 1671 class="text-decoration-none text-uppercase"> 1672 Cake it easy 1673 </a></h2> 1674</div> 1675<p class="works-gallery__short-desc">Best e-commerce platform for bakeries in Norway. Together with Cake it easy we created a simple to install web solution. Any bakery can install it in seconds. </p> 1676<p>Cake it easy started as a marketplace solution, while today we orient on building the best platform for bakeries to sell everything from bread to cakes.</p> 1677<div class="d-flex devhouse-works__years my-3"> 1678 <div class="mr-5"> 1679 <h5 class="font-weight-bold">7+</h5> 1680 <p class="w-100">years in progress</p> 1681 </div><div class="mr-5"> 1682 <h5 class="font-weight-bold">200k+</h5> 1683 <p class="w-100">cakes sold</p> 1684 </div><div class="mr-5"> 1685 <h5 class="font-weight-bold">1</h5> 1686 <p class="w-100">project to 10</p> 1687 </div> 1688</div> 1689<div class="d-flex flex-wrap devhouse_works__technologies mb-5"> 1690 <div class="mr-3"> 1691 <small class="text-muted">Python (Django)</small> 1692 </div><div class="mr-3"> 1693 <small class="text-muted">Angular</small> 1694 </div><div class="mr-3"> 1695 <small class="text-muted">PostgreSQL</small> 1696 </div><div class="mr-3"> 1697 <small class="text-muted">AWS</small> 1698 </div><div class="mr-3"> 1699 <small class="text-muted">GitHub</small> 1700 </div><div class="mr-3"> 1701 <small class="text-muted">Jenkins</small> 1702 </div> 1703</div> 1704<a 1705 href="https://www.cakeiteasy.no/ " 1706 target="_blank" 1707 class="text-devhouse-green font-weight-bold text-decoration-none text-uppercase"><span>Check project</span> 1708 <i class="icon-arrow-right ml-3"></i> 1709</a></div></div><div class="parallax-image__wrapper"><div class="position-sticky"><video autoplay="true" loop="true" muted="true" class="noisy-bg"><source src="https://mars-images.imgix.net/1628670692312?auto=compress" type="video/mp4"></source></video><img class="w-100" src="https://mars-images.imgix.net/1629028889838?auto=compress&w=450&q=75&auto=format" alt="Project's image"></img></div></div></div>
1709<script v-pre type="module">const data = JSON.parse(decodeURIComponent("%7B%22_blockName%22%3A%22BlocksParent%22%2C%22firstWork%22%3A%7B%22_id%22%3A%2260decddbf877b200ec068252%22%2C%22title%22%3A%22Cake%20it%20easy%22%2C%22shortDesc%22%3A%22Best%20e-commerce%20platform%20for%20bakeries%20in%20Norway.%20Together%20with%20Cake%20it%20easy%20we%20created%20a%20simple%20to%20install%20web%20solution.%20Any%20bakery%20can%20install%20it%20in%20seconds.%20%22%2C%22fullDesc%22%3A%22Cake%20it%20easy%20started%20as%20a%20marketplace%20solution%2C%20while%20today%20we%20orient%20on%20building%20the%20best%20platform%20for%20bakeries%20to%20sell%20everything%20from%20bread%20to%20cakes.%22%2C%22banner%22%3A%22https%3A%2F%2Fmars-images.imgix.net%2F1629028889838%3Fauto%3Dcompress%22%2C%22createdAt%22%3A%222021-07-02T08%3A27%3A07.875Z%22%2C%22updatedAt%22%3A%222021-08-26T18%3A38%3A51.511Z%22%2C%22logo%22%3A%22https%3A%2F%2Fmars-images.imgix.net%2Fcielogo.png%3Fauto%3Dcompress%22%2C%22url%22%3A%22https%3A%2F%2Fwww.cakeiteasy.no%2F%20%22%2C%22backgroundColor%22%3Anull%2C%22video%22%3A%22https%3A%2F%2Fmars-images.imgix.net%2F1628670692312%3Fauto%3Dcompress%22%2C%22feedback%22%3A%7B%22name%22%3A%22Marius%20Sevaldsen%22%2C%22positionAndCompany%22%3A%22Founder%20%26%20CEO%2C%20Cake%20it%20easy%22%2C%22photo%22%3A%22https%3A%2F%2Fmars-images.imgix.net%2F1629833302191%3Fauto%3Dcompress%22%2C%22feedback%22%3A%22I%20have%20been%20working%20with%20Devhouse%20for%205%20years%20now%20and%20they%20are%20the%20best%20developers%20I%20have%20worked%20with.%20They%20are%20creative%2C%20skilled%20at%20what%20they%20do%20and%20puts%20honor%20into%20their%20work.%20A%20good%20developer%20builds%20what%20the%20client%20tells%20him%20to%20build.%20A%20great%20developer%20suggests%20how%20to%20do%20it%20in%20a%20better%20way.%20Devhouse%20falls%20in%20the%20last%20category.%20And%20as%20a%20bonus%20-%20Igor%20and%20the%20guys%20is%20a%20pleasure%20to%20work%20with.%20So%20to%20sum%20it%20up%20-%20stay%20away%20from%20these%20guys.%20They%20are%20ours!%22%7D%2C%22tech%22%3A%5B%7B%22title%22%3A%22Python%20(Django)%22%7D%2C%7B%22title%22%3A%22Angular%22%7D%2C%7B%22title%22%3A%22PostgreSQL%22%7D%2C%7B%22title%22%3A%22AWS%22%7D%2C%7B%22title%22%3A%22GitHub%22%7D%2C%7B%22title%22%3A%22Jenkins%22%7D%2C%7B%22title%22%3A%22Auto-tests%20(Selenium%2C%20Protractor)%22%7D%2C%7B%22title%22%3A%22Asana%22%7D%2C%7B%22title%22%3A%22Jira%22%7D%5D%2C%22slug%22%3Anull%2C%22floatingNumbers%22%3A%5B%7B%22number%22%3A%227%2B%22%2C%22caption%22%3A%22years%20in%20progress%22%7D%2C%7B%22number%22%3A%22200k%2B%22%2C%22caption%22%3A%22cakes%20sold%22%7D%2C%7B%22number%22%3A%221%22%2C%22caption%22%3A%22project%20to%2010%22%7D%5D%2C%22duration%22%3Anull%2C%22mobilePreviews%22%3A%5B%5D%2C%22tabletPreviews%22%3A%5B%5D%2C%22challenges%22%3A%5B%5D%2C%22casePage%22%3Afalse%2C%22videoUrl%22%3A%22https%3A%2F%2Fres.cloudinary.com%2Fwww-devhouse-pro%2Fvideo%2Fupload%2Fc_scale%2Cw_600%2Fv1629837818%2Fdevhouse-landing%2FCake_video_agx6w7.mp4%22%2C%22priority%22%3A1%2C%22formattedBusinessSince%22%3A0%2C%22formattedDevelopmentSince%22%3A0%2C%22Id%22%3A%22obj4086ddff3fd64135b88a66d3e0c94d42%22%7D%2C%22Id%22%3A%22BlocksParent%22%2C%22asideNote%22%3A%22We%20love%20bold%20ideas.%20We%20design%20%26%20develop%20products%20for%20people%20that%20dare%20to%20do%20things%20differently.%20We%20focus%20on%20creating%20value%20in%20these%20areas%22%2C%22title%22%3A%22Works%22%2C%22children%22%3Anull%7D"));const container = document.querySelector('#BlocksParent'); 1710const video = container.querySelector('.position-sticky'); 1711const videoTop = parseInt(window.getComputedStyle(video).top); 1712 1713if (window.matchMedia("(min-width: 1024px)").matches) { 1714 document.addEventListener('scroll', () => { 1715 let value = window.scrollY; 1716 let y = 1 + (window.scrollY || window.pageYOffset); 1717 y = y < 1 ? 1 : y; // for Safari 1718 1719 video.style.top = videoTop - value * 0.10 + 'px' 1720 }) 1721}</script>
1721</section><div id="obj7466adf19ab64b05b0d9233917e9c056" class="d-flex justify-content-between"><style>#obj7466adf19ab64b05b0d9233917e9c056 { 1722 width: 100%; 1723} 1724 1725@media only screen and (max-width: 1024px) { 1726 #obj7466adf19ab64b05b0d9233917e9c056 { 1727 flex-direction: column-reverse; 1728 } 1729}</style><div class="works-gallery-item__text-wrapper d-flex flex-column justify-content-center spacing strict-spacing"><div class="titleAndLogoContainer"> 1730 <img src="https://mars-images.imgix.net/bblogo.png?auto=compress" alt="Project logo"/> 1731 <h2><a href="https://www.bizbot.com/ " target="_blank" 1732 class="text-decoration-none text-uppercase"> 1733 BizBot 1734 </a></h2> 1735</div> 1736<p class="works-gallery__short-desc">BizBot is a great platform for entrepreneurs and investors, accountants, startups and incubators. It connects and makes management way easier.</p> 1737<p>We have been working on BizBot for many years with a great interest. It is a challenging project in terms of development, and this makes us more curious when choosing the right solutions, technologies and while making project related decisions.</p> 1738<div class="d-flex devhouse-works__years my-3"> 1739 <div class="mr-5"> 1740 <h5 class="font-weight-bold">3+ years</h5> 1741 <p class="w-100">of cooperation</p> 1742 </div><div class="mr-5"> 1743 <h5 class="font-weight-bold">178 companies</h5> 1744 <p class="w-100">using the platform</p> 1745 </div><div class="mr-5"> 1746 <h5 class="font-weight-bold">3616 potential</h5> 1747 <p class="w-100">platform using companies</p> 1748 </div> 1749</div> 1750<div class="d-flex flex-wrap devhouse_works__technologies mb-5"> 1751 <div class="mr-3"> 1752 <small class="text-muted">Node.js</small> 1753 </div><div class="mr-3"> 1754 <small class="text-muted">Vue.js</small> 1755 </div><div class="mr-3"> 1756 <small class="text-muted">MongoDB</small> 1757 </div><div class="mr-3"> 1758 <small class="text-muted">AWS S3</small> 1759 </div><div class="mr-3"> 1760 <small class="text-muted">Reports API</small> 1761 </div><div class="mr-3"> 1762 <small class="text-muted">SendGrid</small> 1763 </div> 1764</div> 1765<a 1766 href="https://www.bizbot.com/ " 1767 target="_blank" 1768 class="text-devhouse-green font-weight-bold text-decoration-none text-uppercase"><span>Check project</span> 1769 <i class="icon-arrow-right ml-3"></i> 1770</a></div><div class="works-gallery-item__image-wrapper"> 1771 <div class="image-wrapper position-relative"> 1772 <video autoplay loop muted preload="none" 1773 poster="https://mars-images.imgix.net/bbbanner.png?auto=compress&q=75&auto=format"> 1774 <source src=https://res.cloudinary.com/www-devhouse-pro/video/upload/c_scale,w_600/v1629837803/devhouse-landing/Bizbot_video_fxdi8k.mp4 type="video/mp4" /> 1775 </video> 1776 <img class="w-100" src="https://mars-images.imgix.net/bbbanner.png?auto=compress&w=450&q=75&auto=format" /> 1777 </div> 1778</div></div><div id="objbe701f2b905047a2b92034928d43756f" class="d-flex justify-content-between"><style>#objbe701f2b905047a2b92034928d43756f { 1779 width: 100%; 1780} 1781 1782@media only screen and (max-width: 1024px) { 1783 #objbe701f2b905047a2b92034928d43756f { 1784 flex-direction: column-reverse; 1785 } 1786}</style><div class="works-gallery-item__text-wrapper d-flex flex-column justify-content-center spacing strict-spacing"><div class="titleAndLogoContainer"> 1787 <img src="https://mars-images.imgix.net/1629288687973?auto=compress" alt="Project logo"/> 1788 <h2><a href="https://www.altovita.com/" target="_blank" 1789 class="text-decoration-none text-uppercase"> 1790 Altovita 1791 </a></h2> 1792</div> 1793<p class="works-gallery__short-desc">Altovitaâ is a UK, London based startup founded by Vivi and Karolina in 2016. It was full of ambitions and now it looks like we've found the niche and are doing great. We work in many directions at the same moment of time: from supply acquisition to marketing and customer support. Itâs not the same small company it was. Devhouse is proud to be a part of this.</p> 1794<p>We started working with Altovita a few years ago. At that time it was a different project. Our CEO Igor joined the project as CTO and helped to move it from WordPress based project oriented into a private travelling/booking engine into quite a complex solution with many integrations and new kinds of customers: Business Travellers/Rellocators.</p> 1795<div class="d-flex devhouse-works__years my-3"> 1796 <div class="mr-5"> 1797 <h5 class="font-weight-bold">Over 5</h5> 1798 <p class="w-100">projects in progress</p> 1799 </div><div class="mr-5"> 1800 <h5 class="font-weight-bold">3 pivots</h5> 1801 <p class="w-100">over the time</p> 1802 </div><div class="mr-5"> 1803 <h5 class="font-weight-bold">1-8</h5> 1804 <p class="w-100">team growth </p> 1805 </div> 1806</div> 1807<div class="d-flex flex-wrap devhouse_works__technologies mb-5"> 1808 <div class="mr-3"> 1809 <small class="text-muted">PHP (Symfony)</small> 1810 </div><div class="mr-3"> 1811 <small class="text-muted">React</small> 1812 </div><div class="mr-3"> 1813 <small class="text-muted"> MySQL</small> 1814 </div><div class="mr-3"> 1815 <small class="text-muted">AWS</small> 1816 </div><div class="mr-3"> 1817 <small class="text-muted">Selenium</small> 1818 </div><div class="mr-3"> 1819 <small class="text-muted"> Jenkins</small> 1820 </div> 1821</div> 1822<a 1823 href="https://www.altovita.com/" 1824 target="_blank" 1825 class="text-devhouse-green font-weight-bold text-decoration-none text-uppercase"><span>Check project</span> 1826 <i class="icon-arrow-right ml-3"></i> 1827</a></div><div class="works-gallery-item__image-wrapper"> 1828 <div class="image-wrapper position-relative">
1829 <video autoplay loop muted preload="none" 1830 poster="https://mars-images.imgix.net/1629375525172?auto=compress&q=75&auto=format"> 1831 <source src=https://res.cloudinary.com/www-devhouse-pro/video/upload/c_scale,w_600/v1629837805/devhouse-landing/Altovita_video_pamwtu.mp4 type="video/mp4" /> 1832 </video> 1833 <img class="w-100" src="https://mars-images.imgix.net/1629375525172?auto=compress&w=450&q=75&auto=format" /> 1834 </div> 1835</div></div><div id="obj54aec6a325b142598edac1e45ecd8c1b" class="d-flex justify-content-between"><style>#obj54aec6a325b142598edac1e45ecd8c1b { 1836 width: 100%; 1837} 1838 1839@media only screen and (max-width: 1024px) { 1840 #obj54aec6a325b142598edac1e45ecd8c1b { 1841 flex-direction: column-reverse; 1842 } 1843}</style><div class="works-gallery-item__text-wrapper d-flex flex-column justify-content-center spacing strict-spacing"><div class="titleAndLogoContainer"> 1844 <img src="https://mars-images.imgix.net/1628966800477?auto=compress" alt="Project logo"/> 1845 <h2><a href="https://www.filmgrail.com/" target="_blank" 1846 class="text-decoration-none text-uppercase"> 1847 Filmgrail 1848 </a></h2> 1849</div> 1850<p class="works-gallery__short-desc">We started partnership with Filmgrail many years ago and itâs awesome partner to work with.</p> 1851<p>We have already built 10+ projects together.</p> 1852<div class="d-flex devhouse-works__years my-3"> 1853 1854</div> 1855<div class="d-flex flex-wrap devhouse_works__technologies mb-5"> 1856 <div class="mr-3"> 1857 <small class="text-muted">Node.js</small> 1858 </div><div class="mr-3"> 1859 <small class="text-muted">Vue.js</small> 1860 </div><div class="mr-3"> 1861 <small class="text-muted">MongoDB</small> 1862 </div><div class="mr-3"> 1863 <small class="text-muted">AWS</small> 1864 </div><div class="mr-3"> 1865 <small class="text-muted">Microsoft Azure</small> 1866 </div><div class="mr-3"> 1867 <small class="text-muted">Asana</small> 1868 </div> 1869</div> 1870<a 1871 href="https://www.filmgrail.com/" 1872 target="_blank" 1873 class="text-devhouse-green font-weight-bold text-decoration-none text-uppercase"><span>Check project</span> 1874 <i class="icon-arrow-right ml-3"></i> 1875</a></div><div class="works-gallery-item__image-wrapper"> 1876 <div class="image-wrapper position-relative"> 1877 <video autoplay loop muted preload="none" 1878 poster="https://mars-images.imgix.net/1629372740331?auto=compress&q=75&auto=format"> 1879 <source src=https://res.cloudinary.com/www-devhouse-pro/video/upload/c_scale,w_600/v1629837804/devhouse-landing/Filmgrail_video_yybhwt.mp4 type="video/mp4" /> 1880 </video> 1881 <img class="w-100" src="https://mars-images.imgix.net/1629372740331?auto=compress&w=450&q=75&auto=format" /> 1882 </div> 1883</div></div><div id="obj665c6e335eed46729e064039f56e4197" class="d-flex justify-content-between"><style>#obj665c6e335eed46729e064039f56e4197 { 1884 width: 100%; 1885} 1886 1887@media only screen and (max-width: 1024px) { 1888 #obj665c6e335eed46729e064039f56e4197 { 1889 flex-direction: column-reverse; 1890 } 1891}</style><div class="works-gallery-item__text-wrapper d-flex flex-column justify-content-center spacing strict-spacing"><div class="titleAndLogoContainer"> 1892 <img src="https://mars-images.imgix.net/1628966267979?auto=compress" alt="Project logo"/> 1893 <h2><a href="https://www.smarttakst.no/ " target="_blank" 1894 class="text-decoration-none text-uppercase"> 1895 Smartakst 1896 </a></h2> 1897</div> 1898<p class="works-gallery__short-desc">Smarttakst is quite an innovative approach to handle reports.</p> 1899<p>Instead of doing a lot of paperwork, we went differently: we helped Krister and the team to build iOS, Android apps which could make life of property inspectors. The project is not publicly released yet and is primarily used by ambassadors who already generated 700+ reports and are happy about the solution.</p> 1900<div class="d-flex devhouse-works__years my-3"> 1901 <div class="mr-5"> 1902 <h5 class="font-weight-bold">775</h5> 1903 <p class="w-100">reported done</p> 1904 </div><div class="mr-5"> 1905 <h5 class="font-weight-bold">140+ </h5> 1906 <p class="w-100">users on beta</p> 1907 </div> 1908</div> 1909<div class="d-flex flex-wrap devhouse_works__technologies mb-5"> 1910 <div class="mr-3"> 1911 <small class="text-muted">Node.js</small> 1912 </div><div class="mr-3"> 1913 <small class="text-muted">NestJS</small> 1914 </div><div class="mr-3"> 1915 <small class="text-muted">React Native</small> 1916 </div><div class="mr-3"> 1917 <small class="text-muted">TypeScript</small> 1918 </div><div class="mr-3"> 1919 <small class="text-muted">MongoDB (Mongoose)</small> 1920 </div><div class="mr-3"> 1921 <small class="text-muted">Microsoft Azure</small> 1922 </div> 1923</div> 1924<a 1925 href="https://www.smarttakst.no/ " 1926 target="_blank" 1927 class="text-devhouse-green font-weight-bold text-decoration-none text-uppercase"><span>Check project</span> 1928 <i class="icon-arrow-right ml-3"></i> 1929</a></div><div class="works-gallery-item__image-wrapper"> 1930 <div class="image-wrapper position-relative">
1931 <video autoplay loop muted preload="none" 1932 poster="https://mars-images.imgix.net/1629375433697?auto=compress&q=75&auto=format"> 1933 <source src=https://res.cloudinary.com/www-devhouse-pro/video/upload/c_scale,w_600/v1629837803/devhouse-landing/Smart_video_npbfz5.mp4 type="video/mp4" /> 1934 </video> 1935 <img class="w-100" src="https://mars-images.imgix.net/1629375433697?auto=compress&w=450&q=75&auto=format" /> 1936 </div> 1937</div></div><div id="obj0d8164e7cd344ed3a09094443ba8de51" class="d-flex justify-content-between"><style>#obj0d8164e7cd344ed3a09094443ba8de51 { 1938 width: 100%; 1939} 1940 1941@media only screen and (max-width: 1024px) { 1942 #obj0d8164e7cd344ed3a09094443ba8de51 { 1943 flex-direction: column-reverse; 1944 } 1945}</style><div class="works-gallery-item__text-wrapper d-flex flex-column justify-content-center spacing strict-spacing"><div class="titleAndLogoContainer"> 1946 <img src="https://mars-images.imgix.net/1628960280614?auto=compress" alt="Project logo"/> 1947 <h2><a href="https://www.enter.art/ " target="_blank" 1948 class="text-decoration-none text-uppercase"> 1949 enter.art 1950 </a></h2> 1951</div> 1952<p class="works-gallery__short-desc">
1952enter.art is a great place for the artists to meet, become widely known and sell their artworks. âEnterâ is expanding its spheres providing more opportunities to more creative people.</p> 1953<p>During the short period of time this project became bigger and now it includes various platforms. 1954 1955Our business partner: Filmgrail</p> 1956<div class="d-flex devhouse-works__years my-3"> 1957 <div class="mr-5"> 1958 <h5 class="font-weight-bold">1000+</h5> 1959 <p class="w-100">artworks</p> 1960 </div><div class="mr-5"> 1961 <h5 class="font-weight-bold">250+</h5> 1962 <p class="w-100">artists</p> 1963 </div><div class="mr-5"> 1964 <h5 class="font-weight-bold">From 1</h5> 1965 <p class="w-100">project to 4</p> 1966 </div> 1967</div> 1968<div class="d-flex flex-wrap devhouse_works__technologies mb-5"> 1969 <div class="mr-3"> 1970 <small class="text-muted">Node.js</small> 1971 </div><div class="mr-3"> 1972 <small class="text-muted">Vue.js</small> 1973 </div><div class="mr-3"> 1974 <small class="text-muted">MongoDB</small> 1975 </div><div class="mr-3"> 1976 <small class="text-muted">AWS</small> 1977 </div><div class="mr-3"> 1978 <small class="text-muted">Blockchain</small> 1979 </div><div class="mr-3"> 1980 <small class="text-muted">Solidity</small> 1981 </div> 1982</div> 1983<a 1984 href="https://www.enter.art/ " 1985 target="_blank" 1986 class="text-devhouse-green font-weight-bold text-decoration-none text-uppercase"><span>Check project</span> 1987 <i class="icon-arrow-right ml-3"></i> 1988</a></div><div class="works-gallery-item__image-wrapper"> 1989 <div class="image-wrapper position-relative"> 1990 <video autoplay loop muted preload="none" 1991 poster="https://mars-images.imgix.net/1629371983708?auto=compress&q=75&auto=format"> 1992 <source src=https://res.cloudinary.com/www-devhouse-pro/video/upload/c_scale,w_600/v1629837809/devhouse-landing/Enter_art_video_c3rl7a.mp4 type="video/mp4" /> 1993 </video> 1994 <img class="w-100" src="https://mars-images.imgix.net/1629371983708?auto=compress&w=450&q=75&auto=format" /> 1995 </div> 1996</div></div><div id="obj3a5cd46130884f4cad106f87f99ceec6" class="d-flex justify-content-between"><style>#obj3a5cd46130884f4cad106f87f99ceec6 { 1997 width: 100%; 1998} 1999 2000@media only screen and (max-width: 1024px) { 2001 #obj3a5cd46130884f4cad106f87f99ceec6 { 2002 flex-direction: column-reverse; 2003 } 2004}</style><div class="works-gallery-item__text-wrapper d-flex flex-column justify-content-center spacing strict-spacing"><div class="titleAndLogoContainer"> 2005 <img src="https://mars-images.imgix.net/1628963388888?auto=compress" alt="Project logo"/> 2006 <h2><a href="https://www.cultpix.com/" target="_blank" 2007 class="text-decoration-none text-uppercase"> 2008 Cultpix 2009 </a></h2> 2010</div> 2011<p class="works-gallery__short-desc">Cultpix is а new global film streaming service for vintage cult films</p> 2012<p>We started working with Cultpix team in the middle of summer, 2020. We planned to make the site for around 80 movies. Now almost 500 movies have been uploaded to the site. Now itâs one of the biggest streaming services for vintage films in Norway with a huge potential.</p> 2013<div class="d-flex devhouse-works__years my-3"> 2014 <div class="mr-5"> 2015 <h5 class="font-weight-bold">500+ movies</h5> 2016 <p class="w-100">uploaded on the site</p> 2017 </div><div class="mr-5"> 2018 <h5 class="font-weight-bold">1000+</h5> 2019 <p class="w-100">active users</p> 2020 </div> 2021</div> 2022<div class="d-flex flex-wrap devhouse_works__technologies mb-5"> 2023 <div class="mr-3"> 2024 <small class="text-muted">Node.js</small> 2025 </div><div class="mr-3"> 2026 <small class="text-muted">Vue.js</small> 2027 </div><div class="mr-3"> 2028 <small class="text-muted">JavaScript</small> 2029 </div><div class="mr-3"> 2030 <small class="text-muted">MongoDB</small> 2031 </div><div class="mr-3"> 2032 <small class="text-muted">Bootstrap</small> 2033 </div><div class="mr-3"> 2034 <small class="text-muted">Stripe</small> 2035 </div> 2036</div> 2037<a 2038 href="https://www.cultpix.com/" 2039 target="_blank" 2040 class="text-devhouse-green font-weight-bold text-decoration-none text-uppercase"><span>Check project</span> 2041 <i class="icon-arrow-right ml-3"></i> 2042</a></div><div class="works-gallery-item__image-wrapper"> 2043 <div class="image-wrapper position-relative"> 2044 <video autoplay loop muted preload="none" 2045 poster="https://mars-images.imgix.net/1629374599609?auto=compress&q=75&auto=format"> 2046 <source src=https://res.cloudinary.com/www-devhouse-pro/video/upload/c_scale,w_600/v1629837808/devhouse-landing/Cultpix_video_w0u56d.mp4 type="video/mp4" /> 2047 </video> 2048 <img class="w-100" src="https://mars-images.imgix.net/1629374599609?auto=compress&w=450&q=75&auto=format" /> 2049 </div> 2050</div></div><div id="obj25720a7546d84c16a1fd93d16bb17991" class="d-flex justify-content-between"><style>#obj25720a7546d84c16a1fd93d16bb17991 { 2051 width: 100%; 2052} 2053 2054@media only screen and (max-width: 1024px) { 2055 #obj25720a7546d84c16a1fd93d16bb17991 { 2056 flex-direction: column-reverse; 2057 } 2058}</style><div class="works-gallery-item__text-wrapper d-flex flex-column justify-content-center spacing str
2058ict-spacing"><div class="titleAndLogoContainer"> 2059 <img src="https://mars-images.imgix.net/1628963190317?auto=compress" alt="Project logo"/> 2060 <h2><a href="https://www.sasu.no" target="_blank" 2061 class="text-decoration-none text-uppercase"> 2062 SASU 2063 </a></h2> 2064</div> 2065<p class="works-gallery__short-desc">This is a marketplace for services in Norway, Oslo. SASU provides fitness and beauty services at customerâs places. </p> 2066<p>We started working on SASU MVP in the beginning of 2021. 2067Now we are working on the support part. 2068The service is available only in Oslo, but we have laid the foundation for consistent development in other cities of Norway. 2069It was a great challenging project in terms of building logic and development.</p> 2070<div class="d-flex devhouse-works__years my-3"> 2071 <div class="mr-5"> 2072 <h5 class="font-weight-bold">5 team members</h5> 2073 <p class="w-100">worked on the site</p> 2074 </div><div class="mr-5"> 2075 <h5 class="font-weight-bold">1 full function MVP</h5> 2076 <p class="w-100">with great potential</p> 2077 </div><div class="mr-5"> 2078 <h5 class="font-weight-bold">17+</h5> 2079 <p class="w-100">types of services provided</p> 2080 </div> 2081</div> 2082<div class="d-flex flex-wrap devhouse_works__technologies mb-5"> 2083 <div class="mr-3"> 2084 <small class="text-muted">Node.js</small> 2085 </div><div class="mr-3"> 2086 <small class="text-muted">Vue.js</small> 2087 </div><div class="mr-3"> 2088 <small class="text-muted">JavaScript</small> 2089 </div><div class="mr-3"> 2090 <small class="text-muted">MongoDB</small> 2091 </div><div class="mr-3"> 2092 <small class="text-muted">AWS</small> 2093 </div><div class="mr-3"> 2094 <small class="text-muted">Bootstrap</small> 2095 </div> 2096</div> 2097<a 2098 href="https://www.sasu.no" 2099 target="_blank" 2100 class="text-devhouse-green font-weight-bold text-decoration-none text-uppercase"><span>Check project</span> 2101 <i class="icon-arrow-right ml-3"></i> 2102</a></div><div class="works-gallery-item__image-wrapper"> 2103 <div class="image-wrapper position-relative"> 2104 <video autoplay loop muted preload="none" 2105 poster="https://mars-images.imgix.net/1629372138669?auto=compress&q=75&auto=format"> 2106 <source src=https://res.cloudinary.com/www-devhouse-pro/video/upload/c_scale,w_600/v1629837810/devhouse-landing/Sasu_video_um7awa.mp4 type="video/mp4" /> 2107 </video> 2108 <img class="w-100" src="https://mars-images.imgix.net/1629372138669?auto=compress&w=450&q=75&auto=format" /> 2109 </div> 2110</div></div><div id="obj28a53f645c9b4aa8b77f7736b981c4e5" class="d-flex justify-content-between"><style>#obj28a53f645c9b4aa8b77f7736b981c4e5 { 2111 width: 100%; 2112} 2113 2114@media only screen and (max-width: 1024px) { 2115 #obj28a53f645c9b4aa8b77f7736b981c4e5 { 2116 flex-direction: column-reverse; 2117 } 2118}</style><div class="works-gallery-item__text-wrapper d-flex flex-column justify-content-center spacing strict-spacing"><div class="titleAndLogoContainer"> 2119 <img src="https://mars-images.imgix.net/1628966375558?auto=compress" alt="Project logo"/> 2120 <h2><a href="https://www.capa.no" target="_blank" 2121 class="text-decoration-none text-uppercase"> 2122 Capa 2123 </a></h2> 2124</div> 2125<p class="works-gallery__short-desc">CAPA is the oldest and most competent media & entertainment company in cinema advertising, Norway.</p> 2126<p>The site provides several services in the biggest cinema chains in Norway: 2127Canvas advertising, 2128Events, 2129Digital services, 2130Conferences.</p> 2131<div class="d-flex devhouse-works__years my-3"> 2132 2133</div> 2134<div class="d-flex flex-wrap devhouse_works__technologies mb-5"> 2135 <div class="mr-3"> 2136 <small class="text-muted">Node.js</small> 2137 </div><div class="mr-3"> 2138 <small class="text-muted">Vue.js</small> 2139 </div><div class="mr-3"> 2140 <small class="text-muted">JavaScript</small> 2141 </div><div class="mr-3"> 2142 <small class="text-muted">MongoDB</small> 2143 </div><div class="mr-3"> 2144 <small class="text-muted">Bootstrap</small> 2145 </div><div class="mr-3"> 2146 <small class="text-muted">AWS</small> 2147 </div> 2148</div> 2149<a 2150 href="https://www.capa.no" 2151 target="_blank" 2152 class="text-devhouse-green font-weight-bold text-decoration-none text-uppercase"><span>Check project</span> 2153 <i class="icon-arrow-right ml-3"></i> 2154</a></div><div class="works-gallery-item__image-wrapper"> 2155 <div class="image-wrapper position-relative">
2156 <video autoplay loop muted preload="none" 2157 poster="https://mars-images.imgix.net/1629372303463?auto=compress&q=75&auto=format"> 2158 <source src=https://res.cloudinary.com/www-devhouse-pro/video/upload/c_scale,w_600/v1629837805/devhouse-landing/Capa_video_iliuwm.mp4 type="video/mp4" /> 2159 </video> 2160 <img class="w-100" src="https://mars-images.imgix.net/1629372303463?auto=compress&w=450&q=75&auto=format" /> 2161 </div> 2162</div></div><div id="obj1fd5e6b6ab9d4412b4c1a311fb81af74" class="d-flex justify-content-between"><style>#obj1fd5e6b6ab9d4412b4c1a311fb81af74 { 2163 width: 100%; 2164} 2165 2166@media only screen and (max-width: 1024px) { 2167 #obj1fd5e6b6ab9d4412b4c1a311fb81af74 { 2168 flex-direction: column-reverse; 2169 } 2170}</style><div class="works-gallery-item__text-wrapper d-flex flex-column justify-content-center spacing strict-spacing"><div class="titleAndLogoContainer"> 2171 <img src="https://mars-images.imgix.net/1628966627714?auto=compress" alt="Project logo"/> 2172 <h2><a href="https://eventeyeapp.com/no" target="_blank" 2173 class="text-decoration-none text-uppercase"> 2174 Eventeye 2175 </a></h2> 2176</div> 2177<p class="works-gallery__short-desc">If you don't have a way to notify your participant about changes or quickly share an agenda, it could be a pain, but it's not if you have EventEye as a partner.</p> 2178<p>We helped to build a robust system that consists of mobile-app and Angular powered dashboard to manage the content.</p> 2179<div class="d-flex devhouse-works__years my-3"> 2180 2181</div> 2182<div class="d-flex flex-wrap devhouse_works__technologies mb-5"> 2183 <div class="mr-3"> 2184 <small class="text-muted">C#</small> 2185 </div><div class="mr-3"> 2186 <small class="text-muted">JavaScript</small> 2187 </div><div class="mr-3"> 2188 <small class="text-muted">Angular</small> 2189 </div><div class="mr-3"> 2190 <small class="text-muted">ASP.NET Web API</small> 2191 </div> 2192</div> 2193<a 2194 href="https://eventeyeapp.com/no" 2195 target="_blank" 2196 class="text-devhouse-green font-weight-bold text-decoration-none text-uppercase"><span>Check project</span> 2197 <i class="icon-arrow-right ml-3"></i> 2198</a></div><div class="works-gallery-item__image-wrapper"> 2199 <div class="image-wrapper position-relative"> 2200 <video autoplay loop muted preload="none" 2201 poster="https://mars-images.imgix.net/1629373674857?auto=compress&q=75&auto=format"> 2202 <source src= type="video/mp4" /> 2203 </video> 2204 <img class="w-100" src="https://mars-images.imgix.net/1629373674857?auto=compress&w=450&q=75&auto=format" /> 2205 </div> 2206</div></div><div id="FloatingImage"><div class="dynamic-image-container"></div><style>#FloatingImage { 2207 width: 45%; 2208 height: 100vh; 2209 position: sticky; 2210 top: 0; 2211 z-index: 3; 2212 float: right; 2213} 2214 2215/* if image */ 2216 2217.dynamic-image-container { 2218 width: 100%; 2219 height: 100%; 2220 background: no-repeat center/cover url("https://mars-images.imgix.net/DSC_2748.jpg?auto=compress&w=870&q=100&auto-format"); 2221} 2222 2223/* if video */ 2224 2225#FloatingImage video { 2226 width: 100%; 2227 height: 100%; 2228} 2229 2230@media only screen and (max-width: 1224px) { 2231 #FloatingImage { 2232 width: 100%; 2233 position: static; 2234 float: unset; 2235 } 2236} 2237 2238@media only screen and (max-width: 512px) { 2239 #FloatingImage { 2240 height: 25vh; 2241 } 2242 2243 .dynamic-image-container { 2244 background: no-repeat center/cover url("https://mars-images.imgix.net/DSC_2748.jpg?auto=compress&w=512&q=100&auto-format"); 2245 background-position: 100% 30%; 2246 } 2247}</style></div><section id="CallToActionBlock" class="spacing d-flex align-items-center pt-5"><style>/* container */ 2248#CallToActionBlock { 2249 padding-top: 200px; 2250 background-color: #fff; 2251} 2252 2253@media only screen and (max-width: 768px) { 2254 #CallToActionBlock { 2255 height: unset; 2256 } 2257} 2258 2259#CallToActionBlock .spacing { 2260 padding-right: unset; 2261} 2262 2263/* button */ 2264#CallToActionBlock button { 2265 margin-bottom: 192px; 2266 padding: 18px 64px; 2267 font-size: var(--font-size-2); 2268 background-color: var(--devhouse-green); 2269 cursor: pointer; 2270 transition: 0.2s ease-in; 2271} 2272 2273@media only screen and (max-width: 512px) { 2274 #CallToActionBlock button { 2275 width: 100%; 2276 margin-bottom: 40px; 2277 } 2278} 2279 2280#CallToActionBlock button:hover { 2281 color: black!important; 2282 background-color: #9CD737; 2283 transform: scale(1.05); 2284} 2285 2286/* typography */ 2287#CallToActionBlock .call-to-action__text h2 { 2288 font-size: var(--font-size-11); 2289 font-weight: 800; 2290} 2291 2292.call-to-action__text h2 span { 2293 color: transparent; 2294 -webkit-text-stroke-width: 1px; 2295 -webkit-text-stroke-color: #000; 2296} 2297 2298.call-to-action__text h6 { 2299 margin-bottom: 80px; 2300 font-size: var(--font-size-7); 2301 font-weight: 600; 2302} 2303 2304@media only screen and (max-width: 1418px) { 2305 #CallToActionBlock .call-to-action__text h2 { 2306 font-size: 100px; 2307 } 2308 2309 .call-to-action__text h6 { 2310 font-size: var(--font-size-6); 2311 } 2312} 2313 2314@media only screen and (max-width: 1236px) { 2315 #CallToActionBlock .call-to-action__text h2 { 2316 font-size: var(--font-size-11); 2317 } 2318 2319 .call-to-action__text h6 { 2320 font-size: var(--font-size-7); 2321 } 2322} 2323 2324@media only screen and (max-width: 564px) { 2325 #CallToActionBlock .call-to-action__text h2 { 2326 font-size: var(--font-size-9); 2327 } 2328 2329 .call-to-action__text h6 { 2330 width: 100% !important; 2331 font-size: var(--font-size-6); 2332 } 2333}</style><div class="d-flex justify-content-between align-items-center"> 2334 2335 <div class="call-to-action__text"> 2336 <h2 class="text-uppercase">Have <br /> 2337 <span>an</span> idea?</h2> 2338 <h6 class="w-75">Our team will help you bring it to life</h6> 2339 <button class="border-0 font-weight-bold text-light text-uppercase" 2340 onclick="Modal.open('/api/QuoteRequest', {width: '750px', height: '100%', roundCorners: true, noCloseOnOverlay: true, title: 'Quote request'})">Share it</button> 2341 </div> 2342 2343</div></section><footer id="obj4c55184224b742d48ae3eee6a545f278" class="noisy-bg"><style>#obj4c55184224b742d48ae3eee6a545f278 { 2344 min-height: 416px; 2345 padding-top: 88px; 2346 padding-bottom: 33px; 2347} 2348 2349@media only screen and (max-width: 320px) { 2350 #obj4c55184224b742d48ae3eee6a545f278 { 2351 min-height: 416px; 2352 padding-top: 32px; 2353 } 2354} 2355 2356#obj4c55184224b742d48ae3eee6a545f278 h3 { 2357 margin-bottom: 88px; 2358} 2359 2360@media only screen and (max-width: 512px) { 2361 #obj4c55184224b742d48ae3eee6a545f278 h3 { 2362 margin-bottom: 33px; 2363 } 2364} 2365 2366#obj4c55184224b742d48ae3eee6a545f278 h3 a { 2367 font-size: var(--font-size-7); 2368 color: var(--devhouse-green); 2369} 2370 2371@media only screen and (max-width: 1280px) { 2372 #obj4c55184224b742d48ae3eee6a545f278 h3 a { 2373 font-size: var(--font-size-7); 2374 } 2375} 2376 2377@media only screen and (max-width: 512px) { 2378 #obj4c55184224b742d48ae3eee6a545f278 h3 a { 2379 font-size: var(--font-size-5); 2380 } 2381} 2382 2383.footer__locations { 2384 font-size: var(--font-size-5); 2385 margin-bottom: 53px; 2386} 2387 2388@media only screen and (max-width: 512px) { 2389 #obj4c55184224b742d48ae3eee6a545f278 .footer__locations { 2390 flex-direction: column; 2391 margin-bottom: 49px; 2392 } 2393} 2394 2395.footer__links { 2396 font-size: var(--font-size-1); 2397 margin-bottom: 68px; 2398} 2399 2400@media only screen and (max-width: 512px) { 2401 #obj4c55184224b742d48ae3eee6a545f278 .footer__links { 2402 column-count: 2; 2403 -webkit-column-count: 2; 2404 -moz-column-count: 2; 2405 column-gap: 10px; 2406 -webkit-column-gap: 10px; 2407 -moz-column-gap: 10px; 2408 } 2409 2410 #obj4c55184224b742d48ae3eee6a545f278 .footer__links li { 2411 display: list-item !important; 2412 margin-bottom: 16px; 2413 font-size: var(--font-size-1); 2414 } 2415} 2416 2417.footer__socialMedia { 2418 margin-bottom: 68px; 2419} 2420 2421#obj4c55184224b742d48ae3eee6a545f278 img { 2422 width: 24px; 2423} 2424
2425.footer__copyright { 2426 font-size: var(--font-size-2); 2427}</style><div class="spacing"> 2428 <h3><a class="text-decoration-none" href="mailto:[email protected]">[email protected]</a></h3> 2429 <div class="footer__locations text-light d-flex"> 2430 2431 <p class="mr-5 mb-0">Remote/Distributed</p> 2432 2433 <p class="mr-5 mb-0">Oslo, Norway</p> 2434 2435 <p class="mr-5 mb-0">Istanbul, Turkey</p> 2436 2437 </div> 2438 <ul class="footer__links mb-5"> 2439 2440 <li class="d-inline"><a class="text-light font-weight-light text-decoration-none mr-3 mb-3" href="/about">About Us</a></li> 2441 2442 <li class="d-inline"><a class="text-light font-weight-light text-decoration-none mr-3 mb-3" href="/works">Works</a></li> 2443 2444 <li class="d-inline"><a class="text-light font-weight-light text-decoration-none mr-3 mb-3" href="/contacts">Contacts</a></li> 2445 2446 <li class="d-inline"><a class="text-light font-weight-light text-decoration-none mr-3 mb-3" href="/blog">Blog</a></li> 2447 2448 <li class="d-inline"><a class="text-light font-weight-light text-decoration-none mr-3 mb-3" href="/blogpost/our-handbook">Handbook</a></li> 2449 2450 </ul> 2451 <ul class="footer__socialMedia mb-5"> 2452 2453 <li class="d-inline"><a class="mr-3 mb-5" href="https://www.instagram.com/devhouse_/"><img class="h-auto" src="https://mars-images.imgix.net/instagram.png 80x80?auto=compress&w=80&q=100&auto=format,enhance" alt="social media icon"/></a></li> 2454 2455 <li class="d-inline"><a class="mr-3 mb-5" href="https://www.facebook.com/devhouse.pro"><img class="h-auto" src="https://mars-images.imgix.net/facebook.png 80x80?auto=compress&w=80&q=100&auto=format,enhance" alt="social media icon"/></a></li> 2456 2457 </ul> 2458 <p class="footer__copyright text-light my-0">© 2026 All rights very well reserved</p> 2459</div></footer></div></div></main><style>.mars-overlay { 2460 position: absolute; 2461 left: 0; 2462 top: 0; 2463 right: 0; 2464 bottom: 0; 2465 width: 100%; 2466 height: 100%; 2467 background: rgba(0,0,0,0); 2468 z-index: 99999; 2469 box-sizing: border-box; 2470 overflow: hidden; 2471 transition: background .25s ease-out; 2472 opacity: 0; 2473 display: none; 2474} 2475 2476.mars-overlay::-webkit-scrollbar {
2477 width: 0px; 2478 background: transparent; 2479} 2480 2481.mars-overlay.open { 2482 background: rgba(0,0,0,.45); 2483 opacity: 1; 2484 display: flex; 2485} 2486 2487.mars-overlay-spinner { 2488 border: .2em solid var(--color-primary); 2489 border-right-color: transparent; 2490}</style><div id="xoverlay" class="justify-content-center align-items-center mars-overlay"> 2491 <div class="spinner-border mars-overlay-spinner"></div> 2492</div>
2492<script v-pre type="module">const data = JSON.parse(decodeURIComponent("%7B%22_blockName%22%3A%22Overlay%22%2C%22Id%22%3A%22obj1166f09bc3464c9aab5b7d8b9890e802%22%2C%22children%22%3Anull%7D"));if (!window.Overlay) { 2493 const mars = new MarsBlock('xoverlay', data, { 2494 root: document.getElementById('xoverlay'), 2495 show: function () { 2496 this.root.classList.add('open'); 2497 }, 2498 hide: function () { 2499 this.root.classList.remove('open'); 2500 }, 2501 }); 2502 2503 window.Overlay = window.Overlay || mars; 2504}</script>
2504<script async type="text/javascript" id="cookieinfo" 2505 deffer 2506 async 2507 src="/mars/proxy?url=https://cdn.marscloud.dev/assets/img/cookies.min.js" 2508 data-message="We use cookies to give you the best experience of our site. Accept by continuing to use the site or clicking 'OK'." 2509 data-cookie="CookieInfoScript" 2510 data-linkmsg="Read more here" 2511 data-moreinfo="/termsandconditions" 2512 data-divlink="#fff" 2513 data-link="var(--devhouse-green)" 2514 data-divlinkbg="var(--devhouse-green)" 2515 data-close-text="OK"> 2516</script>
2516<div id="pageLoadSpinner" hidden="true" style=""><div class="loader" style="overflow-x: hidden;margin-bottom: -3px;"> 2517 <div class="bar"></div> 2518</div> 2519<style> 2520 #pageLoadSpinner .bar {position: fixed} 2521</style><style>@keyframes loader-animation { 2522 0% { left: -100%; } 2523 49% { left: 100%; } 2524 50% { left: 100%; } 2525 100% { left: -100%; } 2526} 2527 2528#pageLoadSpinner .loader .bar { 2529 top: 0; 2530 left: 0; 2531 height: 3px; 2532 width: 100%; 2533 z-index: 999999; 2534 background-color: red; 2535 animation-name: loader-animation; 2536 animation-duration: 3s; 2537 animation-iteration-count: infinite; 2538 animation-timing-function: ease-in-out; 2539}</style>
2539<script v-pre type="module">const data = JSON.parse(decodeURIComponent("%7B%22_blockName%22%3A%22PageLoader%22%2C%22Id%22%3A%22pageLoadSpinner%22%2C%22position%22%3A%22relative%22%2C%22children%22%3Anull%7D"));window[data.Id].hidden = true;</script>
2539</div></body></html>
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.