1import{f as b,a,B as c,L as l,D as y,y as j,z as w,E as S,i as T,b as N,c as z,d as P,e as A,o as E}from"../chunks/chunk-CtMe_7P0.js";import{j as e}from"../chunks/chunk-ChS_scUt.js";import{C as n}from"../chunks/chunk-AL3WEht_.js";import{u as C}from"../chunks/chunk-BNatnpXh.js";import{C as h,D as x}from"../chunks/chunk-CJHHp7WI.js";import{r as p,m as k,x as D,y as R,A as d,z as _,D as g,F as U,K as I,I as v,U as f,V as L,J as B,O as V,S as O,P as q,Q as K,G,W as M}from"../chunks/chunk-Df29M8GQ.js";import{T as H,a as F,b as J,c as Q}from"../chunks/chunk-Dkmw_J7Q.js";import{g as W}from"../chunks/chunk-BHQwkgYz.js";import"../chunks/chunk-BjwTNkyl.js";/* empty css *//* empty css */import"../chunks/chunk-DKTMysIl.js";function u({value:t}){const{t:i}=a(),[s,o]=p.useState(!1),r=p.useCallback(async()=>{try{await navigator.clipboard.writeText(t),o(!0),window.setTimeout(()=>o(!1),2e3)}catch{}},[t]);return e.jsx("button",{type:"button",onClick:r,"aria-label":s?i("developers.docs.common.copied","Copied"):i("developers.docs.common.copy","Copy"),className:"press-scale absolute right-3 top-3 inline-flex size-8 items-center justify-center rounded-md border border-white/10 bg-white/5 text-white/70 transition-colors hover:bg-white/10 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40",children:s?e.jsx(k,{className:"size-4"}):e.jsx(D,{className:"size-4"})})}function m({sample:t}){return e.jsx("pre",{className:"min-w-0 max-w-full overflow-x-auto p-4 font-mono text-[13px] leading-6 text-zinc-100",children:t.html?e.jsx("code",{className:"hljs",dangerouslySetInnerHTML:{__html:t.html}}):e.jsx("code",{children:t.code})})}function X({samples:t,className:i,caption:s}){if(t.length===0)return null;const o=t.length>1;return e.jsxs("div",{className:b("my-6 min-w-0",i),children:[s?e.jsx("div",{className:"mb-2 text-xs font-medium text-muted-foreground",children:s}):null,e.jsx("div",{className:"relative min-w-0 max-w-full overflow-hidden rounded-xl border border-border/60 bg-zinc-950 shadow-sm",children:o?e.jsxs(H,{defaultValue:t[0].label,children:[e.jsx("div",{className:"flex items-center justify-between border-b border-white/10 bg-zinc-900/60 px-2",children:e.jsx(F,{className:"h-10 gap-1 bg-transparent p-1",children:t.map(r=>e.jsx(J,{value:r.label,className:"text-xs text-white/60 data-[state=active]:bg-white/10 data-[state=active]:text-white",children:r.label},r.label))})}),t.map(r=>e.jsxs(Q,{value:r.label,className:"relative mt-0 min-w-0",children:[e.jsx(u,{value:r.code}),e.jsx(m,{sample:r})]},r.label))]}):e.jsxs("div",{className:"relative min-w-0",children:[e.jsx(u,{value:t[0].code}),e.jsx(m,{sample:t[0]})]})})]})}function $(){const{t}=a(),{heroSamples:i}=C();return e.jsxs("section",{className:"relative overflow-hidden",children:[e.jsx("div",{className:"pointer-events-none absolute inset-0 -z-10 bg-gradient-to-b from-primary/5 via-transparent to-transparent","aria-hidden":"true"}),e.jsx(n,{className:"pt-10 pb-12 sm:pt-16 lg:pt-20",children:e.jsxs("div",{className:"grid items-center gap-10 lg:grid-cols-2 lg:gap-14",children:[e.jsxs("div",{children:[e.jsxs("p",{className:"mb-4 inline-flex items-center gap-2 text-sm font-medium uppercase tracking-wide text-primary",children:[e.jsx(R,{className:"size-4","aria-hidden":"true"}),t("developers.landing.hero.eyebrow","Vocdoni for developers")]}),e.jsx("h1",{className:"text-4xl text-balance sm:text-5xl lg:text-6xl",children:t("developers.landing.hero.title","Build verifiable voting into your product")}),e.jsx("p",{className:"mt-5 max-w-xl text-lg leading-8 text-muted-foreground",children:t("developers.landing.hero.subtitle","Add secure, anonymous and end-to-end verifiable elections to your software with one REST API. Create organizations, build censuses, run processes and read results - without becoming a cryptography expert.")}),e.jsxs("div",{className:"mt-8 flex w-full flex-col gap-4 sm:w-auto sm:flex-row",children:[e.jsx(c,{asChild:!0,size:"lg",className:"group w-full text-base sm:w-auto",children:e.jsxs(l,{href:"/developers/docs",variant:"inlineIcon",children:[t("developers.landing.hero.cta_primary","Get started"),e.jsx(d,{className:"size-5 transition-transform duration-200 group-hover:translate-x-0.5","aria-hidden":"true"})]})}),e.jsx(c,{asChild:!0,size:"lg",variant:"outline",className:"group w-full text-base sm:w-auto",children:e.jsxs(l,{href:y,variant:"inlineIcon",children:[t("developers.landing.hero.cta_dashboard","API Dashboard"),e.jsx(d,{className:"size-5 transition-transform duration-200 group-hover:translate-x-0.5","aria-hidden":"true"})]})})]})]}),e.jsx("div",{className:"min-w-0 lg:pl-4",children:e.jsx(X,{caption:t("developers.landing.hero.code_caption","Authenticate, then create your first election"),samples:i})})]})})]})}function Y(){const{t}=a(),i=[{icon:_,title:t("developers.landing.pillars.quickstart.title","Quickstart"),description:t("developers.landing.pillars.quickstart.description","Run a full election end to end - create an org, build a census, open a process and read the tally - in a few API calls."),href:"/developers/docs/quickstart",cta:t("developers.landing.pillars.quickstart.cta","Run the quickstart"),external:!1},{icon:g,title:t("developers.landing.pillars.api.title","SaaS API"),description:t("developers.landing.pillars.api.description","A REST API to run managed elections: organizations, members, censuses, processes, results and async jobs."),href:"/developers/docs",cta:t("developers.landing.pillars.api.cta","Explore the API"),external:!1},{icon:U,title:t("developers.landing.pillars.sdk.title","SDK"),description:t("developers.landing.pillars.sdk.description","The TypeScript SDK adds client-side voting to your app - CSP auth, ballot encoding and vote signing - all through the SaaS API."),href:"/developers/docs/sdk-quickstart",cta:t("developers.landing.pillars.sdk.cta","SDK quickstart"),external:!1}];return e.jsx("section",{className:"py-14 sm:py-20",children:e.jsx(n,{children:e.jsx("div",{className:"grid gap-5 md:grid-cols-3",children:i.map(s=>e.jsxs("div",{className:"flex flex-col rounded-2xl border border-border/60 bg-card p-6 shadow-sm",children:[e.jsx("span",{className:"inline-flex size-11 items-center justify-center rounded-xl bg-primary/10 text-primary",children:e.jsx(s.icon,{className:"size-6","aria-hidden":"true"})}),e.jsx("h2",{className:"mt-4 text-lg font-semibold",children:s.title}),e.jsx("p",{className:"mt-2 flex-grow text-sm leading-relaxed text-muted-foreground",children:s.description}),e.jsxs(l,{href:s.href,target:s.external?"_blank":void 0,variant:"inlineIcon",className:"mt-4 text-sm font-medium text-primary",children:[s.cta,e.jsx(d,{className:"size-4"})]})]},s.title))})})})}function Z(){const{t}=a(),i=[{icon:I,title:t("developers.landing.build.authentication.title","API keys"),description:t("developers.landing.build.authentication.description","Authenticate with a scoped API key for server-to-server access."),href:"/developers/docs/api-keys"},{icon:v,title:t("developers.landing.build.organizations.title","Organizations"),description:t("developers.landing.build.organizations.description","Create organizations and manage users and roles."),href:"/developers/docs/organizations"},{icon:f,title:t("developers.landing.build.census.title","Members and census"),description:t("developers.landing.build.census.description","Import members and publish a census ready to vote."),href:"/developers/docs/census"},{icon:L,title:t("developers.landing.build.processes.title","Voting processes"),description:t("developers.landing.build.processes.description","Configure ballots, vote types and election timing."),href:"/developers/docs/voting-processes"},{icon:B,title:t("developers.landing.build.results.title","Results"),description:t("developers.landing.build.results.description","Read live and final tallies for any process."),href:"/developers/docs/results"},{icon:g,title:t("developers.landing.build.managed.title","Managed organizations"),description:t("developers.landing.build.managed.description","Provision sub-organizations for your own customers."),href:"/developers/docs/managed-organizations"}];return e.jsx("section",{className:"border-t border-border/60 bg-muted/20 py-14 sm:py-20",children:e.jsxs(n,{children:[e.jsxs("div",{className:"mx-auto mb-10 max-w-2xl text-center",children:[e.jsx("h2",{className:"text-2xl sm:text-3xl",children:t("developers.landing.build.title","Start building")}),e.jsx("p",{className:"mt-3 text-muted-foreground",children:t("developers.landing.build.subtitle","Jump
1straight to the part of the API you need.")})]}),e.jsx(h,{columns:3,children:i.map(s=>e.jsx(x,{href:s.href,icon:s.icon,title:s.title,description:s.description},s.title))})]})})}function ee(){const{t}=a(),i=[{icon:V,title:t("developers.landing.capabilities.anonymous.title","Configurable privacy"),description:t("developers.landing.capabilities.anonymous.description","Privacy is configurable to match your governance requirements. Support anonymous voting with zkSNARKs, blind signatures, or other cryptographic approaches, while preserving end-to-end verifiability.")},{icon:O,title:t("developers.landing.capabilities.verifiable.title","End-to-end verifiable"),description:t("developers.landing.capabilities.verifiable.description","Voters and observers can independently verify that every vote was counted.")},{icon:f,title:t("developers.landing.capabilities.census.title","Flexible census"),description:t("developers.landing.capabilities.census.description","Authenticate voters by email, SMS or custom fields, with optional weighting.")},{icon:v,title:t("developers.landing.capabilities.whitelabel.title","Multi-tenant ready"),description:t("developers.landing.capabilities.whitelabel.description","Run elections for many customers from a single integrator account.")}];return e.jsx("section",{className:"py-14 sm:py-20",children:e.jsxs(n,{children:[e.jsx("div",{className:"mx-auto mb-10 max-w-2xl text-center",children:e.jsx("h2",{className:"text-2xl sm:text-3xl",children:t("developers.landing.capabilities.title","Built on guarantees you can prove")})}),e.jsx("div",{className:"grid gap-5 sm:grid-cols-2 lg:grid-cols-4",children:i.map(s=>e.jsxs("div",{className:"rounded-2xl border border-border/60 p-5",children:[e.jsx(s.icon,{className:"size-6 text-primary","aria-hidden":"true"}),e.jsx("h3",{className:"mt-3 text-base font-semibold",children:s.title}),e.jsx("p",{className:"mt-1.5 text-sm leading-relaxed text-muted-foreground",children:s.description})]},s.title))})]})})}function te(){const{t}=a(),i=[{icon:q,title:t("developers.landing.resources.reference.title","API reference"),description:t("developers.landing.resources.reference.description","Every endpoint, schema and field."),href:j,external:!0},{icon:K,title:t("developers.landing.resources.sdk.title","SDK documentation"),description:t("developers.landing.resources.sdk.description","Install the SDK and cast votes from your app."),href:"/developers/docs/sdk-quickstart",external:!1},{icon:G,title:t("developers.landing.resources.github.title","GitHub"),description:t("developers.landing.resources.github.description","Open-source code and issues."),href:w,external:!0},{icon:M,title:t("developers.landing.resources.support.title","Status and support"),description:t("developers.landing.resources.support.description","Service status and ways to reach us."),href:S,external:!0}];return e.jsx("section",{className:"border-t border-border/60 py-14 sm:py-20",children:e.jsxs(n,{children:[e.jsxs("div",{className:"mb-8 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-end",children:[e.jsx("h2",{className:"text-2xl sm:text-3xl",children:t("developers.landing.resources.title","Resources")}),e.jsx(c,{asChild:!0,variant:"outline",children:e.jsxs(l,{href:"/developers/docs",variant:"inlineIcon",children:[t("developers.landing.resources.cta","Browse the docs"),e.jsx(d,{className:"size-4"})]})})]}),e.jsx(h,{columns:2,children:i.map(s=>e.jsx(x,{href:s.href,icon:s.icon,title:s.title,description:s.description,external:s.external},s.title))})]})})}function se(){return e.jsxs(e.Fragment,{children:[e.jsx($,{}),e.jsx(Y,{}),e.jsx(Z,{}),e.jsx(ee,{}),e.jsx(te,{})]})}function ie(){return e.jsx(se,{})}const re=Object.freeze(Object.defineProperty({__proto__:null,default:ie},Symbol.toStringTag,{value:"Module"}));function ae(t){return W(t,"meta.developers_index.title")}const ne=Object.freeze(Object.defineProperty({__proto__:null,default:ae},Symbol.toStringTag,{value:"Module"})),be={hasServerOnlyHook:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:!0}},isClientRuntimeLoaded:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:!0}},onBeforeRenderEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:{server:!0}}},dataEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:{server:!0}}},guardEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},onRenderClient:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/__internal/integration/onRenderClient",fileExportPathToShowToUser:[]},valueSerialized:{type:"pointer-import",value:E}},onPageTransitionStart:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/+onPageTransitionStart.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:A}},onPageTransitionEnd:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/+onPageTransitionEnd.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:P}},Page:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/developers/+Page.tsx",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:re}},hydrationCanBeAborted:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/config",fileExportPathToShowToUser:["default","hydrationCanBeAborted"]},valueSerialized:{type:"js-serialized",value:!0}},Layout:{type:"cumulative",definedAtData:[{filePathToShowToUser:"/pages/+Layout.t
1sx",fileExportPathToShowToUser:[]}],valueSerialized:[{type:"plus-file",exportValues:z}]},title:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/developers/+title.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:ne}},lang:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/+lang.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:N}},Loading:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/__internal/integration/Loading",fileExportPathToShowToUser:[]},valueSerialized:{type:"pointer-import",value:T}}};export{be as configValuesSerialized};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.