PageSourceSearch

https://www.algoramming.com/_next/static/chunks/0pt8-0exzi65o.js

js algoramming.com collected 2026-10-02 01:22:07 UTC 252,579 bytes, 11 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,61316,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){let{html:t,height:a=null,width:s=null,children:i,dataNtpc:r=""}=e;return(0,o.useEffect)(()=>{r&&performance.mark("mark_feature_usage",{detail:{feature:`next-third-parties-${r}`}})},[r]),(0,n.jsxs)(n.Fragment,{children:[i,t?(0,n.jsx)("div",{style:{height:null!=a?`${a}px`:"auto",width:null!=s?`${s}px`:"auto"},"data-ntpc":r,dangerouslySetInnerHTML:{__html:t}}):null]})};let n=e.r(43476),o=e.r(71645)},19598,(e,t,a)=>{"use strict";var n=e.e&&e.e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.sendGTMEvent=void 0,a.GoogleTagManager=function(e){let{gtmId:t,gtmScriptUrl:a,dataLayerName:n="dataLayer",auth:l,preview:d,dataLayer:h,nonce:c}=e;r=n;let u=new URL(a||"https://www.googletagmanager.com/gtm.js");return t&&u.searchParams.set("id",t),"dataLayer"!==n&&u.searchParams.set("l",n),l&&u.searchParams.set("gtm_auth",l),d&&(u.searchParams.set("gtm_preview",d),u.searchParams.set("gtm_cookies_win","x")),(0,s.useEffect)(()=>{performance.mark("mark_feature_usage",{detail:{feature:"next-third-parties-gtm"}})},[]),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.default,{id:"_next-gtm-init",dangerouslySetInnerHTML:{__html:`
2      (function(w,l){
3        w[l]=w[l]||[];
4        w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});
5        ${h?`w[l].push(${JSON.stringify(h)})`:""}
6      })(window,'${n}');`},nonce:c}),(0,o.jsx)(i.default,{id:"_next-gtm","data-ntpc":"GTM",src:u.href,nonce:c})]})};let o=e.r(43476),s=e.r(71645),i=n(e.r(3303)),r="dataLayer";a.sendGTMEvent=(e,t)=>{let a=t||r;window[a]=window[a]||[],window[a].push(e)}},54576,(e,t,a)=>{"use strict";let n;var o=e.e&&e.e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.GoogleAnalytics=function(e){let{gaId:t,debugMode:a,dataLayerName:o="dataLayer",nonce:l}=e;return void 0===n&&(n=o),(0,i.useEffect)(()=>{performance.mark("mark_feature_usage",{detail:{feature:"next-third-parties-ga"}})},[]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.default,{id:"_next-ga-init",dangerouslySetInnerHTML:{__html:`
7          window['${o}'] = window['${o}'] || [];
8          function gtag(){window['${o}'].push(arguments);}
9          gtag('js', new Date());
10
11          gtag('config', '${t}' ${a?",{ 'debug_mode': true }":""});`},nonce:l}),(0,s.jsx)(r.default,{id:"_next-ga",src:`https://www.googletagmanager.com/gtag/js?id=${t}`,nonce:l})]})},a.sendGAEvent=function(){for(var e=arguments.length,t=Array(e),a=0;a<e;a++)t[a]=arguments[a];void 0===n?console.warn("@next/third-parties: GA has not been initialized"):window[n]?window[n].push(arguments):console.warn(`@next/third-parties: GA dataLayer ${n} does not exist`)};let s=e.r(43476),i=e.r(71645),r=o(e.r(3303))},20207,e=>{"use strict";var t=e.i(71645),a=e.i(58249);e.s(["AnalyticsEvents",0,function(){return(0,t.useEffect)(()=>{let e=e=>{let t=e.target?.closest?.("a[href]");if(!t)return;let n=t.getAttribute("href")??"";n.includes("cal.com")?(0,a.trackEvent)("book_call_click",{link_url:n}):(n.includes("wa.me")||n.includes("api.whatsapp.com"))&&(0,a.trackEvent)("whatsapp_click",{link_url:n})};return document.addEventListener("click",e,{capture:!0}),()=>document.removeEventListener("click",e,{capture:!0})},[]),null}])},18566,(e,t,a)=>{t.exports=e.r(76562)},96989,e=>{"use strict";var t=e.i(43476),a=e.i(22016),n=e.i(18566);e.s(["ScrollTopLink",0,function(e){let{href:o,className:s,children:i,"aria-label":r}=e,l=(0,n.usePathname)(),d=o.split(/[?#]/)[0]||"/";return(0,t.jsx)(a.default,{href:o,className:s,"aria-label":r,onClick:function(e){if(d===l){e.preventDefault();let t=window.__lenis;t?t.scrollTo(0):window.scrollTo({top:0,behavior:"smooth"})}},children:i})}])},67585,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"BailoutToCSR",{enumerable:!0,get:function(){return o}});let n=e.r(32061);function o(e){let{reason:t,children:a}=e;if("u"<typeof window)throw Object.defineProperty(new n.BailoutToCSRError(t),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,
11configurable:!0});return a}},9885,(e,t,a)=>{"use strict";function n(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"encodeURIPath",{enumerable:!0,get:function(){return n}})},52157,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"PreloadChunks",{enumerable:!0,get:function(){return l}});let n=e.r(43476),o=e.r(74080),s=e.r(63599),i=e.r(9885),r=e.r(43369);function l(e){let{moduleIds:t}=e;if("u">typeof window)return null;let a=s.workAsyncStorage.getStore();if(void 0===a)return null;let l=[];if(a.reactLoadableManifest&&t){let e=a.reactLoadableManifest;for(let a of t){if(!e[a])continue;let t=e[a].files;l.push(...t)}}if(0===l.length)return null;let d=(0,r.getAssetTokenQuery)();return(0,n.jsx)(n.Fragment,{children:l.map(e=>{let t=`${a.assetPrefix}/_next/${(0,i.encodeURIPath)(e)}${d}`;return e.endsWith(".css")?(0,n.jsx)("link",{precedence:"dynamic",href:t,rel:"stylesheet",as:"style",nonce:a.nonce},e):((0,o.preload)(t,{as:"script",fetchPriority:"low",nonce:a.nonce}),null)})})}},69093,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"default",{enumerable:!0,get:function(){return d}});let n=e.r(43476),o=e.r(71645),s=e.r(67585),i=e.r(52157);function r(e){return{default:e&&"default"in e?e.default:e}}let l={loader:()=>Promise.resolve(r(()=>null)),loading:null,ssr:!0},d=function(e){let t={...l,...e},a=(0,o.lazy)(()=>t.loader().then(r)),d=t.loading;function h(e){let r=d?(0,n.jsx)(d,{isLoading:!0,pastDelay:!0,error:null}):null,l=!t.ssr||!!t.loading,h=l?o.Suspense:o.Fragment,c=t.ssr?(0,n.jsxs)(n.Fragment,{children:["u"<typeof window?(0,n.jsx)(i.PreloadChunks,{moduleIds:t.modules}):null,(0,n.jsx)(a,{...e})]}):(0,n.jsx)(s.BailoutToCSR,{reason:"next/dynamic",children:(0,n.jsx)(a,{...e})});return(0,n.jsx)(h,{...l?{fallback:r}:{},children:c})}return h.displayName="LoadableComponent",h}},70703,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"default",{enumerable:!0,get:function(){return o}});let n=e.r(55682)._(e.r(69093));function o(e,t){let a={};"function"==typeof e&&(a.loader=e);let o={...a,...t};return(0,n.default)({...o,modules:o.loadableGenerated?.modules})}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},13293,e=>{"use strict";var t=e.i(43476),a=e.i(57688),n=e.i(22016),o=e.i(71645),s=e.i(66065),i=e.i(18566);function r(e){let{href:a,children:o}=e,s=(0,i.usePathname)(),r=s===a||"/"!==a&&s?.startsWith(a);return(0,t.jsx)(n.default,{href:a,className:"nav-link","aria-current":r?"page":void 0,children:o})}var l=e.i(96989);let d={"custom-software-development":[{slug:"saas-product-development",title:"SaaS Product Development",shortTitle:"SaaS development",tagline:"Multi-tenant products built to onboard, bill, and scale.",answer:"Algoramming is a multi-tenant SaaS development company in Dhaka, Bangladesh that builds products end-to-end, from authentication and billing to admin tooling and analytics, for founders and teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. One senior team handles architecture, engineering, and launch, and you own the codebase from the first commit.",metaTitle:"SaaS Product Development Company | Algoramming",metaDescription:"SaaS product development company building multi-tenant apps end to end: authentication, subscription billing, admin tooling, and analytics you own.",description:"We build software-as-a-service products from the ground up, with the tenancy, billing, and operational tooling a real subscription business needs on day one, not bolted on after the first hundred customers.",outcomes:["A multi-tenant product with isolation you can defend to enterprise buyers","Subscription billing, trials, and plan changes that reconcile cleanly","Onboarding that gets a new customer to first value without a call","Usage analytics and admin tooling your team can run without engineers"],deliverables:["Multi-tenant architecture with per-tenant data isolation","Authentication, roles, and permissions wired to your plans","Billing integration with proration, dunning, and invoices","Admin console, audit logs, and product analytics dashboards"],seoSections:[{heading:"Multi-tenant architecture and billing, decided before the first screen",body:"The two decisions that quietly define a SaaS product are how you isolate tenants and how you charge them. We settle both early. Shared schema with row-level security, schema-
11per-tenant, or database-per-tenant each has a cost, and we pick the one that matches your compliance story and your scale, not the one that is fashionable. Billing is wired to the same model, so plan limits, seat counts, and usage metering read from one source of truth rather than three that drift."},{heading:"SaaS built to be operated, not just launched",body:"A subscription business lives or dies on the boring surfaces: onboarding, admin tooling, and the reports your team pulls every Monday. We treat those as first-class product, not an afterthought. New tenants self-serve to first value, your support team can impersonate, refund, and adjust plans without a deploy, and product analytics answer which features actually drive retention. The result is a product your own people can run, so engineering time goes to the roadmap instead of firefighting."}],faqs:[{question:"Which billing provider do you use?",answer:"Usually Stripe, occasionally Paddle or a regional gateway when tax handling or local cards demand it. We keep the billing logic in your codebase so switching providers later is a contained change, not a rewrite."},{question:"Can you migrate our existing users onto a multi-tenant model?",answer:"Yes. We map your current accounts to the tenancy model, write a reversible migration, and cut over behind a flag so you can roll back if anything looks wrong."},{question:"Do you handle SOC 2 or enterprise security reviews?",answer:"We build with audit logging, encryption, and least-privilege access from the start, and we help you answer security questionnaires. Formal SOC 2 certification is a separate audit we can prepare you for."},{question:"How much does it cost to build a SaaS product?",answer:"There is no fixed price, because scope drives it: how many tenants and roles, how complex the billing, and how much admin and analytics you need. We start with a short scoping engagement that turns your goals into a costed plan, then quote against a defined first release."},{question:"Single-tenant or multi-tenant: which architecture should we choose?",answer:"Multi-tenant fits most SaaS, since one shared system is cheaper to run and update. Single-tenant makes sense when a customer needs hard data isolation or their own deployment for compliance. We pick based on your buyers and scale, and keep the billing model aligned with it."},{question:"How fast can you ship a SaaS MVP?",answer:"A focused first release usually takes a few months, depending on how much of the tenancy, billing, and onboarding has to be real on day one. We scope the smallest version that a paying customer can use, ship that, then grow it on evidence."}]},{slug:"internal-business-tools",title:"Internal Business Tools",shortTitle:"Internal tools",tagline:"Replace the spreadsheet-and-tabs system of record.",answer:"Algoramming does internal tools development from Dhaka, Bangladesh for operations, finance, and support teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We replace brittle spreadsheets, manual handoffs, and stacked SaaS tabs with one system that mirrors how your team actually works, with the source code and data staying in your accounts.",metaTitle:"Custom Internal Tools Development | Algoramming",metaDescription:"Custom internal tools development that replaces spreadsheets and SaaS tabs with one owned system: dashboards, admin panels, and audited workflows.",description:"We build the back-office softw
11are that runs your operation: dashboards, admin panels, approval flows, and the small tools that quietly remove hours of manual work every week.",outcomes:["One system of record instead of spreadsheets and three SaaS tabs","Manual, error-prone steps replaced with reliable, audited workflows","Role-based access so the right people see and change the right things","Hours of weekly busywork returned to the team that was doing it"],deliverables:["Operations dashboard tailored to your real workflow","Approval, assignment, and notification flows with audit history","Integrations to the tools your team already lives in","Role-based permissions and a clear admin surface"],seoSections:[{heading:"Start from the workflow, not the wireframe",body:"The best internal tools come from watching the work happen. We sit with the people who copy data between tabs, chase approvals over email, and reconcile numbers by hand, and we map where the time actually goes. The tool we build removes those steps in the order that hurts most, so you feel the difference in the first release rather than after a six-month programme. Nothing here is generic; it fits your terminology, your edge cases, and the way your team already thinks."},{heading:"Custom internal tools that are audited, reliable, and yours to run",body:"Internal tools carry real operational risk, so we treat them like production software, not scripts. Every change is logged, permissions are explicit, and the workflows that touch money or customer data leave an audit trail you can answer to. The code lives in your repositories and connects to your existing systems, so the tool grows with the operation instead of becoming another thing only one person understands."}],faqs:[{question:"Can this connect to our existing SaaS tools?",answer:"Yes. We integrate with the systems you already pay for, through their APIs or webhooks, so the internal tool becomes the place your team works rather than one more tab."},{question:"We only have a rough idea of what we need. Is that a problem?",answer:"No. That is normal for internal tools. A short discovery maps the real workflow and gives you a prioritised plan before any code is written."},{question:"Will non-technical staff be able to use it?",answer:"That is the whole point. We design for the people doing the work, test with them, and adjust until the tool is faster than the spreadsheet it replaces."},{question:"Should we build a custom internal tool or use a no-code platform like Retool?",answer:"No-code platforms are a fine start for a simple admin panel. A custom build wins once the workflow is specific, the data is sensitive, or you want the code and data in your own accounts with no per-seat platform fee. We help you weigh that honestly."},{question:"How much does it cost to build a custom internal tool?",answer:"It depends on how many workflows, integrations, and roles the tool covers. We keep it grounded with a short discovery that maps the real work and returns a prioritised, costed plan, so you can start with the highest-value slice rather than commit to everything at once."},{question:"Can this replace the spreadsheets our operations team relies on?",answer:"Yes, that is usually the point. We map what the spreadsheets actually do, migrate the data, and build a tool with validation, roles, and audit history the spreadsheet never had, so the team gains reliability without losing the flexibility they were used to."}]},{slug:"legacy-modernization",title:"Legacy Modernization and Migration",shortTitle:"Legacy modernisation",tagline:"Move off the system that everyone is afraid to touch.",answer:"Algoramming modernises legacy software from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We work behind the strangler pattern, replacing an ageing system piece by piece with no downtime, so the business keeps running, data moves safely, and your team ends up with a codebase a new engineer can read.",metaTitle:"Legacy Software Modernization Services | Algoramming",metaDescription:"Legacy software modernization done incrementally with the strangler pattern: safe, verified data migration and a codebase your team can maintain.",description:"We move you off the system nobody wants to touch, one slice at a time, so you get the benefits of modern software without the all-or-nothing rewrite that so often stalls.",outcomes:["A risky, ageing system retired without a big-bang cutover","Data migrated with verification, not hope","Faster delivery once the modern surface takes over","Documentation and tests so the next change is not frightening"],deliverables:["A modernisation roadmap with sequencing and risk notes","Incremental replacement behind a strangler facade","Verified, reversible data migration scripts","Test coverage and documentation for the new surface"],seoSections:[{heading:"Incremental legacy modernization beats a big-bang rewrite",body:"The full rewrite is the project most likely to fail, because it asks the business to wait months for value while carrying the old system anyway. We prefer the strangler pattern: stand a modern layer in front of the legacy system, move one capability across at a time, and route traffic to whichever side owns it. The old system shrinks release by release, the business never stops, and 
11you can pause or re-sequence whenever priorities change."},{heading:"Safe data migration is where legacy modernization succeeds or fails",body:"Most migration pain is data pain: mismatched types, silent truncation, records that were never as clean as anyone believed. We profile the real data first, write migrations that are reversible, and reconcile row counts and checksums on both sides before any cutover. Where the legacy schema hides business rules, we surface them into code and tests, so the knowledge stops living only in one person's head."}],faqs:[{question:"Can you work with a system in a language we no longer hire for?",answer:"Yes. Part of the value of the strangler approach is that the old stack keeps running untouched while the new capabilities land on a stack you can actually staff."},{question:"How do you avoid downtime during migration?",answer:"We cut over one capability at a time behind feature flags, with the old path ready as an immediate fallback. Most steps are invisible to users."},{question:"What if we cannot afford to modernise everything?",answer:"You do not have to. We sequence by risk and value, so you can stop once the painful parts are handled and leave stable pieces as they are."},{question:"What is the strangler fig pattern, and why do you use it?",answer:"It means standing a modern layer in front of the old system and moving one capability across at a time, so the legacy system shrinks release by release. We use it because it replaces the risk of a big-bang cutover with small, reversible steps the business never feels."},{question:"Legacy modernization or a full rewrite: which do we need?",answer:"A full rewrite is rarely the right first move, because it asks the business to wait months while carrying the old system anyway. Incremental modernization delivers value sooner and lets you stop when the painful parts are handled. We recommend a rewrite only when the old code truly cannot be extended."},{question:"How much does legacy modernization cost, and can we do it in stages?",answer:"Cost tracks the number of capabilities moved and how tangled the data is, so staging is built in: we sequence by risk and value and quote stage by stage. A short assessment gives you a roadmap and a cost for the first slice before you commit to the rest."}]},{slug:"api-and-systems-integration",title:"API and Systems Integration",shortTitle:"API integration",tagline:"Make your tools talk to each other, reliably.",answer:"Algoramming builds APIs and systems integrations from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We connect the platforms your business already runs on, design clean APIs for partners, and handle the retries, idempotency, and monitoring that keep data flowing correctly when a third party has a bad day.",metaTitle:"API Development and Integration Services | Algoramming",metaDescription:"API development and systems integration that stays reliable: idempotent syncs, retries, versioned REST and GraphQL APIs, and monitoring with replay.",description:"We connect the systems your business depends on and build the APIs your partners consume, with the reliability plumbing that stops a third-party outage from becoming your outage.",outcomes:["Data that moves between systems automatically and correctly","A clean, documented API partners can build against","Integrations that survive third-party outages without corrupting data","Visibility into every sync, with alerts when something stalls"],deliverables:["Integration architecture with failure and retry handling","Documented REST or GraphQL APIs with versioning","Idempotent sync jobs with dead-letter handling","Monitoring, alerting, and a replay path for failed events"],seoSections:[{heading:"Reliable API integration: we design for the failure edges",body:"Connecting two systems on a good day is easy. The work is in the bad day: the timeout mid-request, the duplicate webhook, the partner that changes a field without telling anyone. We make every sync idempotent, so a retry never doubles a record, queue events so a slow downstream cannot back up the whole pipeline, and keep a dead-letter path so nothing is silently lost. When something does go wrong, you get an alert and a way to replay, not a mystery."},{heading:"REST and GraphQL APIs your partners actually enjoy using",body:"If you are the one exposing an API, its quality becomes your reputation with every integrator. We design predictable resources, honest error messages, pagination that scales, and versioning that lets you evolve without breaking existing callers. Documentation is generated from the same contract the code enforces, so it never drifts out of date, and partners can go from reading to a working c
11all in minutes."}],faqs:[{question:"Do you build both sides, the API and the integration?",answer:"Either or both. We build APIs for you to publish, and we integrate you with third-party systems you consume. The reliability principles are the same in both directions."},{question:"Can you handle real-time as well as batch sync?",answer:"Yes. We use webhooks and event streams where latency matters and scheduled reconciliation where it does not, often both, so real-time speed is backed by a batch safety net."},{question:"What happens when a third party changes their API?",answer:"Monitoring flags the break early, versioned adapters contain the change, and a small, well-tested layer means the fix is localised rather than spread across your codebase."},{question:"How do you keep two systems in sync reliably?",answer:"We make each sync idempotent, so a retry never doubles a record, queue events so a slow system cannot back up the pipeline, and reconcile on a schedule to catch anything missed. A dead-letter path holds failures for replay, so nothing is silently lost."},{question:"Webhooks or polling: which do you use for real-time sync?",answer:"Webhooks where the source supports them, because they are faster and cheaper than constant polling. We back them with scheduled reconciliation, since webhooks can be missed or arrive out of order, so real-time speed is paired with a batch safety net."},{question:"Can you build a public or partner API for our platform?",answer:"Yes. We design predictable resources, honest errors, pagination, authentication, and versioning that lets you evolve without breaking existing callers, with documentation generated from the same contract the code enforces so it never drifts out of date."}]}],"mobile-app-design-and-development":[{slug:"ios-app-development",title:"iOS App Development",shortTitle:"iOS apps",tagline:"Native iPhone and iPad apps that feel at home on the platform.",answer:"Algoramming is an iOS app development company in Dhaka, Bangladesh that builds native iPhone and iPad apps in Swift and SwiftUI, end-to-end, for clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We design, engineer, and ship through App Store review, and you own the source and the developer account.",metaTitle:"iOS App Development Company in Bangladesh | Algoramming",metaDescription:"Native iOS app development for iPhone and iPad: Swift and SwiftUI, App Store submission, and a smooth, platform-native experience your users trust.",description:"We build native iOS apps that respect the platform, from gesture and layout conventions to performance on older devices, and we carry them through App Store review to a clean launch.",outcomes:["An app that feels native, not like a wrapped website","Smooth performance and battery behaviour on real devices","A clean pass through App Store review, guided by us","Analytics and crash reporting live from the first release"],deliverables:["Native iOS app in Swift and SwiftUI","App Store listing assets and submission handled end-to-end","Push notifications, offline handling, and deep links","Crash reporting, analytics, and a TestFlight beta track"],seoSections:[{heading:"Native iOS app development, because the details show",body:"Users can feel the difference between an app that respects iOS and one that fights it. We build with Swift and SwiftUI so gestures, transitions, accessibility, and layout follow what people already expect from the platform. That fidelity is not decoration; it is what makes an app feel trustworthy enough to keep on the home screen. We test on real devices, including older ones, because smoothness on the latest iPhone is not the same as smoothness in your users' hands."},{heading:"App Store review, handled",body:"A rejected submission can cost a launch window. We know the guidelines that trip teams up, from permission prompts and privacy labels to sign-in requirements, and we prepare the listing so the first review is usually the last. Beyond launch, we set up TestFlight for staged betas, crash reporting so regressions surface before ratings do, and an update cadence that keeps the app current with each iOS release."}],faqs:[{question:"Do we need our own Apple Developer account?",answer:"Yes, and it should be in your name so you own the app and its analytics. We set it up with you and handle certificates and provisioning."},{question:"Can you take over an existing iOS app?",answer:"Often. We start with a short audit of the codebase and release setup, then give you an honest view of whether to continue, refactor, or rebuild specific parts."},{question:"Should we go native or cross-platform?",answer:"It depends on your team and budget. If iOS is your only or primary platform and the experience bar is high, native is usually worth it. We will tell you plainly which fits."},{question:"How much does iOS app development cost?",answer:"It depends on the number of screens, the backend and integrations behind them, and how much polish the experience needs. Rather than quote a number blind, we run a short scoping step that turns your feature list into a costed plan, so the estimate reflects your actual app."},{question:"Can you build for both iPhone and iPad?",answer:"Yes. A universal app can target both from one codebase, and we adapt the layout so the iPad version uses the larger screen properly rather than stretching the phone UI. We scope the iPad experience explicitly so it is a real design decision, not an afterthought."}]},{slug:"android-app-development",title:"Android App Development",shortTitle:"Android apps",tagline:"Native Android apps that behave across a messy device landscape.",answer:"Algoramming is an Android app development company in Dhaka, Bangladesh that builds native Android apps in Kotlin and Jetpack Compose, end-to-e
11nd, for clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We test across the real device range your users carry and ship through Google Play, with the source and account staying yours.",metaTitle:"Android App Development Company Bangladesh | Algoramming",metaDescription:"Native Android app development in Kotlin and Jetpack Compose: tested across real devices, published to Google Play, and tuned for mid-range hardware.",description:"We build native Android apps that hold up across the real device landscape your users carry, not just the flagship in the demo, and we ship them cleanly through Google Play.",outcomes:["Consistent behaviour across screen sizes and Android versions","Performance tuned for mid-range hardware, not just flagships","A clean Google Play release with staged rollout","Analytics and crash reporting from the first install"],deliverables:["Native Android app in Kotlin and Jetpack Compose","Google Play listing and staged rollout handled for you","Push notifications, offline support, and deep links","Crash reporting, analytics, and an internal test track"],seoSections:[{heading:"Android app development built for the devices people actually own",body:"Android is not one device; it is thousands, across a wide range of price points and OS versions. An app that only feels right on a flagship will disappoint most of its users. We build with Kotlin and Jetpack Compose, keep the app responsive on mid-range hardware, and test across the screen sizes and Android versions your audience actually carries. Battery, memory, and cold-start time get real attention, because on a modest phone those are the difference between a keeper and an uninstall."},{heading:"Google Play, without the surprises",body:"We handle the parts of Google Play that catch teams out: the data safety form, target API requirements, and permissions that need justification. Releases go out as staged rollouts so a regression reaches a small slice of users first, with crash reporting watching, before it reaches everyone. That turns launch day from a held breath into a routine."}],faqs:[{question:"Which devices do you test on?",answer:"We test on a spread that reflects your audience, real hardware for the common cases plus emulators for the long tail of versions and screen sizes."},{question:"Can you publish under our Play Console account?",answer:"Yes, and we recommend it, so the app, its reviews, and its analytics belong to you. We handle signing and the release configuration."},{question:"Do you support Wear OS or Android TV?",answer:"We can. Those are separate surfaces with their own design rules, so we scope them explicitly rather than assuming a phone app will simply carry over."},{question:"How much does Android app development cost?",answer:"Cost follows scope: the number of features, the backend behind them, and the range of devices and Android versions you need to support. We run a short scoping step first, so the estimate maps to your real app rather than a guess, and quote against a defined first release."},{question:"How do you handle Google Play data safety and target API rules?",answer:"We complete the Data safety form honestly against what the app actually collects, keep the app on a current target API level as Google requires, and justify each permission we request. That keeps the listing compliant and avoids the review rejections that catch teams out."}]},{slug:"cross-platform-app-development",title:"Cross-Platform App Development",shortTitle:"Cross-platform apps",tagline:"One codebase for iOS and Android, without the wrapped-website feel.",answer:"Algoramming builds cross-platform mobile apps from Dhaka, Bangladesh using Flutter and React Native for clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. One codebase ships to both iOS and Android, which cuts cost and keeps features in step, while we still reach for native modules wherever the experience genuinely needs them.",metaTitle:"Cross-Platform App Development (Flutter) | Algoramming",metaDescription:"Cross-platform app development with Flutter and React Native: one iOS and Android codebase, lower cost, faster releases, near-native performance.",description:"We build one codebase that ships to both iOS and Android, so features land on both platforms at once and your budget goes further, with native modules where the experience demands them.",outcomes:["One codebase serving both platforms, at lower total cost","Features that reach iOS and Android at the same time","Near-native performance for the great majority of screens","A single release process instead of two diverging ones"],deliverables:["Cross-platform app in Flutter or React Native","Shared design system across both platforms","Native modules for platform-specific features","CI that builds, tests, and ships both stores from one pipeline"],seoSections:[{heading:"One codebase, two stores, half the drift",body:"The hidden cost of separate native apps is not just the second build; it is the drift, where iOS and Android slowly grow different features and different bugs. A cross-platform codebase keeps them in step. We reach for Flutter or React Native based on your team and needs, share the design system so both platforms feel like one product, and use a single pipeline to build, test, and release to both stores. For most apps, that is faster to ship and cheaper to maintain, with no visible compromise."},{heading:"Native modules where cross-platform earns its keep",body:"Cross-platform does not mean lowest common denominator. When a screen needs platform-specific behaviour, a heavy camera or maps feature, or the last few percent of polish, we drop to a native module and keep the rest shared. The point is to spend the native effort where users can feel it, and share everything else, rather than paying the full native tax on screens that never needed it."}],faqs:[{question:"Flutter or React Native?",answer:"Both are excellent. Flutter gives very consistent UI control; React Native fits teams already invested in the JavaScript ecosystem. We recommend based on your existing skills and the app itself."},{question:"Will users be able to tell it is not fully native?",answer:"For the vast majority of apps, no. We hold the same bar for gestures, transitions, and performance, and use native modules for the parts where the difference would otherwise show."},{question:"Can we start cross-platform and go native later?",answer:"Yes. Many products validate cross-platform first, then invest in native for a specific platform once traction justifies the cost. The shared design work carries over."},{question:"Is cross-platform app development cheaper than native?",answer:"Usually, because one codebase serves both iOS and Android instead of two separate builds and team
11s. The saving is largest when the two platforms should behave alike. Where an app needs deep platform-specific work, some of that cost returns, and we point it out before you commit."},{question:"Flutter vs React Native: which performs better?",answer:"For the vast majority of apps both perform well enough that users cannot tell. Flutter gives very consistent UI control across platforms; React Native fits teams already in the JavaScript ecosystem. For the heaviest screens we drop to a native module either way, so the framework choice follows your team, not a benchmark."}]}],"web-application-design-and-development":[{slug:"nextjs-web-application-development",title:"Next.js Web Application Development",shortTitle:"Next.js apps",tagline:"Fast, server-rendered web apps on the modern React stack.",answer:"Algoramming builds Next.js web applications from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We engineer server-rendered React apps with the App Router, type-safe end-to-end, deployed with preview builds on every change, and you own the repository, the infrastructure config, and the product from day one.",metaTitle:"Next.js Web Application Development | Algoramming",metaDescription:"Next.js web application development on the React App Router: server rendering, type-safe code, fast Core Web Vitals, and preview deployments.",description:"We build web applications on Next.js and React, server-rendered for speed and search, type-safe from database to component, and deployed with a preview URL on every pull request.",outcomes:["Fast first loads and strong Core Web Vitals out of the box","Type safety from the database through to the UI","A preview deployment for every change, before it ships","An app search engines and answer engines can read cleanly"],deliverables:["Next.js App Router application, server-rendered","Type-safe data layer and component library","CI with type checks, tests, and preview deployments","Production hosting on Vercel, Cloudflare, or AWS"],seoSections:[{heading:"Next.js server rendering that pays off twice",body:"Rendering on the server buys two things at once: pages that feel fast because meaningful content arrives on the first response, and pages that search and answer engines can read without waiting on client-side JavaScript. We build on the Next.js App Router, stream where it helps, and keep the client bundle lean so interaction stays snappy. The result scores well on Core Web Vitals not as a one-off audit fix, but because the architecture leans that way by default."},{heading:"Type-safe from the database to the button",body:"Most web-app bugs are shape mismatches: a field renamed here, a nullable value assumed non-null there. We carry types end-to-end, from the database schema through the data layer to the components, so the compiler catches those before a user ever does. Paired with preview deployments on every pull request, your team reviews real, running changes at their own URL, which turns code review into something you can actually click through."}],faqs:[{question:"Why Next.js over a plain single-page app?",answer:"Server rendering gives you speed and SEO that a client-only SPA has to work hard to match, plus a single framework for both pages and APIs. For most product web apps, that trade is clearly worth it."},{question:"Where will it be hosted?",answer:"Vercel, Cloudflare, or AWS depending on your team and existing accounts. The hosting lives in your name, and the deployment is defined as code so it is reproducible."},{question:"Can you improve an existing React app instead of rebuilding?",answer:"Frequently, yes. We audit the current app and often get the biggest wins from performance, type safety, and rendering changes without a full rewrite."},{question:"Is Next.js good for SEO and AI search?",answer:"Yes. Server rendering means meaningful content arrives in the first response, so search crawlers and AI answer engines can read the page without waiting on client-side JavaScript. Paired with clean metadata and structured data, that is a strong foundation for both traditional SEO and AI citation."},{question:"How much does a Next.js web app cost?",answer:"It depends on the number of features, the data model, and the integrations behind them. We avoid quoting blind: a short scoping step turns your requirements into a costed plan, and we quote against a defined first release so the number reflects your actual app."}]},{slug:"ecommerce-development",title:"E-commerce Development",shortTitle:"E-commerce",tagline:"Storefronts that load fast and check out without friction.",answer:"Algoramming builds e-commerce websites and storefronts from Dhaka, Bangladesh for merchants across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We engineer fast, conversion-focused stores on headless commerce or a modern platform, wire up payments and tax, and tune the checkout so more of the traffic you already have turns into orders.",metaTitle:"E-commerce Website Development Services | Algoramming",metaDescription:"E-commerce development that converts: fast storefronts, frictionless checkout, payment and tax integration, and headless commerce when you need control.",description:"We build online stores that load fast and check out cleanly, whether that means a headless storefront for full control or a modern platform build tuned for c
11onversion.",outcomes:["A storefront that loads fast on mobile, where most shopping happens","A checkout with fewer steps and fewer dropped carts","Payments, tax, and shipping wired correctly for your regions","A catalogue your team can manage without a developer"],deliverables:["Headless or platform-based storefront, built for speed","Checkout, payments, and tax integration for your markets","Product catalogue and content management your team controls","Analytics and conversion tracking across the funnel"],seoSections:[{heading:"Fast e-commerce development, because the checkout depends on speed",body:"On a store, every slow page is a leak. Shoppers on phones and patchy connections abandon before a heavy page even settles. We build storefronts that render fast, load images responsibly, and keep the path from product to purchase short. Whether we go headless for full control or build on a modern platform, the priority is the same: get the shopper to a working, trustworthy checkout with as little friction as the business rules allow."},{heading:"The plumbing that keeps orders honest",body:"Behind the storefront sits the part customers never see but always feel: payments that settle, tax and shipping that compute correctly for each region, inventory that does not oversell, and order data that reconciles with your finance tools. We wire that plumbing carefully and instrument the funnel so you can see exactly where shoppers drop, which turns conversion work into decisions backed by data rather than guesses."}],faqs:[{question:"Headless or a platform like Shopify?",answer:"Headless gives you full control of the front end and performance; a managed platform gets you live faster with less to maintain. We recommend based on your catalogue size, team, and how custom the experience needs to be."},{question:"Can you migrate our existing store without losing SEO?",answer:"Yes. We preserve URLs where we can, set up redirects where we cannot, and migrate content and reviews carefully so hard-won rankings carry over."},{question:"How do you set up multi-currency and tax for the UAE, US, and UK?",answer:"We configure currencies, regional tax rules such as UAE VAT, US sales tax, and UK VAT, and shipping per market, so pricing shows and settles correctly for each region. Where the rules are complex, we integrate a tax service rather than hard-code rates that go stale."},{question:"How much does e-commerce website development cost?",answer:"It depends on catalogue size, how custom the storefront and checkout are, and which payment, tax, and shipping integrations you need. We start with a short scoping step that turns your requirements into a costed plan, then quote against a defined first release."}]},{slug:"progressive-web-app-development",title:"Progressive Web App Development",shortTitle:"PWAs",tagline:"App-like reach on the web, installable and offline-ready.",answer:"Algoramming builds progressive web apps from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. A PWA installs from the browser, works offline, and sends push notifications, giving you app-like reach without an app-store gate, from a single codebase that stays fast on modest devices and networks.",metaTitle:"Progressive Web App (PWA) Development | Algoramming",metaDescription:"Progressive web app development: installable, offline-capable web apps with push notifications and app-like performance, from one codebase.",description:"We build progressive web apps that install from the browser, work offline, and feel like a native app, without the app-store gate, so your reach is a link away.",outcomes:["An installable app with no app-store approval in the way","Useful behaviour offline and on unreliable connections","Push notifications to bring users back","One codebase serving desktop and mobile alike"],deliverables:["Installable PWA with a service worker and offline cache","Push notifications where the platform supports them","Responsive, app-like UI across devices","Performance budget and Lighthouse PWA compliance"],seoSections:[{heading:"Progressive web app reach that starts with a link",body:"A PWA lowers the barrier between finding your product and using it. There is no store listing to pass, no download to weigh up; a link opens the app, and users can install it to the home screen when they are ready. For businesses whose audience is reluctant to install yet another native app, or who want one experience across desktop and mobile, that reach is the whole point. We build to the installability and performance bar so the app qualifies as a PWA in practice, not just in name."},{heading:"Offline as a first-class state",body:"Connections drop, especially on mobile. We treat offline as a state to de
11sign for, not an error to apologise for. A service worker caches the shell and the data that matters, actions queue and sync when the connection returns, and the interface tells the user honestly what is and is not available. On modest devices and networks, that resilience is often what separates a tool people rely on from one they abandon."}],faqs:[{question:"How is a PWA different from a native app?",answer:"A PWA runs from the web and installs without a store, which is faster to reach users and cheaper to maintain. Native still wins for deep hardware integration and the last degree of polish. We help you weigh the trade."},{question:"Do PWAs work on iOS?",answer:"Yes, with some platform limits on push and background behaviour that we design around. The core experience, installable and offline-capable, works across current browsers."},{question:"Can an existing web app be turned into a PWA?",answer:"Usually. If the app is reasonably modern, adding installability, offline support, and a performance pass is an incremental project rather than a rebuild."},{question:"How much does a progressive web app cost?",answer:"A PWA is often cheaper than separate native apps, because one codebase serves every device with no app-store build to maintain. Cost still tracks the features and offline behaviour you need, so we scope the first release and quote against it rather than guess up front."},{question:"Can a PWA send push notifications and work on iOS?",answer:"Yes, with some limits. PWAs install and work offline across current browsers, and push works on Android and, in recent iOS versions, on installed web apps. We design around the platform limits so the core experience is solid everywhere and push degrades gracefully where it is restricted."}]},{slug:"marketing-website-development",title:"Marketing Website Development",shortTitle:"Marketing sites",tagline:"Fast, editable marketing sites that rank and convert.",answer:"Algoramming builds marketing websites from Dhaka, Bangladesh for companies across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We design and engineer fast, accessible sites on a headless CMS, so pages load quickly, rank well, and your marketing team can edit content and launch landing pages without waiting on a developer.",metaTitle:"Marketing Website Development and C
11MS | Algoramming",metaDescription:"Marketing website development on a headless CMS: fast, accessible, SEO-ready pages your team can edit and expand without a developer in the loop.",description:"We build marketing sites that are fast, accessible, and genuinely editable, so your team ships landing pages and updates content on its own instead of queuing for engineering.",outcomes:["Pages that load fast and score well on Core Web Vitals","Content your marketing team edits without a developer","Clean technical SEO and structured data built in","New landing pages launched in hours, not sprints"],deliverables:["Marketing site with a headless CMS your team controls","Reusable page sections and a landing-page builder","Technical SEO, sitemaps, and structured data","Analytics, forms, and lead routing wired in"],seoSections:[{heading:"Editable by the people who own the message",body:"A marketing site that needs a developer for every copy change becomes a bottleneck, and the bottleneck quietly kills campaigns. We build on a headless CMS with reusable sections, so your team assembles new pages and edits existing ones without touching code or waiting on a deploy. Engineering sets up the components and the guardrails once; marketing gets speed and independence from then on."},{heading:"Marketing website development built to be found and to convert",body:"Fast pages are the foundation of both ranking and conversion. We hold a performance budget, render server-side for clean crawling, and build technical SEO and structured data in from the start rather than retrofitting it later. Forms, analytics, and lead routing are wired so you can see which pages bring qualified traffic and act on it, turning the site into a measurable channel instead of a brochure."}],faqs:[{question:"Which CMS do you use?",answer:"A headless CMS chosen to fit your team, so editors get a friendly interface while the site stays fast and fully in your control. We set up the content model around how your team actually writes."},{question:"Can you match our existing brand and design?",answer:"Yes. We build to your brand, or refine it as we go if it needs tightening for the web, and deliver a component set that keeps every future page on-brand."},{question:"Will we be locked into you for changes?",answer:"No. The whole point is independence. Your team edits content freely, the code lives in your repository, and the CMS is one you can run without us."},{question:"How much does a marketing website cost?",answer:"It depends on how many page types and templates you need, how custom the design is, and which integrations sit behind the forms. We scope a first set of pages and reusable sections, quote against that, and keep the CMS setup so new pages later cost your team time, not budget."}]}],"best-ui-ux-design-services":[{slug:"ui-ux-design-and-prototyping",title:"UI/UX Design and Prototyping",shortTitle:"UI/UX design",tagline:"Interfaces designed and tested before they are built.",answer:"Algoramming provides UI/UX design and prototyping in Figma from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We research, design, and prototype the interfaces, test them with real users, and hand engineering a clickable, decided design, so the build starts from evidence rather than opinion.",metaTitle:"UI/UX Design and Prototyping Services | Algoramming",metaDescription:"UI/UX design and prototyping in Figma: research, wireframes, high-fidelity UI, and clickable prototypes tested with real users before engineering builds.",description:"We design and prototype the product in Figma, test the risky screens with real users, and hand your engineers a decided, clickable design instead of a stack of static mockups.",outcomes:["Decisions settled on tested prototypes, not opinions in a meeting","A clickable prototype your team and users can react to","Fewer expensive changes discovered mid-build","A design engineering can implement without guesswork"],deliverables:["User research findings and key flows","Wireframes and high-fidelity UI in Figma","A clickable prototype of the core journeys","Handoff specs, states, and interaction notes"],seoSections:[{heading:"Prototype the risky parts first, in Figma",body:"The cheapest place to change your mind is a prototype. We design the flows that carry the most risk or uncertainty first, make them clickable, and put them in front of real users before engineering commits. That surfaces the confusions and dead ends while they cost a Figma edit rather than a sprint. By the time a screen reaches the build, the important arguments have already been settled with evidence."},{heading:"A handoff engineers can actually build from",body:"Good design does not end at a pretty screen. We hand over the states that real softw
11are has, empty, loading, error, and edge, along with interaction notes, spacing, and the tokens that keep it consistent. That detail is what stops the built product from quietly diverging from the design, and what lets engineering move quickly because the decisions are already made and documented."}],faqs:[{question:"Do you do research, or just visual design?",answer:"Both. The visual work is only as good as the understanding behind it, so we include the research and testing needed to make design decisions defensible."},{question:"Can you work from our existing brand?",answer:"Yes. We design within your brand, and flag where it needs tightening for product use, so the result feels like you rather than a template."},{question:"Will you also build what you design?",answer:"We can, and there is real value in the same senior team carrying a design through to code. We also hand off cleanly to an in-house or third-party team when that is what you need."},{question:"What is the difference between a wireframe and a prototype?",answer:"A wireframe is a static, low-detail layout that settles structure and content, before visual design. A prototype is clickable: it links screens so a person can move through the flow and you can watch where they hesitate. We use wireframes to decide layout and prototypes to test behaviour."},{question:"Which tools do you prototype in?",answer:"Figma for the great majority of work, from wireframes to clickable, high-fidelity prototypes, because it keeps design and handoff in one place your team can open. For motion or interaction that Figma cannot express, we prototype in code so the test is faithful to the real thing."},{question:"Do you test prototypes with real users before build?",answer:"Yes, and it is the point of prototyping. We put the risky flows in front of real users while changes still cost a Figma edit rather than a sprint, so the important arguments are settled with evidence before engineering commits."}]},{slug:"design-systems",title:"Design Systems",shortTitle:"Design systems",tagline:"One source of truth for how your product looks and behaves.",answer:"Algoramming builds design systems from Dhaka, Bangladesh for product teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We create the tokens, components, and documentation in Figma and code, keeping the two in sync, so every team ships on-brand, accessible interfaces faster and the product stops drifting apart screen by screen.",metaTitle:"Design System Development Services | Algoramming",metaDescription:"Design system development: tokens, a documented component library, and code kept in sync with Figma, so your product ships consistent, accessible UI.",description:"We build the design system that keeps your product coherent as it grows: tokens, a documented component library, and the discipline to keep design and code from drifting apart.",outcomes:["A consistent product, even as teams and features multiply","Faster shipping from reusable, tested components","Accessibility baked into components, not bolted on later","Design and code that stay in sync through one source of truth"],deliverables:["Design tokens for colour, type, spacing, and motion","A documented, accessible component library in code","Figma library mirrored to the coded components","Contribution and versioning guidelines"],seoSections:[{heading:"Design systems: the cure for products that drift apart",body:"Without a system, every new screen is a small negotiation, and the product slowly fragments into slightly different buttons, spacings, and behaviours. A design system replaces those negotiations with decisions made once. Tokens define the raw values, components package the patterns, and documentation makes the right choice the easy choice. As your team grows, the system is what lets more people ship without the product feeling like it was built by strangers."},{heading:"Real value only when design and code agree",body:"A design system that lives only in Figma, or only in code, drifts within weeks. We build both sides and keep them mirrored, so the component a designer places matches the component an engineer imports, down to states and accessibility. That alignment is where the speed comes from: designers assemble screens from known parts, engineers implement without reinventing, and reviews stop relitigating settled decisions."}],faqs:[{question:"We are small. Is a design system overkill?",answer:"It can be, early on. We right-size it, sometimes that is a lean token set and a handful of components, so you get consistency without maintaining machinery you do not yet need."},{question:"Which tech do you build components in?",answer:"Usually React, documented in Storybook, with tokens that can feed other platforms. We fit the system to your stack rather than 
11imposing a new one."},{question:"How long does it take to build a design system?",answer:"A lean, useful first version, core tokens and a handful of components, often takes a few weeks. A broad system for a large product grows over months. We right-size it and ship the parts your teams need first, so the system earns its keep early rather than arriving all at once."},{question:"What is the difference between a design system and a component library?",answer:"A component library is the set of reusable UI parts. A design system is broader: the tokens, the library, the usage rules, and the documentation that say how and when to use each part. The library is a piece of the system, not the whole of it."},{question:"Can you extend or fix a design system we already have?",answer:"Yes. We audit what exists, fix the gaps and inconsistencies, reconnect Figma and code where they have drifted, and add the governance that keeps the system healthy as more people contribute."}]},{slug:"brand-identity-design",title:"Brand Identity and Visual Design",shortTitle:"Brand identity",tagline:"A coherent identity that carries from logo to product.",answer:"Algoramming designs brand identities and visual systems from Dhaka, Bangladesh for companies across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We shape the logo, color palette, typography, and brand guidelines into one coherent identity, and, because we also build product, we make sure it holds up in the interface, not just on a slide.",metaTitle:"Brand Identity and Visual Design | Algoramming",metaDescription:"Brand identity and visual design: logo, colour, typography, and guidelines built into a coherent system that holds up in your product, not just on a deck.",description:"We shape a coherent brand identity, logo, colour, type, and voice, and, because we also ship the product, we make sure it survives contact with a real interface.",outcomes:["A recognisable, coherent identity across every touchpoint","Guidelines your whole team can apply confidently","A palette and type system that work in a real product UI","Assets ready for web, product, and print"],deliverables:["Logo suite and usage rules","Colour palette and typographic system","Brand guidelines document","Asset library ready for product and marketing"],seoSections:[{heading:"Brand identity design that survives contact with the product",body:"Plenty of beautiful brands fall apart the moment they meet a real interface: the palette has no accessible text colour, the display typeface is unreadable at UI sizes, the logo has no version that works in a cramped header. Because we build product as well as brand, we design the identity to live where your customers actually spend time. It looks right on the pitch deck and it still looks right in a dense dashboard at 2pm."},{heading:"Guidelines people can actually use",body:"A brand is only as strong as the average person's ability to apply it. We write guidelines that are practical rather than precious: clear rules, real examples, and the tokens that let the identity flow straight into a design system. The aim is that a marketer, a new designer, or an engineer can each make on-brand decisions without a gatekeeper, so the brand stays coherent as more hands touch it."}],faqs:[{question:"Do you do full rebrands or just refreshes?",answer:"Both. Sometimes the identity needs rethinking; often it just needs tightening and a system to keep it consistent. We are honest about which one you actually need."},{question:"What is included in a brand identity package?",answer:"A logo suite with usage rules, a color palette, a typographic system, and a brand guidelines document, plus an asset library ready for web, product, and print. We can also deliver the identity as tokens, so it flows straight into a design system."},{question:"What is the difference between a logo and a brand identity?",answer:"A logo is one mark. A brand identity is the whole system around it: color, typography, imagery, voice, and the rules for using them consistently. The logo is the most visible piece, but on its own it is not enough to keep a brand coherent across every touchpoint."},{question:"Can the brand feed directly into our product design and design system?",answer:"Yes, and that is the advantage of working with a studio that builds product. We deliver the identity as tokens that plug straight into a design system, so the brand holds up in a real interface rather than living only in a guidelines PDF."},{question:"Will we get editable source files?",answer:"Always. You own the source, the exports, and the guidelines, so your team and any future partner can keep building on it."}]},{slug:"ux-audit-and-usability-testing",title:"UX Audit and Usability Testing",shortTitle:"UX audits",tagline:"Find why users stall, with evidence you can act on.",answer:"Algoramming runs UX audits and usability testing from Dhaka, Bangladesh for product teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We run a heuristic evaluation against usability principles, watch real users attempt real tasks, and hand you a prioritised list of what to fix and why, ranked by impact rather than opinion.",metaTitle:"UX Audit and Usability Testing Services | Algoramming",metaDescription:"UX audit and usability testing: heuristic review, task-based testing with real users, and a prioritised, evidence-backed list of fixes ranked by impact.",description:"We audit your product against usability principles and watch real users attempt real tasks, then hand you a prioritised list of fixes ranked by impact, not by whoever spoke loudest.",outcomes:["A clear picture of where and why users stall","Fixes prioritised by impact, not by opinion","Evidence from real users to settle internal debates","Quick wins you can ship immediately, plus a deeper list"],deliverables:["Heuristic audit of key flows","Task-based usability sessions with real users","Prioritised findings with severity and effort","Annotated recommendations and quick wins"],seoSections:[{heading:"Heuristic audit and usability testing, because each catches what the other misses",body:"A heuristic audit uses experienced eyes to catch the problems that violate well-established usability principles, quickly and cheaply. Usability testing puts real people in front of real tasks and shows you the confusions no expert would predict. We use both, because the audit finds the known issues fast and the testing finds the surprising ones, and together they give a far truer picture of where your product loses peo
11ple than either does alone."},{heading:"A prioritized UX audit list, not a pile of problems",body:"A report that lists forty issues without ranking them is just anxiety. We score findings by how much they hurt and how much they cost to fix, so you get a short list of high-impact, low-effort wins to ship now and a clear-eyed view of the bigger investments. Every recommendation is tied to what we observed, which also makes it far easier to get a sceptical stakeholder to agree."}],faqs:[{question:"How many users do you test with?",answer:"Often five to eight per audience, which reliably surfaces the majority of serious usability issues. We scale up when you have distinct user groups worth testing separately."},{question:"Do we get fixes or just findings?",answer:"You get prioritised findings with clear recommendations. We can also implement the fixes, in design and code, if you would like the same team to close the loop."},{question:"Can you audit a product that is still in beta?",answer:"Yes. Auditing before a wide launch is often the highest-value time to do it, because the fixes are cheaper and the first impression still counts."},{question:"What is a UX audit?",answer:"A UX audit is a structured review of a product's usability. We evaluate the key flows against established usability principles, find where and why users stall, and return a prioritised list of issues with recommendations, ranked by impact and effort so you know what to fix first."},{question:"What is the difference between a heuristic evaluation and usability testing?",answer:"A heuristic evaluation uses experienced reviewers to catch problems that break known usability principles, quickly and cheaply. Usability testing puts real users in front of real tasks and reveals the confusions no expert would predict. We use both, because each catches what the other misses."},{question:"How much does a UX audit cost?",answer:"It depends on how many flows we review and how many users we test with. A focused heuristic audit is the lighter option; adding usability sessions costs more but finds more. We scope it to your product and budget and agree the price before we start."}]}],"product-design-and-consultation":[{slug:"product-discovery-and-strategy",title:"Product Discovery and Strategy",shortTitle:"Product discovery",tagline:"Find the right thing to build before you build it.",answer:"Algoramming runs product discovery and strategy engagements from Dhaka, Bangladesh for founders and teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We map the problem, the users, and the opportunities, test the riskiest assumptions, and hand you a focused, evidence-backed plan for what to build first and why.",metaTitle:"Product Discovery and Strategy Services | Algoramming",metaDescription:"Product discovery and strategy: user and opportunity mapping, assumption testing, and an evidence-backed plan for what to build first.",description:"We help you find the right thing to build before committing an engineering quarter to it, through structured discovery that tests your riskiest assumptions against real users.",outcomes:["A clear view of the problem worth solving first","Riskiest assumptions tested before they cost real money","A focused plan instead of a wishlist","The confidence, or the honest warning, to proceed"],deliverables:["Opportunity and user mapping","Assumption and risk register with tests run","A prioritised product direction","A costed, sequenced plan for the first build"],seoSections:[{heading:"Product discovery: the cheapest quarter is the one you do not waste",body:"The most expensive product mistake is building the wrong thing well. Discovery is the guard against that. We map who the users really are, where the genuine opportunity sits, and which of your assumptions the whole plan quietly rests on. Then we test those assumptions, with interviews, prototypes, or small experiments, before engineering commits. A few weeks of discovery routinely saves a quarter of building, and occasionally saves the whole bet."},{heading:"A plan you can act on, or a no you can trust",body:"Discovery earns its keep by producing decisions, not decks. You leave with a prioritised direction, a costed and sequenced plan for the first slice, and a clear record of what we learned and how. Sometimes the most valuable output is the evidence to not build something, delivered plainly. Either way, you move forward with far less guesswork than you started with."}],faqs:[{question:"How long does discovery take?",answer:"Usually four to six weeks, depending on how much is unknown and how many users we need to reach. We keep it tight so it informs the build rather than delaying it."},{question:"What if discovery says do not build it?",answer:"Then it has done its job. Killing a bad bet early is one of the most valuable outcomes an engagement can give you, and we will say so plainly when the evidence points that way."},{question:"Do you hand off to a build after discovery?",answer:"We can build it ourselves or hand a clear plan to your team. Discovery is designed to feed straight into delivery either way."},{question:"What is product discovery?",answer:"Product discovery is the work of finding the right thing to build before building it. We map the users, the problem, and the opportunities, then test the riskiest assumptions with interviews, prototypes, or small experiments, so the plan rests on evidence rather than a hunch."},{question:"What is the difference between product discovery and product strategy?",answer:"Discovery is the research: who the users are, what they need, and which assumptions are risky. Strategy is the decision that follows: what to build, in what order, and why. Discovery produces the evidence; strategy turns it into a direction. We do both in one engagement."},{question:"Is product discovery worth it for an early-stage startup?",answer:"Often it is the most valuable thing you can do, because an early startup has the least runway to waste on the wrong build. A few weeks of discovery routinely saves a quarter of engineering, and sometimes saves the whole bet by killing a bad idea early."}]},{slug:"mvp-definition-and-roadmapping",title:"MVP Definition and Roadmapping",shortTitle:"MVP and roadmap",tagline:"The smallest valuable slice, and the path after it.",answer:"Algoramming defines the minimum viable product (MVP) and product roadmaps from Dhaka, Bangladesh for founders and team
11s across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We cut the idea to the smallest slice that delivers real value, sequence what follows by evidence, and give you a roadmap that ties each release to a measurable outcome.",metaTitle:"MVP Definition and Product Roadmapping | Algoramming",metaDescription:"MVP definition and roadmapping: scope the smallest valuable release, sequence what follows by evidence, and tie every milestone to a measurable outcome.",description:"We define the smallest version of your product that delivers real value, and the roadmap after it, so you ship something worth using early and grow it on evidence rather than opinion.",outcomes:["A genuinely minimal first release that still delivers value","Scope that fits your runway and deadline","A roadmap sequenced by evidence, not by loudest voice","Every milestone tied to an outcome you can measure"],deliverables:["A defined MVP scope with explicit cuts","A sequenced, themed roadmap","Success metrics per milestone","A backlog ready for delivery"],seoSections:[{heading:"MVP definition: minimal is a discipline, not a slogan",body:"Most MVPs are not minimal; they are a full plan with a hopeful label. Real MVP work is the discipline of cutting, deciding what to leave out so the first release is small enough to ship soon and complete enough to be worth using. We use structured splitting to find that slice, and we make the cuts explicit, so everyone agrees on what is deliberately not in v1 rather than discovering it during the build."},{heading:"A roadmap that survives contact with reality",body:"A roadmap is not a promise of dates; it is a sequence of bets, ordered so each release teaches you something that informs the next. We theme it around outcomes rather than feature lists, attach a metric to each milestone, and keep it re-rankable, because priorities will shift. That way the plan guides the work without pretending the future is more certain than it is."}],faqs:[{question:"How do you decide what is in the MVP?",answer:"By tying every candidate feature to the core value and the riskiest assumptions, then cutting anything that is not needed to deliver or test those. The cuts are made explicit and agreed."},{question:"Is the roadmap fixed once we agree it?",answer:"No, and it should not be. It is a living sequence we re-rank as you learn from each release. What stays fixed is the outcome each milestone is meant to move."},{question:"Can you build the MVP too?",answer:"Yes. Defining and building with the same senior team keeps intent intact from plan to product. We can also hand a clear backlog to your engineers."},{question:"What is a minimum viable product (MVP)?",answer:"A minimum viable product is the smallest version of a product that delivers real value to a user and lets you learn whether the idea works. It is not a rough draft; it is a deliberately narrow slice that is small enough to ship soon and complete enough to be worth using."},{question:"What is the difference between an MVP and a full product?",answer:"An MVP proves the core value with the least scope, so you learn fast and cheaply. A full product adds the depth, edge cases, and polish that a proven idea earns. The MVP tells you what is worth investing in; the full product is where that investment goes."},{question:"How do you prioritize the product roadmap?",answer:"We tie each candidate to an outcome and to the assumptions it tests, then sequence so every release teaches something that informs the next. The roadmap is themed around outcomes rather than a feature list, and stays re-rankable, because priorities shift as you learn."}]},{slug:"prototype-sprints",title:"Prototype Sprints",shortTitle:"Prototype sprints",tagline:"Two to three weeks from risky idea to tested prototype.",answer:"Algoramming runs design sprints, also called prototype sprints, from Dhaka, Bangladesh for founders and product teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. In two to three weeks we turn the riskiest idea into a clickable prototype, test it with real users, and give you evidence to decide before engineering commits.",metaTitle:"Design Sprint and Prototype Services | Algoramming",metaDescription:"Design sprints in two to three weeks: turn the riskiest idea into a tested, clickable prototype with real user evidence to guide the go or no-go call.",description:"In a focused two-to-three week sprint, we turn the riskiest part of an idea into a clickable prototype, test it with real users, and hand you evidence to decide with.",outcomes:["A clickable prototype of the riskiest idea in weeks","Real user reactions before engineering commits","A clear go, no-go, or pivot backed by evidence","Momentum and alignment across the team"],deliverables:["A focused prototype of the core or risky flow","Usability sessions with target users","A findings summary with a clear recommendation","Next-step options costed at a high level"],seoSections:[{heading:"A design sprint compresses the argument into a few weeks",body:"A prototype sprint takes the debate that would otherwise drag through months of building and settles it in a couple of weeks. We pick the single riskiest question, design a prototype that answers it, and put that prototype in front of the people who w
11ould actually use it. The output is not a polished product; it is a decision you can trust, reached before the expensive commitment rather than after it."},{heading:"Small, sharp, and honest about the result",body:"The value of a sprint depends on being willing to hear the answer. We design the test so the prototype can genuinely fail, and we report what users did, not what we hoped they would do. Sometimes that greenlights the idea with confidence; sometimes it redirects it; occasionally it saves you from a costly mistake. In every case you come out knowing more, for very little spend."}],faqs:[{question:"How is this different from full discovery?",answer:"A sprint is narrower and faster. Discovery maps the whole problem space; a prototype sprint answers one sharp question with a tested artefact. They complement each other and often run in sequence."},{question:"What do we need to bring?",answer:"A clear question worth answering and access to a few target users. We handle the design, the prototype, and running the sessions."},{question:"Can a sprint feed straight into a build?",answer:"Yes. A validated prototype is the ideal starting point for MVP definition and delivery, and the work carries directly into it."},{question:"What is a design sprint?",answer:"A design sprint is a short, structured cycle that turns the riskiest question about an idea into a clickable prototype and tests it with real users. Instead of arguing in meetings or building for months, you reach a decision backed by evidence in a couple of weeks."},{question:"How is a prototype sprint different from a Google design sprint?",answer:"Google's five-day sprint is one well-known format. Our sprint follows the same idea, prototype the risky part and test it, but we run it over two to three weeks and shape it around your question rather than a fixed daily script, which usually produces a more faithful prototype."},{question:"How much does a design sprint cost?",answer:"A sprint is a fixed, small engagement, far cheaper than building the wrong thing for a quarter. The exact figure depends on the prototype's depth and how many users we test with. We agree the scope and price up front, so there is no open-ended bill."}]}],"tech-partnership-and-consultation":[{slug:"fractional-cto",title:"Fractional CTO Services",shortTitle:"Fractional CTO",tagline:"Senior technology leadership, without a full-time hire.",answer:"Fractional CTO services from Algoramming, based in Dhaka, Bangladesh, give founders and teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia a senior technology leader who steers architecture, hiring, and roadmap part-time, so you get the judgement of a CTO without the cost of a full-time executive hire.",metaTitle:"Fractional CTO Services for Startups | Algoramming",metaDescription:"Fractional CTO services: part-time senior technology leadership for architecture, hiring, vendors, and roadmap, without a full-time executive hire.",description:"We give you a senior technology leader on a part-time basis, to steer architecture, hiring, and the roadmap, so you get CTO-level judgement without the CTO-level payroll.",outcomes:["Senior technical judgement in the room for the big decisions","A defensible architecture and technology direction","Better hiring and vendor decisions","A second opinion you can pick up the phone to"],deliverables:["Regular strategy and architecture guidance","Hiring support: role definition, screening, and interviews","Vendor and build-versus-buy assessments","A living technology roadmap"],seoSections:[{heading:"The decisions that are expensive to get wrong",body:"Early technology decisions compound. The architecture you choose, the first senior engineers you hire, the platforms you commit to, each one quietly shapes what is easy and what is painful for years. A fractional CTO puts experienced judgement in the room for exactly those decisions, at a fraction of a full-time cost. You get someone who has seen these choices play out, so you avoid the traps that are obvious only in hindsight."},{heading:"Leadership that leaves you stronger",body:"A good fractional CTO is not a dependency; it is a multiplier. We help you define roles and hire the people who will eventually own the function, set the standards and rituals that make a team effective, and document the direction so it does not live only in conversations. The goal is a team and a plan that stand on their own, with us as a steady advisor rather than a permanent crutch."}],faqs:[{question:"Will you help us hire our own engineers?",answer:"Yes. Defining roles, screening, and running technical interviews is core to the work, because building the team is often the most valuable thing we can do."},{question:"Can you also help us build while advising?",answer:"We can. The studio can deliver alongside the advisory role, which is useful when you need momentum before the in-house team is in place."},{question:"When should a startup hire a fractional CTO?",answer:"When technology decisions are getting expensive to get wrong but you cannot yet justify a full-time CTO: choosing an architecture, making the first senior hires, weighing build versus buy, or reassuring investors. A fractional CTO puts experienced judgement in the room for exactly those moments."},{question:"What is the difference between a fractional CTO and an interim CTO?",answer:"A fractional CTO works part-time on an ongoing basis, a day or two a week, as a steady advisor. An interim CTO is full-time but temporary, filling the seat until you hire a permanent one. We most often work fractionally, and scale up when a gap needs covering."},{question:"How much does a fractional CTO cost per month?",answer:"It depends on the time commitment, from a day or two a week down to a lighter advisory cadence. We size it to the decisions in front of you and agree a monthly figure up front, so it stays a predictable cost rather than an open-ended one."},{question:"Can a fractional CTO work with a US or Gulf-based team remotely?",answer:"Yes. We work remotely with teams across the US, the UK, and the Gulf, overlapping hours for the meetings that matter and staying reachable between them. Remote is how most of our fractional engagements already run."}]},{slug:"architecture-and-due-diligence",title:"Architecture and Technical Due Diligence",shortTitle:"Architecture and due diligence",tagline:"An honest read on a system, before you bet on it.",answer:"Algoramming performs technical due diligence and architecture review from Dhaka, Bangladesh for founders, teams, and investors across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We assess a system's architecture, code quality, scalability, and risk, and deliver a clear, evidence-based report you can act on or hand to an investor.",metaTitle:"Technical Due Diligence and Architecture Audit | Algoramming",metaDescription:"Technical due diligence and architecture review: evidence-based assessment of code quality, scalability, security, and risk to share with investors.",description:"We give you an honest, evidence-based read on a system's architecture and code, whether you are about to scale it, inherit it, or invest in it, with risks named plainly.",outcomes:["A clear picture of architecture, quality, and risk","Scaling and security concerns surfaced before they bite","A prioritised remediation plan, if one is needed","A report you can hand to a board or an investor"],deliverables:["Architecture and code-quality assessment","Scalability, security, and reliability findings","Risk register with severity and effort","A prioritised remediation roadmap"],seoSections:[{heading:"Technical due diligence that stands up to an investor's scrutiny",body:"It is easy to form an opinion about a codebase in an afternoon and be wrong. We assess systematically: architecture and boundaries, code quality and test coverage, how it behaves under load, where the security and single-point-of-failure risks sit, and how maintainable it will be as the team changes. The output is grounded in what we actually found, with examples, so the conclusions hold up whether they are good news or bad."},{heading:"Written for the decision you are making",body:"A due-diligence report is only useful if it maps to a decision. We tailor it to yours, whether you are deciding to scale, to acquire, to invest, or to take over a system someone else built. Risks are ranked by severity and by the effort to fix, so you can tell the difference between a dealbreaker and a Tuesday afternoon, and the remediation plan tells you what to do first if you proceed."}],faqs:[{question:"How long does a review take?",answer:"Typically one to three weeks depending on the size of the system and the depth you need. Investor timelines can be accommodated when they are tight."},{question:"Do you need full access to the code?",answer:"Read access to the code and a few conversations with the team give the most accurate result. We can work with less, and we will be clear about what that limits."},{question:"Will you help fix what you find?",answer:"If you want. The report stands on its own, and we can also carry out the remediation, either leading it or supporting your team."},{question:"What does a technical due diligence report include?",answer:"An assessment of architecture and code quality, how the system behaves under load, security and single-point-of-failure risks, and how maintainable it is. Findings are backed by examples and ranked by severity and effort, with a prioritised remediation plan so a board or investor can act on it."},{question:"How long does technical due diligence take before a deal?",answer:"Typically one to three weeks, depending on the size of the system and the depth you need. When a deal timeline is tight, we can accelerate a focused review that concentrates on the risks most likely to affect the decision."},{question:"What is the difference between an architecture review and due diligence?",answer:"An architecture review looks inward, at how a system is built and how to improve it for your own team. Due diligence looks outward, judging the system and its risks for a decision such as investing, acquiring, or scaling. The analysis overlaps; the audience and the framing differ."}]},{slug:"team-augmentation",title:"Team Augmentation and Embedded Engineering",shortTitle:"Team augmentation",tagline:"Senior engineers who slot into your team, not around it.",answer:"Algoramming provides staff augmentation and embedded engineering from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. Our senior engineers join your Slack, your repositories, and your sprint board as part of your team for the engagement, adding horsepower without the layered hand-offs of a traditional outsourced arrangement.",metaTitle:"IT Staff Augmentation and Embedded Devs | Algoramming",metaDescription:"Senior IT staff augmentation from Dhaka: embedded engineers who join your Slack, repos, and sprint board, for teams in the US, UK, and Gulf.",description:"We embed senior engineers directly in your team, in your Slack, your repos, and 
11your standups, so you get added capacity that works like your own people rather than a separate vendor channel.",outcomes:["Senior capacity that ramps up quickly","Engineers who work as part of your team, not a side channel","Your process and standards, respected and followed","Flexibility to scale the engagement up or down"],deliverables:["Senior engineers embedded in your workflow","Participation in your standups, reviews, and planning","Work delivered in your repositories and your process","A clear ramp-up and, when the time comes, hand-back plan"],seoSections:[{heading:"IT staff augmentation, embedded not outsourced",body:"The usual outsourcing problem is distance: a separate team, a separate process, and a translator in between. Embedded engineering removes that. Our engineers join your Slack, your repositories, and your sprint board, follow your standards, and are treated as part of the team for the duration. You get extra senior capacity that behaves like your own people, which is a very different thing from throwing a ticket over a wall and waiting."},{heading:"Senior only, and honest about fit",body:"We staff augmentation with senior engineers, because the value of extra hands evaporates if they need constant supervision. They ramp quickly, contribute in reviews, and raise the bar rather than lowering it. We are also honest about when augmentation is the wrong tool: if what you need is a whole outcome owned end-to-end, a project engagement often serves you better, and we will say so."}],faqs:[{question:"How is this different from a project engagement?",answer:"In augmentation, your team leads and we add capacity within your process. In a project, we own an outcome end-to-end. We help you pick the model that actually fits the need."},{question:"What is the difference between staff augmentation and outsourcing?",answer:"In outsourcing, a separate team owns the work behind its own process, with a translator in between. In staff augmentation, our engineers join your team, your Slack, repos, and standups, and follow your standards. You keep control and visibility instead of throwing work over a wall."},{question:"How quickly can augmented engineers start contributing?",answer:"Because they are senior and used to joining live codebases, useful contribution usually comes within the first week, once access and context are in place."},{question:"Staff augmentation or a dedicated team, which fits us?",answer:"Staff augmentation fits when your team leads and simply needs more senior capacity within your process. A dedicated team fits when you want a whole outcome owned end-to-end. We help you pick honestly, and say so when a project engagement would serve you better."},{question:"Can we scale the team up or down?",answer:"Yes. The arrangement is designed to flex with your needs, with reasonable notice so both sides can plan."}]}],"maintenance-and-customer-support":[{slug:"application-maintenance-and-slas",title:"Application Maintenance and SLAs",shortTitle:"Maintenance and SLAs",tagline:"Keep the product current, secure, and quietly reliable.",answer:"Algoramming provides application maintenance under clear SLAs from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We keep live software patched, updated, and healthy, respond to critical issues within one working day, and give you predictable upkeep so a product you depend on keeps working without drama.",metaTitle:"Application Maintenance and Support SLAs | Algoramming",metaDescription:"Application maintenance under clear SLAs: dependency updates, security patches, bug fixes within agreed response times, and predictable upkeep.",description:"We keep your live software current and reliable under a clear SLA, patches, updates, and fixes within agreed response times, so the product you depend on stays quietly dependable.",outcomes:["Dependencies and security patches kept current","Issues fixed within response times you can plan around","Predictable maintenance cost instead of surprise fire drills","A product that ages gracefully rather than rotting"],deliverables:["A maintenance SLA with defined response times","Scheduled dependency and security updates","Bug tri
11age, fixes, and a shared status view","A regular health and activity report"],seoSections:[{heading:"Software rots when no one tends it",body:"A product that is not maintained does not stay still; it slowly degrades. Dependencies fall out of support, security holes open, and small annoyances accumulate into a reputation problem. Maintenance is the tending that prevents that: dependencies updated on a schedule, security patches applied promptly, and small fixes handled before they pile up. Done steadily, it keeps a product healthy for years for a fraction of what a rescue project costs later."},{heading:"An SLA you can actually plan around",body:"The point of a service-level agreement is predictability. You know how quickly different classes of issue will be picked up, what is covered, and what a month of upkeep costs, so maintenance becomes a line you can budget rather than an unpredictable scramble. We keep a shared view of what is open and what we have done, so there is never a mystery about the state of the system you rely on."}],faqs:[{question:"Can you maintain software you did not build?",answer:"Yes. We start with a short onboarding to understand the codebase and set up monitoring, then take on maintenance with response times agreed up front."},{question:"What response times does your maintenance SLA guarantee by severity?",answer:"Response times are tiered by severity. A critical issue affecting availability or security gets a response within one working day, often faster, while lower-severity items are picked up on an agreed schedule. We tune the exact tiers to what your product needs and write them into the SLA."},{question:"Do you offer 24/7 support or business-hours only?",answer:"Both are possible. Many products are well served by business-hours coverage with fast response on critical issues; products where downtime is costly can move to extended or around-the-clock on-call. We scope the coverage to how critical your uptime actually is."},{question:"Is application maintenance a fixed monthly cost?",answer:"Usually yes, a predictable retainer covering the agreed scope, so upkeep is a known number rather than a surprise. Work beyond that scope is quoted separately before we start it, so there are no unexpected charges."}]},{slug:"monitoring-and-incident-response",title:"Monitoring and Incident Response",shortTitle:"Monitoring and incidents",tagline:"See problems before your users do, and fix them fast.",answer:"Algoramming provides managed monitoring and incident response from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We instrument your systems, alert on the signals that matter, and respond when things break, so problems are caught early, resolved quickly, and turned into fixes that stop them recurring.",metaTitle:"Monitoring and Incident Response Services | Algoramming",metaDescription:"Managed monitoring and incident response from Dhaka: meaningful alerting, on-call coverage, and post-incident fixes that stop the same failure twice.",description:"We instrument your systems, alert on what actually matters, and respond when things break, so issues surface before your customers notice and get resolved before they spread.",outcomes:["Problems caught before customers report them","Alerts that mean something, instead of noise people ignore","Faster resolution when incidents do happen","Fixes that stop the same failure recurring"],deliverables:["Monitoring, dashboards, and meaningful alerting","An on-call and escalation setup","An incident response runbook","Post-incident reviews with follow-up fixes"],seoSections:[{heading:"Managed monitoring: alert on signal, not on everything",body:"Monitoring fails in two directions: too little, and you learn about outages from angry customers; too much, and the team stops trusting the alerts. We instrument the signals that actually predict user pain, error rates, latency, saturation, and failed jobs, and tune alerting so a page means 
11something. The dashboards answer the first question of any incident, what changed, quickly, so responders are not starting from a blank screen."},{heading:"Incidents that end in fixes, not just relief",body:"Getting a system back up is only half the job. The other half is making sure the same thing does not happen next week. We work to a clear response runbook so incidents are handled calmly, then run a blameless review afterward that turns the lesson into concrete follow-up work. Over time that discipline steadily reduces both how often things break and how long they stay broken."}],faqs:[{question:"Can you provide outsourced on-call coverage for our team?",answer:"Yes. We can run outsourced on-call and escalation, or support your own rotation so your engineers are not paged at 3am. The coverage, hours, and escalation path are all scoped to how critical your uptime is."},{question:"How do you reduce mean time to resolution (MTTR)?",answer:"Meaningful alerts get the right person looking fast, dashboards answer what changed so responders do not start from a blank screen, and a clear runbook keeps the response calm. Blameless post-incident reviews then remove recurring causes, so MTTR falls over time."},{question:"Which tools do you use?",answer:"We work with established monitoring and alerting tools rather than lock you into anything exotic, and we set them up in your accounts so the visibility stays yours."},{question:"Do you set monitoring up in our own accounts?",answer:"Yes. Everything is set up in your cloud and monitoring accounts, in your name, so the dashboards, alert history, and data stay with you and you are never renting your own observability back from us."},{question:"Can you add monitoring to an existing system?",answer:"Yes, and it is one of the highest-value first steps for a live product. We instrument what exists and tune alerting before extending coverage."}]},{slug:"performance-and-security-hardening",title:"Performance and Security Hardening",shortTitle:"Performance and security",tagline:"Make a live product faster and harder to break.",answer:"Algoramming hardens live applications for performance and security from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We profile and speed up the parts that hurt, close the security gaps that matter with OWASP-aligned fixes, and leave you with a product measurably faster and harder to attack.",metaTitle:"Performance and Security Hardening Services | Algoramming",metaDescription:"Performance and security hardening from Dhaka: profiling, optimisation, and OWASP-aligned fixes that make a live product faster and harder to break.",description:"We make a live product measurably faster and meaningfully more secure, by profiling where time and risk actually go and fixing the parts that matter, rather than guessing.",outcomes:["Faster pages and responses, proven with before-and-after numbers","The most exploitable security gaps closed","Lower infrastructure cost from removing waste","A clear report of what changed and why it mattered"],deliverables:["Performance profiling and prioritised optimisation","An OWASP-aligned security review and fixes","Hardened configuration and dependency updates","A before-and-after report with measurements"],seoSections:[{heading:"Measure first, then fix the parts that hurt",body:"Performance work goes wrong when it is guesswork. We profile the real system under real load, find where time and money actually go, the slow query, the oversized payload, the redundant call, and fix those in priority order. Because every change is measured, you see the improvement rather than take it on faith, and you avoid the trap of optimising code that was never the bottleneck."},{heading:"OWASP-aligned security, ranked by exploitability not checklist",body:"A security review that treats every item as equal buries the dangerous issues under trivial ones. We assess against established practice, then rank by how exploitable a gap really is and how much damage it would do. The authentication flaw, the injection risk, the leaking secret, those get fixed first. You end up meaningfully harder to attack, with a clear record of what was closed and what to watch."}],faqs:[{question:"How much faster can you realistically make it?",answer:"It depends on the starting point, but products that were never tuned often see large, obvious gains. We measure before and after so the improvement is a number, not a claim."},{question:"Do you follow the OWASP Top 10 for security hardening?",answer:"Yes. The OWASP Top 10 is our baseline for the review, covering risks like injection, broken authentication, and misconfiguration. We do not stop at a checklist, though: we rank findings by how exploitable they really are and how much damage they would do, and fix the dangerous ones first."},{question:"Is hardening a one-off pass or an ongoing service?",answer:"Either. A focused hardening pass delivers a lot of value on its own, and it pairs naturally with ongoing maintenance and monitoring to keep the gains as the product and its dependencies change."},{question:"Will hardening risk breaking the live product?",answer:"We work behind tests and staged changes, with the ability to roll back, so improvements land safely rather than trading speed for stability."}]}],"ai-and-automation":[{slug:"ai-ml-integration",title:"AI and ML Integration",shortTitle:"AI integration",tagline:"Put AI inside the product, where it earns its keep.",answer:"Algoramming provides AI and ML integration services from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We build features on top of large language models and, where it fits, custom models, with the retrieval, guardrails, and evaluation that make AI dependable in production rather than 
11impressive only in a demo.",metaTitle:"AI and ML Integration Services | Algoramming",metaDescription:"AI and ML integration: LLM features with retrieval, guardrails, and evaluation, built into your product so the AI is dependable in production.",description:"We build AI features into your product, on top of the right models, with the retrieval, guardrails, and evaluation that separate something dependable from a clever demo.",outcomes:["AI features that solve a real user problem, not a novelty","Answers grounded in your data, with fewer confident mistakes","Guardrails and evaluation so quality is measured, not hoped","Cost and latency kept within limits the product can afford"],deliverables:["AI feature built into your product","Retrieval over your own data where relevant","Guardrails, prompt design, and safety handling","An evaluation harness to measure and track quality"],seoSections:[{heading:"AI and ML integration where the demo is the easy part",body:"Almost anything looks impressive in a first demo with a capable model. Production is where AI features earn or lose trust. The hard, valuable work is grounding answers in your own data through retrieval, designing prompts and guardrails so the system fails safely, and controlling cost and latency so the feature is affordable at scale. We build for that reality, so the AI holds up on the messy, real inputs your users will actually throw at it."},{heading:"If you cannot measure it, you cannot ship it responsibly",body:"AI features are probabilistic, which means quality is a distribution, not a yes or no. We build an evaluation harness for the behaviour that matters, so you can see how often the system is right, where it goes wrong, and whether a prompt or model change actually helped. That turns AI from a black box you hope is working into a feature you can improve deliberately and defend to stakeholders."}],faqs:[{question:"Can you integrate an LLM into our existing software?",answer:"Yes. That is the common case: we add LLM-powered features into a product you already have, connect them to your data through retrieval, and keep the integration flexible so you can change model or provider later without a rewrite."},{question:"RAG or a fine-tuned model, which do we actually need?",answer:"Usually retrieval-augmented generation, because it grounds a strong existing model in your own data without the cost of training. Fine-tuning makes sense for a fixed style or a narrow task with good examples. Often the right answer is RAG first, fine-tuning only if it is still needed."},{question:"How do you keep the AI from making things up?",answer:"We ground answers in your data through retrieval, constrain the model with guardrails, and measure accuracy with evaluations. That reduces confident errors sharply, and we are honest that it does not remove them entirely."},{question:"How do you evaluate and track AI output quality over time?",answer:"We build an evaluation harness for the behaviour that matters, so you can see how often the system is right, where it fails, and whether a prompt or model change actually helped. Running it continuously catches quality drift before your users do."},{question:"Which AI providers do you build on?",answer:"We choose the model that fits your quality, cost, privacy, and latency needs, and keep the integration flexible so switching providers later is a contained change."}]},{slug:"workflow-automation",title:"Workflow Automation",shortTitle:"Workflow automation",tagline:"Automate the repetitive work that eats your team's week.",answer:"Algoramming builds workflow automation from Dhaka, Bangladesh for operations and business teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We automate the repetitive, rule-based work that drains your team, connecting systems and adding AI where it helps, with the logging and error handling that make an automation trustworthy enough to leave running.",metaTitle:"Workflow Automation Services & Agency | Algoramming",metaDescription:"Workflow automation that removes repetitive work: connected systems, rule-based and AI-assisted steps, with logging and error handling to run unattended.",description:"We automate the repetitive, rule-based work that quietly eats your team's week, connecting the systems involved and adding AI where it genuinely helps, with the safeguards to run it unattended.",outcomes:["Hours of manual, repetitive work removed every week","Fewer human errors in routine, rule-based steps","Systems that pass data automatically instead of by copy-
11paste","Automations you can trust to run without babysitting"],deliverables:["Automated workflows across your existing tools","Rule-based and, where useful, AI-assisted steps","Logging, error handling, and human-in-the-loop checks","A dashboard to monitor and control the automations"],seoSections:[{heading:"Workflow automation for the work, not the judgement",body:"The best automation targets are the tasks that are repetitive, rule-based, and dull: moving data between systems, generating routine documents, chasing standard follow-ups. We map where your team spends time on exactly that kind of work and automate it, keeping a human in the loop for the steps that need judgement. The aim is not to replace people; it is to stop wasting them on work software should have been doing all along."},{heading:"Trustworthy enough to leave running",body:"An automation you cannot trust is worse than none, because it fails quietly and someone has to check it anyway. We build in logging, sensible error handling, and alerts, so when something does go wrong you know immediately and can see exactly what happened. Where AI is part of a step, it sits behind checks appropriate to the risk. The result is automation you can actually leave alone, which is the only kind that saves real time."}],faqs:[{question:"No-code tools or custom code, which is right for us?",answer:"Whichever fits. Off-the-shelf automation platforms are great for standard connections and quick to stand up; custom code earns its place when the logic is complex, the volume is high, or a per-task fee would add up. We often combine the two."},{question:"How much time does workflow automation typically save?",answer:"It depends on how repetitive and how frequent the work is, but automating a daily manual process often returns hours a week per person, plus the errors it prevents. We measure the current effort during scoping, so the saving is estimated from your real numbers, not a claim."},{question:"Where does AI fit into an automated workflow?",answer:"In the steps that need understanding rather than rules, reading a document, classifying a request, drafting a reply, always behind checks matched to how costly a mistake would be."},{question:"How do we know an automation is working?",answer:"Every workflow is logged and monitored, with a dashboard showing what ran, what succeeded, and what needs attention, so it is visible rather than a black box."}]},{slug:"chatbots-and-ai-agents",title:"Chatbots and AI Agents",shortTitle:"Chatbots and agents",tagline:"Assistants that answer from your data and know their limits.",answer:"Algoramming builds chatbots and AI agents from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We create assistants that answer from your own content through retrieval (RAG), take safe actions through your systems, and hand off to a human when they should, so they help customers rather than embarrass the brand.",metaTitle:"RAG Chatbot & AI Agent Development | Algoramming",metaDescription:"RAG chatbots and AI agents grounded in your data: accurate answers, safe permissioned actions, and a clean handoff to a human at their limits.",description:"We build chatbots and AI agents that answer from your own data, take safe actions through your systems, and hand off to a person when they reach the edge of what they should do.",outcomes:["An assistant that answers accurately from your content","Deflection of routine questions, freeing your team","Safe, permissioned actions rather than a chat-only toy","A clean handoff to a human when it matters"],deliverables:["A chatbot or agent grounded in your knowledge base","Safe tool and system integrations for real actions","Guardrails, fallback, and human handoff","Analytics on questions, deflection, and gaps"],seoSections:[{heading:"RAG-grounded first, clever second",body:"A chatbot that improvises answers is a liability. We ground assistants in your actual content, your documentation, policies, and product data, so their answers trace back to something true. When a question falls outside what they know, they s
11ay so and hand off rather than inventing a confident guess. That restraint is exactly what makes an assistant safe to put in front of customers, and it is the part most rushed builds skip."},{heading:"From answering to acting, carefully",body:"The real value often comes when an assistant can do something, check an order, book a slot, update a record, not just talk about it. We connect agents to your systems through well-defined, permissioned tools, so their actions are constrained to what they are allowed to do and logged for accountability. Higher-risk actions sit behind confirmation or human approval. The result is genuinely useful, without handing an unpredictable model the keys."}],faqs:[{question:"How do you build a chatbot grounded in our own data?",answer:"We use retrieval-augmented generation (RAG): your documentation, policies, and product data are indexed, and the assistant retrieves the relevant passages before it answers, so its replies trace back to your real content rather than the model's general training."},{question:"How do you stop the chatbot from hallucinating?",answer:"By grounding it in your content through retrieval, constraining it with guardrails, and having it defer to a human when it is unsure rather than guess. We also monitor real conversations to find and close gaps, and are honest that this reduces confident errors sharply without removing them entirely."},{question:"Can the agent take real actions, not just answer questions?",answer:"Yes. With safe, permissioned integrations an agent can take real actions in your systems, checking an order, booking a slot, updating a record, with higher-risk steps gated behind confirmation or human approval and every action logged."},{question:"Where can we deploy it?",answer:"On your website, in your product, or inside tools like your support desk or messaging channels, wherever your users already are."}]},{slug:"predictive-analytics",title:"Predictive Analytics",shortTitle:"Predictive analytics",tagline:"Turn your data into forecasts people actually use.",answer:"Algoramming builds predictive analytics from Dhaka, Bangladesh that forecast demand, churn, and risk for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We turn your historical data into models and deliver them where decisions are made, so the prediction changes an action rather than sitting unread in a report.",metaTitle:"Predictive Analytics & Forecasting Services | Algoramming",metaDescription:"Predictive analytics that drives decisions: churn, demand, and risk forecasting from your data, delivered into the tools where people actually act.",description:"We turn your historical data into models that forecast the things you care about, demand, churn, risk, and deliver those predictions where decisions are actually made.",outcomes:["Forecasts for the outcomes that drive your decisions","Predictions delivered into the tools people already use","Honest accuracy, with the limits stated plainly","A measurable link between a prediction and a better action"],deliverables:["A predictive model for your target outcome","A data pipeline feeding it clean inputs","Predictions surfaced in your product or dashboards","Accuracy monitoring and a retraining plan"],seoSections:[{heading:"A prediction is worthless until it changes an action",body:"Plenty of predictive projects produce an accurate model that no one uses, because it never reaches the moment of decision. We start from the decision, who acts, when, and on what, and work backwards to the prediction that would improve it. Then we deliver the forecast into that workflow, the dashboard, the queue, the product screen, so it actually shapes behaviour. Accuracy matters, but only after the prediction is somewhere it can be acted on."},{heading:"Honest about what a model can and cannot say",body:"Predictive models are confident-sounding and easy to over-trust. We are clear about the uncertainty: how accurate the model is, on what data, and where it should not be relied on. We monitor accuracy as the world drifts and plan for retraining, because a model that was right last year can quietly go stale. That honesty is what keeps predictive analytics a useful tool rather than a source of expensive false confidence."}],faqs:[{question:"How much historical data do we need for accurate predictions?",answer:"Enough history that the pattern you want to predict actually appears in it, which usually means the outcome has occurred often enough across a meaningful span of time. We assess your data early and tell you honestly whether it can support the prediction you want before any modelling begins."},{question:"Can you predict customer churn and demand from our data?",answer:"Yes. Churn and demand are two of the most common and valuable forecasts, provided your history captures the behaviour and the signals around it. We also model risk and other outcomes, and deliver each prediction into the workflow where someone can act on it."},{question:"Do the predictions go into our existing tools?",answer:"Yes. Delivery into the tools and workflows your team already uses is the point, because a prediction people never see cannot change a decision."},{question:"How do you keep the model accurate as our data changes?",answer:"We monitor accuracy as the world drifts and plan for retraining on fresh data, so the model keeps pace instead of silently going stale. You get a clear view of how well it is performing rather than blind trust in a number."}]}
11],"cloud-devops-and-data":[{slug:"cloud-infrastructure-and-hosting",title:"Cloud Infrastructure and Hosting",shortTitle:"Cloud infrastructure",tagline:"Infrastructure that scales quietly and stays in your name.",answer:"Algoramming designs and runs cloud infrastructure from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We build hosting on AWS, GCP, or Cloudflare as infrastructure-as-code, so your systems scale with demand, cost stays under control, and every account and configuration lives in your name from day one.",metaTitle:"Cloud Infrastructure & Hosting Services | Algoramming",metaDescription:"Cloud infrastructure and hosting on AWS, GCP, or Cloudflare: infrastructure-as-code that scales with demand, controls cost, and stays in your accounts.",description:"We design and run cloud infrastructure as code, so your systems scale with demand, cost stays predictable, and everything lives in your own accounts rather than ours.",outcomes:["Infrastructure that scales with demand, up and down","Cloud cost kept visible and under control","Reproducible environments defined as code","Accounts and configuration that stay in your name"],deliverables:["Cloud architecture on AWS, GCP, or Cloudflare","Infrastructure-as-code with Terraform","Environments for development, staging, and production","Cost monitoring, backups, and access controls"],seoSections:[{heading:"Infrastructure as code, because clicking does not scale",body:"Infrastructure assembled by hand in a console is impossible to reproduce, easy to break, and known only to whoever built it. We define infrastructure as code with Terraform, so every environment is reproducible, every change is reviewed like software, and the whole setup is documented by definition. That discipline is what lets infrastructure scale with the business without becoming a fragile artefact that one person is afraid to touch."},{heading:"Yours, and cost-aware",body:"Everything we build lives in your cloud accounts, in your name, so you are never renting your own infrastructure back from a vendor. We right-size resources, set up autoscaling where it pays, and put cost monitoring in place so a surprise bill is caught early rather than at month end. The goal is infrastructure that grows with demand and shrinks when it can, without quiet waste."}],faqs:[{question:"Which cloud provider should we use?",answer:"AWS, GCP, or Cloudflare, chosen to fit your team, your existing accounts, and the workload. We recommend based on your situation rather than a default."},{question:"Will everything stay in our own cloud accounts?",answer:"Yes. Every account, resource, and configuration lives in your name, defined as code you own, so you are never renting your infrastructure back from us and any future team can run and change it without us."},{question:"Can you take over and clean up infrastructure we already have?",answer:"Yes. We audit the current setup, bring it under infrastructure-as-code, and improve reliability and cost without a disruptive rebuild, so the mess someone assembled by hand becomes something reproducible and documented."},{question:"How do you keep cloud costs under control?",answer:"We right-size resources, use autoscaling so you pay for demand rather than peak, and put cost monitoring and alerts in place from day one, so a surprise bill is caught early rather than discovered at month end."}]},{slug:"devops-and-cicd",title:"DevOps and CI/CD",shortTitle:"DevOps and CI/CD",tagline:"Ship often, safely, with a pipeline you can trust.",answer:"Algoramming sets up DevOps and CI/CD pipelines from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We automate build, test, and deployment so your team ships small changes often, with the checks, environments, and one-click rollback that make frequent releases boring in the best possible way.",metaTitle:"DevOps and CI/CD Pipeline Services | Algoramming",metaDescription:"DevOps and CI/CD: automated build, test, and deploy pipelines with staged environments and one-click rollback, so your team ships often and safely.",description:"We build the CI/CD pipeline and DevOps practices that let your team ship small changes often and safely, with automated checks, clean environments, and rollback a click away.",outcomes:["Releases that are frequent, small, and low-drama","Automated checks catching problems before production","One-click rollback when something slips through","Less time lost to manual deployment and environment issues"],deliverables:["CI pipeline running type checks, tests, and builds","Automated deployment to staging and production","Preview environments per change where it fits","Rollback strategy and release documentation"],seoSections:[{heading:"CI/CD that is frequent, small, and low-drama",body:"When releases are rare, they are huge, risky, and dreaded, which makes teams release even less often, which makes each one worse. A good CI/CD pipeline breaks that cycle. Small changes flow through automated checks and out to production regularly, so each release carries little risk and problems are easy to pin down. The aim is to make shipping so routine that it stops being an event and becomes just how the team works."},{heading:"Safety nets, not just speed",body:"Shipping fast is only good if it is also safe. We put the checks that matter into the pipeline, type checks, tests, and build verification, so broken changes are caught before users see them. Staged environments and, where it fits, a preview per change let your team review real, running software. And when something does slip through, one-click rollback turns a potential incident into a shrug."}],faqs:[{question:"Which CI/CD tools do you use?",answer:"Commonly GitHub Actions, with deployment targets to match your hosting. We fit the pipeline to your stack rather than 
11imposing unfamiliar tooling."},{question:"Can you add CI/CD to an existing project?",answer:"Yes, and it is usually a fast, high-value change. We start with build and test automation, then add safe, automated deployment."},{question:"How does one-click rollback work?",answer:"Deployments are versioned, so reverting to the last known-good release is a single action rather than a scramble. That keeps a bad deploy from becoming a long outage and makes shipping far less stressful, because a mistake is quick to undo."},{question:"Can you set up DevOps for teams in the UAE or GCC?",answer:"Yes. We work remotely with teams across the UAE and the wider Gulf, and set the pipeline up in your own accounts and region so latency and data residency suit your users. Time-zone overlap is easy to arrange for the parts that need it."}]},{slug:"cloud-migration",title:"Cloud Migration",shortTitle:"Cloud migration",tagline:"Move to the cloud without moving your problems with you.",answer:"Algoramming plans and runs cloud migrations from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We move applications and data to the cloud in careful, reversible steps, so you gain scalability and resilience without inheriting surprise costs, downtime, or the same problems in a new location.",metaTitle:"Cloud Migration Services | Algoramming",metaDescription:"Cloud migration done safely: assessment, a staged and reversible plan, and cost and reliability tuning, so you gain the cloud without the surprises.",description:"We move your applications and data to the cloud in careful, reversible steps, so you gain scalability and resilience without carrying old problems, surprise bills, or downtime along with them.",outcomes:["A migration plan sequenced to minimise risk and downtime","Applications and data moved with verification, not hope","Cloud cost understood and controlled from the start","Better scalability and resilience once you land"],deliverables:["A migration assessment and staged plan","Reversible migration of applications and data","Cost model and monitoring for the new environment","Cutover, verification, and rollback procedures"],seoSections:[{heading:"Lift-and-shift is a start, not a strategy",body:"Simply copying servers into the cloud usually just relocates the old problems and adds a bill. We assess what you have first, then choose the right move for each part, sometimes a straight lift, sometimes re-platforming to use managed services that cut operational load. The migration runs in stages, each verified and reversible, so the business keeps running and you are never one failed cutover away from a crisis."},{heading:"Cost and reliability, decided on purpose",body:"The two things people regret after a rushed migration are the bill and the fragility. We model cost before we move, so the cloud economics are a decision rather than a monthly surprise, and we build in the redundancy and monitoring that make the new environment genuinely more resilient than the old one. You come out with the real benefits of the cloud, elasticity and resilience, instead of just a new place to host the same worries."}],faqs:[{question:"Will there be downtime during migration?",answer:"We plan to minimise it, moving in stages with verified cutovers and rollback ready. Many workloads migrate with little or no visible downtime."},{question:"How do you avoid a surprise cloud bill?",answer:"We model the cost before moving, right-size resources, and set up cost monitoring from day one, so spend is understood and controlled rather than discovered later."},{question:"Can you migrate between clouds, not just from on-premise?",answer:"Yes. Cloud-to-cloud moves follow the same principles: assess, stage, verify, and keep a rollback path throughout."},{question:"Lift-and-shift or re-platform, which is right for us?",answer:"It varies by workload. Lift-and-shift is fastest and lowest-risk but carries the old inefficiencies along; re-platforming onto managed services cuts operational load and often cost, for more effort up front. We assess each part and pick per workload, rather than applying one approach to everything."}]},{slug:"data-and-analytics",title:"Data Engineering and Analytics",shortTitle:"Data and analytics",tagline:"One trustworthy source of truth, and reporting people believe.",answer:"Algoramming builds data engineering and analytics from Dhaka, Bangladesh for teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We bring your scattered data into one reliable pipeline and warehouse, then build the dashboards and reporting on top, so the whole team makes decisions from numbers everyone actually trusts.",metaTitle:"Data Engineering and Analytics Services | Algoramming",metaDescription:"Data engineering and analytics: pipelines, a modelled 
11warehouse, and dashboards that turn scattered data into one trustworthy source of truth.",description:"We bring your scattered data into one reliable pipeline and warehouse, then build the dashboards on top, so decisions come from numbers the whole team trusts rather than three conflicting spreadsheets.",outcomes:["One source of truth instead of conflicting spreadsheets","Reporting the whole team actually trusts","Data pipelines that run reliably and can be traced","Faster answers to the questions leadership keeps asking"],deliverables:["Data pipelines from your sources into a warehouse","A modelled, documented warehouse layer","Dashboards and reporting for the key metrics","Data quality checks and pipeline monitoring"],seoSections:[{heading:"The problem is rarely too little data",body:"Most teams do not lack data; they lack one version of it they can trust. The numbers live in different tools, defined differently, and every meeting starts by arguing about whose spreadsheet is right. We fix that at the root: reliable pipelines pull the sources together, a modelled warehouse defines each metric once, and dashboards read from that single layer. The argument about whose number is correct simply goes away, which is worth more than any single chart."},{heading:"One source of truth instead of conflicting spreadsheets",body:"A dashboard is only as trusted as the pipeline behind it, and trust collapses the first time a number is visibly wrong. We build data quality checks into the pipelines, monitor them, and document how each metric is defined and where it comes from. When someone asks why a figure looks off, there is a traceable answer rather than a shrug. That reliability is what turns analytics from a thing people doubt into a thing they act on."}],faqs:[{question:"Which warehouse and BI tools do you use?",answer:"We choose based on your scale and team, common warehouses paired with a BI tool your people can use, and set them up in your accounts so the data stays yours."},{question:"Can you connect all our different data sources?",answer:"Typically yes. We build pipelines from your databases, SaaS tools, and files into one warehouse, with quality checks so what lands is trustworthy."},{question:"Do you build the pipeline, the warehouse, and the dashboards?",answer:"All three, if you want. The pipelines pull your sources together, the modelled warehouse defines each metric once, and the dashboards read from that single layer, so the value is visible to the people who need it and every number traces back to a definition."},{question:"How do you make sure a number in a dashboard is correct?",answer:"We build data quality checks into the pipelines, monitor them, and document how each metric is defined and where it comes from. When a figure looks off, there is a traceable answer rather than a shrug, which is what lets people trust the dashboard enough to act on it."}]}]},h=[{slug:"custom-software-development",title:"Custom Software Development",shortTitle:"Custom software",tagline:"Bespoke systems shaped around how your team actually works.",description:"Off-the-shelf tools eventually run out of room. We build custom software that mirrors your operations, automates the repetitive work, and gives your team a system they actually want to use.",answer:"Algoramming is a custom software development company in Dhaka, Bangladesh that builds web platforms, mobile apps, and internal business tools end-to-end for clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. One senior team handles discovery, engineering, and long-term support, and you own the source code from the first commit.",metaTitle:"Custom Software Development Company | Algoramming",metaDescription:"Custom software development company building bespoke platforms, internal tools, and SaaS end to end, with source code you own from day one.",forWhom:["Operations leaders trapped in spreadsheets, Zaps, and three SaaS tabs","Teams replacing brittle internal tools that outgrew their original brief","Founders past the prototype who need the v1 to last for years, not weeks"],outcomes:["A working product that fits your real workflow, not a generic template","Clean architecture, documented code, and a handover your future team can own","Automated tests, monitoring, and an incident-ready runbook from day one","Predictable delivery in t
11wo-week increments with demos and changelogs","A roadmap that connects every feature to a measurable business outcome"],deliverables:["Production source code committed to your repositories from day one","Architecture decision records, runbooks, and operational documentation","Monitoring dashboards, alerts, and an incident-ready playbook","CI/CD pipeline and infrastructure-as-code in your cloud accounts","Trained handover sessions for your future engineering team"],seoSections:[{heading:"Why teams choose custom software development",body:"Custom software development is the practical answer when off-the-shelf SaaS stops fitting how your team actually works. Generic tools force your operations to bend around their feature set, and the workarounds quietly become the real system of record. A bespoke system flips that. The software fits your workflow, your terminology, and your edge cases, and it grows on a roadmap you control. The teams that get the most out of custom software are the ones who can name the operational friction they want to remove, and the metric they want to move because of it."},{heading:"What our custom software development covers, end to end",body:"Our custom software development engagements run end-to-end. That includes discovery to map workflows and edge cases, an architecture you can defend in a board meeting, the UI work where it counts, the backend and integrations that tie everything together, deployment into your cloud, and the monitoring that catches problems before your customers do. We typically reach for TypeScript, Node.js, Python, or Go on top of PostgreSQL and Redis, deployed through Docker and Terraform on AWS or GCP. None of this is sacred. We pick the stack that fits your hiring market, your operational maturity, and your appetite for boring."},{heading:"Custom software you own: code, runbooks, and cloud accounts",body:"A custom system that only the original vendor can run is a liability. Every engagement we ship includes documented architecture decisions, a runbook that names recovery steps in plain English, automated tests against the workflows that matter, and a codebase a new engineer can read on day one. Source code lives in your repositories from the first commit. Cloud accounts stay in your name. If you decide to bring everything in house tomorrow, the handover is a calendar invite and a clean walk-through, not a renegotiation. That is the bar we hold ourselves to on every custom software development project."}],process:[{step:"Discover",detail:"We map your workflows, edge cases, and the metrics that matter before writing a line of code."},{step:"Design",detail:"We prototype the riskiest screens and integrations early so decisions are made on real interactions."},{step:"Build",detail:"We ship in two-week iterations against a clear backlog, with code review and CI from sprint one."},{step:"Launch",detail:"We deploy to your cloud with infrastructure-as-code, runbooks, and a quiet go-live plan."},{step:"Support",detail:"We watch metrics, respond to incidents, and keep shipping improvements on a steady cadence."}],stack:["VS Code","GitHub","Postman","Linear","Notion","ClickUp","Figma","Slack","Sentry","Datadog"],faqs:[{question:"Will we own the code?",answer:"Yes. You own the source, the infrastructure config, and the documentation. We push to your repos from day one, so nothing is ever locked behind us."},{question:"What about security and compliance?",answer:"Threat modelling, OWASP-aligned reviews, encryption at rest and in transit, and audit logging are baked into the template. If you need SOC 2 or ISO alignment, we map controls early."},{question:"How much does custom software development cost?",answer:"It depends on scope, the number of integrations, and how large a team the work needs. Rather than guess, we run a one-to-two week discovery that turns your requirements into a firm, itemised number you can plan a budget around."},{question:"Custom software or off-the-shelf SaaS: how do we decide?",answer:"Buy SaaS when your process is standard and a tool already fits it. Build custom when the process is your advantage, the workarounds have become the real system, or no product covers your edge cases. Discovery is where we help you make that call honestly."}
11,{question:"How long does it take to build custom software?",answer:"A focused v1 usually takes three to six months, shipping in two-week increments so you see working software early. Larger platforms run longer. Discovery sets the scope, and the timeline follows from it rather than the other way around."},{question:"Can you build custom software for a client in the UAE, Saudi Arabia, or the US from Bangladesh?",answer:"Yes. We work from Dhaka, Bangladesh with clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We overlap working hours, run demos and changelogs every two weeks, and keep the source code in your accounts throughout."}],related:["web-application-design-and-development","mobile-app-design-and-development","maintenance-and-customer-support"]},{slug:"mobile-app-design-and-development",title:"Mobile App Design and Development",shortTitle:"Mobile apps",tagline:"iOS and Android apps that feel native, and ship on schedule.",description:"Mobile is where your users meet your brand most often. We build iOS and Android apps that are fast on weak networks, accessible on every screen, and careful with the small details people actually notice.",answer:"Algoramming designs and builds iOS and Android apps from Dhaka, Bangladesh for clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. A single senior team ships native-feeling, cross-platform apps in Flutter, Swift, and Kotlin, tuned for weak networks and the app stores, and you own the source code throughout.",metaTitle:"Mobile App Development Company in Bangladesh | Algoramming",metaDescription:"iOS and Android app development company in Dhaka: Flutter, React Native, and native Swift/Kotlin apps built for weak networks and store launch.",forWhom:["Consumer brands whose customers live in their phones","B2B teams equipping field workers and operations crews with a real tool","Marketplaces and platforms that need an offline-friendly app"],outcomes:["Native-feeling apps on iOS and Android from a single, maintained codebase","Offline-first behaviour, smart caching, and graceful failure on weak networks","Push notifications, deep links, and analytics wired in from the first release","App Store and Play Store submission handled, including ASO copy and assets","A release pipeline that lets you ship updates in hours, not weeks"],deliverables:["Native iOS and Android binaries in your App Store Connect and Play Console","Reusable design system with platform-aware components","Backend APIs, authentication, and offline sync where it matters","Crash reporting, analytics, and a release pipeline you control","Store submission, listing assets, and reviewer-feedback handling"],seoSections:[{heading:"Native-feeling mobile app design and development on iOS and Android",body:"Mobile app design and development is the surface where most of your users actually meet your brand, every day. We build iOS and Android apps that feel native on the platform they land on. Smooth gestures, predictable navigation, accessibility wired in, and animations that respect the operating system rather than fighting it. Whether the right answer is Flutter, React Native, or fully native Swift and Kotlin depends on your team, your roadmap, and the hardware your app has to talk to. We start every engagement by helping you make that call honestly, then we ship a single coherent codebase, not three half-finished ones."},{heading:"iOS and Android app development engineered for weak networks and real devices",body:"A polished demo on a flagship phone proves very little. Real users open your mobile app on three-year-old devices over patchy mobile networks, on the bus, in lifts, at conferences. We engineer for that reality from day one. Offline-first behaviour where it matters, smart caching, graceful failure when an API call times out, and crash reporting that tells you what broke and where. Performance budgets live in CI, not in someone's head. Battery use, install size, and cold-start time get the same review treatment as features. The app that ships is the one your users will actually keep on the second screen of their home page."}
11,{heading:"App store launch and post-launch care for your mobile app",body:"Half of a mobile app development engagement is what happens after the binary is signed. We handle App Store and Play Store submission, including the listing copy and assets, and we respond to reviewer feedback inside the same business day. Crash reporting, analytics, and basic A/B infrastructure are wired in before the first release. After launch you get a release pipeline that lets your team ship updates in hours instead of weeks, a monthly health report with the metrics that matter, and a backlog ranked by impact. Mobile is a long game, and the way we set it up is meant to be lived in for years."}],process:[{step:"Discover",detail:"We map the jobs-to-be-done, the device matrix, and the regulatory edges before kicking off design."},{step:"Design",detail:"We prototype core flows in Figma, validate with real users, and lock interaction details before build."},{step:"Build",detail:"We ship signed builds to TestFlight and internal testing every sprint, with crash reporting on day one."},{step:"Launch",detail:"We submit, respond to review feedback, and stage rollouts to catch issues before they reach everyone."},{step:"Support",detail:"We track crash-free sessions, A/B test what matters, and ship a steady stream of small improvements."}],stack:["Figma","FigJam","Android Studio","Xcode","VS Code","TestFlight","Firebase Console","Sentry","Lottie","ClickUp"],faqs:[{question:"Can you take an existing app and rebuild it?",answer:"Yes. We start with an audit of the codebase, store metrics, and crash trends. Then we propose a path (refactor, rewrite, or hybrid) with honest trade-offs."},{question:"How do you handle App Store reviews and rejections?",answer:"We pre-validate the build against Apple's and Google's most common rejection reasons, write the submission notes carefully, and respond to reviewer feedback within the same business day."},{question:"Do you cover backend and APIs too?",answer:"We do. Most apps need an API, auth, and storage. We design the contract first so the app and the server team move in lockstep."},{question:"How much does it cost to build a mobile app?",answer:"Cost tracks the number of screens, whether you need offline sync and backend APIs, and how many platforms you launch on. A short discovery turns your feature list into a firm quote and points to the smallest version worth shipping first."},{question:"How long does it take to launch an iOS and Android app?",answer:"A focused first release usually takes three to five months, including store submission on both platforms. We ship signed test builds every sprint, so you are trying the app on a real device long before the public launch."},{question:"Can you build one app for both iOS and Android?",answer:"Yes. For most products a single cross-platform codebase in Flutter or React Native covers both stores well. We go fully native in Swift or Kotlin when the app leans hard on platform-specific hardware or performance, and we help you make that call up front."}],related:["best-ui-ux-design-services","product-design-and-consultation","maintenance-and-customer-support"]},{slug:"web-application-design-and-development",title:"Web Application Design and Development",shortTitle:"Web applications",tagline:"Full-stack web apps built on the modern Next.js stack.",description:"We build production web applications that load fast, render on the server, and scale predictably. Marketing sites, SaaS dashboards, admin tools, and customer portals, engineered for the long run.",answer:"Algoramming builds full-stack web applications on the modern Next.js and React stack from Dhaka, Bangladesh, serving clients in the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. One senior team handles design, frontend, backend, and deployment to your cloud, with documented source code you own from day one.",metaTitle:"Web App Development Company Bangladesh | Algoramming",metaDescription:"Full-stack web application development with Next.js, React, and TypeScript: SEO-ready, accessible, and built to scale in your own accounts.",forWhom:["SaaS teams shipping their first revenue-ready surface","Founders launching a v1 against a real deadline","Internal platforms that outgrew dashboards built in a hackathon"],outcomes:["Server-rendered, SEO-ready pages with Core Web Vitals in the green","A typed, end-to-e
11nd TypeScript codebase that scales with the team","Authentication, payments, and admin tooling that work out of the box","A deployment pipeline that ships to production on every merge to main","Documentation and design systems that survive turnover"],deliverables:["Full-stack Next.js application committed to your repositories","Authentication, role-based access, and tenant isolation where it applies","Design system, component library, and Storybook documentation","Performance budget, accessibility audit, and analytics wiring","Production deployment with previews, CI, and one-click rollback"],seoSections:[{heading:"Modern web application design and development on Next.js",body:"We build production web applications that load fast, render on the server, and scale predictably. Marketing sites, SaaS dashboards, internal tools, and customer portals all live happily on the same modern stack. The default is Next.js with TypeScript and React on the front end, Node.js and Postgres on the back end, talking through a typed contract so the front end and the back end stay in lockstep. We reach for Prisma when the data model gets serious, tRPC where the API has a single consumer, and the boring well-supported tools everywhere else. The result is a web application your engineers can read on day one, not a sealed box."},{heading:"Performance, accessibility, and SEO in every web application",body:"A web application that is slow, inaccessible, or invisible to search engines is a leaky bucket. We treat the three as non-negotiables. Server rendering means content lives in the HTML before JavaScript runs, so Google and other crawlers see everything, and users see meaningful pixels faster. We aim for Core Web Vitals in the green and WCAG 2.2 AA on every project, with semantic markup, keyboard support, visible focus, and contrast all reviewed before launch. JSON-LD, sitemaps, canonical URLs, and dynamic metadata ship with the template, not as a follow-up ticket. Performance budgets sit in CI so regressions cannot quietly creep back in."},{heading:"A deployment story your web application team can run forever",body:"We hand over more than a working URL. Every web application development engagement includes preview deployments on every pull request, a CI pipeline that runs type checks and tests, infrastructure-as-code if your stack calls for it, and a one-click rollback for the moments you need it. We host on Vercel, Cloudflare, or AWS depending on the surface area and your team's existing accounts. Documentation, a design system in Storybook, and a small set of architecture decision records mean the next engineer who joins your team can ship a meaningful change in their first week, not their second month."}],process:[{step:"Discover",detail:"We turn business goals into user stories and a system architecture you can defend in a board meeting."},{step:"Design",detail:"We design components, not screens. A design system is the deliverable, not a side effect."},{step:"Build",detail:"We ship every two weeks against a typed contract: frontend, backend, and tests in the same PR."},{step:"Launch",detail:"We migrate data, warm caches, and pick a quiet window. Rollback is a button, not a war room."},{step:"Support",detail:"We watch error budgets, performance, and revenue. You get a monthly review with hard numbers."}],stack:["VS Code","Figma","Storybook","GitHub","Vercel","Linear","Notion","ClickUp","Lighthouse","Cloudflare"],faqs:[{question:"Why Next.js?",answer:"Server-side rendering means content is in the HTML before JavaScript runs, so Google and other crawlers see everything, and users see meaningful pixels faster. The ecosystem is large, the upgrades are smooth, and hiring is straightforward."},{question:"Can you work with our existing backend?",answer:"Yes. We integrate with REST, GraphQL, gRPC, or whatever you already run. We can also wrap legacy APIs in a typed gateway so the frontend gets a clean contract without touching the old code."},{question:"Will the site be accessible?",answer:"We aim for WCAG 2.2 AA on every project: semantic HTML, keyboard support, visible focus, alt text, and contrast. Accessibility audits ship with the launch checklist."},{question:"What about SEO?",answer:"Server rendering, semantic markup, JSON-LD, dynamic metadata, sitemaps, robots, and canonical URLs are part of the template. We hand over a launch checklist verified against Google's rich results test."},{question:"How much does a custom web application cost?",answer:"It depends on the number of surfaces, whether you need multi-tenant accounts and payments, and the integrations involved. A short discovery turns your requirements into a firm, itemised estimate and identifies the smallest version worth launching first."},{question:"How long does it take to build a SaaS web app?",answer:"A revenue-ready v1 usually takes three to five months, shipping every two weeks so you see working software early. The exact timeline follows from the scope we agree in discovery rather than a fixed package."}],related:["custom-software-development","best-ui-ux-design-services","mobile-app-design-and-development"]},{slug:"best-ui-ux-design-services",title:"Best UI/UX Design Services",shortTitle:"UI/UX design",tagline:"Design that earns trust on first glance and rewards repeat use.",description:"We design interfaces that make the smart choice the easy choice. Research, information architecture, interaction, and visual design, joined up, opinionated, and ready to engineer.",answer:"Algoramming provides UI/UX design services from Dhaka, Bangladesh for clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We design product interfaces that earn trust on first glance, from research and wireframes through high-fidelity design systems, and hand over production-ready files engineers can build from directly.",metaTitle:"UI/UX Design Services in Bangladesh | Algoramming",metaDescription:"UI/UX design agency in Dhaka serving the Gulf, US, UK, and Australia: research, IA, interaction, design systems, and accessibility that lift retention.",forWhom:["Products that work but where conversion or retention has plateaued","Founders shaping v1 before engineering picks up tools","Established products that need a confidence-restoring redesign"],outcomes:["User research that points to the few decisions worth fighting for","A clear information architecture you can defend in a stakeholder meeting","High-fidelity prototypes you can test with real users before engineering","A reusable design system, in Figma and code, with tokens and components","Accessibility built in: keyboard, screen reader, contrast, and motion"],deliverables:["Research synthesis, personas, and a design-principles document","Information architecture, sitemap, and key user flows","High-fidelity prototypes and a usable design system in Figma","Tokens, components, and specs handed off as code-ready assets","Pairing time with engineering during build to keep fidelity high"],seoSections:[{heading:"UI/UX design services that earn trust on first glance",body:"Good UI/UX design quietly removes friction between people and the choice you want them to make. The smart choice becomes the easy one, the empty state stops feeling like a dead end, and the moments that matter to your brand carry real weight. We treat research, information architecture, interaction design, and visual design as a single craft, not four silos. The work is opinionated, ready to engineer, and built around the few decisions that actually move retention or conversion. We are not interested in award-bait screens that test badly. We design for the people who will live inside the product every day."},{heading:"From user research to a design system your engineers can ship",body:"Every UI/UX design engagement starts with evidence. Interviews, analytics audits, and the jobs your users are hiring the product to do. We anchor the rest of the work in what we find, not in opinions over coffee. The deliverables include information architecture you can defend in a stakeholder meeting, high-fidelity prototypes you can test before a single line of code is written, and a reusable design system in Figma and code, with tokens, components, and contribution rules. Engineers do not have to translate from a static screen. They pull components that match the design system one-to-one."},{heading:"Accessibility, conversion, and brand in one UI/UX design brief",body:"Accessibility is not a finishing pass. Keyboard support, screen reader semantics, contrast, focus visibility, and motion preferences are part of the design language from the first wireframe. So is conversion. We agree the metrics that matter before we touch a Figma file, then we measure task success, time-to-value, and conversion on the screens that actually carry revenue. Brand sits on top of all of it. We respect c
11onvention where it speeds users up, and we push hard on the moments that define how your product feels, things like onboarding, empty states, and success screens that quietly do the heavy lifting."}],process:[{step:"Discover",detail:"Interviews, jobs-to-be-done, analytics audits. We anchor design in evidence, not opinions."},{step:"Design",detail:"Information architecture first, then flows, then visuals. Every screen earns its place."},{step:"Build",detail:"Components are designed with tokens and states so engineers can ship without translating."},{step:"Launch",detail:"We pair with engineers during build, review the live UI, and tune what looked right in Figma but lands wrong in the browser."},{step:"Support",detail:"We run usability sessions, watch session replays, and ship iterative improvements."}],stack:["Figma","FigJam","Maze","Hotjar","Storybook","Lottie","Notion","Adobe XD","Principle","Webflow"],faqs:[{question:"What does 'design system' actually mean here?",answer:"Tokens (colour, type, spacing), components in Figma and code (Storybook), usage guidance, and contribution rules. It is a product, not a sticker sheet."},{question:"Can you redesign an existing product?",answer:"Yes. We start with an audit covering usability, accessibility, brand, and growth data, and a redesign roadmap. We rarely recommend a big-bang rebrand; phased usually beats dramatic."},{question:"How much do UI/UX design services cost?",answer:"Cost depends on how much research the work needs, the number of flows and screens, and whether you want a full design system in code. A short scoping call turns your goals into a firm quote and a clear list of deliverables."},{question:"Do you work with clients in the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia?",answer:"Yes. We work from Dhaka, Bangladesh with clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We overlap working hours for reviews and run the whole engagement remotely, from research through design handoff."},{question:"What is the difference between UI design and UX design?",answer:"UX design is the structure: research, information architecture, and flows that decide what the product does and in what order. UI design is the surface: layout, type, colour, and interaction. We treat them as one craft, because a beautiful screen over a broken flow still fails."},{question:"How long does a UI/UX design project take?",answer:"A focused design engagement usually runs four to eight weeks, depending on how much research is needed and how large the surface is. A redesign of a single flow can be quicker; a full product with a design system takes longer."}],related:["product-design-and-consultation","web-application-design-and-development","mobile-app-design-and-development"]},{slug:"product-design-and-consultation",title:"Product Design and Consultation",shortTitle:"Product consultation",tagline:"Sharpen the bet before you spend the engineering quarter.",description:"Before you build, get the strategy right. We help product teams find the right problem, frame the right bet, and design the smallest valuable slice to test it.",answer:"Algoramming offers product design and consultation, and product strategy consulting, from Dhaka, Bangladesh for founders and teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We pressure-test the idea, scope the smallest valuable build, and turn it into a costed, prioritised roadmap before you spend an engineering quarter.",metaTitle:"Product Design and Strategy Consulting | Algoramming",metaDescription:"Product strategy and design consulting: discovery, opportunity mapping, prototype sprints, and a costed roadmap, so you build the right thing first.",forWhom:["Founders sitting on a bet they cannot yet articulate","Product leaders deciding what their team should build next quarter","Stakeholders weighing build, buy, or do-nothing"],outcomes:["A crisp problem statement everyone on the team can repeat from memory","An opportunity map ranked by impact and effort, with the riskiest assumptions surfaced","A testable prototype of the smallest valuable slice, not a wishlist","A go-to-market and metrics plan that connects design to revenue or retention","A roadmap your engineering leads can actually plan a quarter around"],deliverables:["A sharpened problem statement and target user definition","A costed, prioritised feature backlog with risk ratings","A clickable prototype of the riskiest screens","A technology-choice memo 
11with explicit trade-offs","A written go/no-go recommendation"],seoSections:[{heading:"Product design and consultation before the build burns a quarter",body:"Most products fail because they ship the wrong thing well. Product design and consultation exists to stop that from happening on your watch. Before you commit an engineering quarter, you should know which problem you are actually solving, who it is genuinely for, and what evidence would tell you that the bet is paying off. We work with product leaders, founders, and operators to sharpen all three. The output is a clear bet, the smallest valuable slice that can test it, and a written go or no-go you can take to your board without rephrasing later in the week."},{heading:"Prototype sprints that test the risky product bets first",body:"We do not write fifty-slide strategy decks. We design and test the riskiest screens first, with real users, in two-to-three week prototype sprints. Opportunity solution trees, jobs-to-be-done interviews, and concept tests against working prototypes mean you find out whether the idea has legs before your engineering team builds it. When discovery says do not build this, that is one of the most valuable outcomes the engagement can give you. Killing a bad bet early saves quarters of work, and we will say it plainly when the evidence points that way."},{heading:"Product roadmaps your team can actually plan around",body:"A roadmap that nobody trusts is just a wish list. Every product design and consultation engagement ends with a roadmap that maps cleanly to your team's actual capacity, ranked by impact and risk, with assumptions named in writing. We pair a senior strategist with a senior designer on every engagement so commercial intent and craft stay in the same conversation. We work alongside your product manager, not in place of them. Our job is to leave them with a sharper thesis, a defensible backlog, and a quarter they can plan with both confidence and humility."}],process:[{step:"Discover",detail:"Stakeholder interviews, customer interviews, and a hard look at the numbers you already have."},{step:"Design",detail:"Opportunity solution trees, prototype sprints, and concept tests with real users."},{step:"Build",detail:"We pair with your team to ship the smallest experiment that proves or kills the idea."},{step:"Launch",detail:"We help you instrument, segment, and read the data without lying to yourselves."},{step:"Support",detail:"Quarterly product reviews: what to double down on, what to sunset, what to try next."}],stack:["Miro","Figma","FigJam","Mixpanel","Amplitude","Notion","Productboard","Linear","Maze","Dovetail"],faqs:[{question:"Do you replace our PM?",answer:"No. We work alongside your product team, not in place of it. Our job is to leave your PM with a clearer thesis and a roadmap they own."},{question:"How long is a typical engagement?",answer:"A focused discovery is four to six weeks. A prototype sprint is two to three. Long retainers usually run a quarter at a time, with a clear exit ramp."},{question:"What does a product design consultant actually do?",answer:"A product design consultant helps you decide what to build before anyone writes code. We sharpen the problem, map the opportunities, prototype and test the riskiest bets with real users, and hand back a costed roadmap and a clear go or no-go you can defend to your board."},{question:"Do you work with clients in the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia?",answer:"Yes. We work from Dhaka, Bangladesh with founders and teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia, running discovery and prototype sprints remotely with overlapping hours for interviews and reviews."},{question:"How do you validate a product idea before we build it?",answer:"We test the risky assumptions first, not the whole idea at once. Jobs-to-be-done interviews, opportunity solution trees, and concept tests against a working prototype tell us whether the bet has legs in two to three weeks, long before an engineering quarter is committed."},{question:"How much does a product discovery engagement cost?",answer:"It scales with how much research is needed and how many bets we test. A focused discovery or prototype sprint is a small fraction of a full build. We agree the scope and a firm number in a short scoping call before any work starts."}],related:["best-ui-ux-design-services","tech-partnership-and-consultation","custom-software-development"]},{slug:"tech-partnership-and-consultation",title:"Tech Partnership and Consultation",shortTitle:"Tech partnership",tagline:"A senior technology partner without the cost of a full-time CTO.",description:"We sit beside founders and operators as a long-term technology partner, picking the stack, hiring the team, setting the standards, and making the calls that compound.",answer:"Algoramming acts as a fractional CTO and outsourced technology partner from Dhaka, Bangladesh for companies across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. You get senior architecture, hiring, and delivery guidance, the strategic weight of a CTO without the full-time cost, on a monthly retainer you can scale up or down.",metaTitle:"Tech Partner and Fractional CTO Services | Algoramming",metaDescription:"Fractional CTO and long-term tech partnership from Dhaka: architecture, hiring, and vendor calls for growth-stage teams in the US, UK, and Gulf.",forWhom:["Non-technical founders without a full-time CTO","Leadership teams making a build, buy, or partner decision","Boards needing independent technical due diligence"],outcomes:["A defensible technology strategy mapped to your one-, three-, and five-year goals","Architecture and platform decisions documented in ADRs, no tribal knowledge","Hiring loops and scorecards that bring in engineers your team will respect","Vendor and build-vs-buy calls made on evidence, not vendor decks","An engineering culture that values predictability as much as velocity"],deliverables:["Architecture review and 90-day improvement plan with priorities","Vendor and tooling evaluation memos with explicit scoring","Hiring scorecards, interview support, and candidate calibration","Quarterly technical health report and roadmap review","On-call second opinion for the leadership team"],seoSections:[{heading:"Fractional CTO and technology partnership without a full-time hire",body:"Tech partnership and consultation is what you reach for when the business has outgrown vibes-driven engineering decisions but is not yet ready for a full-time CTO. We sit beside founders and operators as a long-term technology partner, picking the stack, calibrating the hiring loop, setting the engineering standards, and making the calls that compound over years rather than weeks. The engagement is not a one-off audit. It is an ongoing relationship that ranges from twelve to twenty-four months, with a quiet handover plan for the day you do hire a permanent technology leader."},{heading:"Architecture, hiring, and vendor decisions you can defend",body:"We start by writing down what is true. The team, the code, the cloud bills, and the roadmap all get audited and documented inside the first month. From there, we propose a 90-day plan of unglamorous, high-leverage moves nobody had time to make. Architecture decision records replace tribal knowledge. Hiring loops get scorecards, calibrated interviewers, and a structured debrief so the team grows without diluting the bar. Vendor and build-versus-buy calls get made on evidence rather than vendor decks, and the decisions are written down for the next quarter to inherit."},{heading:"A technology partner that builds, not just advises",body:"The difference between a fractional CTO listing and our tech partnership engagement is that we bring an embedded team behind the partnership. When the call is build, design, engineering, and platform support are ready to go. When the call is buy, we run the vendor selection. When the call is hire, we run the loop. Cycle time, defect rate, hiring conversion, and infrastru
11cture cost per active user sit on a dashboard we agree with you before we start. We measure ourselves against the same numbers you measure the company against."}],process:[{step:"Discover",detail:"We audit the team, the code, the cloud bills, and the roadmap, then write down what we found."},{step:"Design",detail:"We propose a 90-day plan with the unglamorous, high-leverage moves no one had time to make."},{step:"Build",detail:"We embed in standups, code reviews, and architecture decisions, pushing tempo and quality together."},{step:"Launch",detail:"We co-own the next big release with your team: process, instrumentation, and incident readiness."},{step:"Support",detail:"We stay on retainer for the calls that compound: hiring, vendor reviews, and quarterly planning."}],stack:["Linear","Notion","GitHub","ClickUp","Miro","Slack","Datadog","PagerDuty","AWS Console","GitHub Actions"],faqs:[{question:"Will you sign an exclusivity clause?",answer:"Within your competitive set, yes. We never advise two companies who would land on the same investor pitch slide."},{question:"How do you measure your own performance?",answer:"Cycle time, defect rate, hiring conversion, infrastru
11cture cost per active user, and incident frequency. We agree the dashboard before we start and review it monthly."},{question:"How much does a fractional CTO cost compared with a full-time hire?",answer:"A fractional CTO is a monthly retainer sized to the hours you actually need, so it is a fraction of a senior full-time salary plus equity and benefits. You scale it up or down as the business changes. We agree the scope and the number before we start."},{question:"Fractional CTO or technology consultant, which do we need?",answer:"A consultant hands you a report and leaves. A fractional CTO owns decisions with you over time: architecture, hiring, and vendor calls, plus an embedded team to build when the call is build. If you need someone accountable for outcomes rather than advice, you need the partner model."},{question:"Can you provide a fractional CTO for a team outside Bangladesh?",answer:"Yes. We work from Dhaka, Bangladesh with growth-stage teams across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We overlap working hours for standups, planning, and the decisions that cannot wait."},{question:"What does a fractional CTO actually own versus advise on?",answer:"We own the calls that compound: the architecture direction, the hiring loop and bar, vendor and build-versus-buy decisions, and engineering standards. We advise on day-to-day execution and leave your existing leads to run their teams. The split is written down at the start so nobody is guessing."}],related:["maintenance-and-customer-support","custom-software-development","product-design-and-consultation"]},{slug:"maintenance-and-customer-support",title:"Maintenance and Customer Support",shortTitle:"Maintenance & support",tagline:"Quiet uptime, fast fixes, and a team that picks up the phone.",description:"Most products live or die in the years after launch. We keep yours healthy, patching, monitoring, supporting your users, and shipping the small improvements that compound into loyalty.",answer:"Algoramming provides software maintenance and application maintenance from Dhaka, Bangladesh for clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We keep existing web and mobile products secure, monitored, and fast, with a 24-hour response SLA on working days, whether or not we built the original system.",metaTitle:"Software Maintenance and Support Services | Algoramming",metaDescription:"Application maintenance, monitoring, and support from Dhaka with a 24-hour response SLA, for web and mobile products across the US, UK, and Gulf.",forWhom:["Live products that have outgrown their original team","Teams that inherited an unfamiliar codebase mid-flight","Founders who need on-call coverage but not full-time hires"],outcomes:["SLAs you can put in a customer contract without crossing your fingers","Proactive monitoring that catches issues before your customers do","Security patches and dependency updates on a predictable schedule","A tier-one support team that escalates to engineering when it has to","A monthly health report with the metrics, the fixes, and the next moves"],deliverables:["Monitoring, alerting, and a documented on-call rotation","Security patches and dependency updates on a predictable cadence","Bug triage workflow and a tier-one customer support SLA","Monthly health report with metrics, fixes, and next moves","Operational documentation and a clean knowledge-transfer record"],seoSections:[{heading:"Application maintenance and support after launch",body:"Most products live or die in the years after launch, not the months before it. Maintenance and customer support is the work of keeping a live product healthy, patching the right things at the right time, monitoring what matters, supporting your users when something goes wrong, and shipping the small improvements that compound into loyalty. The team that ran the launch is rarely the team that should be running the next three years. We take over apps built by other vendors regularly, and we onboard with an audit, a knowledge-capture sprint, and a clean runbook before we touch the live system."},{heading:"Monitoring, security patches, and a real on-call rotation",body:"Every maintenance engagement starts with a documented monitoring and alerting setup, an on-call rotation with named owners and escalation paths, and a maintenance window cadence that matches the rhythm of your business. We track CVEs against your dependency tree, classify them by severity, and ship critical patches inside the agreed window. Performance dashboards, error budgets, and SLO tracking live alongside the operational runbook so the team always has the same picture of how the product is actually behaving in production. The goal is uptime that is boring, in the best possible sense."},{heading:"Support SLAs you can put in a customer contract",body:"An SLA you can put in a customer contract without crossing your fingers needs more than legal copy. Maintenance and customer support engagements include response and restoration commitments by severity, the channels your customers and your team can reach us on, and joint incident grading so neither side games the SLA. Tier one customer support, with clean handoffs to engineering for incidents and bug reports, is one of the most common shapes of this engagement. A monthly health report lays out the metrics, the fixes, and the next moves, so the people paying for the work always know exactly what they are getting."}],process:[{step:"Discover",detail:"We audit the product, the runbook, and the ticket history, then agree the SLA targets that fit the business."}
11,{step:"Design",detail:"We design the on-call rotation, the escalation paths, and the monthly maintenance window together."},{step:"Build",detail:"We add monitoring, alerts, dashboards, and the dependency-update cadence the codebase needs."},{step:"Launch",detail:"We start picking up tickets slowly, with shadowing, so nothing goes through the cracks."},{step:"Support",detail:"We run the day-to-day, review SLAs monthly, and ship continuous improvements behind the scenes."}],stack:["Datadog","Sentry","Grafana","PagerDuty","Zendesk","Intercom","Linear","Jira","Cloudflare","AWS"],faqs:[{question:"Do you handle customer-facing support too?",answer:"We can. Tier one customer support, with hand-off to engineering for incidents and bug reports, is one of the most common shapes of this engagement."},{question:"What about security patches?",answer:"We track CVEs against your dependency tree, classify by severity, and ship critical patches inside agreed windows. You get a monthly security report."},{question:"Is this only for projects you originally built?",answer:"No. We take over apps built by other vendors regularly. Onboarding starts with an audit, a knowledge-capture sprint, and a clean runbook."},{question:"What does application maintenance and support include?",answer:"Monitoring and alerting, security patches and dependency updates, bug triage and fixes, an on-call rotation, tier-one customer support, and a monthly health report. In short, everything needed to keep a live web or mobile product secure, fast, and dependable after launch."},{question:"How much does ongoing software maintenance cost?",answer:"It scales with the size of the product, the response times you need, and whether you want customer-facing support included. We size a monthly retainer to your actual usage after a short audit, so you pay for the cover you need rather than a flat package."},{question:"What response times does your support SLA guarantee?",answer:"Our baseline is a 24-hour response on working days, with faster tiers and follow-the-sun cover available for critical systems. Response and restoration targets are set by severity, and we grade incidents jointly so neither side games the SLA."}],related:["web-application-design-and-development","custom-software-development","tech-partnership-and-consultation"]},{slug:"ai-and-automation",title:"AI and Automation",shortTitle:"AI & automation",tagline:"Ship AI that earns its place in the product, not the pitch deck.",description:"We build AI into the software you actually run: features grounded in your own data, automations that remove repetitive work, and assistants that know their limits, all measured so quality is a number rather than a hope.",answer:"Algoramming is an AI and automation company in Dhaka, Bangladesh that builds AI features, workflow automations, chatbots, and predictive analytics into production software for clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. One senior team handles AI integration, guardrails, and evaluation, and you own the code and the data from the first commit.",metaTitle:"AI Integration and Automation Services | Algoramming",metaDescription:"AI features grounded in your data, workflow automation, chatbots, and predictive analytics, built into production with guardrails and evaluation.",forWhom:["Teams with a real use case for AI, not a mandate to add it somewhere","Operations leaders drowning in repetitive, rule-based work","Products that sit on valuable data they have never turned into leverage"],outcomes:["AI features that solve a real problem and hold up on messy input","Repetitive work automated, with humans kept in the loop where it counts","Answers grounded in your data, with quality measured by evaluation","Cost, latency, and safety kept inside limits the product can afford","A clear-eyed view of where AI helps and where it honestly does not"],deliverables:["AI features integrated into your product, grounded in your data","Automations across your existing tools, logged and monitored","Guardrails, prompt design, and human-in-the-loop checks","An evaluation harness that tracks quality over time","Source code and model configuration in your accounts"],seoSections:[{heading:"AI integration that survives contact with real users",body:"Nearly anything looks impressive in a first demo. The value is in what happens next: real, messy inputs, edge cases, and the cost of a confident wrong answer. We build AI features on the model that fits the job, ground them in your own data through retrieval, and wrap them in guardrails so they fail safely rather than loudly. The point is a feature people come to rely on, not a screenshot for the pitch deck."},{heading:"Workflow automation that removes the dull, not the judgement",body:"The best automation targets are repetitive and rule-based: moving data between systems, generating routine documents, triaging standard requests. We map where your team loses hours to that kind of work and automate it, keeping a person in the loop for anything that needs judgement. Every automation is logged and monitored, so it is trustworthy enough to leave running rather than one more thing someone has to check."},{heading:"Measured AI, because probabilistic features demand it",body:"AI behaviour is a distribution, not a yes or no, so we treat evaluation as part of the build. An evaluation harness tracks how often the system is right, where it goes wrong, and whether a prompt or model change actually helped. That is 
11what makes it possible to ship AI responsibly and improve it deliberately, instead of shipping a black box and hoping. We are also honest about the cases where the mature answer is to not use AI at all."}],process:[{step:"Discover",detail:"We pin down the use case, the data available, and the cost of getting an answer wrong before building anything."},{step:"Design",detail:"We design the retrieval, prompts, guardrails, and the human-in-the-loop points that match the risk."},{step:"Build",detail:"We integrate the feature or automation into your product and stand up an evaluation harness alongside it."},{step:"Launch",detail:"We ship behind flags, watch quality, cost, and latency on real traffic, and tune before widening."},{step:"Support",detail:"We monitor accuracy as the world drifts, retrain or re-prompt as needed, and keep the guardrails honest."}],stack:["Python","TypeScript","OpenAI","Anthropic","LangChain","pgvector","n8n","Zapier","Sentry","Datadog"],faqs:[{question:"Do we need to train our own model?",answer:"Usually not. Most valuable features come from applying strong existing models well, grounded in your data. Custom or fine-tuned models make sense in specific cases, and we will tell you plainly when yours is one of them."},{question:"Is our data safe with the AI providers you use?",answer:"We choose providers and configurations that match your privacy needs, keep sensitive data out of training where required, and can keep more of the pipeline in your own infrastructure when that matters."},{question:"Can you add AI to our existing product without a rebuild?",answer:"Yes, and that is most of what we do. We add AI feature by feature into software that already exists, wiring into your current data and workflows, rather than rebuilding the product to bolt AI on."},{question:"How do you stop AI from hallucinating in production?",answer:"We ground answers in your own data through retrieval, constrain the model with guardrails, and measure accuracy with an evaluation harness on real inputs. That cuts confident wrong answers sharply, and we are honest that it does not remove them entirely, so we keep a human in the loop where the cost of an error is high."},{question:"What does an AI feature cost to build and run?",answer:"Build cost depends on the use case and how much data plumbing it needs. Running cost is model calls, which we keep inside a per-request budget you set. We estimate both in discovery, and we will tell you plainly when plain software is the cheaper, better answer."},{question:"How do you measure whether an AI feature is actually working?",answer:"An evaluation harness tracks how often the system is right, where it goes wrong, and whether a prompt or model change actually helped. Cost, latency, and safety sit on the same dashboard, so quality is a number you can watch rather than a hope."}],related:["custom-software-development","cloud-devops-and-data","web-application-design-and-development"]},{slug:"cloud-devops-and-data",title:"Cloud, DevOps and Data",shortTitle:"Cloud, DevOps & data",tagline:"Infrastructure that scales quietly and a data layer you can trust.",description:"We build the foundation your product runs on: cloud infrastructure as code, CI/CD that ships often and safely, migrations that do not move your problems with you, and a data layer that gives the whole team one trustworthy source of truth.",answer:"Algoramming builds cloud infrastructure, DevOps pipelines, and data platforms from Dhaka, Bangladesh for clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. We deliver infrastructure-as-code, CI/CD, safe cloud migration, and analytics on AWS, GCP, or Cloudflare, and every account and configuration stays in your name.",metaTitle:"Cloud, DevOps and Data Engineering | Algoramming",metaDescription:"Cloud infrastructure, DevOps and CI/CD, safe cloud migration, and data engineering on AWS, GCP, or Cloudflare, all in your own accounts.",forWhom:["Teams whose infrastructure was assembled by hand and is now fragile","Products that need to ship more often without breaking things","Businesses sitting on scattered data they cannot yet trust"],outcomes:["Infrastru
11cture that scales with demand and stays in your accounts","Frequent, low-drama releases backed by automated checks and rollback","Cloud cost that is understood and controlled, not a monthly surprise","One trustworthy source of truth instead of conflicting spreadsheets","A foundation your future team can run without fear"],deliverables:["Cloud architecture on AWS, GCP, or Cloudflare as infrastructure-as-code","CI/CD pipelines with staged environments and one-click rollback","A staged, reversible migration plan where you are moving to the cloud","Data pipelines, a modelled warehouse, and dashboards on top","Monitoring, backups, cost controls, and access management"],seoSections:[{heading:"Cloud infrastructure as code, in accounts you own",body:"Infrastructure clicked together by hand is impossible to reproduce and known only to whoever built it. We define it as code with Terraform, so environments are reproducible, changes are reviewed like software, and the setup documents itself. Everything lives in your own cloud accounts, right-sized and cost-monitored, so you are never renting your own infrastructure back from a vendor and never one resignation away from losing the knowledge of how it runs."},{heading:"CI/CD shipping that is frequent, safe, and boring",body:"When releases are rare they become huge and frightening, which makes teams release even less. A good CI/CD pipeline breaks that cycle: small changes flow through automated type checks, tests, and builds, out to staged environments, with one-click rollback when something slips through. Where you are moving to the cloud, we migrate in reversible stages and model the cost first, so you gain elasticity and resilience instead of a surprise bill and the same old fragility."},{heading:"A data layer and one source of truth the whole team trusts",body:"Most teams do not lack data; they lack one version of it they believe. We bring the sources together with reliable pipelines, model a warehouse that defines each metric once, and build the dashboards on top, with quality checks so a wrong number is caught before anyone acts on it. The argument about whose spreadsheet is correct simply goes away, and decisions start coming from figures people actually trust."}],process:[{step:"Discover",detail:"We assess the current infrastru
11cture, delivery process, and data sources, and agree the cost and reliability targets."},{step:"Design",detail:"We design the infrastructure-as-code, the pipeline, and the data model before changing anything live."},{step:"Build",detail:"We build environments, automate the pipeline, and stand up data pipelines with quality checks in your accounts."},{step:"Launch",detail:"We cut over in reversible stages, verify on both sides, and keep a rollback path throughout."},{step:"Support",detail:"We monitor cost, reliability, and data quality, and keep the foundation healthy as the product grows."}],stack:["AWS","GCP","Cloudflare","Terraform","Docker","GitHub Actions","PostgreSQL","dbt","Grafana","Datadog"],faqs:[{question:"Which cloud provider should we use?",answer:"AWS, GCP, or Cloudflare, chosen to fit your team, your existing accounts, and the workload. We recommend based on your situation rather than a house default."},{question:"Will we be locked into your setup?",answer:"No. Everything lives in your accounts, defined as code you own, so you or any future team can run and change it without us in the loop."},{question:"Can you add CI/CD or monitoring to an existing system?",answer:"Yes, and it is usually a fast, high-value first step. We start with build and test automation or meaningful monitoring, then extend from there."},{question:"How do you avoid a surprise cloud bill during migration?",answer:"We model the cost before moving, right-size resources, and set up cost monitoring from day one, so spend is a decision rather than something discovered at month end."},{question:"Do you build the data warehouse and the dashboards?",answer:"Both, if you want. The pipelines and warehouse are the foundation, and we build the reporting on top so the value is visible to the people who need it."},{question:"Do you serve clients in the UAE, Qatar, and Saudi Arabia?",answer:"Yes. We work from Dhaka, Bangladesh with clients across the UAE, Qatar, Saudi Arabia, the US, the UK, and Australia. Cloud and data work runs well remotely, and every account and configuration stays in your name, in your chosen region."}],related:["custom-software-development","ai-and-automation","maintenance-and-customer-support"]}];for(let e of h)e.subServices=d[e.slug]??[];h.reduce((e,t)=>e+(t.subServices?.length??0),0);let c=["zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty"];var u=e.i(57675),p=e.i(70703);let m=[{id:"p:/",title:"Home",subtitle:"Algoramming Systems Ltd. is a custom software development company in Dhaka, Bangladesh. One senior team designs, builds and supports web platforms, mobile apps and internal tools for clients across the Middle East and worldwide.",group:"Pages",href:"/",keywords:["start","landing","algoramming"]},{id:"p:/services",title:"Services",subtitle:"Every service line in one place: custom software, mobile and web apps, UI/UX and product design, AI and automation, cloud and DevOps, te
11ch partnership and long-term maintenance, each delivered end to end by one senior team.",group:"Pages",href:"/services",keywords:["what we do","offerings","capabilities"]},{id:"p:/projects",title:"Projects",subtitle:"Case studies of software we have shipped for real clients: the problem we were handed, the approach we took and the outcome it delivered, from mobile apps and SaaS platforms to AI tools and internal systems.",group:"Pages",href:"/projects",keywords:["portfolio","case studies","work","clients"]},{id:"p:/blogs",title:"Blogs",subtitle:"Field notes from the studio: practical, opinionated writing on building software, designing products, pricing projects and running engineering teams, written for the people who live with the work after it ships.",group:"Pages",href:"/blogs",keywords:["articles","posts","writing","news","field notes"]},{id:"p:/hire",title:"Hire developers",subtitle:"Hire dedicated senior engineers and designers from our team in Dhaka, by role: Flutter, React, Next.js, backend, full-stack, DevOps and product design. Start with a scoped task, then scale up or hand over whenever you need.",group:"Pages",href:"/hire",keywords:["staff augmentation","dedicated team","talent","outsourcing"]},{id:"p:/about-us",title:"About",subtitle:"Who we are: an independent product studio in Dhaka, Bangladesh, building custom software, mobile and web apps for ambitious teams worldwide. Senior people on every project, plain English, and code you own from day one.",group:"Pages",href:"/about-us",keywords:["company","team","who we are","studio"]},{id:"p:/careers",title:"Careers",subtitle:"Software engineering and design jobs at our studio in Dhaka, Bangladesh. See the open roles, how we work and what we look for, then apply directly. Past openings stay listed, so you can see the kinds of teams we hire for.",group:"Pages",href:"/careers",keywords:["jobs","hiring","work with us","openings","vacancies"]},{id:"p:/contact-us",title:"Contact",subtitle:"Send us a brief, bullet points are fine. We reply within one business day with a plain English next step, and sign an NDA on request. Reach us by email, phone or WhatsApp, or book a 30 minute call with the team.",group:"Pages",href:"/contact-us",keywords:["email","phone","whatsapp","quote","talk","book","meeting"]},{id:"p:/privacy-policy",title:"Privacy Policy",subtitle:"How Algoramming Systems Ltd. collects, uses and protects the information you share with us through this website, our contact forms and our newsletter, and the choices you have about your personal data.",group:"Pages",href:"/privacy-policy",keywords:["privacy","gdpr","data","cookies"]},{id:"p:/terms-and-conditions",title:"Terms and Conditions",subtitle:"The terms for using the Algoramming website and its content, covering intellectual property, acceptable use, links to third-party sites, the limits of our liability, and how these terms may change over time.",group:"Pages",href:"/terms-and-conditions",keywords:["terms","legal","conditions"]}],g=(0,p.default)(()=>e.A(1571),{loadableGenerated:{modules:[99388]},ssr:!1}),f="algoramming:open-search";function y(){window.dispatchEvent(new Event(f))}function w(e){let{size:a=17}=e;return(0,t.jsxs)("svg",{width:a,height:a,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,t.jsx)("circle",{cx:"11",cy:"11",r:"7"}),(0,t.jsx)("path",{d:"m20 20-3.5-3.5"})]})}function b(){let e=(0,i.useRouter)(),[a,n]=(0,o.useState)(!1),[s,r]=(0,o.useState)(!1),[l,d]=(0,o.useState)(m),h=(0,o.useRef)(!1),c=(0,o.useCallback)(()=>{n(!0),h.current||(h.current=!0,fetch("/api/search").then(e=>e.ok?e.json():Promise.reject(e.status)).then(e=>{Array.isArray(e)&&e.length&&d(e)}).catch(()=>{h.current=!1}))},[]);(0,o.useEffect)(()=>{let e=e=>{e.defaultPrevented||e.isComposing||e.repeat||!(e.metaKey||e.ctrlKey)||e.altKey||e.shiftKey||(e.key?.toLowerCase()==="k"||"KeyK"===e.code)&&(e.preventDefault(),c(),r(e=>!e))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[c]),(0,o.useEffect)(()=>{let e=()=>{c(),r(!0)};return window.addEventListener(f,e),()=>window.removeEventListener(f,e)},[c]);let u=(0,o.useCallback)(t=>e.push(t.href),[e]);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{type:"button","aria-label":"Search the site","aria-haspopup":"dialog","aria-expanded":s,"aria-keyshortcuts":"Meta+K Control+K",onPointerEnter:c,onFocus:c,onClick:()=>{c(),r(!0)},className:"hidden lg:inline-flex items-center justify-center h-10.5 w-10.5 shrink-0 translate-y-
11px rounded-full border border-(--color-border-strong) bg-white text-(--color-text) shadow-(--shadow-sm) transition-[transform,border-color] duration-200 hover:translate-y-0 hover:border-(--color-text)",children:(0,t.jsx)(w,{})}),a&&(0,t.jsx)(g,{items:l,open:s,onOpenChange:r,onSelect:u,hotkey:null,label:"Search the site",placeholder:"Search services, projects, posts…",emptyMessage:e=>(0,t.jsxs)(t.Fragment,{children:["No matches for “",e,"”.",(0,t.jsx)("br",{}),"Try a service, a technology or a country."]})})]})}function v(){let[e,a]=(0,o.useState)(!1),[r,l]=(0,o.useState)(!1),d=(0,i.usePathname)(),c=()=>a(!1);return(0,o.useEffect)(()=>{a(!1)},[d]),(0,o.useEffect)(()=>{if(!e)return;let t=e=>{"Escape"===e.key&&a(!1)};return document.addEventListener("keydown",t),document.body.style.overflow="hidden",document.body.classList.add("drawer-open"),()=>{document.removeEventListener("keydown",t),document.body.style.overflow="",document.body.classList.remove("drawer-open")}},[e]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{type:"button","aria-label":"Open menu","aria-expanded":e,"aria-controls":"mobile-drawer",onClick:()=>a(!0),className:"lg:hidden inline-flex items-center justify-center h-11 w-11 rounded-full border border-border",children:(0,t.jsx)(u.IconMenu,{})}),e&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"drawer-overlay lg:hidden",onClick:()=>a(!1),"aria-hidden":"true"}),(0,t.jsxs)("aside",{id:"mobile-drawer",role:"dialog","aria-modal":"true","aria-label":"Main menu",className:"drawer-panel lg:hidden",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between px-5 h-(--header-h) border-b border-border",children:[(0,t.jsx)("span",{className:"font-semibold",children:"Menu"}),(0,t.jsx)("button",{type:"button","aria-label":"Close menu",onClick:()=>a(!1),className:"inline-flex items-center justify-center h-11 w-11 rounded-full border border-border",children:(0,t.jsx)(u.IconClose,{})})]}),(0,t.jsxs)("nav",{className:"flex flex-col px-5 py-6 gap-1 overflow-y-auto","aria-label":"Mobile",children:[(0,t.jsxs)("button",{type:"button","aria-haspopup":"dialog",onClick:()=>{c(),requestAnimationFrame(y)},className:"mb-3 flex h-12 w-full items-center gap-3 rounded-full border border-border bg-(--color-surface) pl-4 pr-3 text-left text-[15px] text-(--color-muted-2) transition-colors duration-200 hover:border-(--color-border-strong) hover:bg-white",children:[(0,t.jsx)("span",{className:"text-(--color-primary-dark)",children:(0,t.jsx)(w,{size:17})}),(0,t.jsx)("span",{className:"flex-1",children:"Search the site"})]}),s.nav.map(e=>{let a=d===e.href||"/"!==e.href&&d?.startsWith(e.href);return"/services"===e.href?(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>l(e=>!e),"aria-expanded":r,className:"py-3 text-base font-medium flex items-center justify-between",style:{color:a?"var(--color-primary-deep)":"var(--color-text)"},children:[e.label,(0,t.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 12 12","aria-hidden":"true",style:{transform:r?"rotate(180deg)":"rotate(0)",transition:"transform 0.2s ease"},children:(0,t.jsx)("path",{d:"M3 4.5 6 7.5 9 4.5",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})})]}),r&&(0,t.jsxs)("ul",{className:"mt-1 mb-2 ml-2 pl-3 border-l border-border list-none",children:[(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:"/services",onClick:c,className:"block py-2 text-[14.5px] font-semibold text-(--color-primary-deep)",children:"All services →"})}),h.map(e=>(0,t.jsxs)("li",{className:"mt-1",children:[(0,t.jsx)(n.default,{href:`/services/${e.slug}`,onClick:c,className:"block py-2 text-[14px] font-semibold text-foreground",children:e.title}),(e.subServices?.length??0)>0&&(0,t.jsx)("ul",{className:"mb-1 ml-1 pl-3 border-l border-border/70 list-none",children:e.subServices?.map(a=>(0,t.jsx)("li",{children:(0,t.jsx)(n.default,{href:`/services/${e.slug}/${a.slug}`,onClick:c,className:"block py-1.5 text-[13px] text-muted",children:a.title})},a.slug))})]},e.slug))]})]},e.href):(0,t.jsx)(n.default,{href:e.href,onClick:c,className:"py-3 text-base font-medium",style:{color:a?"var(--color-primary-deep)":"var(--color-text)"},children:e.label},e.href)})]}),(0,t.jsx)("div",{className:"mt-auto p-5 border-t border-border",children:(0,t.jsx)(n.default,{href:"/contact-us",onClick:c,className:"btn btn-primary w-full",children:"Get a quote"})})]})]})]})}function k(e){let{size:t=22,strokeWidth:a=1.6,...n}=e;return{width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:a,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...n}}let A={"custom-software-development":e=>(0,t.jsxs)("svg",{...k(e),children:[(0,t.jsx)("path",{d:"M8 4 4 12l4 8"}),(0,t.jsx)("path",{d:"m16 4 4 8-4 8"}),(0,t.jsx)("path",{d:"m13 4-2 16"})]}),"mobile-app-design-and-development":e=>(0,t.jsxs)("svg",{...k(e),children:[(0,t.jsx)("rect",{x:"6",y:"2.5",width:"12",height:"19",rx:"2.5"}),(0,t.jsx)("path",{d:"M10 5h4"}),(0,t.jsx)("circle",{cx:"12",cy:"18",r:"1"})]}),"web-application-design-and-development":e=>(0,t.jsxs)("svg",{...k(e),children:[(0,t.jsx)("rect",{x:"2.5",y:"4",width:"19",height:"14",rx:"2"}),(0,t.jsx)("path",{d:"M2.5 9h19"}),(0,t.jsx)("circle",{cx:"5.5",cy:"6.5",r:"0.6"}),(0,t.jsx)("circle",{cx:"7.5",cy:"6.5",r:"0.6"}),(0,t.jsx)("path",{d:"M9 22h6"}),(0,t.jsx)("path",{d:"M12 18v4"})]}),"best-ui-ux-design-services":e=>(0,t.jsx)("svg",{...k(e),children:(0,t.jsx)("path",{d:"m12 2 2.4 5.4 5.6.6-4.2 4 1.2 5.8L12 14.9 6.9 17.8l1.2-5.8L4 8l5.6-.6z"})}),"product-design-and-consultation":e=>(0,t.jsxs)("svg",{...k(e),children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"9"}),(0,t.jsx)("path",{d:"m15.5 8.5-3 5.5-5 3 3-5.5z"})]}),"tech-partnership-and-consultation":e=>(0,t.jsxs)("svg",{...k(e),children:[(0,t.jsx)("path",{d:"M3 13h4l2-3 4 6 2-4h6"}),(0,t.jsx)("circle",{cx:"3",cy:"13",r:"1"}),(0,t.jsx)("circle",{cx:"21",cy:"12",r:"1"})]}),"maintenance-and-customer-support":e=>(0,t.jsxs)("svg",{...k(e),children:[(0,t.jsx)("path",{d:"M12 2.5 4 6v6c0 4.5 3.4 8.4 8 9.5 4.6-1.1 8-5 8-9.5V6z"}),(0,t.jsx)("path",{d:"m9 12 2 2 4-4"})]}),"ai-and-automation":e=>(0,t.jsxs)("svg",{...k(e),children:[(0,t.jsx)("rect",{x:"6",y:"7",width:"12",height:"10",rx:"2.5"}),(0,t.jsx)("path",{d:"M12 3v4M9 3.5v1M15 3.5v1"}),(0,t.jsx)("path",{d:"M6 11H3.5M20.5 11H18M6 14H4.5M19.5 14H18"}),(0,t.jsx)("circle",{cx:"9.5",cy:"12",r:"1"}),(0,t.jsx)("circle",{cx:"14.5",cy:"12",r:"1"})]}),"cloud-devops-and-data":e=>(0,t.jsxs)("svg",{...k(e),children:[(0,t.jsx)("path",{d:"M7 18a4 4 0 0 1-.5-7.97 5 5 0 0 1 9.6-1.2A3.5 3.5 0 0 1 17 18z"}),(0,t.jsx)("path",{d:"m9.5 12.5 1.5 1.5-1.5 1.5M13 15h1.5"})]})};function x(){var e,a;let[s,r]=(0,o.useState)(!1),[l,d]=(0,o.useState)(0),[p,m]=(0,o.useState)(null),g=(0,o.useRef)(null),f=(0,o.useRef)(null),y=(0,o.useId)(),w=(0,i.usePathname)();(0,o.useEffect)(()=>{r(!1)},[w]),(0,o.useEffect)(()=>
11{if(!s)return;let e=e=>{g.current?.contains(e.target)||r(!1)},t=e=>{"Escape"===e.key&&r(!1)};return document.addEventListener("mousedown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t)}},[s]);let b=()=>{p&&window.clearTimeout(p),m(window.setTimeout(()=>r(!0),80))},v=()=>{p&&window.clearTimeout(p),m(window.setTimeout(()=>r(!1),140))},k=h[l]??h[0],x=k?.subServices??[],S=A[k?.slug??""]??u.IconSparkle,W=w?.startsWith("/services");return(0,t.jsxs)("div",{ref:g,className:"relative",onMouseEnter:b,onMouseLeave:v,children:[(0,t.jsxs)("button",{type:"button","aria-haspopup":"true","aria-expanded":s,"aria-controls":y,"aria-current":W?"page":void 0,onClick:()=>r(e=>!e),className:"nav-link inline-flex items-center gap-1",children:["Services",(0,t.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",style:{transform:s?"rotate(180deg)":"rotate(0)",transition:"transform 0.2s ease"},children:(0,t.jsx)("path",{d:"M3 4.5 6 7.5 9 4.5",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})]}),s&&(0,t.jsxs)("div",{id:y,role:"menu",className:"mega-panel",onMouseEnter:b,onMouseLeave:v,children:[(0,t.jsxs)("div",{className:"mega-2pane",children:[(0,t.jsxs)("div",{className:"mega-rail","data-lenis-prevent":!0,children:[(0,t.jsx)("span",{className:"mega-rail-label",children:"Service lines"}),h.map((e,a)=>{let o=A[e.slug]??u.IconSparkle,s=e.subServices?.length??0;return(0,t.jsxs)(n.default,{href:`/services/${e.slug}`,role:"menuitem",onMouseEnter:()=>{f.current&&window.clearTimeout(f.current),f.current=window.setTimeout(()=>d(a),90)},onFocus:()=>d(a),className:`mega-rail-item ${a===l?"is-active":""}`,children:[(0,t.jsx)("span",{className:"mega-icon-sm","aria-hidden":"true",children:(0,t.jsx)(o,{size:16})}),(0,t.jsx)("span",{className:"mega-rail-title",children:e.shortTitle}),s>0&&(0,t.jsx)("span",{className:"mega-rail-count",children:s}),(0,t.jsx)(u.IconArrowRight,{size:13,className:"rail-arrow"})]},e.slug)})]}),(0,t.jsxs)("div",{className:"mega-detail",children:[(0,t.jsxs)("div",{className:"mega-detail-head",children:[(0,t.jsx)("span",{className:"mega-detail-icon","aria-hidden":"true",children:(0,t.jsx)(S,{size:22})}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)(n.default,{href:`/services/${k?.slug}`,className:"block text-[16px] font-bold tracking-tight text-foreground hover:text-(--color-primary-deep) transition-colors",children:k?.title}),(0,t.jsx)("p",{className:"mt-1 text-[13px] text-muted leading-snug",children:k?.tagline})]})]}),(0,t.jsx)("div",{className:"mega-sub-grid",children:x.map(e=>(0,t.jsxs)(n.default,{href:`/services/${k?.slug}/${e.slug}`,role:"menuitem",className:"mega-sub-card",children:[(0,t.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,t.jsx)("span",{className:"mega-sub-title",children:e.title}),(0,t.jsx)("span",{className:"mega-sub-tagline",children:e.tagline})]}),(0,t.jsx)(u.IconArrowRight,{size:14,className:"mega-sub-arrow"})]},e.slug))}),(0,t.jsxs)(n.default,{href:`/services/${k?.slug}`,className:"mega-overview-btn",children:["View ",k?.shortTitle.toLowerCase()," overview",(0,t.jsx)(u.IconArrowRight,{size:14,className:"arrow-shift"})]})]},k?.slug)]}),(0,t.jsxs)("div",{className:"mega-foot",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("span",{className:"block text-[11px] font-semibold tracking-[0.18em] uppercase text-(--color-muted-2)",children:[(a=c[e=h.length]??String(e)).charAt(0).toUpperCase()+a.slice(1)," service lines, one senior team"]}),(0,t.jsx)("span",{className:"block mt-1 text-[13px] text-muted",children:"Discovery first, a two-week cadence, code you own from day one."})]}),(0,t.jsxs)(n.default,{href:"/services",className:"inline-flex items-center gap-1.5 text-[14px] font-semibold text-(--color-primary-deep) hover:text-foreground transition-colors",children:["All services",(0,t.jsx)(u.IconArrowRight,{size:14,className:"arrow-shift"})]})]})]})]})}e.s(["Header",0,function(){let[e,i]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{let e=()=>i(window.scrollY>16);return e(),window.addEventListener("scroll",e,{passive:!0}),()=>window.removeEventListener("scroll",e)},[]),(0,t.jsx)("header",{className:"site-header","data-scrolled":e,role:"banner",children:(0,t.jsx)("div",{className:"container-x",children:(0,t.jsxs)("div",{className:"site-header-bar",children:[(0,t.jsxs)(l.ScrollTopLink,{href:"/",className:"flex items-center gap-2.5 group pr-2","aria-label":`${s.site.legalName} home`,children:[(0,t.jsx)("span",{className:"relative inline-flex items-center justify-center h-11 w-11 rounded-xl bg-linear-to-br from-[#fafbfa] to-[#eef3f0] border border-border overflow-hidden transition-transform duration-300 group-hover:-rotate-6",children:(0,t.jsx)(a.default,{src:"/algoramming-mark-96.png",alt:`${s.site.legalName} logo`,width:36,height:36,priority:!0,className:"h-9 w-9"})}),(0,t.jsxs)("span",{className:"-ml-0.5 flex flex-col items-center text-center leading-none",children:[(0,t.jsx)("span",{className:"font-bold text-[18px] tracking-tight",children:s.site.shortName}),(0,t.jsx)("span",{className:"mt-1 mr-[-0.42em] text-[7.5px] font-semibold uppercase tracking-[0.42em] text-(--color-muted-2)",children:"Systems Ltd."})]})]}),(0,t.jsx)("nav",{className:"hidden lg:flex items-center gap-7","aria-label":"Primary",children:s.nav.map(e=>"/services"===e.href?(0,t.jsx)(x,{},e.href):(0,t.jsx)(r,{href:e.href,children:e.label},e.href))}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(b,{}),(0,t.jsxs)(n.default,{href:"/contact-us",className:"btn btn-primary btn-sm max-lg:px-2.5 max-lg:min-h-11","aria-label":"Let's Talk",children:[(0,t.jsx)(u.IconMessage,{size:16,className:"lg:hidden"}),(0,t.jsxs)("span",{className:"hidden lg:inline-flex items-center gap-1.5",children:["Let's Talk",(0,t.jsx)(u.IconArrowRight,{size:14,className:"arrow-shift"})]})]}),(0,t.jsx)(v,{})]})]})})})}],13293)},85265,e=>{"use strict";var t=e.i(43476),a=e.i(71645),n=e.i(46932),o=e.i(88653),s=e.i(63209),i=e.i(49492),r=e.i(87652),l=e.i(72328);let d={fade:.24,beat:.13,corners:.6,edges:.58,half:.66,wings:.78,launch:1.7,unfold:.9},h=["corners","edges","half","wings"],c=/^[^\s@]+@([^\s@.]+\.)+[^\s@.]{2,}$/,u=e=>new Promise(t=>setTimeout(t,1e3*e)),p=Math.PI,m=p/2-.16,g=f([-.32,-.52,.79]);function f(e){let[t,a,n]=e,o=Math.hypot(t,a,n);return[t/o,a/o,n/o]}let y=e=>
11{let[t,a]=e,n=Math.hypot(t,a);return[t/n,a/n]},w=(e,t)=>e[0]*t[1]-e[1]*t[0],b=e=>Math.min(1,Math.max(0,e)),v=(e,t,a)=>e+(t-e)*a,k=e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,A=(e,t)=>{let[a,n]=t;return[e[0]*a+e[2]*n+e[4],e[1]*a+e[3]*n+e[5]]},x=(e,t)=>[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]],S=e=>{let t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e[0]/t,(e[2]*e[5]-e[3]*e[4])/t,(e[1]*e[4]-e[0]*e[5])/t]},W=(e,t)=>{let[a,n]=e,[o,s]=t,i=2*o*o-1,r=2*o*s,l=2*s*s-1;return[i,r,r,l,a-i*a-r*n,n-r*a-l*n]},T=e=>{let t=0;return e.forEach((a,n)=>{let o=e[(n+1)%e.length];t+=a[0]*o[1]-o[0]*a[1]}),t/2};function j(e,t){let[a,n]=e.d,[o,s]=e.p,i=e.axisZ,r=Math.cos(t),l=Math.sin(t);return e=>{let[t,d,h]=e,c=t-o,u=d-s,p=h-i,m=a*c+n*u;return[o+c*r+n*p*l+a*m*(1-r),s+u*r-a*p*l+n*m*(1-r),i+p*r+(a*u-n*c)*l]}}function q(e,t){let a=e[0]-t.pivot[0],n=e[1]-t.pivot[1],o=e[2]-t.pivot[2],s=Math.cos(t.roll),i=Math.sin(t.roll);[n,o]=[n*s-o*i,n*i+o*s];let r=Math.cos(t.yaw),l=Math.sin(t.yaw);[a,o]=[a*r-o*l,a*l+o*r];let d=Math.cos(t.heading),h=Math.sin(t.heading);return[a,n]=[a*d-n*h,a*h+n*d],[a*t.size,n*t.size,o*t.size]}let C=e=>{let[t,a,n]=e,o=1500/(1500-n);return[t*o,a*o]};function D(e,t,a){let[n,o,s]=e.n,i=(n*t+o*a)/1500,r=s-i;return 1e-9>Math.abs(r)?e.depth:(e.dist-1500*i)/r}let E=e=>Math.round(10*e)/10,M=e=>`M${e.map(e=>{let[t,a]=e;return`${E(t)} ${E(a)}`}).join("L")}Z`;function P(e,t,a,n){let o=e.folds.map(e=>{let a=b(t-e.step);return k(b(e.lag?1.15*a-.15:1.15*a))}),s=e.folds.map((e,t)=>o[t]>0?j(e,e.spin*o[t]):null),i=function(e,t,a,n){let o=k(b(t-3)),s=k(b(a/.26)),i=b((a-.26)/.74),r={x:e.cx+e.offset[0]*o,y:e.cy+e.offset[1]*o-5*n,heading:v(e.place,-.2,o)-.12*s,roll:-1.15*o+.05*n+.16*Math.sin(s*p*2)*(1-s),yaw:-.42*o,size:v(v(1,e.fit,k(b(t))),e.ready,o),pivot:e.centre.map(e=>e*o),zoom:1,alpha:1,s:o,g:i,fl:a};if(r.x-=26*Math.cos(r.heading)*s,r.y-=26*Math.sin(r.heading)*s,i>0){let t=1-Math.pow(1-i,3),[[a,n],[o,s],[l,d],[h,c]]=e.path,u=1-t;r.x=u*u*u*a+3*u*u*t*o+3*u*t*t*l+t*t*t*h,r.y=u*u*u*n+3*u*u*t*s+3*u*t*t*d+t*t*t*c,r.heading=v(r.heading,Math.atan2(3*u*u*(s-n)+6*u*t*(d-s)+3*t*t*(c-d),3*u*u*(o-a)+6*u*t*(l-o)+3*t*t*(h-l)),b(4*i)),r.roll+=.34*Math.sin(i*p),r.zoom=v(1,.1,Math.pow(t,1.4)),r.alpha=1-b((i-.7)/.3)}return r}(e,t,a,n),r=e.facets.map(t=>{let a=t.pts.map(e=>{let[t,a]=e;return[t,a,0]});t.moves.forEach((e,t)=>{let n=s[t];e&&n&&(a=a.map(n))});let n=a.map(e=>q(e,i)),r=0,l=0,d=0;n.forEach((e,t)=>{let a=n[(t+1)%n.length];r+=(e[1]-a[1])*(e[2]+a[2]),l+=(e[2]-a[2])*(e[0]+a[0]),d+=(e[0]-a[0])*(e[1]+a[1])});let h=f([r,l,d]),c=n.reduce((e,t)=>[e[0]+t[0],e[1]+t[1],e[2]+t[2]],[0,0,0]).map(e=>e/n.length),u=Math.max(0,(-(h[0]*c[0])+-(h[1]*c[1])+h[2]*(1500-c[2])>=0?1:-1)*(h[0]*g[0]+h[1]*g[1]+h[2]*g[2]))/g[2],p=u<=1?e.shade.map((t,a)=>Math.round(v(t,e.paper[a],u))):e.paper.map(e=>Math.round(Math.min(255,e+(255-e)*(u-1)*2.4))),m=n.map(C);0>T(m)&&(m=m.slice().reverse());let y=m.map(e=>e[0]),w=m.map(e=>e[1]),b=n.map(C).map(e=>{let[t,a]=e;return[i.x+t*i.zoom,i.y+a*i.zoom]}),k=t.pts.map((e,t)=>{let[,,a]=e;return -1===a||o[a]>.02?`M${E(b[t][0])} ${E(b[t][1])}L${E(b[(t+1)%b.length][0])} ${E(b[(t+1)%b.length][1])}`:""}).join("");return{n:h,flat:m,depth:c[2],dist:h[0]*c[0]+h[1]*c[1]+h[2]*c[2],box:[Math.min(...y),Math.min(...w),Math.max(...y),Math.max(...w)],d:M(b),fill:`rgb(${p.join(",")})`,edges:k,screen:b}}),l=C(q([-e.L/2,-e.keel,e.centre[2]],i));return{items:(function(e){let t=e.length,a=e.map(()=>[]),n=Array(t).fill(0);for(let o=0;o<t;o++)for(let s=o+1;s<t;s++){let t=e[o],i=e[s];if(t.box[0]>i.box[2]||i.box[0]>t.box[2]||t.box[1]>i.box[3]||i.box[1]>t.box[3])continue;let r=function(e,t){let a=e;for(let e=0;e<t.length&&a.length;e++){let n=t[e],o=t[(e+1)%t.length],s=a,i=e=>(o[0]-n[0])*(e[1]-n[1])-(o[1]-n[1])*(e[0]-n[0])>=0;a=[],s.forEach((e,t)=>{let r=s[(t+1)%s.length],l=i(e),d=i(r);if(l&&a.push(e),l!==d){let t=[r[0]-e[0],r[1]-e[1]],s=[o[0]-n[0],o[1]-n[1]],i=w(t,s);if(Math.abs(i)>1e-12){let o=w([n[0]-e[0],n[1]-e[1]],s)/i;a.push([e[0]+t[0]*o,e[1]+t[1]*o])}}})}return a}(t.flat,i.flat);if(r.length<3||.5>Math.abs(T(r)))continue;let l=r.reduce((e,t)=>
11e+t[0],0)/r.length,d=r.reduce((e,t)=>e+t[1],0)/r.length,h=D(t,l,d),c=D(i,l,d);if(1e-4>Math.abs(h-c))continue;let[u,p]=h<c?[o,s]:[s,o];a[u].push(p),n[p]++}let o=[],s=e.map((e,t)=>t).filter(e=>!n[e]);for(;s.length;){s.sort((t,a)=>e[a].depth-e[t].depth);let t=s.pop();for(let e of(o.push(t),a[t]))0==--n[e]&&s.push(e)}if(o.length<t){let t=e.map((e,t)=>t).filter(e=>!o.includes(e));o.push(...t.sort((t,a)=>e[t].depth-e[a].depth))}return o})(r).map(e=>r[e]),shadow:M(function(e){let t=e.slice().sort((e,t)=>e[0]-t[0]||e[1]-t[1]),a=(e,t,a)=>(t[0]-e[0])*(a[1]-e[1])-(t[1]-e[1])*(a[0]-e[0]),n=[],o=[];for(let e of t){for(;n.length>1&&0>=a(n[n.length-2],n[n.length-1],e);)n.pop();n.push(e)}for(let e of t.reverse()){for(;o.length>1&&0>=a(o[o.length-2],o[o.length-1],e);)o.pop();o.push(e)}return n.slice(0,-1).concat(o.slice(0,-1))}(r.flatMap(e=>e.screen))),tail:[i.x+l[0]*i.zoom,i.y+l[1]*i.zoom],pose:i}}function I(e){let{rig:n,fold:o,flight:s,bob:i,landed:r}=e,l=`pp-blur-${(0,a.useId)().replace(/[^a-zA-Z0-9_-]/g,"")}`,d=(0,a.useRef)([]),h=(0,a.useRef)([]),c=(0,a.useRef)(null),u=(0,a.useRef)(null),p=(0,a.useRef)(null);return(0,a.useLayoutEffect)(()=>{let e=0,t="",a=[],r=()=>{let l=o.get(),m=s.get(),g=i.get(),f=`${l}|${m}|${g}`;if(f!==t){t=f;let{items:e,shadow:o,tail:s,pose:i}=P(n,l,m,g);e.forEach((e,t)=>{d.current[t]?.setAttribute("d",e.d),d.current[t]?.setAttribute("fill",e.fill),d.current[t]?.setAttribute("stroke",e.fill),h.current[t]?.setAttribute("d",e.edges)}),p.current?.setAttribute("opacity",i.alpha.toFixed(3));
11let r=b(3*i.fl);c.current?.setAttribute("d",o),c.current?.setAttribute("transform",`translate(0 ${E(8+14*i.s+30*r)})`),c.current?.setAttribute("opacity",((1-.35*i.s)*(1-r)).toFixed(3)),i.g<=0?a.length=0:a.push(s),u.current?.setAttribute("d",a.length>1?`M${a.map(e=>{let[t,a]=e;return`${E(t)} ${E(a)}`}).join("L")}`:"")}e=requestAnimationFrame(r)};return r(),()=>cancelAnimationFrame(e)},[n,o,s,i]),(0,t.jsxs)("svg",{className:`pp-rig${r?" is-landed":""}`,"aria-hidden":"true",focusable:"false",children:[(0,t.jsx)("defs",{children:(0,t.jsx)("filter",{id:l,x:"-50%",y:"-50%",width:"200%",height:"200%",children:(0,t.jsx)("feGaussianBlur",{stdDeviation:"10"})})}),(0,t.jsx)("path",{ref:c,className:"pp-rig-shadow",filter:`url(#${l})`}),(0,t.jsx)("path",{ref:u,className:"pp-trail"}),(0,t.jsx)("g",{ref:p,children:n.facets.map((e,a)=>(0,t.jsxs)("g",{children:[(0,t.jsx)("path",{ref:e=>{d.current[a]=e},className:"pp-facet"}),(0,t.jsx)("path",{ref:e=>{h.current[a]=e},className:"pp-crease"})]},a))})]})}function N(e){let{w:a,h:n}=e;if(!a||!n)return null;let o=a>=n?[[0,n/2,a,n/2],[a,n/2,a-n/2,0],[a,n/2,a-n/2,n]]:[[a/2,0,a/2,n],[a/2,0,0,a/2],[a/2,0,a,a/2]];return(0,t.jsx)("svg",{className:"pp-card-creases",width:a,height:n,"aria-hidden":"true",focusable:"false",children:o.map((e,a)=>{let[n,o,s,i]=e;return(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{x1:n,y1:o,x2:s,y2:i,className:"pp-card-crease"}),(0,t.jsx)("line",{x1:n,y1:o+1,x2:s,y2:i+1,className:"pp-card-crease-light"})]},a)})})}function U(e){let{size:a=16}=e;return(0,t.jsxs)("svg",{width:a,height:a,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.9",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,t.jsx)("path",{d:"M21 3 3 10.5l7 2.5 2.5 7z"}),(0,t.jsx)("path",{d:"M21 3 10 13"})]})}function O(){return(0,t.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"9"}),(0,t.jsx)("path",{d:"M12 7.5v5.5M12 16.5h.01"})]})}function L(e){let{onSubscribe:g,eyebrow:f="Newsletter",title:b="Get the weekly digest",description:v="One short email a week: what shipped, what we learned and what is coming next.",placeholder:k="[email protected]",buttonLabel:q="Subscribe",finePrint:C="No spam. Unsubscribe any time.",successTitle:D="You're in.",successMessage:E="Check your inbox. The next issue is on its way.",allowReset:M=!1,onReset:L,onStep:R,inputLabel:_="Email address",variant:F="section",className:H}=e,B="compact"===F,[z,K]=(0,a.useState)(""),[Y,G]=(0,a.useState)("idle"),[$,V]=(0,a.useState)(""),[Q,X]=(0,a.useState)(null),[J,Z]=(0,a.useState)(""),[ee,et]=(0,a.useState)(""),[ea,en]=(0,a.useState)({title:D,message:E}),[eo,es]=(0,a.useState)(0),[ei,er]=(0,a.useState)({w:0,h:0}),el=(0,l.useReducedMotion)(),ed=(0,a.useId)(),eh=`${ed}-email`,ec=`${ed}-error`,eu=`${ed}-note`,ep=`${ed}-title`,em=`${ed}-done`,eg=(0,a.useRef)(null),ef=(0,a.useRef)(null),ey=(0,a.useRef)(null),ew=(0,a.useRef)(null),eb=(0,a.useRef)(!1),ev=(0,a.useRef)(!0),ek=(0,a.useRef)(!1),eA=(0,a.useRef)(new Set),ex=(0,r.useMotionValue)(0),eS=(0,r.useMotionValue)(0),eW=(0,r.useMotionValue)(0);(0,a.useEffect)(()=>{ev.current=!0;let e=eA.current;return()=>{ev.current=!1,e.forEach(e=>e.stop())}},[]);let eT="done"!==Y;(0,a.useLayoutEffect)(()=>{let e=ef.current;if(!eT||!e||"u"<typeof ResizeObserver)return;let t=new ResizeObserver(()=>er({w:e.offsetWidth,h:e.offsetHeight}));return t.observe(e),()=>t.disconnect()},[eT]),(0,a.useEffect)(()=>{"done"===Y&&ew.current?.focus({preventScroll:!0}),"idle"===Y&&ek.current&&(ek.current=!1,ey.current?.focus())},[Y]),(0,a.useEffect)(()=>{if("waiting"!==Y)return;let e=(0,i.animate)(eW,1,{duration:1.1,ease:"easeInOut",repeat:1/0,repeatType:"mirror"});return()=>{e.stop(),(0,i.animate)(eW,0,{duration:.25})}},[Y,eW]);let ej=(e,t,a)=>new Promise(n=>{let o=(0,i.animate)(e,t,{duration:a,ease:"linear",onComplete:()=>{eA.current.delete(o),n()}});eA.current.add(o)});function eq(e){Z(""),requestAnimationFrame(()=>{ev.current&&Z(e)})}function eC(){el||ef.current?.animate?.([{transform:"translateX(0)"},{transform:"translateX(-9px) rotate(-0.4deg)"},{transform:"translateX(7px) rotate(0.3deg)"},{transform:"translateX(-4px)"},{transform:"translateX(2px)"},{transform:"translateX(0)"}],{duration:440,easing:"cubic-bezier(0.25, 1, 0.5, 1)"})}async function eD(e){let t;eb.current=!0,V(""),eq("Subscribing…");
11let a=Promise.resolve().then(()=>g(e)).then(e=>({err:null,copy:e}),e=>({err:e instanceof Error?e:Error(String(e??"")),copy:void 0}));if(a.then(e=>{let{err:a}=e;t=a}),el){G("sending");let{err:t,copy:n}=await a;return t?eM(t):eE(e,n)}if(es(ef.current.offsetHeight),G("folding"),await u(d.fade),!ev.current)return;for(let[e,a]of(X(function(){let e=eg.current,t=ef.current,a=0,n=0;for(let o=t;o&&o!==e;o=o.offsetParent)a+=o.offsetLeft,n+=o.offsetTop;let o=getComputedStyle(e),s=(e,t)=>{let a=(o.getPropertyValue(e).match(/[\d.]+/g)||[]).slice(0,3).map(Number);return 3===a.length?a:t};return function(e){let t,a,n,o,s,{w:i,h:r,cx:l,cy:d,width:c,height:u,paper:g,shade:f,compact:b,viewport:v}=e,k=Math.max(i,r),q=Math.min(i,r),C={...(t=[k/2,0],a=Math.tan(p/8),n=.19*q,o=[{step:0,p:t,d:y([-1,-1]),up:1},{step:0,p:t,d:y([-1,1]),up:1,lag:!0},{step:1,p:t,d:y([-1,-a]),up:1},{step:1,p:t,d:y([-1,a]),up:1,lag:!0},{step:2,p:[0,0],d:[1,0],up:1,moving:[0,1]},{step:3,p:[0,-n],d:[1,0],up:1,angle:m,half:!0},{step:3,p:[0,-n],d:[1,0],up:-1,angle:m,half:!1}],s=[{pts:[[-k/2,-q/2,-1],[k/2,-q/2,-1],[k/2,q/2,-1],[-k/2,q/2,-1]],m:[1,0,0,1,0,0],z:0,moves:[]}],h.forEach((e,t)=>{let a=s.map(e=>e.z),n=Math.max(...a)+.3,i=Math.min(...a)-.3;o.forEach((e,a)=>{if(e.step!==t)return;let o=t=>Math.sign(w(e.d,[t[0]-e.p[0],t[1]-e.p[1]])),r=e.moving?o(e.moving):-o([0,0]);e.angle=e.angle??p,e.axisZ=e.up>0?n:i,e.spin=e.up*r*e.angle;let l=e.angle===p,d=[];for(let t of s){if("half"in e&&!!t.moves[4]!==e.half){d.push({...t,moves:Object.assign(t.moves.slice(),{[a]:!1})});continue}let n=S(t.m);(function(e,t,a,n){let o=e.map(e=>{let n=w(a,[e[0]-t[0],e[1]-t[1]]);return 1e-7>Math.abs(n)?0:n}),s=[[],[]];return e.forEach((t,a)=>{let i=(a+1)%e.length,r=e[i];[1,-1].forEach((e,l)=>{let d=o[a]*e,h=o[i]*e;if(d>=0&&s[l].push([t[0],t[1],0===d&&h<0?n:t[2]]),d>0&&h<0||d<0&&h>0){let e=o[a]/(o[a]-o[i]);s[l].push([t[0]+(r[0]-t[0])*e,t[1]+(r[1]-t[1])*e,d>0?n:t[2]])}})}),s.map(e=>e.length>2&&Math.abs(T(e))>.001?e:null)})(t.pts.map(e=>{let[a,n,o]=e;return[...A(t.m,[a,n]),o]}),e.p,e.d,a).forEach((o,s)=>{if(!o)return;let i=(0===s?1:-1)===r;d.push({pts:o.map(e=>{let[t,a,o]=e;return[...A(n,[t,a]),o]}),m:i&&l?x(W(e.p,e.d),t.m):t.m,z:i&&l?2*e.axisZ-t.z:t.z,moves:Object.assign(t.moves.slice(),{[a]:i})})})}s=d})}),{folds:o,facets:s,keel:n}),L:k,S:q,cx:l,cy:d,paper:g,shade:f,place:r>i?-p/2:0,ready:Math.min(.74,.6*c/k),fit:b?Math.min(1,(v-24)/(1.14*i)):Math.min(1,(c-24)/(1.14*i),(u-24)/(1.14*r)),centre:[0,0,0],offset:[0,0],path:[]},D=C.facets.flatMap(e=>{let t=e.pts.map(e=>{let[t,a]=e;return[t,a,0]});return C.folds.forEach((a,n)=>{e.moves[n]&&(t=t.map(j(a,a.spin)))}),t});C.centre=[0,1,2].map(e=>{let[t,a]=[Math.min(...D.map(t=>t[e])),Math.max(...D.map(t=>t[e]))];return(t+a)/2});let E=P(C,4,0,0).items.flatMap(e=>e.screen),M=e=>(Math.min(...E.map(t=>t[e]))+Math.max(...E.map(t=>t[e])))/2;C.offset=[l-M(0),d-M(1)];let I=l+C.offset[0]-24.680120870143462,N=d+C.offset[1]- -8.178730576019062,U=b?c-24:c-Math.max(36,.12*c),O=b?-Math.min(160,.6*u):Math.max(28,.1*u);return C.path=[[I,N],[I+(U-I)*.5,N+(U-I)*.5*Math.tan(-.32)+10],[U-(U-I)*.12,O+(N-O)*.42],[U,O]],C}({w:t.offsetWidth,h:t.offsetHeight,cx:a+t.offsetWidth/2,cy:n+t.offsetHeight/2,width:e.offsetWidth,height:e.offsetHeight,paper:s("--paper-rgb",[255,255,255]),shade:s("--paper-shade-rgb",[112,126,120]),compact:B,viewport:document.documentElement.clientWidth})}()),h.entries())){if(await u(d.beat),t||!ev.current)break;R?.(a),await ej(ex,e+1,d[a])}G("waiting");let{err:n,copy:o}=await a;if(ev.current){if(n){R?.("unfold");let e=ex.get()/h.length;return await ej(ex,0,d.unfold*Math.max(e,.25)),eM(n)}return G("flying"),R?.("launch"),await ej(eS,1,d.launch),eE(e,o)}}function eE(e,t){if(!ev.current)return;eb.current=!1;let a={title:t?.title||D,message:t?.message||E};en(a),et(e),G("done"),eq(`${a.title} ${a.message}`)}function eM(e){if(!ev.current)return;eb.current=!1;let t=e?.message||"Something went wrong. Please try again.";X(null),ex.set(0),es(0),G("idle"),V(t),eq(t),eC(),ey.current?.focus()}(0,a.useEffect)(()=>{if("done"!==Y||!Q)return;let e=setTimeout(()=>{X(null),ex.set(0),eS.set(0)},900);return()=>clearTimeout(e)},[Y,Q,ex,eS]);let eP="idle"===Y;return(0,t.jsx)(s.MotionConfig,{reducedMotion:"user",children:(0,t.jsxs)("section",{ref:eg,className:`paper-plane-root${B?" pp-compact":""}${H?` ${H}`:""}`,"data-phase":Y,"aria-labelledby":"done"===Y?em:ep,children:[(0,t.jsxs)("div",{className:"pp-stage",style:eo?{minHeight:eo}:void 0,children:[(0,t.jsx)(o.AnimatePresence,{initial:!1,children:"done"!==Y?(0,t.jsx)(n.motion.div,{className:"pp-card-wrap",initial:{opacity:0,y:-16,rotate:-1.2}
11,animate:{opacity:1,y:0,rotate:0},exit:{opacity:0,transition:{duration:0}},transition:{duration:.5,ease:[.25,1,.5,1]},children:(0,t.jsxs)("div",{ref:ef,className:`pp-card${Q?" is-away":""}`,children:[(0,t.jsx)(N,{...ei}),(0,t.jsxs)("div",{className:"pp-content","aria-busy":!eP||void 0,children:[b?(0,t.jsxs)(t.Fragment,{children:[f&&(0,t.jsx)("p",{className:"pp-eyebrow",children:f}),(0,t.jsx)("h2",{id:ep,className:"pp-title",children:b})]}):f&&(0,t.jsx)("h4",{id:ep,className:"pp-eyebrow",children:f}),v&&(0,t.jsx)("p",{className:"pp-desc",children:v}),(0,t.jsxs)("form",{className:"pp-form",onSubmit:function(e){if(e.preventDefault(),eb.current||!g)return;let t=z.trim(),a=t?c.test(t)?"":"Enter a full email address, like [email protected].":"Enter your email address.";if(a){V(a),eq(a),eC(),ey.current?.focus();return}window.matchMedia?.("(pointer: coarse)").matches&&ey.current?.blur(),eD(t)},noValidate:!0,children:[(0,t.jsx)("label",{htmlFor:eh,className:"pp-sr",children:_}),(0,t.jsxs)("div",{className:"pp-row",children:[(0,t.jsx)("input",{ref:ey,id:eh,className:"pp-input",type:"email",name:"email",inputMode:"email",autoComplete:"email",autoCapitalize:"none",spellCheck:!1,placeholder:k,value:z,readOnly:!eP,onChange:e=>{K(e.target.value),$&&V("")},"aria-invalid":!!$||void 0,"aria-describedby":[$&&ec,C&&eu].filter(Boolean).join(" ")||void 0}),(0,t.jsxs)("button",{type:"submit",className:"pp-submit","aria-disabled":!eP||void 0,children:[(0,t.jsx)("span",{children:"sending"===Y?"Subscribing…":q}),(0,t.jsx)(U,{})]})]}),$&&(0,t.jsxs)("p",{id:ec,className:"pp-error",children:[(0,t.jsx)(O,{}),(0,t.jsx)("span",{children:$})]})]}),C&&(0,t.jsx)("p",{id:eu,className:"pp-fine",children:C})]})]})},"card"):(0,t.jsxs)(n.motion.div,{className:"pp-success",initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{duration:.55,ease:[.25,1,.5,1],delay:.05},children:[(0,t.jsx)("span",{className:"pp-success-mark","aria-hidden":"true",children:(0,t.jsx)(U,{size:20})}),(0,t.jsx)("h2",{id:em,ref:ew,className:"pp-success-title",tabIndex:-1,children:ea.title}),(0,t.jsx)("p",{className:"pp-success-text",children:ea.message}),ee&&(0,t.jsx)("p",{className:"pp-success-email",children:ee}),(M||!!L)&&(0,t.jsx)("button",{type:"button",className:"pp-again",onClick:function(){X(null),ex.set(0),eS.set(0),K(""),V(""),et(""),es(0),Z(""),ek.current=!0,G("idle"),L?.()},children:"Send another"})]},"done")}),(0,t.jsx)("p",{className:"pp-wait","aria-hidden":"true",children:"Subscribing…"})]}),Q&&(0,t.jsx)(I,{rig:Q,fold:ex,flight:eS,bob:eW,landed:"done"===Y}),(0,t.jsx)("p",{className:"pp-sr",role:"status","aria-live":"polite",children:J})]})})}var R=e.i(44242);e.s(["NewsletterSection",0,function(e){let{eyebrow:a="New posts, in your inbox",title:n=(0,t.jsxs)(t.Fragment,{children:["Be first to read ",(0,t.jsx)("span",{className:"serif-accent",children:"the next note."})]}),description:o="We send a short email whenever we publish a new field note or ship a studio update. No fixed schedule, no filler.",finePrint:s="Unsubscribe in one click. We never share your address.",source:i="NEWSLETTER",variant:r="section",className:l}=e;return(0,t.jsx)(L,{variant:r,className:l,eyebrow:a,title:n,description:o,finePrint:s,placeholder:"[email protected]",buttonLabel:"Subscribe",allowReset:!0,onSubscribe:async e=>{let t=await (0,R.requestNewsletterSubscription)(e,i);if(!t.ok)throw Error(t.description);let a=R.NEWSLETTER_SUCCESS_COPY[t.status];return{title:`${a.title}.`,message:a.description}}})}],85265)},74294,e=>{"use strict";var t=e.i(43476),a=e.i(22016),n=e.i(18566),o=e.i(47345),s=e.i(57675);e.s(["FooterCTAButton",0,function(){let e="/contact-us"===(0,n.usePathname)();return(0,t.jsx)(o.Magnetic,{strength:12,children:(0,t.jsxs)(a.default,{href:"/contact-us",onClick:t=>{e&&(t.preventDefault(),window.scrollTo({top:0,behavior:"smooth"}))},className:"btn btn-primary btn-lg","aria-label":"Start a project",children:["Start a project",(0,t.jsx)(s.IconArrowRight,{className:"arrow-shift"})]})})}])},92031,e=>{"use strict";var t=e.i(43476),a=e.i(69025);e.s(["CookieDetailsButton",0,function(){return(0,t.jsx)("button",{type:"button",className:"cc-footer-link","aria-haspopup":"dialog",onClick:a.openCookieDetails,children:"Cookies"})}])},80608,e=>{"use strict";var t=e.i(43476),a=e.i(71645);e.s(["ScrollProgress",0,function(){let e=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let t=0,a=()=>{t=0;let a=e.current;if(!a)return;let n=document.documentElement,o=n.scrollHeight-n.clientHeight,s=o<=0?0:n.scrollTop/o*100;a.style.setProperty("--p",`${s}%`)},n=()=>{t||(t=requestAnimationFrame(a))};return a(),window.addEventListener("scroll",n,{passive:!0}
11),window.addEventListener("resize",n),()=>{window.removeEventListener("scroll",n),window.removeEventListener("resize",n),t&&cancelAnimationFrame(t)}},[]),(0,t.jsx)("div",{className:"scroll-progress","aria-hidden":"true",children:(0,t.jsx)("span",{ref:e})})}])},7482,e=>{"use strict";let t;var a=e.i(71645),n=e.i(18566),o="1.3.23";function s(e,t,a){return Math.max(e,Math.min(t,a))}var i=class{isRunning=!1;value=0;from=0;to=0;currentTime=0;lerp;duration;easing;onUpdate;advance(e){if(!this.isRunning)return;let t=!1;if(this.duration&&this.easing){this.currentTime+=e;let a=s(0,this.currentTime/this.duration,1),n=(t=a>=1)?1:this.easing(a);this.value=this.from+(this.to-this.from)*n}else if(this.lerp){var a,n,o,i;this.value=(a=this.value,n=this.to,o=60*this.lerp,(1-(i=1-Math.exp(-o*e)))*a+i*n),Math.round(this.value)===Math.round(this.to)&&(this.value=this.to,t=!0)}else this.value=this.to,t=!0;t&&this.stop(),this.onUpdate?.(this.value,t)}stop(){this.isRunning=!1}fromTo(e,t,a){let{lerp:n,duration:o,easing:s,onStart:i,onUpdate:r}=a;this.from=this.value=e,this.to=t,this.lerp=n,this.duration=o,this.easing=s,this.currentTime=0,this.isRunning=!0,i?.(),this.onUpdate=r}},r=class{width=0;height=0;scrollHeight=0;scrollWidth=0;debouncedResize;wrapperResizeObserver;contentResizeObserver;constructor(e,t,{autoResize:a=!0,debounce:n=250}={}){this.wrapper=e,this.content=t,a&&(this.debouncedResize=function(e,t){let a;return function(){for(var n=arguments.length,o=Array(n),s=0;s<n;s++)o[s]=arguments[s];clearTimeout(a),a=setTimeout(()=>{a=void 0,e.apply(this,o)},t)}}(this.resize,n),this.wrapper instanceof Window?window.addEventListener("resize",this.debouncedResize):(this.wrapperResizeObserver=new ResizeObserver(this.debouncedResize),this.wrapperResizeObserver.observe(this.wrapper)),this.contentResizeObserver=new ResizeObserver(this.debouncedResize),this.contentResizeObserver.observe(this.content)),this.resize()}destroy(){this.wrapperResizeObserver?.disconnect(),this.contentResizeObserver?.disconnect(),this.wrapper===window&&this.debouncedResize&&window.removeEventListener("resize",this.debouncedResize)}resize=()=>{this.onWrapperResize(),this.onContentResize()};onWrapperResize=()=>{this.wrapper instanceof Window?(this.width=window.innerWidth,this.height=window.innerHeight):(this.width=this.wrapper.clientWidth,this.height=this.wrapper.clientHeight)};onContentResize=()=>{this.wrapper instanceof Window?(this.scrollHeight=this.content.scrollHeight,this.scrollWidth=this.content.scrollWidth):(this.scrollHeight=this.wrapper.scrollHeight,this.scrollWidth=this.wrapper.scrollWidth)};get limit(){return{x:this.scrollWidth-this.width,y:this.scrollHeight-this.height}}},l=class{events={};emit(e){for(var t=arguments.length,a=Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];let o=this.events[e]||[];for(let e=0,t=o.length;e<t;e++)o[e]?.(...a)}on(e,t){return this.events[e]?this.events[e].push(t):this.events[e]=[t],()=>{this.events[e]=this.events[e]?.filter(e=>t!==e)}}off(e,t){this.events[e]=this.events[e]?.filter(e=>t!==e)}destroy(){this.events={}}};let d=100/6,h={passive:!1};function c(e,t){return 1===e?d:2===e?t:1}var u=class{touchStart={x:0,y:0};lastDelta={x:0,y:0};window={width:0,height:0};emitter=new l;constructor(e,t={wheelMultiplier:1,touchMultiplier:1}){this.element=e,this.options=t,window.addEventListener("resize",this.onWindowResize),this.onWindowResize(),this.element.addEventListener("wheel",this.onWheel,h),this.element.addEventListener("touchstart",this.onTouchStart,h),this.element.addEventListener("touchmove",this.onTouchMove,h),this.element.addEventListener("touchend",this.onTouchEnd,h)}on(e,t){return this.emitter.on(e,t)}destroy(){this.emitter.destroy(),window.removeEventListener("resize",this.onWindowResize),this.element.removeEventListener("wheel",this.onWheel,h),this.element.removeEventListener("touchstart",this.onTouchStart,h),this.element.removeEventListener("touchmove",this.onTouchMove,h),this.element.removeEventListener("touchend",this.onTouchEnd,h)}onTouchStart=e=>{let{clientX:t,clientY:a}=e.targetTouches?e.targetTouches[0]:e;this.touchStart.x=t,this.touchStart.y=a,this.lastDelta={x:0,y:0},this.emitter.emit("scroll",{deltaX:0,deltaY:0,event:e})};onTouchMove=e=>{let{clientX:t,clientY:a}=e.targetTouches?e.targetTouches[0]:e,n=-(t-this.touchStart.x)*this.options.touchMultiplier,o=-(a-this.touchStart.y)*this.options.touchMultiplier;this.touchStart.x=t,this.touchStart.y=a,this.lastDelta={x:n,y:o},this.emitter.emit("scroll",{deltaX:n,deltaY:o,event:e})};onTouchEnd=e=>{this.emitter.emit("scroll",{deltaX:this.lastDelta.x,deltaY:this.lastDelta.y,event:e})};onWheel=e=>{let{deltaX:t,deltaY:a,deltaMode:n}=e,o=c(n,this.window.width),s=c(n,this.window.height);t*=o,a*=s,t*=this.options.wheelMultiplier,a*=this.options.wheelMultiplier,this.emitter.emit("scroll",{deltaX:t,deltaY:a,event:e})};onWindowResize=()=>{this.window={width:window.innerWidth,height:window.innerHeight}}};let p=e=>Math.min(1,1.001-2**(-10*e));var m=class{_isScrolling=!1;_isStopped=!1;_isLocked=!1;_preventNextNativeScrollEvent=!1;_resetVelocityTimeout=null;_rafId=null;isTouching;time=0;userData={};lastVelocity=0;velocity=0;direction=0;options;targetScroll;animatedScroll;animate=new i;emitter=new l;dimensions;virtualScroll;constructor({wrapper:e=window,content:t=document.documentElement,eventsTarget:a=e,smoothWheel:n=!0,syncTouch:s=!1,syncTouchLerp:i=.075,touchInertiaExponent:l=1.7,duration:d,easing:h,lerp:c=.
111,infinite:m=!1,orientation:g="vertical",gestureOrientation:f="horizontal"===g?"both":"vertical",touchMultiplier:y=1,wheelMultiplier:w=1,autoResize:b=!0,prevent:v,virtualScroll:k,overscroll:A=!0,autoRaf:x=!1,anchors:S=!1,autoToggle:W=!1,allowNestedScroll:T=!1,__experimental__naiveDimensions:j=!1,naiveDimensions:q=j,stopInertiaOnNavigate:C=!1}={}){window.lenisVersion=o,window.lenis||(window.lenis={}),window.lenis.version=o,"horizontal"===g&&(window.lenis.horizontal=!0),!0===s&&(window.lenis.touch=!0),e&&e!==document.documentElement||(e=window),"number"==typeof d&&"function"!=typeof h?h=p:"function"==typeof h&&"number"!=typeof d&&(d=1),this.options={wrapper:e,content:t,eventsTarget:a,smoothWheel:n,syncTouch:s,syncTouchLerp:i,touchInertiaExponent:l,duration:d,easing:h,lerp:c,infinite:m,gestureOrientation:f,orientation:g,touchMultiplier:y,wheelMultiplier:w,autoResize:b,prevent:v,virtualScroll:k,overscroll:A,autoRaf:x,anchors:S,autoToggle:W,allowNestedScroll:T,naiveDimensions:q,stopInertiaOnNavigate:C},this.dimensions=new r(e,t,{autoResize:b}),this.updateClassName(),this.targetScroll=this.animatedScroll=this.actualScroll,this.options.wrapper.addEventListener("scroll",this.onNativeScroll),this.options.wrapper.addEventListener("scrollend",this.onScrollEnd,{capture:!0}),(this.options.anchors||this.options.stopInertiaOnNavigate)&&this.options.wrapper.addEventListener("click",this.onClick),this.options.wrapper.addEventListener("pointerdown",this.onPointerDown),this.virtualScroll=new u(a,{touchMultiplier:y,wheelMultiplier:w}),this.virtualScroll.on("scroll",this.onVirtualScroll),this.options.autoToggle&&(this.checkOverflow(),this.rootElement.addEventListener("transitionend",this.onTransitionEnd)),this.options.autoRaf&&(this._rafId=requestAnimationFrame(this.raf))}destroy(){this.emitter.destroy(),this.options.wrapper.removeEventListener("scroll",this.onNativeScroll),this.options.wrapper.removeEventListener("scrollend",this.onScrollEnd,{capture:!0}),this.options.wrapper.removeEventListener("pointerdown",this.onPointerDown),(this.options.anchors||this.options.stopInertiaOnNavigate)&&this.options.wrapper.removeEventListener("click",this.onClick),this.virtualScroll.destroy(),this.dimensions.destroy(),this.cleanUpClassName(),this._rafId&&cancelAnimationFrame(this._rafId)}on(e,t){return this.emitter.on(e,t)}off(e,t){return this.emitter.off(e,t)}onScrollEnd=e=>{e instanceof CustomEvent||"smooth"!==this.isScrolling&&!1!==this.isScrolling||e.stopPropagation()};dispatchScrollendEvent=()=>{this.options.wrapper.dispatchEvent(new CustomEvent("scrollend",{bubbles:this.options.wrapper===window,detail:{lenisScrollEnd:!0}}))};get overflow(){let e=this.isHorizontal?"overflow-x":"overflow-y";return getComputedStyle(this.rootElement)[e]}checkOverflow(){["hidden","clip"].includes(this.overflow)?this.internalStop():this.internalStart()}onTransitionEnd=e=>{e.propertyName?.includes("overflow")&&e.target===this.rootElement&&this.checkOverflow()};setScroll(e){this.isHorizontal?this.options.wrapper.scrollTo({left:e,behavior:"instant"}):this.options.wrapper.scrollTo({top:e,behavior:"instant"})}onClick=e=>{let t=e.composedPath().filter(e=>e instanceof HTMLAnchorElement&&e.href).map(e=>new URL(e.href)),a=new URL(window.location.href);if(this.options.anchors){let e=t.find(e=>a.host===e.host&&a.pathname===e.pathname&&e.hash);if(e){let t="object"==typeof this.options.anchors&&this.options.anchors?this.options.anchors:void 0,a=`#${e.hash.split("#")[1]}`;this.scrollTo(a,t);return}}if(this.options.stopInertiaOnNavigate&&t.some(e=>a.host===e.host&&a.pathname!==e.pathname))return void this.reset()};onPointerDown=e=>{1===e.button&&this.reset()};onVirtualScroll=e=>{if("function"==typeof this.options.virtualScroll&&!1===this.options.virtualScroll(e))return;let{deltaX:t,deltaY:a,event:n}=e;if(this.emitter.emit("virtual-scroll",{deltaX:t,deltaY:a,event:n}),n.ctrlKey||n.lenisStopPropagation)return;let o=n.type.includes("touch"),s=n.type.includes("wheel");this.isTouching="touchstart"===n.type||"touchmove"===n.type;let i=0===t&&0===a;if(this.options.syncTouch&&o&&"touchstart"===n.type&&i&&!this.isStopped&&!this.isLocked)return void this.reset();let r="vertical"===this.options.gestureOrientation&&0===a||"horizontal"===this.options.gestureOrientation&&0===t;if(i||r)return;let l=n.composedPath();l=l.slice(0,l.indexOf(this.rootElement));let d=this.options.prevent,h=Math.abs(t)>=Math.abs(a)?"horizontal":"vertical";if(l.find(e=>e instanceof HTMLElement&&("function"==typeof d&&d?.(e)||e.hasAttribute?.("data-lenis-prevent")||"vertical"===h&&e.hasAttribute?.("data-lenis-prevent-vertical")||"horizontal"===h&&e.hasAttribute?.("data-lenis-prevent-horizontal")||o&&e.hasAttribute?.("data-lenis-prevent-touch")||s&&e.hasAttribute?.("data-lenis-prevent-wheel")||this.options.allowNestedScroll&&this.hasNestedScroll(e,{deltaX:t,deltaY:a}))))return;if(this.isStopped||this.isLocked){n.cancelable&&n.preventDefault();return}if(!(this.options.syncTouch&&o||this.options.smoothWheel&&s)){this.isScrolling="native",this.animate.stop(),n.lenisStopPropagation=!0;return}let c=a;"both"===this.options.gestureOrientation?c=Math.abs(a)>Math.abs(t)?a:t:"horizontal"===this.options.gestureOrientation&&(c=t),(!this.options.overscroll||this.options.infinite||this.options.wrapper!==window&&this.limit>0&&(this.animatedScroll>0&&this.animatedScroll<this.limit||0===this.animatedScroll&&a>0||this.animatedScroll===this.limit&&a<0))&&(n.lenisStopPropagation=!0),n.cancelable&&n.preventDefault();let u=o&&this.options.syncTouch,p=o&&"touchend"===n.type;p&&(c=Math.sign(c)*Math.abs(this.velocity)**this.options.touchInertiaExponent),this.scrollTo(this.targetScroll+c,{programmatic:!1,...u?{lerp:p?this.options.syncTouchLerp:1}:{lerp:this.options.lerp,duration:this.options.duration,easing:this.options.easing}})};resize(){this.dimensions.resize(),this.animatedScroll=this.targetScroll=this.actualScroll,this.emit
11()}emit(){this.emitter.emit("scroll",this)}onNativeScroll=()=>{if(null!==this._resetVelocityTimeout&&(clearTimeout(this._resetVelocityTimeout),this._resetVelocityTimeout=null),this._preventNextNativeScrollEvent){this._preventNextNativeScrollEvent=!1;return}if(!1===this.isScrolling||"native"===this.isScrolling){let e=this.animatedScroll;this.animatedScroll=this.targetScroll=this.actualScroll,this.lastVelocity=this.velocity,this.velocity=this.animatedScroll-e,this.direction=Math.sign(this.animatedScroll-e),this.isStopped||(this.isScrolling="native"),this.emit(),0!==this.velocity&&(this._resetVelocityTimeout=setTimeout(()=>{this.lastVelocity=this.velocity,this.velocity=0,this.isScrolling=!1,this.emit()},400))}};reset(){this.isLocked=!1,this.isScrolling=!1,this.animatedScroll=this.targetScroll=this.actualScroll,this.lastVelocity=this.velocity=0,this.animate.stop()}start(){if(this.isStopped){if(this.options.autoToggle)return void this.rootElement.style.removeProperty("overflow");this.internalStart()}}internalStart(){this.isStopped&&(this.reset(),this.isStopped=!1,this.emit())}stop(){if(!this.isStopped){if(this.options.autoToggle)return void this.rootElement.style.setProperty("overflow","clip");this.internalStop()}}internalStop(){this.isStopped||(this.reset(),this.isStopped=!0,this.emit())}raf=e=>{let t=e-(this.time||e);this.time=e,this.animate.advance(.001*t),this.options.autoRaf&&(this._rafId=requestAnimationFrame(this.raf))};scrollTo(e){let{offset:t=0,immediate:a=!1,lock:n=!1,programmatic:o=!0,lerp:i=o?this.options.lerp:void 0,duration:r=o?this.options.duration:void 0,easing:l=o?this.options.easing:void 0,onStart:d,onComplete:h,force:c=!1,userData:u}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((this.isStopped||this.isLocked)&&!c)return;let m=e,g=t;if("string"==typeof m&&["top","left","start","#"].includes(m))m=0;else if("string"==typeof m&&["bottom","right","end"].includes(m))m=this.limit;else{let e=null;if("string"==typeof m?(e=document.querySelector(m))||("#top"===m?m=0:console.warn("Lenis: Target not found",m)):m instanceof HTMLElement&&m?.nodeType&&(e=m),e){if(this.options.wrapper!==window){let e=this.rootElement.getBoundingClientRect();g-=this.isHorizontal?e.left:e.top}let t=e.getBoundingClientRect(),a=getComputedStyle(e),n=this.isHorizontal?Number.parseFloat(a.scrollMarginLeft):Number.parseFloat(a.scrollMarginTop),o=getComputedStyle(this.rootElement),s=this.isHorizontal?Number.parseFloat(o.scrollPaddingLeft):Number.parseFloat(o.scrollPaddingTop);m=(this.isHorizontal?t.left:t.top)+this.animatedScroll-(Number.isNaN(n)?0:n)-(Number.isNaN(s)?0:s)}}if("number"==typeof m){if(m+=g,this.options.infinite){if(o){this.targetScroll=this.animatedScroll=this.scroll;let e=m-this.animatedScroll;e>this.limit/2?m-=this.limit:e<-this.limit/2&&(m+=this.limit)}}else m=s(0,m,this.limit);if(m===this.targetScroll){d?.(this),h?.(this);return}if(this.userData=u??{},a){this.animatedScroll=this.targetScroll=m,this.setScroll(this.scroll),this.reset(),this.preventNextNativeScrollEvent(),this.emit(),h?.(this),this.userData={},requestAnimationFrame(()=>{this.dispatchScrollendEvent()});return}o||(this.targetScroll=m),"number"==typeof r&&"function"!=typeof l?l=p:"function"==typeof l&&"number"!=typeof r&&(r=1),this.animate.fromTo(this.animatedScroll,m,{duration:r,easing:l,lerp:i,onStart:()=>{n&&(this.isLocked=!0),this.isScrolling="smooth",d?.(this)},onUpdate:(e,t)=>{this.isScrolling="smooth",this.lastVelocity=this.velocity,this.velocity=e-this.animatedScroll,this.direction=Math.sign(this.velocity),this.animatedScroll=e,this.setScroll(this.scroll),o&&(this.targetScroll=e),t||this.emit(),t&&(this.reset(),this.emit(),h?.(this),this.userData={},requestAnimationFrame(()=>{this.dispatchScrollendEvent()}),this.preventNextNativeScrollEvent())}})}}preventNextNativeScrollEvent(){this._preventNextNativeScrollEvent=!0,requestAnimationFrame(()=>{this._preventNextNativeScrollEvent=!1})}hasNestedScroll(e,t){let a,n,o,s,i,r,l,d,h,c,u,p,m,g,f,y,{deltaX:w,deltaY:b}=t,v=Date.now();e._lenis||(e._lenis={});let k=e._lenis;if(v-(k.time??0)>2e3){k.time=Date.now();let t=window.getComputedStyle(e);
11if(k.computedStyle=t,a=["auto","overlay","scroll"].includes(t.overflowX),n=["auto","overlay","scroll"].includes(t.overflowY),i=["auto"].includes(t.overscrollBehaviorX),r=["auto"].includes(t.overscrollBehaviorY),k.hasOverflowX=a,k.hasOverflowY=n,!(a||n))return!1;l=e.scrollWidth,d=e.scrollHeight,h=e.clientWidth,c=e.clientHeight,o=l>h,s=d>c,k.isScrollableX=o,k.isScrollableY=s,k.scrollWidth=l,k.scrollHeight=d,k.clientWidth=h,k.clientHeight=c,k.hasOverscrollBehaviorX=i,k.hasOverscrollBehaviorY=r}else o=k.isScrollableX,s=k.isScrollableY,a=k.hasOverflowX,n=k.hasOverflowY,l=k.scrollWidth,d=k.scrollHeight,h=k.clientWidth,c=k.clientHeight,i=k.hasOverscrollBehaviorX,r=k.hasOverscrollBehaviorY;if(!(a&&o||n&&s))return!1;let A=Math.abs(w)>=Math.abs(b)?"horizontal":"vertical";if("horizontal"===A)u=Math.round(e.scrollLeft),p=l-h,m=w,g=a,f=o,y=i;else{if("vertical"!==A)return!1;u=Math.round(e.scrollTop),p=d-c,m=b,g=n,f=s,y=r}return!y&&(u>=p||u<=0)||(m>0?u<p:u>0)&&g&&f}get rootElement(){return this.options.wrapper===window?document.documentElement:this.options.wrapper}get limit(){return this.options.naiveDimensions?this.isHorizontal?this.rootElement.scrollWidth-this.rootElement.clientWidth:this.rootElement.scrollHeight-this.rootElement.clientHeight:this.dimensions.limit[this.isHorizontal?"x":"y"]}get isHorizontal(){return"horizontal"===this.options.orientation}get actualScroll(){let e=this.options.wrapper;return this.isHorizontal?e.scrollX??e.scrollLeft:e.scrollY??e.scrollTop}get scroll(){var e;return this.options.infinite?(this.animatedScroll%(e=this.limit)+e)%e:this.animatedScroll}get progress(){return 0===this.limit?1:this.scroll/this.limit}get isScrolling(){return this._isScrolling}set isScrolling(e){this._isScrolling!==e&&(this._isScrolling=e,this.updateClassName())}get isStopped(){return this._isStopped}set isStopped(e){this._isStopped!==e&&(this._isStopped=e,this.updateClassName())}get isLocked(){return this._isLocked}set isLocked(e){this._isLocked!==e&&(this._isLocked=e,this.updateClassName())}get isSmooth(){return"smooth"===this.isScrolling}get className(){let e="lenis";return this.options.autoToggle&&(e+=" lenis-autoToggle"),this.isStopped&&(e+=" lenis-stopped"),this.isLocked&&(e+=" lenis-locked"),this.isScrolling&&(e+=" lenis-scrolling"),"smooth"===this.isScrolling&&(e+=" lenis-smooth"),e}updateClassName(){this.cleanUpClassName(),this.className.split(" ").forEach(e=>{this.rootElement.classList.add(e)})}cleanUpClassName(){for(let e of Array.from(this.rootElement.classList))("lenis"===e||e.startsWith("lenis-"))&&this.rootElement.classList.remove(e)}};let g=e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,f=()=>{let e=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--header-h"),10);return Number.isFinite(e)?-(e+12):-80};e.s(["SmoothScroll",0,function(){let e=(0,n.usePathname)();return(0,a.useEffect)(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;let e=new m({lerp:.09,smoothWheel:!0,wheelMultiplier:1.1,touchMultiplier:1.6});window.__lenis=e;let t=0,a=n=>{e.raf(n),t=requestAnimationFrame(a)};t=requestAnimationFrame(a);let n=t=>{if(t.defaultPrevented||0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)return;let a=t.target?.closest?.('a[href*="#"]');if(!a)return;let n=new URL(a.href,window.location.href);if(n.pathname!==window.location.pathname||!n.hash)return;let o=document.querySelector(n.hash);o&&(t.preventDefault(),e.scrollTo(o,{offset:f()}),history.pushState(null,"",n.hash))};return document.addEventListener("click",n),()=>{document.removeEventListener("click",n),cancelAnimationFrame(t),e.destroy(),delete window.__lenis}},[]),(0,a.useEffect)(()=>{let e=e=>{if(0!==e.button||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let a=e.target?.closest?.("a[href]");if(!a||a.target&&"_self"!==a.target)return;let n=new URL(a.href,window.location.href);n.origin===window.location.origin&&n.pathname!==window.location.pathname&&(t=n.hash)},a=()=>{t=void 0};return document.addEventListener("click",e,!0),window.addEventListener("popstate",a),()=>{document.removeEventListener("click",e,!0),window.removeEventListener("popstate",a)}},[]),(0,a.useEffect)(()=>{let e=t??window.location.hash;t=void 0;let a=!e&&!!window.location.hash;a&&history.replaceState(history.state,"",window.location.pathname+window.location.search);let n=window.__lenis;if(!n){a&&window.scrollTo(0,0);return}n.scrollTo(0,{immediate:!0,force:!0});let o=decodeURIComponent(e.slice(1)),s=o?document.getElementById(o):null;if(!s)return;let i=window.setTimeout(()=>{n.scrollTo(s,{offset:f(),duration:1.6,easing:g,force:!0})},600);return()=>window.clearTimeout(i)},[e]),null}],7482)},71509,e=>{"use strict";var t=e.i(71645);e.s(["PointerGlow",0,function(){return(0,t.useEffect)(()=>
11{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches||window.matchMedia("(hover: none)").matches)return;let e=0,t=null,a=()=>{if(e=0,!t)return;let{card:a,x:n,y:o}=t;a.style.setProperty("--mx",`${n}px`),a.style.setProperty("--my",`${o}px`),t=null},n=n=>{let o=n.target?.closest?.(".card");if(!o)return;let s=o.getBoundingClientRect();t={card:o,x:n.clientX-s.left,y:n.clientY-s.top},e||(e=requestAnimationFrame(a))};return document.addEventListener("pointermove",n,{passive:!0}),()=>{document.removeEventListener("pointermove",n),e&&cancelAnimationFrame(e)}},[]),null}])},65069,e=>{"use strict";var t=e.i(71645),a=e.i(17904);e.s(["ToasterMount",0,function(){return(0,t.useEffect)(()=>((0,a.mountToaster)({position:"top-right",offset:{top:92,right:16}}),()=>(0,a.unmountToaster)()),[]),null}])},51038,e=>{"use strict";var t=e.i(43476),a=e.i(71645),n=e.i(2714);e.s(["PromoBanner",0,function(e){let{promo:o}=e,[s,i]=(0,a.useState)(!1),[r,l]=(0,a.useState)(!1),[d,h]=(0,a.useState)(!0),c=(0,a.useRef)(null),u=(0,a.useRef)(null),p=()=>{null!==c.current&&(window.clearTimeout(c.current),c.current=null)},m=()=>{p(),c.current=window.setTimeout(()=>{c.current=null,h(!1)},3e3)};if((0,a.useEffect)(()=>{i(!0);let e=window.setTimeout(()=>l(!0),500);return m(),()=>{window.clearTimeout(e),p()}},[]),(0,a.useEffect)(()=>{if(!d||!window.matchMedia("(hover: none)").matches)return;let e=e=>{u.current&&!u.current.contains(e.target)&&(p(),h(!1))};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[d]),!s)return null;let g=!!(o.cta_url&&o.cta_label);return(0,t.jsxs)("aside",{ref:u,className:`promo-card${r?" promo-card--shown":""}${d?" promo-card--expanded":""}`,role:"complementary","aria-label":"Product announcement",onClick:()=>{h(!0),m()},children:[(0,t.jsx)("span",{className:"promo-card__dot","aria-hidden":"true"}),(0,t.jsx)("button",{type:"button",onClick:e=>{e.stopPropagation(),p(),l(!1),window.setTimeout(()=>i(!1),340)},className:"promo-card__close","aria-label":"Dismiss announcement",children:(0,t.jsx)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round","aria-hidden":"true",children:(0,t.jsx)("path",{d:"m6 6 12 12M18 6 6 18"})})}),o.image_url?(0,t.jsx)("div",{className:"promo-card__media",children:(0,t.jsx)(n.SafeImage,{src:o.image_url,alt:"",width:128,height:128,sizes:"64px",className:"promo-card__img"})}):null,(0,t.jsxs)("div",{className:"promo-card__body",children:[(0,t.jsx)("p",{className:"promo-card__title",children:o.title}),o.message?(0,t.jsx)("p",{className:"promo-card__msg",children:o.message}):null,g?(0,t.jsx)("div",{className:"promo-card__ctawrap",children:(0,t.jsx)("div",{className:"promo-card__ctawrap-inner",children:(0,t.jsxs)("a",{href:o.cta_url,target:"_blank",rel:"noopener noreferrer",className:"promo-card__cta",children:[o.cta_label,(0,t.jsx)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,t.jsx)("path",{d:"M5 12h14M13 6l6 6-6 6"})})]})})}):null]})]})}])},63938,e=>{"use strict";var t=e.i(43476),a=e.i(71645),n=e.i(70703),o=e.i(22016),s=e.i(88653),i=e.i(63209),r=e.i(46932),l=e.i(72328),d=e.i(69025);let h=(0,n.default)(()=>e.A(36593),{loadableGenerated:{modules:[37004]},ssr:!1}),c=()=>void 0,u={hidden:{opacity:0,y:36,scale:.94,filter:"blur(6px)"},show:{opacity:1,y:0,scale:1,filter:"blur(0px)",transition:{type:"spring",stiffness:260,damping:26,filter:{duration:.35},delayChildren:.12,staggerChildren:.07}},exit:{opacity:0,y:24,scale:.96,filter:"blur(4px)",transition:{duration:.28,ease:[.4,0,1,1]}}},p={hidden:{opacity:0,y:10},show:{opacity:1,y:0,transition:{type:"spring",stiffness:380,damping:30}}},m={hidden:{opacity:0,scale:.6,rotate:-14},show:{opacity:1,scale:1,rotate:0,transition:{type:"spring",stiffness:420,damping:18}}},g=[{top:"0%",left:"14%",delay:"0s",dur:"2.8s",size:10},{top:"0%",left:"48%",delay:"-1.7s",dur:"3.3s",size:7},{top:"0%",left:"80%",delay:"-0.8s",dur:"2.5s",size:9},{top:"34%",left:"100%",delay:"-2.1s",dur:"3s",size:8},{top:"100%",left:"88%",delay:"-1.1s",dur:"2.7s",size:10},{top:"100%",left:"56%",delay:"-2.6s",dur:"3.4s",size:7},{top:"100%",left:"22%",delay:"-0.4s",dur:"2.9s",size:9},{top:"62%",left:"0%",delay:"-1.4s",dur:"3.1s",size:8}];function f(e){let{onOk:n,onDetails:i,onArm:d}=e,h=(0,l.useReducedMotion)(),[c,f]=(0,a.useState)(!1);return(0,a.useEffect)(()=>
11{if(!c)return;let e=window.setTimeout(n,650*!h);return()=>window.clearTimeout(e)},[c,n,h]),(0,t.jsxs)(r.motion.section,{className:"cc-banner",role:"region","aria-label":"Cookie notice",variants:u,initial:"hidden",animate:"show",exit:"exit",whileHover:c?void 0:{y:-3},children:[(0,t.jsx)("span",{className:"cc-banner__rim","aria-hidden":"true"}),(0,t.jsxs)("span",{className:"cc-sparkles","aria-hidden":"true",children:[g.map((e,a)=>(0,t.jsx)("i",{className:"cc-twinkle",style:{top:e.top,left:e.left,width:e.size,height:e.size,animationDelay:e.delay,animationDuration:e.dur}},`t${a}`)),[0,1].map(e=>(0,t.jsx)("i",{className:"cc-spark",style:{animationDelay:`${-(4.5*e)}s`}},`s${e}`))]}),(0,t.jsxs)("div",{className:"cc-banner__body",children:[(0,t.jsx)(r.motion.span,{variants:m,className:"cc-banner__mark",children:(0,t.jsx)(y,{})}),(0,t.jsxs)("div",{children:[(0,t.jsx)(r.motion.p,{variants:p,className:"cc-banner__title",children:"We use cookies"}),(0,t.jsxs)(r.motion.p,{variants:p,className:"cc-banner__text",children:["They keep this site running, count visits and measure our ads, so we can keep improving it."," ",(0,t.jsx)(o.default,{href:"/privacy-policy#section-6",className:"cc-link",children:"Cookie policy"})]})]})]}),(0,t.jsxs)(r.motion.div,{variants:p,className:"cc-banner__actions",children:[(0,t.jsx)("button",{type:"button",className:"cc-btn","aria-haspopup":"dialog",disabled:c,onPointerEnter:d,onFocus:d,onClick:i,children:"Cookie details"}),(0,t.jsx)("button",{type:"button",className:"cc-btn cc-btn--primary","data-done":c||void 0,"aria-live":"polite",onClick:()=>f(!0),children:(0,t.jsx)(s.AnimatePresence,{mode:"popLayout",initial:!1,children:c?(0,t.jsxs)(r.motion.span,{className:"cc-btn__label",initial:{y:14,opacity:0},animate:{y:0,opacity:1},transition:{type:"spring",stiffness:420,damping:26},children:[(0,t.jsx)("svg",{viewBox:"0 0 16 16",width:"15",height:"15","aria-hidden":"true",className:"cc-btn__tick",children:(0,t.jsx)("path",{d:"m3.5 8.4 2.8 2.7 6.2-6.4"})}),"Thanks"]},"thanks"):(0,t.jsx)(r.motion.span,{className:"cc-btn__label",exit:{y:-14,opacity:0,transition:{duration:.16}},children:"Got it"},"ok")})})]})]})}function y(){return(0,t.jsx)("span",{className:"cc-mark","aria-hidden":"true",children:(0,t.jsxs)("svg",{viewBox:"0 0 52 52",width:"52",height:"52",children:[(0,t.jsx)("path",{className:"cc-mark__brace",d:"M15 14c-3.2 0-4.2 1.4-4.2 4.4v4.2c0 2-.9 3.2-3 3.4 2.1.2 3 1.4 3 3.4v4.2c0 3 1 4.4 4.2 4.4"}),(0,t.jsx)("path",{className:"cc-mark__brace",d:"M37 14c3.2 0 4.2 1.4 4.2 4.4v4.2c0 2 .9 3.2 3 3.4-2.1.2-3 1.4-3 3.4v4.2c0 3-1 4.4-4.2 4.4"}),(0,t.jsxs)("g",{className:"cc-mark__cookie",children:[(0,t.jsx)("path",{className:"cc-mark__dough",d:"M26 16.5a9.5 9.5 0 1 0 9.4 10.9 3.2 3.2 0 0 1-3.6-3.3 3.2 3.2 0 0 1-3.5-3.6A3.4 3.4 0 0 1 26 16.5Z"}),(0,t.jsx)("circle",{className:"cc-mark__chip",cx:"22.4",cy:"23.6",r:"1.35"}),(0,t.jsx)("circle",{className:"cc-mark__chip",cx:"25.6",cy:"29.8",r:"1.5"}),(0,t.jsx)("circle",{className:"cc-mark__chip",cx:"20.6",cy:"28.6",r:"1"}),(0,t.jsx)("circle",{className:"cc-mark__chip",cx:"30.4",cy:"28.2",r:"1.05"})]}),(0,t.jsx)("circle",{className:"cc-mark__crumb",cx:"35.6",cy:"19.2",r:"1.1"}),(0,t.jsx)("circle",{className:"cc-mark__crumb cc-mark__crumb--2",cx:"33.2",cy:"16.4",r:"0.75"})]})})}e.s(["CookieNotice",0,function(){let e=(0,a.useSyncExternalStore)(d.subscribeNotice,d.getNoticeSeen,c),[n,o]=(0,a.useState)(!1),[r,l]=(0,a.useState)(!1),[u,p]=(0,a.useState)(!1);(0,a.useEffect)(()=>{let e=window.setTimeout(()=>o(!0),900);return()=>window.clearTimeout(e)},[]);let m=(0,a.useCallback)(()=>{p(!0),l(!0)},[]);(0,a.useEffect)(()=>(window.addEventListener(d.OPEN_DETAILS_EVENT,m),()=>window.removeEventListener(d.OPEN_DETAILS_EVENT,m)),[m]);let g=n&&null===e&&!r;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.MotionConfig,{reducedMotion:"user",children:(0,t.jsx)(s.AnimatePresence,{children:g&&(0,t.jsx)(f,{onOk:d.acknowledgeNotice,onDetails:m,onArm:()=>p(!0)},"cc-banner")})}),u&&(0,t.jsx)(h,{open:r,seenAt:e?.seenAt??null,onClose:()=>l(!1)})]})}])}]);

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.