PageSourceSearch

https://www.oursky.com/services/

html oursky.com collected 2026-09-24 18:07:24 UTC 46,472 bytes, 50 lines download raw bytes

1<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate">
1<script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.j56hQv-j.js"></script>
1<!-- Primary SEO --><title>Oursky - Services</title><meta name="description" content="We craft digital products that users love, from conception to launch."><link rel="canonical" href="https://www.oursky.com/services/"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:title" content="Oursky - Services"><meta property="og:description" content="We craft digital products that users love, from conception to launch."><meta property="og:url" content="https://www.oursky.com/services/"><meta property="og:image" content="https://www.oursky.com/images/og-default.png"><meta property="og:site_name" content="Oursky"><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Oursky - Services"><meta name="twitter:description" content="We craft digital products that users love, from conception to launch."><meta name="twitter:image" content="https://www.oursky.com/images/og-default.png"><!-- Favicon --><link rel="icon" type="image/png" href="/favicon.png"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><!-- Borna Webfont is self-hosted via @font-face in global.css --><!-- Preload the most-used weights for faster LCP --><link rel="preload" href="/fonts/borna-regular.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="/fonts/borna-medium.woff2" as="font" type="font/woff2" crossorigin><!-- Structured data -->
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","@id":"https://www.oursky.com/#organization","name":"Oursky","url":"https://www.oursky.com/","logo":"https://www.oursky.com/images/og-default.png","sameAs":["https://www.linkedin.com/company/oursky-limited/","https://www.facebook.com/oursky.hk","https://www.instagram.com/oursky.hk/","https://twitter.com/oursky","https://github.com/oursky"]}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","@id":"https://www.oursky.com/#website","url":"https://www.oursky.com/","name":"Oursky","publisher":{"@id":"https://www.oursky.com/#organization"},"inLanguage":"en"}</script>
1<script async src="https://plausible.io/js/pa-wM4pfvIYRQVuIgaXue7ry.js"></script>
1<script>
2          window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
3          plausible.init()
4        </script>
4<link rel="stylesheet" href="/_astro/BaseLayout.9rkPZlJE.css">
5<style>.services-hero__title[data-astro-cid-fot7m4fn]{background-image:var(--gradient-page-title);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
6.tech-stack__tab-btn[data-astro-cid-vwkomdyw].active{color:var(--color-section-blue-dark);border-color:var(--color-section-blue-dark)}.tech-stack__pane[data-astro-cid-vwkomdyw]{display:none}.tech-stack__pane[data-astro-cid-vwkomdyw].active{display:block}
7</style></head> <body> <div id="site-header" class="header-wrapper" data-astro-cid-qlfjksao> <header class="header relative flex w-full max-w-full items-center justify-between gap-1 max-md:justify-center max-md:gap-2 sm:gap-2 md:max-w-none mx-auto pointer-events-auto" data-astro-cid-qlfjksao> <!-- Logo pill (tablet+ — Webflow hides separate header icon below md) --> <!-- data-astro-reload: home page loads Brevo's main.js (is:inline) to wire
8         the newsletter form; ClientRouter swaps would skip that bootstrap. --> <a href="/" data-astro-reload class="pill logo-pill relative z-[2] mr-2 hidden flex-none items-center justify-center no-underline sm:mr-4 md:flex lg:mr-5" aria-label="Oursky home" data-astro-cid-qlfjksao> <img src="/images/oursky-logo.svg" alt="Oursky" width="80" height="36" class="block h-6 w-auto max-w-full object-contain sm:h-7 lg:h-8" onerror="this.style.display='none';this.nextElementSibling.style.display='block'" data-astro-cid-qlfjksao> <span class="text-lg font-bold text-black" style="display:none" data-astro-cid-qlfjksao>Oursky</span> </a> <!-- Nav: centered in remaining space <md; absolutely centered md+ (tablet + desktop). Retracts on scroll down at md+. --> <div class="header__nav-center header__nav-center--desktop relative z-[1] flex min-w-0 flex-1 justify-center px-0.5 max-md:max-w-[min(100%,26rem)] max-md:flex-none md:pointer-events-none md:absolute md:inset-x-0 md:top-1/2 md:z-[1] md:flex md:w-full md:max-w-none md:flex-none md:-translate-y-1/2 md:justify-center md:px-0" data-astro-cid-qlfjksao> <nav class="pill nav-pill flex max-w-full flex-none gap-0.5 overflow-x-auto px-1.5 py-0.5 max-md:gap-1 sm:gap-1 sm:px-1.5 sm:py-1 md:pointer-events-auto lg:gap-1 lg:px-3 lg:py-2" aria-label="Main navigation" data-astro-cid-qlfjksao> <!-- Phone: logo inside nav bar replaces Home (ref: Webflow .navbar__icon) --> <a href="/" data-astro-reload class="nav-pill__brand md:hidden mr-0.5 flex shrink-0 items-center justify-center rounded-full no-underline transition-transform duration-300" aria-label="Oursky home" data-astro-cid-qlfjksao> <img src="/images/oursky-logo.svg" alt="" width="50" height="11" class="nav-pill__brand-img pointer-events-none block h-[0.68rem] w-auto max-w-[3.4rem] object-contain" aria-hidden="true" data-astro-cid-qlfjksao> </a> <a href="/" data-astro-reload class="nav-link flex h-full shrink-0 items-center rounded-full px-1.5 py-0.5 text-xs font-medium leading-tight text-black no-underline whitespace-nowrap transition-transform duration-300 sm:px-2 sm:text-sm sm:leading-snug lg:px-3 lg:text-lg lg:leading-9 nav-link--hide-below-md" data-astro-cid-qlfjksao> Home </a><a href="/about/" class="nav-link flex h-full shrink-0 items-center rounded-full px-1.5 py-0.5 text-xs font-medium leading-tight text-black no-underline whitespace-nowrap transition-transform duration-300 sm:px-2 sm:text-sm sm:leading-snug lg:px-3 lg:text-lg lg:leading-9" data-astro-cid-qlfjksao> About </a><a href="/services/" class="nav-link flex h-full shrink-0 items-center rounded-full px-1.5 py-0.5 text-xs font-medium leading-tight text-black no-underline whitespace-nowrap transition-transform duration-300 sm:px-2 sm:text-sm sm:leading-snug lg:px-3 lg:text-lg lg:leading-9 nav-link--active text-white" aria-current="page" data-astro-cid-qlfjksao> Services </a><a href="/blog/" class="nav-link flex h-full shrink-0 items-center rounded-full px-1.5 py-0.5 text-xs font-medium leading-tight text-black no-underline whitespace-nowrap transition-transform duration-300 sm:px-2 sm:text-sm sm:leading-snug lg:px-3 lg:text-lg lg:leading-9 nav-link--hide-below-md" data-astro-cid-qlfjksao> Blog </a><a href="/works/" class="nav-link flex h-full shrink-0 items-center rounded-full px-1.5 py-0.5 text-xs font-medium leading-tight text-black no-underline whitespace-nowrap transition-transform duration-300 sm:px-2 sm:text-sm sm:leading-snug lg:px-3 lg:text-lg lg:leading-9" data-astro-cid-qlfjksao> Works </a> </nav> </div> <!-- Contact: icon-only <lg; label lg+ --> <a href="/contact/" class="pill contact-pill relative z-[2] flex flex-none items-center justify-center rounded-full no-underline text-black lg:min-h-[4.25rem] lg:px-[3.125rem] lg:py-4 lg:text-lg lg:font-semibold" aria-label="Contact" data-astro-cid-qlfjksao> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 16" fill="none" class="h-3.5 w-4 shrink-0 sm:h-4 sm:w-5 lg:hidden" aria-hidden="true" data-astro-cid-qlfjksao> <path d="M2.5 2.64011C2.14844 2.64011 1.875 2.95261 1.875 3.26511V4.16354L8.59375 9.67136C9.41406 10.3354 10.5469 10.3354 11.3672 9.67136L18.125 4.16354V3.26511C18.125 2.95261 17.8125 2.64011 17.5 2.64011H2.5ZM1.875 6.58542V13.2651C1.875 13.6167 2.14844 13.8901 2.5 13.8901H17.5C17.8125 13.8901 18.125 13.6167 18.125 13.2651V6.58542L12.5781 11.
81167C11.0547 12.3667 8.90625 12.3667 7.42188 11.1167L1.875 6.58542ZM0 3.26511C0 1.89792 1.09375 0.765106 2.5 0.765106H17.5C18.8672 0.765106 20 1.89792 20 3.26511V13.2651C20 14.6714 18.8672 15.7651 17.5 15.7651H2.5C1.09375 15.7651 0 14.6714 0 13.2651V3.26511Z" fill="currentColor" data-astro-cid-qlfjksao></path> </svg> <span class="hidden lg:inline" data-astro-cid-qlfjksao>Contact</span> </a> </header> </div> 
8<script type="module">(()=>{const s=document.getElementById("site-header");if(!(s instanceof HTMLElement))return;const r=s.querySelector(".header__nav-center--desktop");if(!(r instanceof HTMLElement))return;const l=s,c=r,o=window.matchMedia("(min-width: 768px)"),a=window.matchMedia("(prefers-reduced-motion: reduce)");let n=window.scrollY;const h=10,f=6,u=40;function t(e){l.classList.toggle("site-header--nav-retracted",e),e?c.setAttribute("aria-hidden","true"):c.removeAttribute("aria-hidden")}function i(){if(!o.matches||a.matches){t(!1),n=window.scrollY;return}const e=window.scrollY;e<=u?t(!1):e>n+h?t(!0):e<n-f&&t(!1),n=e}function d(){(!o.matches||a.matches)&&t(!1)}window.addEventListener("scroll",i,{passive:!0}),o.addEventListener("change",d),a.addEventListener("change",d),i()})();</script>
8 <main class="min-w-0 max-w-full">  <div class="services-page"> <div class="flex flex-col gap-[2.88rem] w-full max-w-[var(--home-rail-max)] mx-auto pt-page-top px-[var(--home-rail-gutter)] pb-16 box-border max-lg:pt-page-top-tablet max-lg:gap-12 max-md:pb-12"> <section class="services-hero-section scroll-reveal-group w-full flex flex-col items-start gap-6 pb-section max-md:pb-12" aria-label="Services hero" data-astro-cid-fot7m4fn> <div class="ml-5 max-w-[80%] max-md:ml-0 scroll-reveal-item" style="--sr-delay: 0ms" data-astro-cid-fot7m4fn> <h1 class="services-hero__title m-0 text-5xl font-semibold leading-hero max-md:text-hero-secondary max-md:leading-hero-sm" data-astro-cid-fot7m4fn>We build digital products through solid engineering and thoughtful design</h1> </div> <div class="max-w-hero-desc scroll-reveal-item" style="--sr-delay: 80ms" data-astro-cid-fot7m4fn> <p class="m-0 pl-5 text-2xl font-medium leading-desc text-black max-md:text-lg max-md:leading-desc-sm max-md:pl-0" data-astro-cid-fot7m4fn>
9Our team creates scalable software, intuitive user experiences and reliable platforms that help companies launch, grow and solve real problems.
10</p> </div> </section> <section class="w-full scroll-reveal-group" aria-label="Development services"> <div class="bg-section-blue rounded-lg px-8 pt-[2.8rem] pb-14 flex flex-col gap-8 max-md:px-5 max-md:pt-8 max-md:pb-10"> <div class="flex items-center gap-5 scroll-reveal-item max-sm:flex-col max-sm:items-start max-sm:gap-4" style="--sr-delay: 0ms"> <div class="w-[15%] self-start shrink-0 max-lg:flex-none max-sm:w-[80px]"> <img src="/images/development-service.webp" alt="Software development" class="w-full h-full object-contain" loading="lazy"> </div> <h2 class="m-0 text-white text-3xl font-semibold leading-section max-lg:text-2xl max-lg:leading-desc">Development</h2> </div> <div class="flex flex-wrap gap-16 max-lg:gap-10 max-sm:flex-col max-sm:gap-10 scroll-reveal-item" style="--sr-delay: 80ms"> <div class="flex-1 min-w-64 max-sm:min-w-0 flex flex-col gap-3"> <div class="service-icon text-white"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="32" height="32" fill="currentColor" aria-hidden="true"><path d="M208 0H194.9l-2.6 12.9-9.7 48.5c-4.2 1.6-8.3 3.3-12.4 5.1L129.1 39l-10.9-7.3L108.9 41 41 108.9l-9.3 9.3L39 129.1l27.4 41.1c-1.8 4.1-3.6 8.2-5.1 12.4l-48.5 9.7L0 194.9V208v96 13.1l12.9 2.6 48.5 9.7c1.6 4.2 3.3 8.3 5.1 12.4L39 382.9l-7.3 10.9 9.3 9.3L108.9 471l9.3 9.3 10.9-7.3 41.1-27.4c4.1 1.8 8.2 3.6 12.4 5.1l9.7 48.5 2.6 12.9H208h96 13.1l2.6-12.9 9.7-48.5c4.2-1.6 8.3-3.3 12.4-5.1L382.9 473l10.9 7.3 9.3-9.3L471 403.1l9.3-9.3L473 382.9l-27.4-41.1c1.8-4.1 3.6-8.2 5.1-12.4l48.5-9.7 12.9-2.6V304 208 194.9l-12.9-2.6-48.5-9.7c-1.6-4.2-3.3-8.3-5.1-12.4L473 129.1l7.3-10.9-9.3-9.3L403.1 41l-9.3-9.3L382.9 39 341.8 66.5c-4.1-1.8-8.2-3.6-12.4-5.1l-9.7-48.5L317.1 0H304 208zm4.2 76.5L221.1 32h69.8l8.9 44.5 1.8 9.2 8.9 2.9c8.7 2.8 17.2 6.4 25.3 10.5l8.3 4.3 7.8-5.2 37.8-25.2 49.3 49.3-25.2 37.8-5.2 7.8 4.3 8.3c4.1 8.1 7.6 16.5 10.5 25.3l2.9 8.9 9.2 1.8 44.5 8.9v69.8l-44.5 8.9-9.2 1.8-2.9 8.9c-2.8 8.7-6.4 17.2-10.5 25.3l-4.3 8.3 5.2 7.8 25.2 37.8-49.3 49.3-37.8-25.2-7.8-5.2-8.3 4.3c-8.1 4.1-16.5 7.6-25.3 10.5l-8.9 2.9-1.8 9.2L290.9 480H221.1l-8.9-44.5-1.8-9.2-8.9-2.9c-8.7-2.8-17.2-6.4-25.3-10.5l-8.3-4.3-7.8 5.2-37.8 25.2L72.9 389.7l25.2-37.8 5.2-7.8-4.3-8.3c-4.1-8.1-7.6-16.5-10.5-25.3l-2.9-8.9-9.2-1.8L32 290.9V221.1l44.5-8.9 9.2-1.8 2.9-8.9c2.8-8.7 6.4-17.2 10.5-25.3l4.3-8.3-5.2-7.8L72.9 122.3l49.3-49.3 37.8 25.2 7.8 5.2 8.3-4.3c8.1-4.1 16.5-7.6 25.3-10.5l8.9-2.9 1.8-9.2zm75.6 86.1l2.6-15.8-31.6-5.3-2.6 15.8-32 192-2.6 15.8 31.6 5.3 2.6-15.8 32-192zM187.3 227.3L198.6 216 176 193.4l-11.3 11.3-40 40L113.4 256l11.3 11.3 40 40L176 318.6 198.6 296l-11.3-11.3L158.6 256l28.7-28.7zm160-22.6L336 193.4 313.4 216l11.3 11.3L353.4 256l-28.7 28.7L313.4 296 336 318.6l11.3-11.3 40-40L398.6 256l-11.3-11.3-40-40z"/></svg></div> <h3 class="m-0 text-white text-lg font-semibold leading-6">Software Development</h3> <p class="m-0 text-white text-lg leading-6 font-normal"> <span class="para-block">We excel with Native and Web Software, Mobile and Web Apps. We&#39;ve built award-winning iOS and Android apps that transform businesses, won multiple &quot;Best of the Year&quot; honors from the Apple App Store, and used by millions of users worldwide.<br><br></span><span class="para-block">Our tech team excels in native app development using Swift and Kotlin, and cross-platform development with React Native, Flutter, and Ionic. Plus, we&#39;re skilled at integrating apps with IoT devices via Bluetooth or other protocols.</span> </p> <a href="/service/software-development/" class="text-link-on-dark underline decoration-1 text-lg font-normal leading-snug mt-2">Learn more about how we works</a> </div><div class="flex-1 min-w-64 max-sm:min-w-0 flex flex-col gap-3"> <div class="service-icon text-white"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="32" height="32" fill="currentColor" aria-hidden="true"><path d="M32 64V192H480V64H32zM0 32H32 480h32V64 192v32H480 32 0V192 64 32zM32 320V448H480V320H32zM0 288H32 480h32v32V448v32H480 32 0V448 320 288zm304 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm24-280a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 280a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm24-280a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg></div> <h3 class="m-0 text-white text-lg font-semibold leading-6">
10Backend and Microservice Development</h3> <p class="m-0 text-white text-lg leading-6 font-normal"> <span class="para-block">We&#39;ve guided many enterprises in modernizing their apps and infrastructure, migrate to microservices. This includes advice on security, handling big user numbers, and keeping everything running smoothly.<br><br></span><span class="para-block">We&#39;ve also supported startups in growing from MVP to managing over 10k+ req/sec, optimizing the job queues and database. Every project at Oursky gets a full setup for CI/CD pipeline, deploy on k8s, and monitor code quality via linter or metrics such as Cognitive Complexity.</span> </p>  </div><div class="flex-1 min-w-64 max-sm:min-w-0 flex flex-col gap-3"> <div class="service-icon text-white"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="32" height="32" fill="currentColor" aria-hidden="true"><path d="M176 16V0H144V16 64H96 64V96v48H16 0v32H16 64v64H16 0v32H16 64v64H16 0v32H16 64v48 32H96h48v48 16h32V496 448h64v48 16h32V496 448h64v48 16h32V496 448h48 32V416 368h48 16V336H496 448V272h48 16V240H496 448V176h48 16V144H496 448V96 64H416 368V16 0H336V16 64H272V16 0H240V16 64H176V16zM416 96V416H96V96H416zm-64 64V352H160V160H352zM160 128H128v32V352v32h32H352h32V352 160 128H352 160z"/></svg></div> <h3 class="m-0 text-white text-lg font-semibold leading-6">Artificial Intelligence</h3> <p class="m-0 text-white text-lg leading-6 font-normal"> <span class="para-block">We create a wide range of Machine Learning solutions for our clients. From experimental projects where we train ML models and replicate results from research papers for trading funds, to fine-tuning Large Language Models for retail and finance companies.<br><br></span><span class="para-block">We also guide our clients on integrating ML/AI into their operations. This includes figuring out the best balance between accuracy and recall for different business situations, and advising on the right time to start using ML tools like Kubeflow.</span> </p> <a href="/service/ai/" class="text-link-on-dark underline decoration-1 text-lg font-normal leading-snug mt-2">Check out how we work with AI</a> </div> </div> </div> <div class="px-8 max-md:px-5"> <div class="flex flex-row gap-8 max-sm:gap-10 mt-12 max-lg:flex-wrap max-sm:flex-col scroll-reveal-item" style="--sr-delay: 120ms"> <div class="flex-1 max-lg:min-w-[calc(50%-0.625rem)] max-sm:min-w-0 flex flex-col gap-3"> <div class="methodology-icon text-black"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512" width="32" height="32" fill="currentColor" aria-hidden="true"><path d="M381.5 4l-4.7 15.3-144 464L228 498.5l30.6 9.5 4.7-15.3 144-464L412 13.5 381.5 4zM160.7 105.4l-11.7 11L13 244.4 .7 256 13 267.7l136 128 11.7 11 21.9-23.3-11.7-11L47.3 256 171 139.6l11.7-11-21.9-23.3zm296.7 23.9l12 10.6c27.8 24.7 47.5 44 67.4 63.5l0 0c16.8 16.4 33.7 32.9 55.5 52.8L469 372.3l-11.7 11 21.9 23.3 11.7-11 136-128 12.7-12L626.6 244c-27.8-24.7-47.5-44-67.4-63.5l0 0C539.2 161 519 141.3 490.6 116l-12-10.6-21.3 23.9z"/></svg></div> <h3 class="m-0 text-lg font-semibold leading-6 text-black">Code quality</h3> <p class="m-0 text-lg leading-6 text-black"> <span class="para-block">Our dedication to code quality is evident in our workflow: every Pull Request is rigorously reviewed, and we use linters to monitor essential metrics like Cognitive Complexity.<br><br></span><span class="para-block">We&#39;ve even open-sourced our linting rules so the community can benefit from our standards.</span> </p> </div><div class="flex-1 max-lg:min-w-[calc(50%-0.625rem)] max-sm:min-w-0 flex flex-col gap-3"> <div class="methodology-icon text-black"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="32" height="32" fill="currentColor" aria-hidden="true"><path d="M257.1 79.5c-11.3 0-22.4 1.1-33.1 3.1V50.2c10.8-1.7 21.9-2.6 33.1-2.6c53.2 0 101.7 20 138.5 52.8l13.7-13.7L432 64l22.6 22.6L464 96v64 32H432 368l-9.4-9.4L336 160l22.6-22.6L373 123c-31-27.1-71.5-43.5-115.8-43.5zm-208 176c0-53 19.8-101.3 52.4-138L86.6 102.6 64 80 86.6 57.4 96 48h64 32V80v64l-9.4 9.4L160 176l-22.6-22.6-13.2-13.2c-26.8 30.9-43.1 71.2-43.1 115.3c0 11.1 1 21.9 3 32.5H51.7c-1.7-10.6-2.5-21.4-2.5-32.5zm384 0c0-10.8-1-21.3-2.8-31.5h32.4c1.6 10.3 2.4 20.8 2.4 31.5c0 53.8-20.4 102.8-53.9 139.7l14.1 14.1L448 432l-22.6 22.6L416 464H352 320V432 368l9.4-9.4L352 336l22.6 22.6 14 14c27.7-31.1 44.6-72.1 44.6-117zM288 428.8v32.4c-10.1 1.5-20.4 2.3-30.9 2.3c-53.5 0-102.3-20.2-139.2-53.5l-15.3 15.3L80 448 57.4 425.4 48 416V352 320H80h64l9.4 9.4L176 352l-22.6 22.6-12.8 12.8c31 27.5 71.8 44.1 116.5 44.1c10.5 0 20.8-.9 30.9-2.7zM160 130.7V80H109.3L160 130.7zm272-21.5L381.3 160H432V109.3zm-80 272V432h50.7L352 381.3zM80 402.7L130.7 352H80l0 50.7z"/></svg></div> <h3 class="m-0 text-lg font-semibold leading-6 text-black">Agile development</h3> <p class="m-0 text-lg leading-6 text-black"> <span class="para-block">With more than a decade of agile software development under our belt, we&#39;re seasoned in designing, building, and delivering projects punctually.<br><br></span><span class="para-block">At Oursky, we offer the agility to adjust priorities and resources based on actual user feedback, empowering you to meet your goals with precision.</span> </p> </div><div class="flex-1 max-lg:min-w-[calc(50%-0.625rem)] max-sm:min-w-0 flex flex-col gap-3"> <div class="methodology-icon text-black"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="32" height="32" fill="currentColor" aria-hidden="true"><path d="M156.3 58.2L166.5 46 142 25.5 131.7 37.8 62.9 120.3 27.3 84.7 16 73.4-6.6 96 4.7 107.3l48 48 12.4 12.4 11.2-13.5 80-96zm0 160L166.5 206 142 185.5l-10.2 12.3L62.9 280.3 27.3 244.7 16 233.4-6.6 256 4.7 267.3l48 48 12.4 12.4 11.2-13.5 80-96zM192 80v32h16H496h16V80H496 208 192zm0 160v32h16H496h16V240H496 208 192zM160 400v32h16H496h16V400H496 176 160zM96 416a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"/></svg></div> <h3 class="m-0 text-lg font-semibold leading-6 text-black">Active communication</h3> <p class="m-0 text-lg leading-6 text-black"> <span class="para-block">We&#39;
10re convinced that the key to successful software development lies in solid partnerships and transparent communication.<br><br></span><span class="para-block">Right from the start, we collaborate closely with our clients to grasp their needs and priorities. By offering regular updates and actively seeking feedback, we make sure we&#39;re aligned with your vision at every phase.</span> </p> </div><div class="flex-1 max-lg:min-w-[calc(50%-0.625rem)] max-sm:min-w-0 flex flex-col gap-3"> <div class="methodology-icon text-black"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" width="32" height="32" fill="currentColor" aria-hidden="true"><path d="M32 480V32H192V176v16h16H352V480H32zM224 37.3L346.7 160H224V37.3zM232 0H32 0V32 480v32H32 352h32V480 152L232 0zm51.3 294l11.3-11.3L272 260l-11.3 11.3-95.4 95.4-42-42L112 313.4 89.4 336l11.3 11.3L154 400.6 165.3 412l11.3-11.3L283.3 294z"/></svg></div> <h3 class="m-0 text-lg font-semibold leading-6 text-black">Quality assurance</h3> <p class="m-0 text-lg leading-6 text-black"> <span class="para-block">We excel across the board, from unit and integration testing to simulating usage spikes with load tests. Our QA team is skilled in tailoring their approach to each project, offering both manual and automated regression testing.</span> </p> </div> </div> </div> </section> <section class="w-full scroll-reveal-group" aria-label="Design services"> <div class="bg-section-warm-gray rounded-lg px-8 py-[2.8rem] flex flex-col gap-6 scroll-reveal-item max-md:px-5 max-md:py-8" style="--sr-delay: 0ms"> <div class="flex items-center gap-5 max-sm:flex-col max-sm:items-start max-sm:gap-4"> <div class="w-[15%] self-start shrink-0 max-lg:flex-none max-sm:w-[80px]"> <img src="/images/design-service.webp" alt="UI/UX design" class="w-full h-full object-contain" loading="lazy"> </div> <h2 class="m-0 text-white text-3xl font-semibold leading-section max-lg:text-2xl max-lg:leading-desc">UI/UX Design</h2> </div> <p class="m-0 text-white text-lg font-normal leading-snug">
11User experience (UX) shapes the interaction between your business and your customers.
12<br><br>
13Our design methodology dives deep into knowing your audience, exploring user preferences, digital habits, and behaviors to outline user journeys, and to craft user personas and scenarios.
14<br><br>
15We go beyond just sketching out UX flows and architectures; we also guide you through the technology options for your project, considering their pros and cons, to foresee and eliminate any development hurdles.
16<br><br> <a href="/service/ui-ux-design/" class="text-link-on-dark underline decoration-1">Check out our design process</a> </p> </div> <div class="px-8 max-md:px-5"> <div class="flex flex-row gap-8 max-sm:gap-10 mt-12 max-sm:flex-col scroll-reveal-item" style="--sr-delay: 80ms"> <div class="flex-1 flex flex-col gap-3"> <div class="methodology-icon text-black"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512" width="32" height="32" fill="currentColor" aria-hidden="true"><path d="M224 32a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm0 224A128 128 0 1 0 224 0a128 128 0 1 0 0 256zM87.6 336H360.4l44.3 144H43.3L87.6 336zM384 304H64L9.8 480 0 512H33.5h381H448l-9.8-32L384 304zM627.3 187.3L638.6 176 616 153.4l-11.3 11.3L488 281.4l-52.7-52.7L424 217.4 401.4 240l11.3 11.3 64 64L488 326.6l11.3-11.3 128-128z"/></svg></div> <h3 class="m-0 text-lg font-semibold leading-6 text-black">User-centric design</h3> <p class="m-0 text-lg leading-6 text-black">We adopt iterative development to build and launch products, prioritizing key features to enhance user experience and accelerate businesses&#39; time to market.</p> </div><div class="flex-1 flex flex-col gap-3"> <div class="methodology-icon text-black"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" width="32" height="32" fill="currentColor" aria-hidden="true"><path d="M356.6 88l96 166.3L529.3 210l-96-166.3L356.6 88zM557 194l16 27.7-27.7 16-76.6 44.2-27.7 16-16-27.7-.5-.8-41.4 22.4c.6 4 .9 8.1 .9 12.2c0 23.2-9.9 44.2-25.7 58.8L419.1 512l-34.6 0-54-132.5c-8.3 2.9-17.2 4.5-26.5 4.5s-18.2-1.6-26.5-4.5L223.5 512l-34.6 0 60.2-147.8-127 68.7-85.4-148L326.9 100.5l-14-24.2 27.7-16L417.3 16 445 0l16 27.7L557 194zm-214-65.8L79.8 295.4l54.5 94.5 97-52.4c-4.7-10.2-7.3-21.5-7.3-33.4c0-44.2 35.8-80 80-80c28.6 0 53.6 15 67.8 37.5l36.6-19.8L342.9 128.2zM304 352a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM37.9 344.1l32 56L77.8 414 50 429.8l-7.9-13.9-32-56L2.2 346 30 330.2l7.9 13.9z"/></svg></div> <h3 class="m-0 text-lg font-semibold leading-6 text-black">Usability testing</h3> <p class="m-0 text-lg leading-6 text-black">We&#39;re seasoned in conducting usability testing sessions with our clients, whether it&#39;s in a physical test lab or remotely through platforms like UserTesting.com, and we truly enjoy it.</p> </div><div class="flex-1 flex flex-col gap-3"> <div class="methodology-icon text-black"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="32" height="32" fill="currentColor" aria-hidden="true"><path d="M219.3 292.7c-10-10-21.4-18.1-33.8-24.1C217.8 137.7 276.6 78.5 332.6 52.2c50.3-23.6 103.3-23 143.1-15.9c7 39.8 7.7 92.8-15.9 143.1c-26.3 55.9-85.5 114.8-216.4 147.1c-6-12.4-14.1-23.9-24.1-33.8zM256 381.3c0-8.2-.8-16.3-2.4-24.3c37.8-9.5 70.4-21.3 98.4-34.7v91.9l-96 48 0-80.9zM384 424V305C527.5 217.9 520.4 80.2 502.7 9.3C431.8-8.4 294.1-15.5 207.1 128H88 78.1l-4.4 8.8-64 128L-1.9 288H24 130.7c24.7 0 48.5 9.8 65.9 27.3s27.3 41.2 27.3 65.9L224 488l0 25.9 23.2-11.6 128-64 8.8-4.4V424zM155 258.4c-7.9-1.6-16.1-2.4-24.3-2.4H49.9l48-96h91.9c-13.5 28-25.2 60.5-34.7 98.4zm-11.2 189c-16.6 16.6-48.4 26.1-82.7 30.2c-10.4 1.2-20.3 1.9-28.9 2.2c.3-8.6 1-18.5 2.2-28.9c4.1-34.3 13.6-66.2 30.2-82.7c21.9-21.9 57.4-21.9 79.3 0s21.9 57.4 0 79.3zM166.5 470c34.4-34.4 34.4-90.1 0-124.5s-90.1-34.4-124.5 0C-7.5 395 .5 511.5 .5 511.5s116.5 8 166-41.5zM392 144a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM368 88a56 56 0 1 0 0 112 56 56 0 1 0 0-112z"/></svg></div> <h3 class="m-0 text-lg font-semibold leading-6 text-black">Lean startup</h3> <p class="m-0 text-lg leading-6 text-black">We recognize the challenges of introducing a new product or service. That&#39;s why we champion the MVP approach, enabling you to debut your idea with minimal risk and investment.</p> </div> </div> </div> </section> <section class="w-full scroll-reveal-group" aria-label="Our tech stack" data-astro-cid-vwkomdyw> <div class="border border-border-mid rounded-lg px-[2.44rem] py-[2.81rem] max-md:px-5 max-md:pt-8 max-md:pb-10 flex flex-col gap-[3.81rem] max-md:gap-10 scroll-reveal-item" style="--sr-delay: 0ms" data-astro-cid-vwkomdyw> <h2 class="m-0 text-3xl font-black leading-section text-black max-sm:text-2xl max-sm:leading-desc" data-astro-cid-vwkomdyw>Our Tech Stack</h2>
16 <div id="tech-stack-tabs" class="flex flex-col gap-10 max-md:gap-8" data-astro-cid-vwkomdyw> <div class="flex flex-wrap gap-6" role="tablist" data-astro-cid-vwkomdyw> <button class="tech-stack__tab-btn bg-transparent border border-border-mid rounded-full px-6 py-3 text-xl-plus leading-[1.875rem] cursor-pointer text-black transition-opacity duration-200 hover:opacity-60 max-sm:text-lg active" data-tab="mobile" role="tab" aria-selected="true" aria-controls="tech-tab-panel-mobile" data-astro-cid-vwkomdyw> Mobile </button><button class="tech-stack__tab-btn bg-transparent border border-border-mid rounded-full px-6 py-3 text-xl-plus leading-[1.875rem] cursor-pointer text-black transition-opacity duration-200 hover:opacity-60 max-sm:text-lg" data-tab="web" role="tab" aria-selected="false" aria-controls="tech-tab-panel-web" data-astro-cid-vwkomdyw> Web </button><button class="tech-stack__tab-btn bg-transparent border border-border-mid rounded-full px-6 py-3 text-xl-plus leading-[1.875rem] cursor-pointer text-black transition-opacity duration-200 hover:opacity-60 max-sm:text-lg" data-tab="cloud" role="tab" aria-selected="false" aria-controls="tech-tab-panel-cloud" data-astro-cid-vwkomdyw> Cloud </button><button class="tech-stack__tab-btn bg-transparent border border-border-mid rounded-full px-6 py-3 text-xl-plus leading-[1.875rem] cursor-pointer text-black transition-opacity duration-200 hover:opacity-60 max-sm:text-lg" data-tab="backend" role="tab" aria-selected="false" aria-controls="tech-tab-panel-backend" data-astro-cid-vwkomdyw> Back End and Micro-services </button><button class="tech-stack__tab-btn bg-transparent border border-border-mid rounded-full px-6 py-3 text-xl-plus leading-[1.875rem] cursor-pointer text-black transition-opacity duration-200 hover:opacity-60 max-sm:text-lg" data-tab="cicd" role="tab" aria-selected="false" aria-controls="tech-tab-panel-cicd" data-astro-cid-vwkomdyw> CI/CD &amp; DevOps </button> </div> <div data-astro-cid-vwkomdyw> <div id="tech-tab-panel-mobile" class="tech-stack__pane active" role="tabpanel" aria-label="Mobile" data-astro-cid-vwkomdyw> <div class="flex flex-wrap gap-3 row-gap-4" data-astro-cid-vwkomdyw> <div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/react-native.webp" alt="React Native" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/flutter.webp" alt="Flutter" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/kotlin.webp" alt="Kotlin" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/swift.webp" alt="Swift" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/graphql.png" alt="GraphQL" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/ionic.webp" alt="Ionic" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div> </div> </div><div id="tech-tab-panel-web" class="tech-stack__pane" role="tabpanel" aria-label="Web" data-astro-cid-vwkomdyw> <div class="flex flex-wrap gap-3 row-gap-4" data-astro-cid-vwkomdyw> <div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/tailwindcss.webp" alt="Tailwind CSS" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/reactjs.svg" alt="React" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/typescript.webp" alt="TypeScript" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/vite.webp" alt="Vite" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/storybook.svg" alt="Storybook" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div> </div> </div>
16<div id="tech-tab-panel-cloud" class="tech-stack__pane" role="tabpanel" aria-label="Cloud" data-astro-cid-vwkomdyw> <div class="flex flex-wrap gap-3 row-gap-4" data-astro-cid-vwkomdyw> <div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/k8s.png" alt="Kubernetes" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/openai.png" alt="OpenAI" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/helm.png" alt="Helm" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/prometheusio.svg" alt="Prometheus" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/terraform.png" alt="Terraform" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/kubeflow.svg" alt="Kubeflow" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div> </div> </div><div id="tech-tab-panel-backend" class="tech-stack__pane" role="tabpanel" aria-label="Back End and Micro-services" data-astro-cid-vwkomdyw> <div class="flex flex-wrap gap-3 row-gap-4" data-astro-cid-vwkomdyw> <div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/dotnet.png" alt=".NET" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/golang.png" alt="Go" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/rails.png" alt="Rails" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/python.webp" alt="Python" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/fastapi.png" alt="FastAPI" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/celery.png" alt="Celery" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/langchain.png" alt="LangChain" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div> </div> </div><div id="tech-tab-panel-cicd" class="tech-stack__pane" role="tabpanel" aria-label="CI/CD &#38; DevOps" data-astro-cid-vwkomdyw> <div class="flex flex-wrap gap-3 row-gap-4" data-astro-cid-vwkomdyw> <div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <span class="text-lg font-medium text-black" data-astro-cid-vwkomdyw>Makefile</span> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/github-actions.png" alt="GitHub Actions" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <img src="/images/gnupg.png" alt="GnuPG" class="object-contain h-full" loading="lazy" data-astro-cid-vwkomdyw> </div><div class="flex justify-center items-center max-w-[12.5rem] h-28" data-astro-cid-vwkomdyw> <span class="text-lg font-medium text-black" data-astro-cid-vwkomdyw>Blackbox</span> </div> </div> </div> </div> </div> </div> </section> 
16<script type="module">function s(){const e=document.getElementById("tech-stack-tabs");if(!e)return;const c=e.querySelectorAll(".tech-stack__tab-btn"),n=e.querySelectorAll(".tech-stack__pane");c.forEach(t=>{t.addEventListener("click",()=>{const r=t.dataset.tab;c.forEach(a=>{a.classList.remove("active"),a.setAttribute("aria-selected","false")}),n.forEach(a=>a.classList.remove("active")),t.classList.add("active"),t.setAttribute("aria-selected","true"),e.querySelector(`#tech-tab-panel-${r}`)?.classList.add("active")})})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",s,{once:!0}):s();</script>
16 <section class="w-full" aria-label="Let's talk"> <div class="bg-section-blue-light rounded-lg px-[2.62rem] py-[3.12rem] flex flex-col items-center gap-10"> <h2 class="m-0 text-2xl font-bold leading-[2.375rem] text-center text-black">Discuss what we could do for you.</h2> <a href="/contact/" class="inline-flex items-center justify-center whitespace-nowrap no-underline cursor-pointer rounded-full transition-all duration-300 h-[4.25rem] px-[3.125rem] text-lg font-black bg-primary-dark text-black hover:scale-105 hover:shadow-[0_4px_16px_rgba(226,159,52,0.4)]">Let&#39;s Talk</a> </div> </section> </div> </div>  </main> <footer class="site-footer w-full bg-bg"> <div class="w-full max-w-[1360px] mx-auto px-10 pb-10 box-border max-md:px-5 max-md:pb-5"> <!-- Dark card: logo + clocks --> <div class="bg-black rounded-lg flex justify-between items-center px-10 py-20 gap-8 mb-8 max-lg:flex-col max-lg:items-start max-lg:px-8 max-lg:py-16 max-md:px-6 max-md:py-12 max-md:mb-6"> <!-- Left: OURSKY logo + "We are hiring!" --> <div class="flex flex-col gap-3 justify-between shrink-0"> <div class="flex items-center gap-2 pr-10"> <a id="footer-logo-link" href="/" data-astro-reload class="inline-flex items-center gap-2 no-underline" aria-label="Oursky home"> <div id="footer-logo-lottie" class="w-20 h-20 shrink-0" aria-hidden="true"></div> <img src="/images/oursky-logo-footer.svg" alt="Oursky" width="141" height="30" class="block h-auto" style="width: 10rem"> </a> </div> <a href="https://jobs.oursky.com" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 text-primary-dark text-lg font-bold leading-footer no-underline transition-opacity hover:opacity-60">
17We are hiring!
18<span class="font-bold" aria-hidden="true">→</span> </a> </div> <!-- Right: two live clocks --> <div class="flex gap-12 items-start max-lg:gap-8 max-md:flex-col max-md:gap-6"> <!-- HK clock --> <div class="flex gap-8 flex-wrap items-start max-md:gap-5"> <div id="clock-container--hk" class="flex flex-col items-center justify-center"> <div class="flex justify-center items-center w-[6.3762rem] h-[6.3762rem] relative"> <svg class="w-full h-full" width="103" height="103" viewBox="0 0 103 103" fill="none" xmlns="http://www.w3.org/2000/svg"> 
19  <path d="M54.5098 0H48.7708L51.5862 4.40147L54.5098 0Z" fill="#D9D9D9"/>
20  <path d="M54.5098 102.017H48.7708L51.5862 97.6151L54.5098 102.017Z" fill="#D9D9D9"/>
21  <path d="M28.621 5.39904L23.6509 8.26855L28.2899 10.6726L28.621 5.39904Z" fill="#D9D9D9"/>
22  <path d="M79.6293 93.7482L74.6592 96.6177L74.8967 91.3982L79.6293 93.7482Z" fill="#D9D9D9"/>
23  <path d="M102.648 53.8777L102.648 48.1387L98.247 50.9541L102.648 53.8777Z" fill="#D9D9D9"/>
24  <path d="M0.631836 53.8777L0.631836 48.1387L5.03331 50.9541L0.631836 53.8777Z" fill="#D9D9D9"/>
25  <path d="M97.2494 27.9892L94.3799 23.019L91.9758 27.658L97.2494 27.9892Z" fill="#D9D9D9"/>
26  <path d="M8.90052 78.9975L6.03101 74.0273L11.2505 74.2649L8.90052 78.9975Z" fill="#D9D9D9"/>
27  <path d="M79.6293 8.26844L74.6592 5.39893L74.8967 10.6184L79.6293 8.26844Z" fill="#D9D9D9"/>
28  <path d="M28.621 96.6176L23.6509 93.748L28.2899 91.344L28.621 96.6176Z" fill="#D9D9D9"/>
29  <path d="M94.38 78.9975L97.2495 74.0273L92.03 74.2649L94.38 78.9975Z" fill="#D9D9D9"/>
30  <path d="M6.03088 27.9892L8.90039 23.019L11.3045 27.658L6.03088 27.9892Z" fill="#D9D9D9"/>
31  <circle cx="51.6928" cy="51.0082" r="2.86951" fill="white"/>
32  <path class="clock__hand--hour" d="M49.1198 32.6873L51.7019 51.0098L54.1075 32.6741C52.5607 30.4796 51.6389 27.2997 51.6389 27.2997C51.6389 27.2997 50.6561 30.4053 49.1198 32.6873Z" fill="white"/>
33  <path class="clock__hand--minute" d="M49.0737 16.8969L51.7007 51.0147L54.0613 16.8832C52.5143 14.6888 51.5794 6.81542 51.5794 6.81542C51.5794 6.81542 50.6098 14.6147 49.0737 16.8969Z" fill="white"/>
34 </svg> </div> <p class="text-white mt-3 mb-0 text-lg leading-footer max-md:text-base">--:--</p> </div> <div class="flex flex-col gap-0"> <h3 class="text-white m-0 text-lg font-semibold leading-footer max-md:text-base max-md:leading-[1.8rem]">Oursky</h3>
34 <p class="text-white m-0 text-lg leading-footer opacity-80 max-md:text-base max-md:leading-[1.8rem]">Hong Kong</p> <p class="text-white m-0 text-lg leading-footer opacity-80 max-md:text-base max-md:leading-[1.8rem]">Taipei</p> </div> </div> <!-- London clock --> <div class="flex gap-8 flex-wrap items-start max-md:gap-5"> <div id="clock-container--london" class="flex flex-col items-center justify-center"> <div class="flex justify-center items-center w-[6.3762rem] h-[6.3762rem] relative"> <svg class="w-full h-full" width="103" height="103" viewBox="0 0 103 103" fill="none" xmlns="http://www.w3.org/2000/svg"> 
35  <path d="M54.5098 0H48.7708L51.5862 4.40147L54.5098 0Z" fill="#D9D9D9"/>
36  <path d="M54.5098 102.017H48.7708L51.5862 97.6151L54.5098 102.017Z" fill="#D9D9D9"/>
37  <path d="M28.621 5.39904L23.6509 8.26855L28.2899 10.6726L28.621 5.39904Z" fill="#D9D9D9"/>
38  <path d="M79.6293 93.7482L74.6592 96.6177L74.8967 91.3982L79.6293 93.7482Z" fill="#D9D9D9"/>
39  <path d="M102.648 53.8777L102.648 48.1387L98.247 50.9541L102.648 53.8777Z" fill="#D9D9D9"/>
40  <path d="M0.631836 53.8777L0.631836 48.1387L5.03331 50.9541L0.631836 53.8777Z" fill="#D9D9D9"/>
41  <path d="M97.2494 27.9892L94.3799 23.019L91.9758 27.658L97.2494 27.9892Z" fill="#D9D9D9"/>
42  <path d="M8.90052 78.9975L6.03101 74.0273L11.2505 74.2649L8.90052 78.9975Z" fill="#D9D9D9"/>
43  <path d="M79.6293 8.26844L74.6592 5.39893L74.8967 10.6184L79.6293 8.26844Z" fill="#D9D9D9"/>
44  <path d="M28.621 96.6176L23.6509 93.748L28.2899 91.344L28.621 96.6176Z" fill="#D9D9D9"/>
45  <path d="M94.38 78.9975L97.2495 74.0273L92.03 74.2649L94.38 78.9975Z" fill="#D9D9D9"/>
46  <path d="M6.03088 27.9892L8.90039 23.019L11.3045 27.658L6.03088 27.9892Z" fill="#D9D9D9"/>
47  <circle cx="51.6928" cy="51.0082" r="2.86951" fill="white"/>
48  <path class="clock__hand--hour" d="M49.1198 32.6873L51.7019 51.0098L54.1075 32.6741C52.5607 30.4796 51.6389 27.2997 51.6389 27.2997C51.6389 27.2997 50.6561 30.4053 49.1198 32.6873Z" fill="white"/>
49  <path class="clock__hand--minute" d="M49.0737 16.8969L51.7007 51.0147L54.0613 16.8832C52.5143 14.6888 51.5794 6.81542 51.5794 6.81542C51.5794 6.81542 50.6098 14.6147 49.0737 16.8969Z" fill="white"/>
50 </svg> </div> <p class="text-white mt-3 mb-0 text-lg leading-footer max-md:text-base">--:--</p> </div> <div class="flex flex-col gap-0"> <h3 class="text-white m-0 text-lg font-semibold leading-footer max-md:text-base max-md:leading-[1.8rem]">Skymakers</h3> <p class="text-white m-0 text-lg leading-footer opacity-80 max-md:text-base max-md:leading-[1.8rem]">London</p> <p class="text-white m-0 text-lg leading-footer opacity-80 max-md:text-base max-md:leading-[1.8rem]">Manchester</p> </div> </div> </div> </div> <!-- Open Source bar --> <div class="bg-footer-opensource rounded-lg px-8 py-5 max-md:px-6 max-md:py-4"> <a href="/open-source/" class="flex items-center justify-between no-underline transition-opacity hover:opacity-60"> <span class="text-black text-lg font-bold max-md:text-base">We 😻 Open Source!</span> <span class="text-black text-lg font-bold max-md:text-base" aria-hidden="true">→</span> </a> </div> <!-- Copyright --> <p class="text-center text-black/60 text-sm mt-3 mb-0">Oursky Ltd. © 2026</p> </div> </footer> 
50<script type="module">const h="Asia/Hong_Kong",g="Europe/London";function r(t,c,e){if(!t)return;const n=new Intl.DateTimeFormat("en-HK",{hour:"numeric",minute:"numeric",hour12:!0,timeZone:e}).formatToParts(c),o={};n.forEach(f=>o[f.type]=f.value);const i=t.querySelector(".clock__hand--minute"),s=t.querySelector(".clock__hand--hour"),u=t.querySelector("p"),d=parseInt(o.minute??"0"),m=parseInt(o.hour??"0"),I=o.dayPeriod??"",l=d/60,k=(l+m)/12;u&&(u.textContent=`${m}:${String(d).padStart(2,"0")}${I}`),i&&i.setAttribute("transform",`rotate(${l*360}, 51.6928, 51.0082)`),s&&s.setAttribute("transform",`rotate(${k*360}, 51.6928, 51.0082)`)}let y;function p(){clearInterval(y);const t=document.getElementById("clock-container--hk"),c=document.getElementById("clock-container--london"),e=new Date;r(t,e,h),r(c,e,g);let a=e.getUTCMinutes();y=setInterval(()=>{const n=new Date;n.getUTCMinutes()!==a&&(a=n.getUTCMinutes(),r(document.getElementById("clock-container--hk"),n,h),r(document.getElementById("clock-container--london"),n,g))},1e3)}document.addEventListener("astro:page-load",p);</script>
50 
50<script type="module" src="/_astro/Footer.astro_astro_type_script_index_1_lang.BMosPksR.js"></script>
50 </body></html> 
50<script type="module">function t(){const o=document.querySelectorAll(".services-page .scroll-reveal"),l=document.querySelectorAll(".services-page .scroll-reveal-group");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)o.forEach(e=>e.classList.add("scroll-reveal--visible")),l.forEach(e=>e.classList.add("scroll-reveal-group--visible"));else if(o.length||l.length){const e=new IntersectionObserver((s,i)=>{for(const c of s){if(!c.isIntersecting)continue;const r=c.target;r.classList.contains("scroll-reveal-group")?r.classList.add("scroll-reveal-group--visible"):r.classList.add("scroll-reveal--visible"),i.unobserve(r)}},{root:null,rootMargin:"0px 0px -5% 0px",threshold:.05});o.forEach(s=>e.observe(s)),l.forEach(s=>e.observe(s))}}t();document.addEventListener("astro:page-load",t);</script>

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.