1:"$Sreact.fragment" 2:I[878,["619","static/chunks/619-f09bc47e24909021.js","625","static/chunks/625-8a10369c10f5b167.js","278","static/chunks/278-2facacf06d9c0828.js","177","static/chunks/app/layout-609d47ae5c824ca5.js"],"TabAwayTitle"] 3:I[956,["619","static/chunks/619-f09bc47e24909021.js","625","static/chunks/625-8a10369c10f5b167.js","278","static/chunks/278-2facacf06d9c0828.js","177","static/chunks/app/layout-609d47ae5c824ca5.js"],"CursorGlow"] 4:I[8297,["619","static/chunks/619-f09bc47e24909021.js","625","static/chunks/625-8a10369c10f5b167.js","278","static/chunks/278-2facacf06d9c0828.js","177","static/chunks/app/layout-609d47ae5c824ca5.js"],"Nav"] 5:I[9766,[],""] 6:I[8924,[],""] 7:I[2619,["619","static/chunks/619-f09bc47e24909021.js","953","static/chunks/app/blog/%5Bslug%5D/page-19aafdce6535701c.js"],""] 8:I[5989,["619","static/chunks/619-f09bc47e24909021.js","625","static/chunks/625-8a10369c10f5b167.js","278","static/chunks/278-2facacf06d9c0828.js","177","static/chunks/app/layout-609d47ae5c824ca5.js"],"FloatingAssistant"] e:I[7150,[],""] :HL["/_next/static/css/2ab64e17c806edc5.css","style"] 9:T655,{"@context":"https://schema.org","@type":"Person","name":"Samuel Ekunyan","url":"https://ekunyansamuel.dev","image":"https://ekunyansamuel.dev/brand/se-logo-master.png","jobTitle":"Backend Developer, Bot Builder & Automation Engineer","description":"Samuel Ekunyan is a backend developer who builds Node.js APIs, automation bots for any platform, workflow automation systems, and Laravel-powered business platforms. He also manages tech projects and mentors developers.","email":"Samuel@ekunyansamuel.dev","sameAs":["https://x.com/samuel_ekunyan","https://www.linkedin.com/in/samuel-ekunyan/","https://github.com/easamuel","https://www.instagram.com/ekunyan_samuel/","https://blog.ekunyansamuel.dev"],"knowsAbout":["Node.js Backend Development","Bot Development","Automation Engineering","Web Automation","Telegram Bot Development","WhatsApp Bot Development","Slack Bot Development","Discord Bot Development","REST API Development","Webhook Integration","Laravel Development","WordPress Development","Vue.js","MySQL Database Design","Tech Project Management","Software Consulting","Developer Mentorship","Workflow Automation","Business Process Automation","Fullstack Development"],"hasOccupation":[{"@type":"Occupation","name":"Backend Developer","description":"Builds Node.js APIs, automation systems, and server-side logic"},{"@type":"Occupation","name":"Bot Developer","description":"Builds automation bots for web, Telegram, WhatsApp, Slack, Discord and any platform"},{"@type":"Occupation","name":"Tech Project Manager","description":"Manages engineering teams and tech delivery for digital agencies and startups"}]}0:{"P":null,"b":"_4Tix7t0cV1Vo5Sp5uWrg","p":"","c":["","blog","api-design-starts-with-client-workflow"],"i":false,"f":[[["",{"children":["blog",{"children":[["slug","api-design-starts-with-client-workflow","d"],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2ab64e17c806edc5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"__variable_0a80b4 __variable_dd5b2f __variable_9ef920 h-full antialiased","children":[["$","head",null,{"children":[["$","link",null,{"rel":"icon","href":"https://ekunyansamuel.dev/whatsapp-icon.png","sizes":"512x512","type":"image/png"}],["$","link",null,{"rel":"shortcut icon","href":"https://ekunyansamuel.dev/whatsapp-icon.png","type":"image/png"}],["$","link",null,{"rel":"apple-touch-icon","href":"https://ekunyansamuel.dev/apple-touch-icon.png","sizes":"180x180"}],["$","link",null,{"rel":"apple-touch-icon","href":"https://ekunyansamuel.dev/icon-192.png","sizes":"192x192"}],["$","link",null,{"rel":"apple-touch-icon-precomposed","href":"https://ekunyansamuel.dev/apple-touch-icon.png"}],["$","link",null,{"rel":"image_src","href":"https://ekunyansamuel.dev/whatsapp-icon.png"}],["$","script",null,{"dangerouslySetInnerHTML":{"__html":"try{var t=localStorage.getItem('theme');document.documentElement.dataset.theme=t==='light'?'light':'dark'}catch(e){document.documentElement.dataset.theme='dark'}"}}]]}],["$","body",null,{"className":"min-h-full bg-background text-foreground","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{}],["$","main",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","section",null,{"className":"flex min-h-[70vh] flex-col items-center justify-center px-6 py-24","children":[["$","p",null,{"className":"font-mono text-[11px] uppercase tracking-[0.28em] text-accent","children":"404"}],["$","h1",null,{"className":"mt-4 max-w-lg text-center font-serif text-4xl font-light tracking-[-0.04em] text-foreground md:text-5xl","children":"This page is not here."}],["$","p",null,{"className":"mt-6 max-w-md text-center text-sm leading-7 text-foreground/60","children":"The link may be old or mistyped. Head back to the home page and use the navigation or footer links."}],["$","$L7",null,{"href":"/","className":"mt-10 inline-flex bg-accent px-8 py-3 font-mono text-[10px] uppercase tracking-[0.22em] text-background transition hover:opacity-95","children":"Back home"}]]}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L8",null,{}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"$9"}}]]}]]}]]}],{"children":["blog","$La",{"children":[["slug","api-design-starts-with-client-workflow","d"],"$Lb",{"children":["__PAGE__","$Lc",{},null,false]},null,false]},null,false]},null,false],"$Ld",false]],"m":"$undefined","G":["$e",[]],"s":false,"S":true} 10:I[4431,[],"OutletBoundary"] 12:I[5278,[],"AsyncMetadataOutlet"] 14:I[4431,[],"ViewportBoundary"] 16:I[4431,[],"MetadataBoundary"] 17:"$Sreact.suspense" a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] b:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] c:["$","$1","c",{"children":["$Lf",null,["$","$L10",null,{"children":["$L11",["$","$L12",null,{"promise":"$@13"}]]}]]}] d:["$","$1","h",{"children":[null,[["$","$L14",null,{"children":"$L15"}],null],["$","$L16",null,{"children":["$","div",null,{"hidden":true,"children":["$","$17",null,{"fallback":null,"children":"$L18"}]}]}]]}] 15:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","2",{"name":"theme-color","media":"(prefers-color-scheme: dark)","content":"#07070e"}],["$","meta","3",{"name":"theme-color","media":"(prefers-color-scheme: light)","content":"#f7f1e6"}]] 11:null 19:I[3098,["619","static/chunks/619-f09bc47e24909021.js","953","static/chunks/app/blog/%5Bslug%5D/page-19aafdce6535701c.js"],"NewsletterForm"] 20:I[622,[],"IconMark"] f:[["$","article",null,{"className":"px-6 pb-24 pt-32","children":["$","div",null,{"className":"mx-auto max-w-3xl","children":[["$","p",null,{"className":"font-mono text-[11px] uppercase tracking-[0.28em] text-accent","children":"APIs"}],["$","h1",null,{"className":"mt-5 font-serif text-5xl font-light leading-none text-foreground md:text-7xl","children":"API Design Starts With the Client Workflow"}],["$","p",null,{"className":"mt-6 text-lg leading-8 text-foreground/62","children":"Useful APIs are shaped by the frontend, mobile app, automation flow, and operational jobs that consume them."}],["$","div",null,{"className":"mt-10 border-y border-white/[0.08] py-8","children":["$","div",null,{"className":"space-y-6 text-lg leading-9 text-foreground/72","children":[["$","p","A good API is not just a list of resources. It is a set of promises made to real consumers: frontend screens, mobile flows, partners, dashboards, and automation workers.",{"children":"A good API is not just a list of resources. It is a set of promises made to real consumers: frontend screens, mobile flows, partners, dashboards, and automation workers."}],["$","p","When I design an API, I start by mapping the consumer workflow. What does the client need to know first? Which state changes matter? Which errors can the user recover from? Which fields must be stable for integrations?",{"children":"When I design an API, I start by mapping the consumer workflow. What does the client need to know first? Which state changes matter? Which errors can the user recover from? Which fields must be stable for integrations?"}],["$","p","That workflow-first approach produces APIs that are easier to use, easier to document, and easier to evolve.",{"children":"That workflow-first approach produces APIs that are easier to use, easier to document, and easier to evolve."}]]}]}],["$","div",null,{"className":"mt-10 border border-white/[0.08] bg-white/[0.025] p-6","children":[["$","p",null,{"className":"font-mono text-[10px] uppercase tracking-[0.22em] text-accent","children":"Newsletter"}],["$","p",null,{"className":"mt-3 text-sm leading-7 text-foreground/60","children":"Get practical backend engineering notes in your inbox."}],["$","div",null,{"className":"mt-5","children":["$","$L19",null,{"source":"blog-api-design-starts-with-client-workflow"}]}]]}]]}]}],["$","footer",null,{"className":"border-t border-white/[0.06] px-6 py-10","children":["$","div",null,{"className":"mx-auto grid max-w-7xl gap-8 md:grid-cols-[1fr_1fr] md:items-start","children":[["$","div",null,{"children":[["$","p",null,{"className":"font-mono text-[10px] uppercase tracking-[0.24em] text-accent","children":"Newsletter"}],["$","p",null,{"className":"mt-3 max-w-md text-sm leading-7 text-foreground/55","children":"Backend notes on APIs, authentication, databases, architecture, and practical product engineering."}],["$","div",null,{"className":"mt-5","children":["$","$L19",null,{"source":"footer"}]}]]}],["$","div",null,{"className":"flex flex-col gap-5 md:items-end","children":[["$","div",null,{"className":"flex flex-wrap gap-4 font-mono text-[10px] uppercase tracking-[0.2em] text-foreground/35","children":[["$","$L7",null,{"href":"/engineering-notes","className":"transition hover:text-accent","children":"Notes"}],["$","$L7",null,{"href":"/blog","className":"transition hover:text-accent","children":"Blog"}],["$","$L7",null,{"href":"/services","className":"transition hover:text-accent","children":"Services"}],["$","$L7",null,{"href":"/services/whatsapp-automation","className":"transition hover:text-accent","children":"WhatsApp Automation"}],["$","$L7",null,{"href":"/hire","className":"transition hover:text-accent","children":"Hire"}],["$","$L7",null,{"href":"/privacy","className":"transition hover:text-accent","children":"Privacy"}]]}],["$","div",null,{"className":"flex gap-4","children":[["$","a","Twitter/X",{"href":"https://x.com/samuel_ekunyan","target":"_blank","rel":"noopener noreferrer","aria-label":"Twitter/X","className":"text-foreground/40 transition hover:scale-110 hover:text-accent","children":"$L1a"}],"$L1b","$L1c","$L1d","$L1e"]}],"$L1f"]}]]}]}]] 13:{"metadata":[["$","title","0",{"children":"API Design Starts With the Client Workflow"}],["$","meta","1",{"name":"description","content":"A backend article on API design, client workflows, errors, and stable integration contracts."}],["$","link","2",{"rel":"author","href":"https://ekunyansamuel.dev"}],["$","meta","3",{"name":"author","content":"Samuel Ekunyan"}],["$","link","4",{"rel":"manifest","href":"/site.webmanifest","crossOrigin":"$undefined"}],["$","meta","5",{"name":"creator","content":"Samuel Ekunyan"}],["$","meta","6",{"name":"robots","content":"index, follow"}],["$","meta","7",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","8",{"rel":"canonical","href":"https://ekunyansamuel.dev/blog/api-design-starts-with-client-workflow"}],["$","meta","9",{"property":"og:title","content":"API Design Starts With the Client Workflow"}],["$","meta","10",{"property":"og:description","content":"A backend article on API design, client workflows, errors, and stable integration contracts."}],["$","meta","11",{"property":"og:image","content":"https://ekunyansamuel.dev/og-image.png"}],["$","meta","12",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","13",{"name":"twitter:title","content":"API Design Starts With the Client Workflow"}],["$","meta","14",{"name":"twitter:description","content":"A backend article on API design, client workflows, errors, and stable integration contracts."}],["$","meta","15",{"name":"twitter:image","content":"https://ekunyansamuel.dev/og-image.png"}],["$","link","16",{"rel":"shortcut icon","href":"https://ekunyansamuel.dev/whatsapp-icon.png"}],["$","link","17",{"rel":"icon","href":"https://ekunyansamuel.dev/whatsapp-icon.png","sizes":"512x512","type":"image/png"}],["$","link","18",{"rel":"icon","href":"https://ekunyansamuel.dev/icon-192.png","sizes":"192x192","type":"image/png"}],["$","link","19",{"rel":"icon","href":"https://ekunyansamuel.dev/favicon-32.png","sizes":"32x32","type":"image/png"}],["$","link","20",{"rel":"icon","href":"https://ekunyansamuel.dev/icon.png","sizes":"512x512","type":"image/png"}],["$","link","21",{"rel":"apple-touch-icon","href":"https://ekunyansamuel.dev/apple-touch-icon.png","sizes":"180x180","type":"image/png"}],["$","link","22",{"rel":"apple-touch-icon","href":"https://ekunyansamuel.dev/icon-192.png","sizes":"192x192","type":"image/png"}],["$","link","23",{"rel":"apple-touch-icon","href":"https://ekunyansamuel.dev/whatsapp-icon.png","sizes":"512x512","type":"image/png"}],["$","$L20","24",{}]],"error":null,"digest":"$undefined"} 18:"$13:metadata" 1a:["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":22,"height":22,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-twitter","aria-hidden":"true","children":[["$","path","pff0z6",{"d":"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z"}],"$undefined"]}] 1b:["$","a","Instagram",{"href":"https://www.instagram.com/ekunyan_samuel/","target":"_blank","rel":"noopener noreferrer","aria-label":"Instagram","className":"text-foreground/40 transition hover:scale-110 hover:text-accent","children":["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":22,"height":22,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-instagram","aria-hidden":"true","children":[["$","rect","2e1cvw",{"width":"20","height":"20","x":"2","y":"2","rx":"5","ry":"5"}],["$","path","9exkf1",{"d":"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"}],["$","line","r4j83e",{"x1":"17.5","x2":"17.51","y1":"6.5","y2":"6.5"}],"$undefined"]}]}] 1c:["$","a","LinkedIn",{"href":"https://www.linkedin.com/in/samuel-ekunyan/","target":"_blank","rel":"noopener noreferrer","aria-label":"LinkedIn","className":"text-foreground/40 transition hover:scale-110 hover:text-accent","children":["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":22,"height":22,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-linkedin","aria-hidden":"true","children":[["$","path","c2jq9f",{"d":"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"}],["$","rect","mk3on5",{"width":"4","height":"12","x":"2","y":"9"}],["$","circle","bt5ra8",{"cx":"4","cy":"4","r":"2"}],"$undefined"]}]}] 1d:["$","a","GitHub",{"href":"https://github.com/easamuel","target":"_blank","rel":"noopener noreferrer","aria-label":"GitHub","className":"text-foreground/40 transition hover:scale-110 hover:text-accent","children":["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":22,"height":22,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-github","aria-hidden":"true","children":[["$","path","tonef",{"d":"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"}],["$","path","9comsn",{"d":"M9 18c-4.51 2-5-2-7-2"}],"$undefined"]}]}] 1e:["$","a","WhatsApp",{"href":"https://api.whatsapp.com/send?phone=2348036375292","target":"_blank","rel":"noopener noreferrer","aria-label":"WhatsApp","className":"text-foreground/40 transition hover:scale-110 hover:text-accent","children":["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":22,"height":22,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-message-circle","aria-hidden":"true","children":[["$","path","1sd12s",{"d":"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719"}],"$undefined"]}]}] 1f:["$","p",null,{"className":"font-mono text-[10px] uppercase tracking-[0.18em] text-foreground/30","children":"© 2026 Samuel Ekunyan · Backend Engineer · Technical Educator"}]