[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technologies":3,"\u002Fservices\u002Fweb-development\u002Fembeddable-widgets":167,"service-parent:\u002Fservices\u002Fweb-development\u002Fembeddable-widgets":432,"service-children:\u002Fservices\u002Fweb-development\u002Fembeddable-widgets":741,"glossary":742},[4,10,15,21,26,32,38,43,48,53,58,63,68,73,77,82,87,92,97,103,108,113,118,123,128,133,138,143,147,152,157,162],{"title":5,"description":6,"slug":7,"category":8,"icon":9},"Android","Every app we ship reaches Android — platform APIs, background execution, permissions, and the store requirements that come with them.","android","framework","logos:android-icon",{"title":11,"description":12,"slug":13,"category":8,"icon":14},"Angular","The front-end framework we work in when a product is already Angular — a batteries-included structure that suits large, long-lived apps.","angular","logos:angular-icon",{"title":16,"description":17,"slug":18,"category":19,"icon":20},"Dart","The language every Flutter app we ship is written in — sound null safety, real pattern matching, and a compiler that targets native and the web.","dart","language","logos:dart",{"title":22,"description":23,"slug":24,"category":8,"icon":25},"Django","The Python framework we use when a product needs an admin, auth and a real data model on day one rather than a hand-rolled service.","django","logos:django-icon",{"title":27,"description":28,"slug":29,"category":30,"icon":31},"Docker","Every service we build ships as a container, so what runs on a laptop, in CI and in production is one artefact rather than three of them.","docker","infrastructure","logos:docker-icon",{"title":33,"description":34,"slug":35,"category":36,"icon":37},"Fastlane","The release automation behind our mobile work — signing, builds and store uploads run from CI instead of from one engineer's laptop on release day.","fastlane","tools","logos:fastlane",{"title":39,"description":40,"slug":41,"category":8,"icon":42},"Flutter","Our primary mobile stack since 2018 — one Dart codebase shipping to iOS, Android, web and desktop without a separate team per platform.","flutter","logos:flutter",{"title":44,"description":45,"slug":46,"category":36,"icon":47},"Git","Every project we touch lives in Git — reviewed pull requests, CI on every branch, and a history that still makes sense months later.","git","logos:git-icon",{"title":49,"description":50,"slug":51,"category":19,"icon":52},"Go","Our backend language for real-time APIs and services under load — small binaries, fast builds, and concurrency that stays readable.","go","logos:gopher",{"title":54,"description":55,"slug":56,"category":30,"icon":57},"Google Cloud","The cloud our production workloads run on — managed Kubernetes, storage and networking, without hand-built servers nobody wants to maintain.","gcp","logos:google-cloud",{"title":59,"description":60,"slug":61,"category":36,"icon":62},"Gradle","The build system every Android release goes through — product flavours, signing configs, and the dependency wiring under a Flutter app.","gradle","logos:gradle",{"title":64,"description":65,"slug":66,"category":30,"icon":67},"Helm","How we package a Kubernetes deployment — service, config, secrets and ingress as one versioned unit that can be promoted and rolled back.","helm","logos:helm",{"title":69,"description":70,"slug":71,"category":19,"icon":72},"Kotlin","What we reach for when a Flutter app needs real Android underneath it — platform channels, background work, and native SDK integrations.","kotlin","logos:kotlin-icon",{"title":74,"description":75,"slug":76,"category":8,"icon":72},"Kotlin Multiplatform","Sharing business logic across iOS and Android while each platform keeps its own native UI — the alternative when Flutter is not the right fit.","kmp",{"title":78,"description":79,"slug":80,"category":30,"icon":81},"Kubernetes","How we run services in production — Helm-packaged deployments, rollouts that can be rolled back, and scaling that does not need a person at 3am.","kubernetes","logos:kubernetes",{"title":83,"description":84,"slug":85,"category":30,"icon":86},"NATS","Lightweight messaging between services — publish\u002Fsubscribe and request\u002Freply without the operational weight of a full broker cluster.","nats","logos:nats-icon",{"title":88,"description":89,"slug":90,"category":8,"icon":91},"Nuxt","Vue with server rendering, routing and SEO handled — how we build marketing sites and web apps that must be fast and indexable on first load.","nuxt","logos:nuxt-icon",{"title":93,"description":94,"slug":95,"category":19,"icon":96},"PHP","Where we work with an existing PHP backend — extending it, integrating with it, and building the mobile and web clients it has to serve.","php","logos:php",{"title":98,"description":99,"slug":100,"category":101,"icon":102},"PostgreSQL","Our default database — the one we reach for unless a product gives us a specific reason not to, from schema design through to index tuning.","postgres","database","logos:postgresql",{"title":104,"description":105,"slug":106,"category":19,"icon":107},"Python","Our language for backends, data work and AI integrations — including the Python bindings we ship for our own Rust tooling.","python","logos:python",{"title":109,"description":110,"slug":111,"category":8,"icon":112},"React","The front-end library we work in when a product is already React — components, hooks, and the ecosystem that has grown around them.","react","logos:react",{"title":114,"description":115,"slug":116,"category":101,"icon":117},"Redis","Where we put data that has to be fast and can be rebuilt — caches, sessions, rate limits, and the queues behind a product's slow paths.","redis","logos:redis",{"title":119,"description":120,"slug":121,"category":19,"icon":122},"Ruby","The language our mobile release automation is written in — Fastlane lanes, custom actions, and the CI glue that ships builds to the stores.","ruby","logos:ruby",{"title":124,"description":125,"slug":126,"category":19,"icon":127},"Rust","Where we go when performance and correctness both matter — document rendering, CLI tooling, and services that have to stay fast and predictable.","rust","simple-icons:rust",{"title":129,"description":130,"slug":131,"category":101,"icon":132},"SQLite","The database that ships inside the app — local caches, offline-first storage, and anything that still has to work with no network.","sqlite","logos:sqlite",{"title":134,"description":135,"slug":136,"category":8,"icon":137},"Strapi","A headless CMS we reach for when editors need to own the content — a real admin and a clean API, without building either from scratch.","strapi","logos:strapi-icon",{"title":139,"description":140,"slug":141,"category":19,"icon":142},"Swift","What we reach for when a Flutter app needs real iOS underneath it — platform channels, native SDK integrations, widgets and App Clips.","swift","logos:swift",{"title":144,"description":145,"slug":146,"category":8,"icon":142},"SwiftUI","Apple's UI framework, where we build the native surfaces a Flutter app cannot own — widgets, App Clips, extensions and system integrations.","swiftui",{"title":148,"description":149,"slug":150,"category":8,"icon":151},"Tailwind CSS","How we style every front end we build — utility classes and design tokens instead of a stylesheet that only ever grows and is never deleted.","tailwind","logos:tailwindcss-icon",{"title":153,"description":154,"slug":155,"category":19,"icon":156},"TypeScript","The default for everything we write for the browser and for Node services — types that catch integration bugs before they reach a review.","typescript","logos:typescript-icon",{"title":158,"description":159,"slug":160,"category":8,"icon":161},"Vue","Our front-end framework for admin panels, merchant dashboards and product web apps that have to stay maintainable for years, not sprints.","vue","logos:vue",{"title":163,"description":164,"slug":165,"category":36,"icon":166},"Whisper","OpenAI's open-source speech recognition model — the transcription engine behind voice input, running as both a backend service and on-device in the app.","whisper","simple-icons:openai",{"id":168,"title":169,"body":170,"description":396,"extension":397,"footerCta":398,"headingCta":412,"image":416,"meta":420,"metaDescription":421,"metaTitle":422,"navigation":423,"ogDescription":424,"parent":425,"path":426,"seo":427,"slug":428,"stem":429,"updated":430,"__hash__":431},"services_en\u002Fservices\u002Fembeddable-widgets.md","Embeddable Widgets & Scripts",{"type":171,"value":172,"toc":376},"minimark",[173,177,180,185,225,230,233,237,245,249,256,260,263,267,270,274,277,281,284,288,291,295,303,307,313,323,326,330,347,350,354,357,361],[174,175,176],"p",{},"An embeddable widget is code your customers paste into their own websites: an analytics snippet, a chat bubble, a booking form, a measurement collector. It is the hardest kind of frontend engineering because everything a normal web project takes for granted is gone: you do not choose the framework, the browser baseline, the other scripts on the page, or when your users upgrade. Your code runs as a guest on pages you will never see, and it has to behave on all of them at once.",[174,178,179],{},"This is a niche discipline, and we have shipped in it: a signal collector we built runs embedded in thousands of sites we do not control, feeding a platform that scores tens of thousands of requests per minute.",[181,182,184],"h3",{"id":183},"the-products-we-build","The products we build",[186,187,188,196,202,208,214],"ul",{},[189,190,191,195],"li",{},[192,193,194],"strong",{},"Measurement and analytics collectors"," — scripts that gather signals from a page and ship them to your platform, like the one behind our bot-detection work",[189,197,198,201],{},[192,199,200],{},"Functional widgets"," — chat, booking, forms, calculators: a piece of your product living inside your customer's page",[189,203,204,207],{},[192,205,206],{},"Snippet-installed integrations"," — the \"add one script tag\" onboarding that puts your product in front of your customer's visitors",[189,209,210,213],{},[192,211,212],{},"The ingest behind the script"," — the backend that receives what the snippet sends, at whatever volume your customers' traffic adds up to",[189,215,216,219,220],{},[192,217,218],{},"The dashboard your customers watch it from"," — reporting and configuration surfaces are covered on ",[221,222,224],"a",{"href":223},"\u002Fservices\u002Fweb-development\u002Fadmin-dashboards","admin panels & dashboards",[226,227,229],"h2",{"id":228},"who-builds-your-embeddable-script","Who Builds Your Embeddable Script",[174,231,232],{},"We built one of these end to end, from the snippet to the platform behind it.",[181,234,236],{"id":235},"a-collector-in-thousands-of-hostile-pages","A collector in thousands of hostile pages",[174,238,239,240,244],{},"For a ",[221,241,243],{"href":242},"\u002Fportfolio\u002Frealtime-bot-detection-platform","real-time bot detection platform",", we built the browser-side collector that gathers the evidence a human-or-bot verdict is made from. It is plain JavaScript with no framework, no build-time runtime, and no dependencies, because it runs in thousands of pages alongside whatever else those pages load, cannot assume a module system or a polyfill set, and must never collide with the site around it. The environment is actively hostile: the things it measures try to defeat it. It is also small, because every kilobyte is charged against a customer's own performance budget, on every page view, forever.",[181,246,248],{"id":247},"and-the-platform-that-receives-what-it-sends","And the platform that receives what it sends",[174,250,251,252,255],{},"The snippet is the small, visible part of the system. Behind that collector we built the ingest and scoring services in Go and the data platform underneath them, because an embed that succeeds multiplies its own traffic by every customer who installs it, and the backend has to be designed for that arithmetic from day one. The full architecture is in the ",[221,253,254],{"href":242},"case study",".",[226,257,259],{"id":258},"what-embedded-code-actually-demands","What Embedded Code Actually Demands",[174,261,262],{},"Five constraints separate this work from ordinary frontend engineering.",[181,264,266],{"id":265},"a-size-budget-measured-in-kilobytes","A size budget measured in kilobytes",[174,268,269],{},"Your script ships to every visitor of every customer. A framework runtime would be larger than a whole well-built collector, which is why serious embeds are dependency-free by design rather than by preference. Your customers can see the size of your script in their own Lighthouse scores.",[181,271,273],{"id":272},"zero-assumptions-about-the-host-page","Zero assumptions about the host page",[174,275,276],{},"No module system, no modern-browser baseline, no guarantee the page isn't already loading a conflicting library, an overzealous CSS reset, or a second copy of your own script. Everything runs in its own scope, touches the global namespace once if at all, and degrades silently rather than breaking someone else's checkout.",[181,278,280],{"id":279},"defensive-by-design","Defensive by design",[174,282,283],{},"The page your code runs in may be instrumented, patched, or emulated around it. In our bot-detection work, defeating the measurement is the adversary's whole job. Even in friendlier embeds the lesson holds: read browser APIs directly, verify rather than trust the environment, and keep every judgment server-side where the logic is not visible to the page.",[181,285,287],{"id":286},"versioning-you-cannot-force","Versioning you cannot force",[174,289,290],{},"Customers paste your snippet once and never touch it again. That one line has to stay a stable loader while everything behind it evolves: staged rollouts, an unbreakable contract between loader and payload, and compatibility maintained for years, because \"please update your embed code\" is an email nobody answers.",[181,292,294],{"id":293},"consent-and-privacy-as-architecture","Consent and privacy as architecture",[174,296,297,298,302],{},"A third-party script is a third party, so ",[299,300],"term",{"slug":301},"gdpr"," applies on every site that installs it. What the script collects, when it may run relative to the host page's consent state, and what crosses the wire are design decisions we make explicit up front, so your customers' own compliance reviews can wave the embed through rather than flag it.",[226,304,306],{"id":305},"how-we-work","How We Work",[174,308,309,312],{},[192,310,311],{},"Fixed-scope build."," Snippet, loader, ingest, and the deployment pipeline that versions them safely, scoped and shipped as one system.",[174,314,315,318,319,255],{},[192,316,317],{},"Staff augmentation."," Our engineers join the team that owns your platform — see ",[221,320,322],{"href":321},"\u002Fservices\u002Fteam-augmentation","team augmentation",[174,324,325],{},"Either way, we send a scoped quote within two business days of understanding the requirements.",[226,327,329],{"id":328},"what-an-embeddable-widget-costs","What an Embeddable Widget Costs",[174,331,332,333,337,338,343,344,255],{},"The snippet is small; the system is not. An embed is priced from the same published tiers as the ",[221,334,336],{"href":335},"\u002Fservices\u002Fweb-development","web development"," page. The collector or widget together with its loader and a lean ingest sits in the web app tier at ",[339,340],"service-price",{"format":341,"service":342},"full","web-development\u002Fapp","; when the platform behind it carries real scale, with scoring, analytics, and customer dashboards, the system prices as SaaS-grade work from ",[339,345],{"format":341,"service":346},"web-development\u002Fsaas",[174,348,349],{},"These are the same keys that render the pillar's pricing table, so the two cannot drift. What moves the number: how hostile the environments your script must survive, how much traffic your customers' pages add up to, and how much of the receiving platform already exists.",[226,351,353],{"id":352},"frequently-asked-questions","Frequently Asked Questions",[174,355,356],{},"Common questions from teams shipping code into other people's pages.",[358,359],"questions",{":items":360},"[{\"title\":\"Why can't we build our widget with React or Vue?\",\"text\":\"Because the framework runtime would be larger than the entire widget, and because the host page may already be running a different version of the same framework, or a global environment that fights yours. An embed that ships to every visitor of every customer is measured against each customer's own performance budget, so serious embedded scripts are dependency-free vanilla JavaScript by design. Your product's own site can be as framework-heavy as it likes; the code that travels must be self-contained.\"},{\"title\":\"How does an embeddable script avoid breaking the sites that install it?\",\"text\":\"By assuming nothing and touching nothing. Everything runs inside its own scope, the global namespace is touched once if at all, styles are isolated so the host page's CSS cannot bleed in or out, and every failure path degrades silently, because a broken widget must never take a customer's checkout down with it. We build against hostile-page conditions from the start, because the collector we operate runs alongside whatever thousands of unrelated sites happen to load.\"},{\"title\":\"How do you update a script that customers pasted years ago?\",\"text\":\"The pasted line is never the product. It is a tiny, stable loader that fetches the current payload. The loader-payload contract is the one interface that must never break, and everything behind it can then evolve: staged rollouts to a fraction of traffic first, versioned payloads, and instant rollback when a browser release surprises you. Designing that seam properly on day one is what makes 'please update your embed code' an email you never have to send.\"},{\"title\":\"What about GDPR and cookie consent for embedded scripts?\",\"text\":\"A third-party script is a third party under GDPR on every site that installs it, so we design for consent from the start. We make explicit what the script collects, whether any of it identifies a person, and how it behaves relative to the host page's consent state — including running in a no-consent mode where that is what compliance requires. The goal is an embed your customers' own privacy reviews can approve without a meeting.\"},{\"title\":\"Can you also build the backend that receives the data?\",\"text\":\"Yes, and we would rather build both sides than either alone. A successful embed multiplies its traffic by every customer who installs it, so the ingest has to be designed for aggregate volume from the start. The platform behind our collector scores tens of thousands of requests per minute in real time, on Go services we built end to end. The snippet and its backend are one system, and the failure modes live at their seam.\"},{\"title\":\"How much does an embeddable widget cost to build?\",\"text\":\"A widget or collector with its loader and a lean ingest typically runs 15,000 to 40,000 US dollars over one to three months, the published web app tier on our web development page. When the receiving platform is the real product, with real-time scoring, analytics, and customer-facing dashboards, the system prices as SaaS-grade work upward of 50,000. The snippet itself is rarely the expensive part; the volume it generates is.\"}]",[174,362,363,364,367,368,372,373,375],{},"Read how the collector fits the whole system in the ",[221,365,366],{"href":242},"bot-detection case study",", see the ",[221,369,371],{"href":370},"\u002Ftechnologies\u002Fgo","Go services"," behind it, or start from the ",[221,374,336],{"href":335}," pillar.",{"title":377,"searchDepth":378,"depth":378,"links":379},"",2,[380,382,386,393,394,395],{"id":183,"depth":381,"text":184},3,{"id":228,"depth":378,"text":229,"children":383},[384,385],{"id":235,"depth":381,"text":236},{"id":247,"depth":381,"text":248},{"id":258,"depth":378,"text":259,"children":387},[388,389,390,391,392],{"id":265,"depth":381,"text":266},{"id":272,"depth":381,"text":273},{"id":279,"depth":381,"text":280},{"id":286,"depth":381,"text":287},{"id":293,"depth":381,"text":294},{"id":305,"depth":378,"text":306},{"id":328,"depth":378,"text":329},{"id":352,"depth":378,"text":353},"JavaScript that runs inside pages you don't control — dependency-free, defensive, and small, from the team behind a collector embedded in thousands of third-party sites","md",{"heading":399,"text":400,"buttons":401},"Shipping Code Into Pages You Don't Control?","Tell us what your snippet needs to do and where it has to run. We will tell you honestly what the constraint budget looks like — and what the backend behind it has to handle.",[402,408],{"to":403,"label":404,"leadingIcon":405,"color":406,"variant":407},"\u002Fcontact?intent=web-development","Book a Consultation","lucide:message-circle","neutral","outline",{"to":242,"label":409,"color":410,"variant":411},"See the bot-detection collector","primary","solid",[413,414],{"to":403,"label":404,"leadingIcon":405,"color":410,"variant":411},{"to":242,"label":415,"color":406,"variant":407},"See Our Work",{"url":417,"alt":418,"text":419},"\u002Fservices\u002Fembeddable-widgets.webp","Embeddable widget and third-party script development","Your code, running in everyone else's page",{},"Embeddable widget and third-party script development: dependency-free JavaScript for other people's pages, with the backend to receive what it sends.","Embeddable Widget & Third-Party Script Development",true,"Code that ships into pages you don't control — built by the team whose collector runs in thousands of third-party sites at tens of thousands of requests per minute.","web-development","\u002Fservices\u002Fweb-development\u002Fembeddable-widgets",{"title":169,"description":396},"embeddable-widgets","services\u002Fembeddable-widgets","2026-09-05","pkI6L82I0ksnVvrkOuo5487nF05sPRjvqj8LQGtDxkI",{"id":433,"title":434,"body":435,"description":713,"extension":397,"footerCta":714,"headingCta":724,"image":730,"meta":733,"metaDescription":734,"metaTitle":735,"navigation":423,"ogDescription":736,"parent":737,"path":335,"seo":738,"slug":425,"stem":739,"updated":430,"__hash__":740},"services_en\u002Fservices\u002Fweb-development.md","Web Development",{"type":171,"value":436,"toc":700},[437,441,444,466,470,474,477,481,484,488,491,495,505,509,522,527,540,544,547,592,596,599,605,611,621,651,655,658,662,669,671,674,697],[226,438,440],{"id":439},"modern-web-development-with-nuxt-and-ssr","Modern Web Development with Nuxt and SSR",[174,442,443],{},"We build fast, search-friendly web applications on a modern, server-rendered stack. Not a page-builder, not a bloated single-page app that ships a blank screen to Google — real applications that render on the server, load quickly on a phone, and rank.",[174,445,446,447,450,451,455,456,460,461,465],{},"How sure are we about this stack? ",[192,448,449],{},"This very site is built on it"," — Nuxt 4, ",[299,452,454],{"slug":453},"server-side-rendering","server-side rendering",", Tailwind CSS, and Nuxt Content. We didn't pick these tools for a sales page; we run our own business on them. We've also shipped them for clients, including ",[221,457,459],{"href":458},"\u002Fportfolio\u002Fformtastic","Formtastic",", a form-building platform built on Nuxt, and the ",[221,462,464],{"href":463},"\u002Fportfolio\u002Fcashback-loyalty-platform","cashback loyalty platform",", whose Nuxt admin back office launches branded apps on top of PHP services.",[467,468],"statistics-grid",{":items":469},"[{\"icon\": \"lucide:search\", \"value\": \"SSR\", \"label\": \"Indexable by Default\", \"description\": \"Server-rendered HTML crawlers can read without running JavaScript\"}, {\"icon\": \"lucide:gauge\", \"value\": \"90+\", \"label\": \"Lighthouse Targets\", \"description\": \"We build to Core Web Vitals, not against them\"}, {\"icon\": \"lucide:smartphone\", \"value\": \"Mobile-First\", \"label\": \"Responsive Everywhere\", \"description\": \"Designed for phones first, scaled up to desktop\"}, {\"icon\": \"lucide:code\", \"value\": \"Type-Safe\", \"label\": \"TypeScript End to End\", \"description\": \"From the API layer to the component props\"}]",[226,471,473],{"id":472},"our-stack-and-why-nuxt-ssr","Our Stack — and Why Nuxt + SSR",[174,475,476],{},"The framework choice is the difference between a site Google can read instantly and one it struggles to render. Here is what we build on and why.",[181,478,480],{"id":479},"server-side-rendering-for-seo","Server-Side Rendering for SEO",[174,482,483],{},"A traditional single-page app ships an empty HTML shell and asks the browser to build the page with JavaScript. Crawlers, link previews, and slow devices all suffer for it. Nuxt renders the full HTML on the server, so the content is present on the very first response — meta tags, headings, structured data, and copy all there before a single line of client JavaScript runs. This is the single biggest on-page SEO lever a framework can give you, and it's the default, not an add-on.",[181,485,487],{"id":486},"tailwind-for-fast-consistent-ui","Tailwind for Fast, Consistent UI",[174,489,490],{},"We style with Tailwind CSS — utility-first, no wandering global stylesheets, no dead CSS shipped to users. It keeps the design system consistent across every page, makes responsive breakpoints explicit, and ships only the classes you actually use. The result is a UI that's quick to build, easy to maintain, and small to download.",[181,492,494],{"id":493},"nuxt-content-for-content-driven-sites","Nuxt Content for Content-Driven Sites",[174,496,497,498,504],{},"For marketing sites, documentation, and blogs, ",[221,499,503],{"href":500,"rel":501},"https:\u002F\u002Fcontent.nuxt.com",[502],"nofollow","Nuxt Content"," turns Markdown into fully rendered, server-side pages with type-safe schemas — exactly how this site's blog and service pages work. Editors write Markdown; the site stays fast and indexable; developers keep version control over everything. No database required.",[181,506,508],{"id":507},"strapi-when-you-need-a-headless-cms","Strapi When You Need a Headless CMS",[174,510,511,512,516,517,521],{},"When non-technical editors need to own the content — products, listings, campaigns — we wire up ",[221,513,134],{"href":514,"rel":515},"https:\u002F\u002Fstrapi.io",[502],", an open-source ",[299,518,520],{"slug":519},"headless-cms","headless CMS",". Your team gets a friendly admin panel; the Nuxt frontend consumes a clean API and renders it server-side. You get editorial freedom without giving up performance or SEO, and you own the data and the hosting.",[523,524],"features",{":items":525,":title":526},"[{\"label\": \"Mobile-Compatible Pages\", \"description\": \"Mobile-first, responsive layouts that work on every screen from phone to widescreen — tested, not assumed\"}, {\"label\": \"Authentication Done Properly\", \"description\": \"Sessions, OAuth, and JWT with real server-side authorization checks — not a login screen with an open back door\"}, {\"label\": \"Secure Cookies & Consent\", \"description\": \"httpOnly, secure, SameSite cookies for sessions, plus GDPR-compliant consent handling for analytics and tracking\"}, {\"label\": \"SEO Built In\", \"description\": \"Server-rendered meta tags, Open Graph, canonical and hreflang links, and JSON-LD structured data on every page\"}, {\"label\": \"Performance & Core Web Vitals\", \"description\": \"Image optimization, code splitting, and caching tuned to pass Core Web Vitals on real devices\"}, {\"label\": \"Headless CMS Integration\", \"description\": \"Nuxt Content or Strapi so your team can publish without touching code\"}]","What We Get Right",[528,529,532],"info-box",{":leading-icon":530,":title":531},"lucide:shield-check","Security is part of the build",[174,533,534,535,539],{},"Authentication, cookies, and data handling are where most web apps quietly leak. We build them right from the start — and if you've inherited an app you're unsure about, our ",[221,536,538],{"href":537},"\u002Fservices\u002Fai-code-audit","AI-generated code audit"," reviews authentication, session security, and data exposure before they become an incident.",[226,541,543],{"id":542},"what-we-build","What We Build",[174,545,546],{},"Four kinds of web work come up again and again in our engagements, and each now has its own page with the proof behind it:",[186,548,549,559,572,581],{},[189,550,551,556,557,255],{},[192,552,553],{},[221,554,555],{"href":223},"Admin panels & dashboards"," — the back offices behind products: role-based access, forms that drive real machinery, tables that stay usable at scale. Anchored by the admin UI that launches branded apps for our ",[221,558,464],{"href":463},[189,560,561,567,568,571],{},[192,562,563],{},[221,564,566],{"href":565},"\u002Fservices\u002Fweb-development\u002Fnuxt-development","Nuxt development"," — marketing sites, content platforms, and migrations onto server-side rendering, like ",[221,569,570],{"href":458},"Formtastic's"," move from Django templates to Nuxt. This site is the standing demo.",[189,573,574,580],{},[192,575,576],{},[221,577,579],{"href":578},"\u002Fservices\u002Fweb-development\u002Fcompanion-web-app","Companion web apps"," — the browser surface of a product that lives primarily in a mobile app, sharing one API and one backend with it.",[189,582,583,588,589,255],{},[192,584,585],{},[221,586,587],{"href":426},"Embeddable widgets & scripts"," — JavaScript that runs inside pages you don't control, built dependency-free and defensive, like the collector behind our ",[221,590,591],{"href":242},"bot-detection platform",[226,593,595],{"id":594},"flutter-for-the-web-pros-and-cons","Flutter for the Web — Pros and Cons",[174,597,598],{},"Flutter can compile to the web, and clients with a Flutter mobile app often ask whether they should reuse it for their website too. The honest answer: sometimes — but rarely for public, content-driven web. Here's the trade-off.",[600,601],"features-table",{":heading":602,":rows":603,":top-left-label":604},"[{\"label\": \"Nuxt + SSR\", \"hightlightLabel\": \"Public Web\"}, {\"label\": \"Flutter Web\"}, {\"label\": \"Traditional SPA\"}]","[{\"label\": \"SEO \u002F Indexability\",\"cells\": [{\"text\": \"Excellent (SSR)\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Poor (canvas render)\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Weak (empty shell)\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Initial Load Size\",\"cells\": [{\"text\": \"Small\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Heavy (large bundle)\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Medium\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Code Shared with Mobile\",\"cells\": [{\"text\": \"None\", \"color\": \"warning\", \"icon\": \"lucide:minus\" },{ \"text\": \"Near 100%\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Some (React Native)\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"App-Like \u002F Complex UI\",\"cells\": [{\"text\": \"Good\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Excellent\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Good\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Content \u002F Marketing Sites\",\"cells\": [{\"text\": \"Ideal\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Poor Fit\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Workable\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Accessibility\",\"cells\": [{\"text\": \"Native HTML\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Improving, Limited\", \"color\": \"warning\", \"icon\": \"lucide:minus\" },{ \"text\": \"Native HTML\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Best For\",\"cells\": [{\"text\": \"Sites & Web Apps\", \"color\": \"success\"},{ \"text\": \"Internal \u002F App-Like Tools\", \"color\": \"warning\"},{ \"text\": \"Dashboards\", \"color\": \"warning\"}]}]","Aspect",[174,606,607,610],{},[192,608,609],{},"Where Flutter web shines:"," an app-like product where you already have a Flutter mobile codebase and want one team shipping everywhere — internal dashboards, logged-in tools, highly interactive or canvas-driven UIs behind a login wall, where SEO doesn't matter and users expect an app, not a page.",[174,612,613,616,617,620],{},[192,614,615],{},"Where it hurts:"," anything that needs to be found on Google. Flutter web renders to a canvas, which crawlers struggle to read, ships a heavy initial bundle, and fights the browser on accessibility and ",[299,618,619],{"slug":619},"deep-linking",". For marketing sites, blogs, e-commerce, and landing pages, that's disqualifying.",[528,622,623],{},[174,624,625,628,629,632,633,636,637,641,642,646,647,255],{},[192,626,627],{},"Bottom line:"," Use ",[192,630,631],{},"Nuxt + SSR"," for anything public or SEO-driven — marketing sites, content, e-commerce, SaaS marketing surfaces. Use ",[192,634,635],{},"Flutter web"," when you're extending a Flutter mobile app into an app-like web tool where reach through search isn't the goal. We build both and will tell you honestly which one your project needs. If mobile is also on the table, see our ",[221,638,640],{"href":639},"\u002Fservices\u002Fflutter-app-development","Flutter app development"," service and the trade-offs in ",[221,643,645],{"href":644},"\u002Fblog\u002Fflutter-vs-react-native-2026","Flutter vs React Native in 2026"," and ",[221,648,650],{"href":649},"\u002Fblog\u002Fflutter-vs-native-2026","Flutter vs Native",[226,652,654],{"id":653},"web-development-pricing","Web Development Pricing",[174,656,657],{},"Transparent ranges based on scope and complexity",[659,660],"pricing-table",{":items":661},"[{\"title\": \"Marketing \u002F Landing Site\", \"subtitle\": \"Fast, SEO-ready, content-driven\", \"price\": \"web-development\u002Flanding\", \"terms\": \"2-4 weeks\", \"lines\": [\"Nuxt + SSR for full indexability\", \"Responsive, mobile-first design\", \"SEO meta, Open Graph & structured data\", \"Nuxt Content or Markdown CMS\", \"Contact forms & analytics\", \"Core Web Vitals tuned\", \"Deployment & domain setup\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Get Started\"}},{\"highlight\": \"Popular\",\"title\": \"Web App\", \"subtitle\": \"Authenticated, interactive product\", \"price\": \"web-development\u002Fapp\", \"terms\": \"1-3 months\", \"lines\": [\"Everything in Marketing Site\", \"User authentication (OAuth \u002F JWT)\", \"Secure sessions & cookie handling\", \"REST or GraphQL API integration\", \"Role-based access control\", \"Database design & integration\", \"Admin dashboard\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Get Started\"}},{\"title\": \"Headless CMS Platform\", \"subtitle\": \"Editor-owned content at scale\", \"price\": \"web-development\u002Fheadless-cms\", \"terms\": \"2-4 months\", \"lines\": [\"Strapi or Nuxt Content backend\", \"Custom editorial admin panel\", \"Multi-language content support\", \"Server-rendered, indexable pages\", \"Media & asset management\", \"Preview & publishing workflow\", \"API-first architecture\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Get Started\"}},{\"title\": \"SaaS \u002F E-commerce\", \"subtitle\": \"Complex, scalable web product\", \"price\": \"web-development\u002Fsaas\", \"terms\": \"4+ months\", \"lines\": [\"All platforms & integrations\", \"Payments & subscriptions\", \"Multi-tenant architecture\", \"Advanced security & compliance\", \"Scalable backend infrastructure\", \"Monitoring & observability\", \"Dedicated support\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Get Started\"}}]",[528,663,666],{":leading-icon":664,":title":665},"lucide:dollar-sign","Custom Pricing Available",[174,667,668],{},"Every project is unique. These ranges are approximate and based on typical scope. We'll provide a detailed quote after understanding your requirements, integrations, and timeline. Contact us for a free consultation and an accurate estimate.",[226,670,353],{"id":352},[174,672,673],{},"Common questions about our web development services",[358,675,677],{":items":676},"[{\"title\":\"Why do you build with Nuxt instead of WordPress or a website builder?\",\"text\":\"Nuxt gives you server-side rendering, which means search engines and link previews see fully built HTML on the first request rather than an empty shell. You get the speed and indexability of a static site with the power of a real application, full version control over the code, and no plugin bloat or security surface of a typical WordPress install. For content-heavy sites we pair Nuxt with a headless CMS so editors still get a friendly admin panel.\"},{\"title\":\"Does server-side rendering actually improve SEO?\",\"text\":\"Yes, significantly. With SSR the page content, meta tags, Open Graph data, and structured data are present in the HTML the server sends, so crawlers can read them without executing JavaScript. Single-page apps that render entirely in the browser are slower to index and can be missed entirely by some crawlers and social link previews. SSR is the most impactful framework-level decision you can make for organic search.\"},{\"title\":\"Can you build my web app with Flutter for the web?\",\"text\":\"We can, and for the right project it is a great fit. Flutter web works well for app-like products and internal tools behind a login, especially when you already have a Flutter mobile app and want to share one codebase. It is a poor fit for anything that needs to rank on Google, because it renders to a canvas that crawlers struggle to read and ships a heavy initial bundle. For public, content, or e-commerce sites we recommend Nuxt with server-side rendering instead.\"},{\"title\":\"How do you handle authentication and user data securely?\",\"text\":\"We implement real server-side authorization, not just a login screen. Sessions use httpOnly, secure, SameSite cookies so tokens cannot be stolen by client-side scripts, and we support OAuth and JWT flows with role-based access control. Cookie consent is handled to meet GDPR. If you have an existing app, our AI code audit service reviews authentication, session handling, and data exposure as a dedicated check.\"},{\"title\":\"Should I use Nuxt Content or Strapi for my content?\",\"text\":\"It depends on who edits the content. Nuxt Content is ideal when developers or technical writers manage content in Markdown under version control, like a blog or documentation, with no database needed. Strapi is the right choice when non-technical editors need a friendly admin panel to manage products, listings, or campaigns. Both render server-side through the Nuxt frontend, so either way the site stays fast and indexable. We help you pick based on your team.\"},{\"title\":\"How much does a web development project cost?\",\"slot\":\"cost\",\"text\":\"A fast marketing or content site typically runs 5,000 to 12,000 US dollars, an authenticated web app 15,000 to 40,000, a headless CMS platform 20,000 to 50,000, and a complex SaaS or e-commerce product upward of 50,000. The final number depends on the number of features, integrations, and the design scope. We provide a fixed quote after a free consultation.\"}]",[678,679,680],"template",{"v-slot:cost_body":377},[174,681,682,683,686,687,689,690,693,694,696],{},"A fast marketing or content site typically runs ",[339,684],{"format":341,"service":685},"web-development\u002Flanding",", an authenticated web app ",[339,688],{"format":341,"service":342},", a headless CMS platform ",[339,691],{"format":341,"service":692},"web-development\u002Fheadless-cms",", and a complex SaaS or e-commerce product ",[339,695],{"format":341,"service":346},". The final number depends on the number of features, integrations, and the design scope. We provide a fixed quote after a free consultation.",[174,698,699],{},"::",{"title":377,"searchDepth":378,"depth":378,"links":701},[702,703,709,710,711,712],{"id":439,"depth":378,"text":440},{"id":472,"depth":378,"text":473,"children":704},[705,706,707,708],{"id":479,"depth":381,"text":480},{"id":486,"depth":381,"text":487},{"id":493,"depth":381,"text":494},{"id":507,"depth":381,"text":508},{"id":542,"depth":378,"text":543},{"id":594,"depth":378,"text":595},{"id":653,"depth":378,"text":654},{"id":352,"depth":378,"text":353},"Fast, SEO-Ready Web Apps Built on Nuxt, SSR, and Tailwind",{"heading":715,"text":716,"buttons":717},"Ready to Build a Web App That Ranks and Performs?","Let's turn your idea into a fast, SEO-ready web application your users and search engines both love.",[718,721],{"to":719,"label":720,"leadingIcon":405,"color":406,"variant":407},"\u002Fcontact","Start Your Project",{"to":722,"label":723,"color":410,"variant":411},"\u002Fportfolio","View our work",[725,727],{"to":719,"label":726,"leadingIcon":405,"color":410,"variant":411},"Get a Free Consultation",{"to":728,"label":729,"color":406,"variant":407},"#web-development-pricing","View Pricing",{"url":731,"alt":434,"text":732},"\u002Fservices\u002Fweb-development.webp","Built on the Stack This Site Runs On",{},"Web development on Nuxt, SSR, and Tailwind: fast, SEO-ready, mobile-first web apps with authentication, headless CMS, and Strapi. Free consultation.","Web Development Services — Nuxt, SSR & SEO","Web apps on Nuxt and SSR that load fast and rank — authentication, a headless CMS, and a mobile-first build that does not fight the browser.",null,{"title":434,"description":713},"services\u002Fweb-development","PGjV1VFd_62ov1NTy0ip1mvYByZIYAZe5AyL-eT3cEk",[],[743,758,770,785,799,813,829,841,855,868,882,895,911,924,940,953,964,974,985,997,1008,1023,1032,1045,1058,1065,1076,1088,1099,1114,1126,1139,1151,1163,1175,1187,1198,1209,1220,1231,1243,1253,1264,1277,1288,1297,1310,1322,1332,1343,1357,1366,1377],{"slug":744,"term":745,"definition":746,"category":747,"aliases":748,"links":750,"related":754,"readMore":-1,"target":756,"hasArticle":757},"aosp","AOSP","The Android Open Source Project — Android without the Google layer on top, which anyone may fork. Point-of-sale terminals, kiosks and in-car systems run on forks of it, and working at that level exposes parts of the OS an app developer never sees.","platform",[749],"Android Open Source Project",[751],{"kind":752,"url":753},"website","https:\u002F\u002Fsource.android.com\u002F",[755],"host-card-emulation","\u002Fglossary#aosp",false,{"slug":759,"term":760,"definition":761,"category":747,"aliases":762,"links":763,"related":767,"readMore":-1,"target":769,"hasArticle":757},"app-clips","App Clips","An Apple feature that runs a small slice of an iOS app — under 15 MB — without installing the whole thing. Invoked from a QR code, an NFC tag or a link, for when the first thing a user does should not require a store visit.",[],[764],{"kind":765,"url":766},"documentation","https:\u002F\u002Fdeveloper.apple.com\u002Fapp-clips\u002F",[619,768],"install-referrer","\u002Fglossary#app-clips",{"slug":771,"term":772,"definition":773,"category":747,"aliases":774,"links":775,"related":781,"readMore":-1,"target":784,"hasArticle":757},"bigquery","BigQuery","Google Cloud's analytics warehouse. You point SQL at billions of rows and it scans them in seconds, on storage held separately from the machines doing the querying — which is what keeps reporting and exploration off the database that is serving live traffic.",[],[776,778],{"kind":752,"url":777},"https:\u002F\u002Fcloud.google.com\u002Fbigquery",{"kind":779,"url":780},"wikipedia","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBigQuery",[782,783],"object-storage","elasticsearch","\u002Fglossary#bigquery",{"slug":786,"term":787,"definition":788,"category":789,"aliases":790,"links":794,"related":797,"readMore":-1,"target":798,"hasArticle":757},"ci-cd","CI\u002FCD","Automation that builds, tests and ships every change without anyone running commands by hand. On mobile it is what turns a release into a button press instead of an afternoon of someone else being unavailable.","practice",[791,792,793],"CI","continuous integration","continuous delivery",[795],{"kind":779,"url":796},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCI\u002FCD",[],"\u002Fglossary#ci-cd",{"slug":800,"term":801,"definition":802,"category":803,"aliases":804,"links":806,"related":809,"readMore":-1,"target":812,"hasArticle":757},"crud","CRUD","Create, read, update, delete — the four operations behind almost every form and admin screen. Shorthand for the routine data-management half of an app, as opposed to the parts carrying real domain logic.","architecture",[805],"Create, Read, Update, Delete",[807],{"kind":779,"url":808},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCreate,_read,_update_and_delete",[810,811],"rest","graphql","\u002Fglossary#crud",{"slug":814,"term":815,"definition":816,"category":803,"aliases":817,"links":822,"related":825,"readMore":-1,"target":828,"hasArticle":757},"container-registry","Container registry","A hosted store for container images, addressed by name and tag — Docker Hub, GitHub Container Registry, or a cloud provider's own. Pushing a build there turns 'works on my machine' into an image anyone can pull and run unchanged.",[818,819,820,821],"image registry","Docker registry","GHCR","ghcr.io",[823],{"kind":765,"url":824},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpackages\u002Fworking-with-a-github-packages-registry\u002Fworking-with-the-container-registry",[826,827],"dev-container","multi-arch-image","\u002Fglossary#container-registry",{"slug":619,"term":830,"definition":831,"category":747,"aliases":832,"links":836,"related":839,"readMore":840,"target":840,"hasArticle":423},"Deep linking","A link that opens a specific screen inside an installed app instead of its home screen or a web page. Deferred deep linking survives an install, so a tap that leads through the app store still lands on the right screen.",[833,834,835],"deferred deep linking","universal links","Android App Links",[837],{"kind":779,"url":838},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMobile_deep_linking",[759,768],"\u002Fglossary\u002Fdeep-linking",{"slug":826,"term":842,"definition":843,"category":789,"aliases":844,"links":848,"related":853,"readMore":-1,"target":854,"hasArticle":757},"Dev Container","A development environment described once in devcontainer.json — the OS, tools, and runtime versions a project needs — and opened identically inside a container by every contributor's editor, instead of a setup guide everyone interprets differently.",[845,846,847],"devcontainer.json","Dev Containers","VS Code Dev Containers",[849,851],{"kind":752,"url":850},"https:\u002F\u002Fcontainers.dev\u002F",{"kind":765,"url":852},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fdevcontainers\u002Fcontainers",[814],"\u002Fglossary#dev-container",{"slug":783,"term":856,"definition":857,"category":747,"aliases":858,"links":861,"related":866,"readMore":-1,"target":867,"hasArticle":757},"Elasticsearch","A search and analytics engine that indexes records so they can be filtered and searched interactively instead of scanned. What you reach for when the question is \"show me these particular sessions, narrowed six ways\" rather than \"sum this column\".",[859,860],"Elastic","ELK",[862,864],{"kind":752,"url":863},"https:\u002F\u002Fwww.elastic.co\u002Felasticsearch",{"kind":779,"url":865},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElasticsearch",[771],"\u002Fglossary#elasticsearch",{"slug":869,"term":870,"definition":871,"category":803,"aliases":872,"links":875,"related":878,"readMore":-1,"target":881,"hasArticle":757},"end-to-end-encryption","End-to-end encryption","Encryption applied on the sending device and undone only on the receiving one, so the service carrying the message cannot read it — not under subpoena, not after a breach. It protects the content and never the metadata.",[873,874],"E2EE","end-to-end encrypted",[876],{"kind":779,"url":877},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEnd-to-end_encryption",[879,880],"tls","jwt","\u002Fglossary#end-to-end-encryption",{"slug":883,"term":884,"definition":885,"category":803,"aliases":886,"links":889,"related":890,"readMore":-1,"target":894,"hasArticle":757},"fan-out","Fan-out","Reading an upstream source once and delivering each update to every client subscribed to it. The naive version writes to subscribers in a loop and stalls the moment one socket is slow; a real one buffers per client and drops whoever cannot keep up.",[887,888],"fanout","broadcast",[],[891,892,893],"websocket","pub-sub","server-sent-events","\u002Fglossary#fan-out",{"slug":896,"term":897,"definition":898,"category":789,"aliases":899,"links":903,"related":906,"readMore":-1,"target":910,"hasArticle":757},"feature-flags","Feature flags","Switches that turn functionality on or off from configuration rather than from a release. They let one binary behave differently per brand, market or user, and let a risky feature be shut off without shipping a new build through review.",[900,901,902],"feature flag","feature toggle","feature gating",[904],{"kind":779,"url":905},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFeature_toggle",[907,908,909],"staged-rollout","white-label","multi-tenancy","\u002Fglossary#feature-flags",{"slug":912,"term":913,"definition":914,"category":803,"aliases":915,"links":919,"related":922,"readMore":-1,"target":923,"hasArticle":757},"floating-point","Floating point","The IEEE 754 binary format behind double and float. It cannot hold 0.1 exactly, so 0.1 + 0.2 is 0.30000000000000004 — invisible in graphics and fatal in money, which belongs in integer minor units or a decimal type instead.",[916,917,918],"IEEE 754","double","floating-point arithmetic",[920],{"kind":779,"url":921},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIEEE_754",[],"\u002Fglossary#floating-point",{"slug":301,"term":925,"definition":926,"category":789,"aliases":927,"links":930,"related":935,"readMore":-1,"target":939,"hasArticle":757},"GDPR","The EU regulation covering personal data of people in the EU: a lawful basis for collecting it, real consent for tracking, and rights to see and delete it. It follows your users, not your servers, so it applies wherever the company is registered.",[928,929],"General Data Protection Regulation","data protection",[931,933],{"kind":752,"url":932},"https:\u002F\u002Fgdpr.eu\u002F",{"kind":779,"url":934},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[936,937,938],"pci-dss","soc-2","hipaa","\u002Fglossary#gdpr",{"slug":941,"term":942,"definition":943,"category":789,"aliases":944,"links":948,"related":951,"readMore":-1,"target":952,"hasArticle":757},"golden-test","Golden test","A test that renders a widget and compares the result pixel for pixel against a stored reference image. In Flutter it is the cheapest way to answer whether a redesign broke the empty state at 320pt, in dark mode, at 200% text scale.",[945,946,947],"golden tests","screenshot test","snapshot test",[949],{"kind":765,"url":950},"https:\u002F\u002Fapi.flutter.dev\u002Fflutter\u002Fflutter_test\u002FmatchesGoldenFile.html",[786],"\u002Fglossary#golden-test",{"slug":811,"term":954,"definition":955,"category":803,"aliases":956,"links":957,"related":962,"readMore":-1,"target":963,"hasArticle":757},"GraphQL","A query language for APIs where the client names exactly the fields it wants and gets one response shaped to match. It removes the over-fetching REST endpoints drift into, and adds a failure mode of its own: an unbounded query that walks the whole data model.",[],[958,960],{"kind":752,"url":959},"https:\u002F\u002Fgraphql.org\u002F",{"kind":779,"url":961},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGraphQL",[810],"\u002Fglossary#graphql",{"slug":938,"term":965,"definition":966,"category":789,"aliases":967,"links":969,"related":972,"readMore":-1,"target":973,"hasArticle":757},"HIPAA","The US law governing protected health information — how it may be stored, transmitted, logged and disclosed. Like PCI-DSS it is an architectural constraint chosen at the start, not a policy document added before launch.",[968],"Health Insurance Portability and Accountability Act",[970],{"kind":779,"url":971},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHealth_Insurance_Portability_and_Accountability_Act",[936,301,937],"\u002Fglossary#hipaa",{"slug":519,"term":975,"definition":976,"category":803,"aliases":977,"links":980,"related":983,"readMore":-1,"target":984,"hasArticle":757},"Headless CMS","A content system with an editor and an API but no front end of its own. Editors publish in one place, and the site or app renders that content itself — so the presentation layer is yours rather than the CMS vendor's.",[978,979],"headless content management system","content API",[981],{"kind":779,"url":982},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_content_management_system",[453,810],"\u002Fglossary#headless-cms",{"slug":755,"term":986,"definition":987,"category":747,"aliases":988,"links":992,"related":995,"readMore":-1,"target":996,"hasArticle":757},"Host Card Emulation","Letting an Android phone act as a contactless card over NFC in software, with no hardware secure element. It is how a wallet app pays at a terminal: the phone speaks the same EMV contactless protocol the plastic card would have.",[989,990,991],"HCE","EMV Contactless","contactless payments",[993],{"kind":765,"url":994},"https:\u002F\u002Fdeveloper.android.com\u002Fdevelop\u002Fconnectivity\u002Fnfc\u002Fhce",[936,744],"\u002Fglossary#host-card-emulation",{"slug":998,"term":999,"definition":1000,"category":747,"aliases":1001,"links":1002,"related":1005,"readMore":-1,"target":1007,"hasArticle":757},"impeller","Impeller","The rendering engine Flutter uses today, default on iOS since 2023 and on Android since 2024. It compiles its shaders ahead of time instead of during the first animation, which removed the shader-compilation jank that was Flutter's most visible production problem.",[],[1003],{"kind":765,"url":1004},"https:\u002F\u002Fdocs.flutter.dev\u002Fperf\u002Fimpeller",[1006],"skia","\u002Fglossary#impeller",{"slug":1009,"term":1010,"definition":1011,"category":1012,"aliases":1013,"links":1017,"related":1020,"readMore":-1,"target":1022,"hasArticle":757},"in-app-purchase","In-app purchase","Selling digital goods or a subscription through the Apple or Google billing that both stores require for digital content and take a commission on. The hard part is never the purchase; it is restoring it on a new device and keeping entitlement state honest.","business",[1014,1015,1016],"IAP","in-app purchases","in-app subscription",[1018],{"kind":765,"url":1019},"https:\u002F\u002Fdeveloper.apple.com\u002Fin-app-purchase\u002F",[1021],"product-market-fit","\u002Fglossary#in-app-purchase",{"slug":768,"term":1024,"definition":1025,"category":747,"aliases":1026,"links":1027,"related":1030,"readMore":-1,"target":1031,"hasArticle":757},"Install Referrer","A Google Play API that hands a freshly installed Android app the campaign parameters from the link that led to the install. The Android half of deferred deep linking, and the dependable way to attribute where a user came from.",[],[1028],{"kind":765,"url":1029},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Finstallreferrer",[619,759],"\u002Fglossary#install-referrer",{"slug":880,"term":1033,"definition":1034,"category":1035,"aliases":1036,"links":1038,"related":1043,"readMore":-1,"target":1044,"hasArticle":757},"JWT","A signed token carrying its own claims, so a server can tell who a request belongs to without looking a session up. Standard for mobile authentication. The signature proves it was not altered; it does not hide what is inside.","protocol",[1037],"JSON Web Token",[1039,1041],{"kind":752,"url":1040},"https:\u002F\u002Fjwt.io\u002F",{"kind":779,"url":1042},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Web_Token",[936],"\u002Fglossary#jwt",{"slug":1046,"term":1047,"definition":1048,"category":789,"aliases":1049,"links":1053,"related":1056,"readMore":-1,"target":1057,"hasArticle":757},"kyc","KYC","Know Your Customer — the identity checks a regulated financial product runs before it lets anyone move money: document capture, liveness, sanctions and anti-money-laundering screening. It shapes onboarding more than any design decision does.",[1050,1051,1052],"Know Your Customer","AML","KYC\u002FAML",[1054],{"kind":779,"url":1055},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnow_your_customer",[936,301],"\u002Fglossary#kyc",{"slug":76,"term":74,"definition":1059,"category":747,"aliases":1060,"links":1062,"related":1063,"readMore":1064,"target":1064,"hasArticle":757},"Sharing business logic written in Kotlin across Android, iOS and the server while each platform keeps its own native UI. The alternative to Flutter when the interface has to be native but the rules behind it do not.",[1061],"KMP",[],[],"\u002Ftechnologies\u002Fkmp",{"slug":1066,"term":1067,"definition":1068,"category":1012,"aliases":1069,"links":1071,"related":1074,"readMore":-1,"target":1075,"hasArticle":757},"mvp","MVP","The smallest version of a product that can go in front of real users and still answer the question you built it to answer. A decision about scope, not about quality — an MVP still has to work.",[1070],"minimum viable product",[1072],{"kind":779,"url":1073},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMinimum_viable_product",[908],"\u002Fglossary#mvp",{"slug":827,"term":1077,"definition":1078,"category":803,"aliases":1079,"links":1083,"related":1086,"readMore":-1,"target":1087,"hasArticle":757},"Multi-architecture image","A single image tag that resolves to different binaries per CPU architecture — linux\u002Famd64 and linux\u002Farm64 are the common pair — so the same docker pull works unchanged on Intel\u002FAMD servers and Apple Silicon laptops.",[1080,1081,1082],"multi-arch build","multi-platform image","linux\u002Famd64 + linux\u002Farm64",[1084],{"kind":765,"url":1085},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fmulti-platform\u002F",[814],"\u002Fglossary#multi-arch-image",{"slug":909,"term":1089,"definition":1090,"category":803,"aliases":1091,"links":1094,"related":1097,"readMore":-1,"target":1098,"hasArticle":757},"Multi-tenancy","One deployment serving many customers, each seeing only its own data, configuration and enabled features because tenant context is resolved per request. It is what makes a fleet of branded apps one product instead of many forks.",[1092,1093],"multi-tenant","tenant",[1095],{"kind":779,"url":1096},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",[908,896],"\u002Fglossary#multi-tenancy",{"slug":1100,"term":1101,"definition":1102,"category":1035,"aliases":1103,"links":1107,"related":1112,"readMore":-1,"target":1113,"hasArticle":757},"oauth","OAuth","The standard behind Sign in with Apple, Google and the rest: the user authorises your app at a provider they already trust, and your app receives a token instead of their password. Nobody invents a new credential and you never store one.",[1104,1105,1106],"OAuth 2.0","social login","Sign in with Apple",[1108,1110],{"kind":752,"url":1109},"https:\u002F\u002Foauth.net\u002F2\u002F",{"kind":779,"url":1111},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOAuth",[880],"\u002Fglossary#oauth",{"slug":782,"term":1115,"definition":1116,"category":803,"aliases":1117,"links":1121,"related":1124,"readMore":-1,"target":1125,"hasArticle":757},"Object storage","Storage that holds a whole file under a key rather than in a filesystem tree — Amazon S3 and the many services that speak its API. Cheap, effectively unlimited, and the usual home for raw events, backups and media: written once, read rarely, kept forever.",[1118,1119,1120],"S3","S3-compatible storage","blob storage",[1122],{"kind":779,"url":1123},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FObject_storage",[771],"\u002Fglossary#object-storage",{"slug":936,"term":1127,"definition":1128,"category":789,"aliases":1129,"links":1132,"related":1137,"readMore":-1,"target":1138,"hasArticle":757},"PCI-DSS","The card industry security standard binding anyone who stores, processes or transmits card data. Most apps stay out of its scope on purpose, by handing card entry to a certified payment provider instead.",[1130,1131],"PCI DSS","Payment Card Industry Data Security Standard",[1133,1135],{"kind":752,"url":1134},"https:\u002F\u002Fwww.pcisecuritystandards.org\u002F",{"kind":779,"url":1136},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPayment_Card_Industry_Data_Security_Standard",[880],"\u002Fglossary#pci-dss",{"slug":1140,"term":1141,"definition":1142,"category":747,"aliases":1143,"links":1146,"related":1149,"readMore":-1,"target":1150,"hasArticle":757},"platform-channels","Platform channels","The bridge a Flutter app uses to call native iOS and Android code — Keychain and Keystore, biometrics, payment sheets, any SDK without a Dart package. Routine work but real work, and the first place an engineer who never left Dart will stall.",[1144,1145],"platform channel","method channel",[1147],{"kind":765,"url":1148},"https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fplatform-channels",[76],"\u002Fglossary#platform-channels",{"slug":1152,"term":1153,"definition":1154,"category":1035,"aliases":1155,"links":1158,"related":1161,"readMore":-1,"target":1162,"hasArticle":757},"post-quantum-cryptography","Post-quantum cryptography","Encryption algorithms built to stay secure against a future quantum computer, now standardized by NIST. The migration is urgent ahead of the hardware because traffic captured today can be decrypted once such a machine exists.",[1156,1157],"PQC","post-quantum crypto",[1159],{"kind":779,"url":1160},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPost-quantum_cryptography",[879,869],"\u002Fglossary#post-quantum-cryptography",{"slug":1021,"term":1164,"definition":1165,"category":1012,"aliases":1166,"links":1169,"related":1172,"readMore":-1,"target":1174,"hasArticle":757},"Product-market fit","The point at which a product has demonstrably found people who want it — they use it, come back, and pay. Before it, engineering answers a question; after it, engineering answers demand.",[1167,1168],"PMF","product\u002Fmarket fit",[1170],{"kind":779,"url":1171},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct-market_fit",[1066,1173],"time-to-market","\u002Fglossary#product-market-fit",{"slug":1176,"term":1177,"definition":1178,"category":789,"aliases":1179,"links":1181,"related":1184,"readMore":-1,"target":1186,"hasArticle":757},"prompt-injection","Prompt injection","An attack where text supplied by a user is read by a language model as instructions rather than as data, steering it past its own rules. The LLM-era sibling of SQL injection, and it appears wherever user input is concatenated into a prompt.",[1180],"injection attack",[1182],{"kind":779,"url":1183},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_injection",[1185],"rate-limiting","\u002Fglossary#prompt-injection",{"slug":892,"term":1188,"definition":1189,"category":803,"aliases":1190,"links":1193,"related":1196,"readMore":-1,"target":1197,"hasArticle":757},"Pub\u002FSub","A messaging pattern where a producer publishes an event and any number of consumers read it independently, with a broker in between. The producer never waits for them, which is how a request path stays fast while slower work happens behind it.",[1191,1192],"publish\u002Fsubscribe","Google Cloud Pub\u002FSub",[1194],{"kind":779,"url":1195},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPublish%E2%80%93subscribe_pattern",[],"\u002Fglossary#pub-sub",{"slug":810,"term":1199,"definition":1200,"category":803,"aliases":1201,"links":1204,"related":1207,"readMore":-1,"target":1208,"hasArticle":757},"REST","The conventional style for HTTP APIs: a URL names a resource and the HTTP verb says what to do with it. The default way an app talks to a backend, and what most third-party integrations expect to find.",[1202,1203],"REST API","Representational State Transfer",[1205],{"kind":779,"url":1206},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FREST",[891,893],"\u002Fglossary#rest",{"slug":1185,"term":1210,"definition":1211,"category":789,"aliases":1212,"links":1215,"related":1218,"readMore":-1,"target":1219,"hasArticle":757},"Rate limiting","A cap on how many requests one caller may make in a given window. It is what stops a single enthusiastic user, a scraper or a bot from spending a month of paid API budget in an afternoon, and it has to live on your side of the integration.",[1213,1214],"rate limit","throttling",[1216],{"kind":779,"url":1217},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",[1176],"\u002Fglossary#rate-limiting",{"slug":937,"term":1221,"definition":1222,"category":789,"aliases":1223,"links":1226,"related":1229,"readMore":-1,"target":1230,"hasArticle":757},"SOC 2","An external auditor report on how an organisation handles customer data — security, availability, confidentiality — rather than a certificate you buy. Enterprise buyers ask for it, and it constrains architecture long before the audit itself does.",[1224,1225],"SOC2","System and Organization Controls",[1227],{"kind":779,"url":1228},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSystem_and_Organization_Controls",[936,301,938],"\u002Fglossary#soc-2",{"slug":1232,"term":1233,"definition":1234,"category":1012,"aliases":1235,"links":1238,"related":1241,"readMore":-1,"target":1242,"hasArticle":757},"saas","SaaS","Software sold as an ongoing subscription to a hosted product rather than as a one-off license the customer installs and runs. The vendor operates the servers, ships updates continuously, and bills per seat or per usage.",[1236,1237],"Software as a Service","software-as-a-service",[1239],{"kind":779,"url":1240},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_as_a_service",[909,908],"\u002Fglossary#saas",{"slug":893,"term":1244,"definition":1245,"category":1035,"aliases":1246,"links":1248,"related":1251,"readMore":-1,"target":1252,"hasArticle":757},"Server-Sent Events","A one-way stream from server to client over an ordinary HTTP connection. Simpler than a WebSocket and enough wherever only the server has something to say — a progress feed, an AI response arriving token by token.",[1247],"SSE",[1249],{"kind":779,"url":1250},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",[891,810],"\u002Fglossary#server-sent-events",{"slug":453,"term":1254,"definition":1255,"category":803,"aliases":1256,"links":1259,"related":1262,"readMore":-1,"target":1263,"hasArticle":757},"Server-side rendering","Building a page as finished HTML on the server, so the first response already carries the content, headings, meta tags and structured data. Crawlers, link previews and slow devices read it without running JavaScript.",[1257,1258],"SSR","server-rendered",[1260],{"kind":779,"url":1261},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-side_scripting",[519],"\u002Fglossary#server-side-rendering",{"slug":1006,"term":1265,"definition":1266,"category":747,"aliases":1267,"links":1270,"related":1275,"readMore":-1,"target":1276,"hasArticle":757},"Skia","The open-source 2D graphics library from Google that draws Chrome, Android and — until Impeller — every Flutter frame. It renders to PDF as well as to a screen, which is what print-to-PDF in Chrome is doing.",[1268,1269],"Skia Graphics Engine","skia-safe",[1271,1273],{"kind":752,"url":1272},"https:\u002F\u002Fskia.org\u002F",{"kind":779,"url":1274},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSkia_Graphics_Engine",[998],"\u002Fglossary#skia",{"slug":1278,"term":1279,"definition":1280,"category":1012,"aliases":1281,"links":1284,"related":1285,"readMore":-1,"target":1287,"hasArticle":757},"staff-augmentation","Staff augmentation","A hiring model where engineers from an outside partner join your team and work under your management — in your repository, your sprints, your process — instead of delivering a project of their own. You buy capacity; the code and the context stay with you.",[322,1282,1283],"dedicated developers","outstaffing",[],[1286,1173],"total-cost-of-ownership","\u002Fglossary#staff-augmentation",{"slug":907,"term":1289,"definition":1290,"category":789,"aliases":1291,"links":1294,"related":1295,"readMore":-1,"target":1296,"hasArticle":757},"Staged rollout","Releasing a build to a small percentage of users first and widening only once the crash-free rate holds. A bad build caught at ten percent is a bad afternoon; the same build at a hundred percent is a bad week.",[1292,1293],"phased release","canary release",[],[896,786],"\u002Fglossary#staged-rollout",{"slug":1298,"term":1299,"definition":1300,"category":803,"aliases":1301,"links":1305,"related":1308,"readMore":-1,"target":1309,"hasArticle":757},"state-management","State management","How an app decides where a value lives, who is allowed to change it, and which parts of the screen redraw when it does. In Flutter the choice between Riverpod, BLoC and Provider is among the first architectural decisions and the hardest to revisit.",[1302,1303,1304],"state management","BLoC","Riverpod",[1306],{"kind":765,"url":1307},"https:\u002F\u002Fdocs.flutter.dev\u002Fdata-and-backend\u002Fstate-mgmt\u002Foptions",[941],"\u002Fglossary#state-management",{"slug":879,"term":1311,"definition":1312,"category":1035,"aliases":1313,"links":1317,"related":1320,"readMore":-1,"target":1321,"hasArticle":757},"TLS","The encryption layer underneath HTTPS. It proves the server is who its certificate says, agrees a fresh key for the session, and encrypts everything after that — so the network in between sees ciphertext it cannot quietly alter.",[1314,1315,1316],"SSL","HTTPS","Transport Layer Security",[1318],{"kind":779,"url":1319},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransport_Layer_Security",[869,880],"\u002Fglossary#tls",{"slug":1173,"term":1323,"definition":1324,"category":1012,"aliases":1325,"links":1327,"related":1330,"readMore":-1,"target":1331,"hasArticle":757},"Time to market","How long it takes to get a product from decision to real users. Most stack and scope arguments are really arguments about this number, because every week saved is a week of revenue, feedback and competitive position.",[1326,1173],"TTM",[1328],{"kind":779,"url":1329},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTime_to_market",[1066,1286],"\u002Fglossary#time-to-market",{"slug":1286,"term":1333,"definition":1334,"category":1012,"aliases":1335,"links":1338,"related":1341,"readMore":-1,"target":1342,"hasArticle":757},"Total cost of ownership","What a product costs across its whole life rather than to build once: maintenance, upgrades, annual OS and store migrations, and the second team you staff to keep two codebases in step. Usually larger than the build quote, and almost never inside it.",[1336,1337],"TCO","cost of ownership",[1339],{"kind":779,"url":1340},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTotal_cost_of_ownership",[1173],"\u002Fglossary#total-cost-of-ownership",{"slug":1344,"term":1345,"definition":1346,"category":1035,"aliases":1347,"links":1349,"related":1354,"readMore":-1,"target":1356,"hasArticle":757},"webrtc","WebRTC","The browser and mobile standard for sending audio, video and data directly between two devices, with servers involved only in introducing them to each other. It is what an in-app video call is built on when it is not a rented SDK.",[1348],"Web Real-Time Communication",[1350,1352],{"kind":752,"url":1351},"https:\u002F\u002Fwebrtc.org\u002F",{"kind":779,"url":1353},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebRTC",[1355,891],"xmpp","\u002Fglossary#webrtc",{"slug":891,"term":1358,"definition":1359,"category":1035,"aliases":1360,"links":1361,"related":1364,"readMore":-1,"target":1365,"hasArticle":757},"WebSocket","A protocol that holds one connection open between client and server so either side can send at any moment, instead of the client asking over and over. What live prices, chat and presence indicators run on.",[],[1362],{"kind":779,"url":1363},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebSocket",[893,810],"\u002Fglossary#websocket",{"slug":908,"term":1367,"definition":1368,"category":1012,"aliases":1369,"links":1372,"related":1375,"readMore":1376,"target":1376,"hasArticle":423},"White-label","One product shipped under many brands. A white-label mobile platform builds each client a store-ready app with its own name, design and content from a single shared codebase, instead of forking the project per customer.",[1370,1371],"white label","multi-tenant app",[1373],{"kind":779,"url":1374},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWhite-label_product",[1066],"\u002Fglossary\u002Fwhite-label",{"slug":1355,"term":1378,"definition":1379,"category":1035,"aliases":1380,"links":1383,"related":1388,"readMore":-1,"target":1389,"hasArticle":757},"XMPP","An open, federated messaging protocol, and the long-standing alternative to writing a chat backend or renting one. It extends to presence, typing indicators and file transfer, and it is old enough that every platform has a mature client library.",[1381,1382],"Jabber","Extensible Messaging and Presence Protocol",[1384,1386],{"kind":752,"url":1385},"https:\u002F\u002Fxmpp.org\u002F",{"kind":779,"url":1387},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FXMPP",[1344,891],"\u002Fglossary#xmpp"]