[{"data":1,"prerenderedAt":2473},["ShallowReactive",2],{"nav-stories":3,"footer-stories":61,"projects-list":74},[4,16,25,34,43,52],{"id":5,"color":6,"extension":7,"image":8,"label":9,"link":10,"meta":11,"order":12,"stem":13,"text":14,"__hash__":15},"stories\u002Fstories\u002F01-data-center.yml",null,"yml","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1558494949-ef010cbdcc31?w=1080","DATA_CENTER","https:\u002F\u002Fx.com\u002Fabbeytetteh_",{},1,"stories\u002F01-data-center","Racking new servers. 40gbit backbone online.","0QUZQbaANhdO8WemZxkDdO7vbVopfnynHtH9FxBZb_w",{"id":17,"color":6,"extension":7,"image":18,"label":19,"link":6,"meta":20,"order":21,"stem":22,"text":23,"__hash__":24},"stories\u002Fstories\u002F02-thoughts.yml","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1498050108023-c5249f4df085?w=1080","THOUGHTS",{},2,"stories\u002F02-thoughts","Late night bug hunting. Found the memory leak.","Gd1am954aasY6HRHD7hCtOuessXb6zYZ8iizS501ICg",{"id":26,"color":27,"extension":7,"image":6,"label":28,"link":6,"meta":29,"order":30,"stem":31,"text":32,"__hash__":33},"stories\u002Fstories\u002F03-coding.yml","#3b82f6","CODING",{},3,"stories\u002F03-coding","Just thinking about how much easier life is with Swarm.","vLAyiGUPtlXB2SHa5KM_U2AaK4QkG3Og85UEUE7qzgM",{"id":35,"color":6,"extension":7,"image":36,"label":37,"link":6,"meta":38,"order":39,"stem":40,"text":41,"__hash__":42},"stories\u002Fstories\u002F04-update.yml","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1591799264318-7e6ef8ddb7ea?w=1080","UPDATE",{},4,"stories\u002F04-update","New cluster nodes arrived. Prepping for installation.","kyT60N5C6Re_jMonZbgNy0PbQhzXmUWxDbD0D_v43ts",{"id":44,"color":45,"extension":7,"image":6,"label":46,"link":6,"meta":47,"order":48,"stem":49,"text":50,"__hash__":51},"stories\u002Fstories\u002F05-setup.yml","#86868b","SETUP",{},5,"stories\u002F05-setup","Optimizing the telemetry pipeline for 1M req\u002Fs.","cPOBkzoyXsCmPgRO2d80Hj3vm4MP-6nAejtlQ5iuSzw",{"id":53,"color":6,"extension":7,"image":54,"label":55,"link":6,"meta":56,"order":57,"stem":58,"text":59,"__hash__":60},"stories\u002Fstories\u002F06-travel.yml","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1560969184-10fe8719e047?w=1080","TRAVEL",{},6,"stories\u002F06-travel","Travel log — system architecture workshop in Berlin.","jnOxerdF6usAIHdR35Z-opx0LJAy9kZluXnZhtz62Z0",[62,64,66,68,70,72],{"id":5,"color":6,"extension":7,"image":8,"label":9,"link":10,"meta":63,"order":12,"stem":13,"text":14,"__hash__":15},{},{"id":17,"color":6,"extension":7,"image":18,"label":19,"link":6,"meta":65,"order":21,"stem":22,"text":23,"__hash__":24},{},{"id":26,"color":27,"extension":7,"image":6,"label":28,"link":6,"meta":67,"order":30,"stem":31,"text":32,"__hash__":33},{},{"id":35,"color":6,"extension":7,"image":36,"label":37,"link":6,"meta":69,"order":39,"stem":40,"text":41,"__hash__":42},{},{"id":44,"color":45,"extension":7,"image":6,"label":46,"link":6,"meta":71,"order":48,"stem":49,"text":50,"__hash__":51},{},{"id":53,"color":6,"extension":7,"image":54,"label":55,"link":6,"meta":73,"order":57,"stem":58,"text":59,"__hash__":60},{},[75,427,670,717,1061,1287,1575,1950,2074],{"id":76,"title":77,"body":78,"description":417,"extension":418,"hash":419,"liveUrl":6,"meta":420,"navigation":215,"order":48,"path":421,"rackBay":6,"rackStatus":6,"region":422,"seo":423,"stem":424,"thumbnail":425,"vault":215,"__hash__":426},"projects\u002Fprojects\u002Fcloudform-ui.md","Cloudform UI",{"type":79,"value":80,"toc":412},"minimark",[81,85,90,93,381,385,401,405,408],[82,83,84],"p",{},"Cloudform UI is the control plane interface for the private cloud. It provides operators with a live view of cluster state, service health, and resource utilisation without requiring SSH access to manager nodes.",[86,87,89],"h2",{"id":88},"stack","Stack",[82,91,92],{},"Built on Nuxt 4 with TypeScript throughout. The real-time data layer uses Server-Sent Events — a simpler and more reliable transport than WebSockets for unidirectional state streaming.",[94,95,100],"pre",{"className":96,"code":97,"language":98,"meta":99,"style":99},"language-typescript shiki shiki-themes vitesse-light","\u002F\u002F server\u002Froutes\u002Fstream\u002Fcluster.ts\nexport default defineEventHandler(async (event) => {\n  setHeader(event, 'Content-Type', 'text\u002Fevent-stream')\n  setHeader(event, 'Cache-Control', 'no-cache')\n\n  const send = (data: ClusterState) => {\n    event.node.res.write(`data: ${JSON.stringify(data)}\\n\\n`)\n  }\n\n  const unsubscribe = clusterBus.subscribe(send)\n  event.node.req.on('close', unsubscribe)\n})\n","typescript","",[101,102,103,111,148,183,211,217,246,304,310,315,339,375],"code",{"__ignoreMap":99},[104,105,107],"span",{"class":106,"line":12},"line",[104,108,110],{"class":109},"s8zF2","\u002F\u002F server\u002Froutes\u002Fstream\u002Fcluster.ts\n",[104,112,113,117,120,124,128,132,135,139,142,145],{"class":106,"line":21},[104,114,116],{"class":115},"sbBg2","export",[104,118,119],{"class":115}," default",[104,121,123],{"class":122},"sySUi"," defineEventHandler",[104,125,127],{"class":126},"sYZai","(",[104,129,131],{"class":130},"si04Y","async",[104,133,134],{"class":126}," (",[104,136,138],{"class":137},"svycV","event",[104,140,141],{"class":126},")",[104,143,144],{"class":126}," =>",[104,146,147],{"class":126}," {\n",[104,149,150,153,155,157,160,164,168,171,173,175,178,180],{"class":106,"line":30},[104,151,152],{"class":122},"  setHeader",[104,154,127],{"class":126},[104,156,138],{"class":137},[104,158,159],{"class":126},",",[104,161,163],{"class":162},"sSP4y"," '",[104,165,167],{"class":166},"spphp","Content-Type",[104,169,170],{"class":162},"'",[104,172,159],{"class":126},[104,174,163],{"class":162},[104,176,177],{"class":166},"text\u002Fevent-stream",[104,179,170],{"class":162},[104,181,182],{"class":126},")\n",[104,184,185,187,189,191,193,195,198,200,202,204,207,209],{"class":106,"line":39},[104,186,152],{"class":122},[104,188,127],{"class":126},[104,190,138],{"class":137},[104,192,159],{"class":126},[104,194,163],{"class":162},[104,196,197],{"class":166},"Cache-Control",[104,199,170],{"class":162},[104,201,159],{"class":126},[104,203,163],{"class":162},[104,205,206],{"class":166},"no-cache",[104,208,170],{"class":162},[104,210,182],{"class":126},[104,212,213],{"class":106,"line":48},[104,214,216],{"emptyLinePlaceholder":215},true,"\n",[104,218,219,222,225,228,230,233,236,240,242,244],{"class":106,"line":57},[104,220,221],{"class":130},"  const ",[104,223,224],{"class":122},"send",[104,226,227],{"class":126}," =",[104,229,134],{"class":126},[104,231,232],{"class":137},"data",[104,234,235],{"class":126},": ",[104,237,239],{"class":238},"sUxyF","ClusterState",[104,241,141],{"class":126},[104,243,144],{"class":126},[104,245,147],{"class":126},[104,247,249,252,255,258,260,263,265,268,270,273,276,279,282,284,287,289,291,293,296,300,302],{"class":106,"line":248},7,[104,250,251],{"class":137},"    event",[104,253,254],{"class":126},".",[104,256,257],{"class":137},"node",[104,259,254],{"class":126},[104,261,262],{"class":137},"res",[104,264,254],{"class":126},[104,266,267],{"class":122},"write",[104,269,127],{"class":126},[104,271,272],{"class":162},"`",[104,274,275],{"class":166},"data: ",[104,277,278],{"class":115},"${",[104,280,281],{"class":166},"JSON",[104,283,254],{"class":126},[104,285,286],{"class":122},"stringify",[104,288,127],{"class":126},[104,290,232],{"class":166},[104,292,141],{"class":126},[104,294,295],{"class":115},"}",[104,297,299],{"class":298},"sEi1f","\\n\\n",[104,301,272],{"class":162},[104,303,182],{"class":126},[104,305,307],{"class":106,"line":306},8,[104,308,309],{"class":126},"  }\n",[104,311,313],{"class":106,"line":312},9,[104,314,216],{"emptyLinePlaceholder":215},[104,316,318,320,323,325,328,330,333,335,337],{"class":106,"line":317},10,[104,319,221],{"class":130},[104,321,322],{"class":137},"unsubscribe",[104,324,227],{"class":126},[104,326,327],{"class":137}," clusterBus",[104,329,254],{"class":126},[104,331,332],{"class":122},"subscribe",[104,334,127],{"class":126},[104,336,224],{"class":137},[104,338,182],{"class":126},[104,340,342,345,347,349,351,354,356,359,361,363,366,368,370,373],{"class":106,"line":341},11,[104,343,344],{"class":137},"  event",[104,346,254],{"class":126},[104,348,257],{"class":137},[104,350,254],{"class":126},[104,352,353],{"class":137},"req",[104,355,254],{"class":126},[104,357,358],{"class":122},"on",[104,360,127],{"class":126},[104,362,170],{"class":162},[104,364,365],{"class":166},"close",[104,367,170],{"class":162},[104,369,159],{"class":126},[104,371,372],{"class":137}," unsubscribe",[104,374,182],{"class":126},[104,376,378],{"class":106,"line":377},12,[104,379,380],{"class":126},"})\n",[86,382,384],{"id":383},"key-features","Key Features",[386,387,388,392,395,398],"ul",{},[389,390,391],"li",{},"Live node map with per-hypervisor CPU, memory, and network I\u002FO",[389,393,394],{},"Service deployment UI with rollback-to-previous-version in two clicks",[389,396,397],{},"Audit log viewer showing all API calls with the operator identity and timestamp",[389,399,400],{},"Alert acknowledgement workflow integrated with PagerDuty",[86,402,404],{"id":403},"status","Status",[82,406,407],{},"Internal tool, not publicly accessible. Actively developed — next milestone is adding a resource quota management view for multi-tenant environments.",[409,410,411],"style",{},"html pre.shiki code .s8zF2, html code.shiki .s8zF2{--shiki-default:#A0ADA0}html pre.shiki code .sbBg2, html code.shiki .sbBg2{--shiki-default:#1E754F}html pre.shiki code .sySUi, html code.shiki .sySUi{--shiki-default:#59873A}html pre.shiki code .sYZai, html code.shiki .sYZai{--shiki-default:#999999}html pre.shiki code .si04Y, html code.shiki .si04Y{--shiki-default:#AB5959}html pre.shiki code .svycV, html code.shiki .svycV{--shiki-default:#B07D48}html pre.shiki code .sSP4y, html code.shiki .sSP4y{--shiki-default:#B5695977}html pre.shiki code .spphp, html code.shiki .spphp{--shiki-default:#B56959}html pre.shiki code .sUxyF, html code.shiki .sUxyF{--shiki-default:#2E8F82}html pre.shiki code .sEi1f, html code.shiki .sEi1f{--shiki-default:#A65E2B}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":99,"searchDepth":21,"depth":21,"links":413},[414,415,416],{"id":88,"depth":21,"text":89},{"id":383,"depth":21,"text":384},{"id":403,"depth":21,"text":404},"A reactive management dashboard for OpenStack clusters built with Nuxt 3 and TypeScript, providing real-time visibility into cluster state.","md","M3N4O5",{},"\u002Fprojects\u002Fcloudform-ui","EU-WEST-2",{"title":77,"description":417},"projects\u002Fcloudform-ui","\u002Fimages\u002Fthumbnails\u002Fcloudform-ui.png","Iz2PSS-_TOi34gAgOQDGl_IgzGUXCxWrs4PMu5k7mWs",{"id":428,"title":429,"body":430,"description":661,"extension":418,"hash":662,"liveUrl":6,"meta":663,"navigation":215,"order":57,"path":664,"rackBay":6,"rackStatus":6,"region":665,"seo":666,"stem":667,"thumbnail":668,"vault":215,"__hash__":669},"projects\u002Fprojects\u002Fhyper-replica.md","Hyper Replica",{"type":79,"value":431,"toc":655},[432,435,439,442,446,449,640,644,647,649,652],[82,433,434],{},"Hyper Replica solves a specific problem: keeping dataset copies in sync across geographically distributed edge nodes where the WAN link is unreliable and latency-sensitive.",[86,436,438],{"id":437},"the-core-problem","The Core Problem",[82,440,441],{},"Traditional replication approaches assume a stable, high-bandwidth connection. Edge environments don't have that. A replication protocol that works perfectly in a data centre will stall, buffer, and eventually corrupt when the underlying transport is a flaky 4G link with 200ms RTT spikes.",[86,443,445],{"id":444},"the-protocol","The Protocol",[82,447,448],{},"Hyper Replica uses a delta-based sync protocol over a persistent WebSocket connection. Each edge node maintains a vector clock. On reconnect after a partition, the nodes exchange vector clocks and compute the minimal changeset required to reach convergence — no full resync needed.",[94,450,454],{"className":451,"code":452,"language":453,"meta":99,"style":99},"language-go shiki shiki-themes vitesse-light","type VectorClock map[NodeID]uint64\n\nfunc (local VectorClock) Delta(remote VectorClock) []Event {\n    var missing []Event\n    for nodeID, remoteSeq := range remote {\n        if local[nodeID] \u003C remoteSeq {\n            missing = append(missing, eventLog.Since(nodeID, local[nodeID]))\n        }\n    }\n    return missing\n}\n","go",[101,455,456,479,483,518,531,555,577,617,622,627,635],{"__ignoreMap":99},[104,457,458,461,464,467,470,473,476],{"class":106,"line":12},[104,459,460],{"class":115},"type",[104,462,463],{"class":238}," VectorClock",[104,465,466],{"class":115}," map",[104,468,469],{"class":126},"[",[104,471,472],{"class":238},"NodeID",[104,474,475],{"class":126},"]",[104,477,478],{"class":130},"uint64\n",[104,480,481],{"class":106,"line":21},[104,482,216],{"emptyLinePlaceholder":215},[104,484,485,488,490,493,496,498,501,503,506,508,510,513,516],{"class":106,"line":30},[104,486,487],{"class":115},"func",[104,489,134],{"class":126},[104,491,492],{"class":137},"local ",[104,494,495],{"class":238},"VectorClock",[104,497,141],{"class":126},[104,499,500],{"class":122}," Delta",[104,502,127],{"class":126},[104,504,505],{"class":137},"remote",[104,507,463],{"class":238},[104,509,141],{"class":126},[104,511,512],{"class":126}," []",[104,514,515],{"class":238},"Event",[104,517,147],{"class":126},[104,519,520,523,526,528],{"class":106,"line":39},[104,521,522],{"class":115},"    var",[104,524,525],{"class":137}," missing",[104,527,512],{"class":126},[104,529,530],{"class":238},"Event\n",[104,532,533,536,539,541,544,547,550,553],{"class":106,"line":48},[104,534,535],{"class":115},"    for",[104,537,538],{"class":137}," nodeID",[104,540,159],{"class":126},[104,542,543],{"class":137}," remoteSeq",[104,545,546],{"class":126}," :=",[104,548,549],{"class":115}," range",[104,551,552],{"class":137}," remote",[104,554,147],{"class":126},[104,556,557,560,563,565,568,570,573,575],{"class":106,"line":57},[104,558,559],{"class":115},"        if",[104,561,562],{"class":137}," local",[104,564,469],{"class":126},[104,566,567],{"class":137},"nodeID",[104,569,475],{"class":126},[104,571,572],{"class":130}," \u003C",[104,574,543],{"class":137},[104,576,147],{"class":126},[104,578,579,582,584,587,589,592,594,597,599,602,604,606,608,610,612,614],{"class":106,"line":248},[104,580,581],{"class":137},"            missing",[104,583,227],{"class":126},[104,585,586],{"class":122}," append",[104,588,127],{"class":126},[104,590,591],{"class":137},"missing",[104,593,159],{"class":126},[104,595,596],{"class":137}," eventLog",[104,598,254],{"class":126},[104,600,601],{"class":122},"Since",[104,603,127],{"class":126},[104,605,567],{"class":137},[104,607,159],{"class":126},[104,609,562],{"class":137},[104,611,469],{"class":126},[104,613,567],{"class":137},[104,615,616],{"class":126},"]))\n",[104,618,619],{"class":106,"line":306},[104,620,621],{"class":126},"        }\n",[104,623,624],{"class":106,"line":312},[104,625,626],{"class":126},"    }\n",[104,628,629,632],{"class":106,"line":317},[104,630,631],{"class":115},"    return",[104,633,634],{"class":137}," missing\n",[104,636,637],{"class":106,"line":341},[104,638,639],{"class":126},"}\n",[86,641,643],{"id":642},"results","Results",[82,645,646],{},"In a 3-node test across regions (London, São Paulo, Singapore), 95th-percentile replication latency was 38ms under normal conditions. After a simulated 10-minute partition, full convergence was achieved in under 2 seconds.",[86,648,404],{"id":403},[82,650,651],{},"In active development. The core protocol is stable; the backplane management UI and operational tooling are ongoing work.",[409,653,654],{},"html pre.shiki code .sbBg2, html code.shiki .sbBg2{--shiki-default:#1E754F}html pre.shiki code .sUxyF, html code.shiki .sUxyF{--shiki-default:#2E8F82}html pre.shiki code .sYZai, html code.shiki .sYZai{--shiki-default:#999999}html pre.shiki code .si04Y, html code.shiki .si04Y{--shiki-default:#AB5959}html pre.shiki code .svycV, html code.shiki .svycV{--shiki-default:#B07D48}html pre.shiki code .sySUi, html code.shiki .sySUi{--shiki-default:#59873A}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":99,"searchDepth":21,"depth":21,"links":656},[657,658,659,660],{"id":437,"depth":21,"text":438},{"id":444,"depth":21,"text":445},{"id":642,"depth":21,"text":643},{"id":403,"depth":21,"text":404},"Low-latency data replication across edge nodes using WebSockets and dedicated backplanes, targeting sub-50ms propagation.","P6Q7R8",{},"\u002Fprojects\u002Fhyper-replica","US-EAST-1",{"title":429,"description":661},"projects\u002Fhyper-replica","\u002Fimages\u002Fthumbnails\u002Fhyper-replica.png","l9Oex6_CqDWkefhwIgtTC2ZxSH5gSCnVHceG0vgeuBc",{"id":671,"title":672,"body":673,"description":705,"extension":418,"hash":706,"liveUrl":6,"meta":707,"navigation":215,"order":39,"path":708,"rackBay":709,"rackStatus":710,"region":711,"seo":712,"stem":713,"thumbnail":714,"vault":715,"__hash__":716},"projects\u002Fprojects\u002Flegacy-monitor.md","Legacy Monitor",{"type":79,"value":674,"toc":700},[675,678,682,685,688,692,695,697],[82,676,677],{},"Legacy Monitor was the first attempt at building an observability layer for the cluster. It was a Python script that ran as a cron job, queried the OpenStack API, and wrote metrics to a flat CSV file.",[86,679,681],{"id":680},"why-it-was-retired","Why It Was Retired",[82,683,684],{},"The architecture was fundamentally incompatible with scaling. Every metric query was synchronous and blocking. Adding a new hypervisor node increased the cron runtime linearly. At 40 nodes it took longer to collect metrics than the cron interval — meaning metrics were always stale.",[82,686,687],{},"The final straw was a 6-hour outage that the monitor completely failed to surface because it had silently timed out on an unresponsive node while marking it healthy.",[86,689,691],{"id":690},"what-it-taught-us","What It Taught Us",[82,693,694],{},"The failure modes of Legacy Monitor directly shaped Production Engine's design: async metric collection from the start, dead-man's-switch alerts for collector health, and immutable audit logs for every state change.",[86,696,404],{"id":403},[82,698,699],{},"Archived. The codebase is preserved for historical reference but the binary is not running. Replaced by Production Engine in Q2 2025.",{"title":99,"searchDepth":21,"depth":21,"links":701},[702,703,704],{"id":680,"depth":21,"text":681},{"id":690,"depth":21,"text":691},{"id":403,"depth":21,"text":404},"The original hand-rolled infrastructure monitoring system, now decommissioned and replaced by Production Engine.","J0K1L2",{},"\u002Fprojects\u002Flegacy-monitor","BAY 03","offline","AF-SOUTH-1",{"title":672,"description":705},"projects\u002Flegacy-monitor","\u002Fimages\u002Fthumbnails\u002Flegacy-monitor.png",false,"COeQJfFwO5TJJlgs1PCKaOyTgclEx2NhFONFnl95a8s",{"id":718,"title":719,"body":720,"description":1052,"extension":418,"hash":1053,"liveUrl":6,"meta":1054,"navigation":215,"order":248,"path":1055,"rackBay":6,"rackStatus":6,"region":1056,"seo":1057,"stem":1058,"thumbnail":1059,"vault":715,"__hash__":1060},"projects\u002Fprojects\u002Fmetric-stream.md","Metric Stream",{"type":79,"value":721,"toc":1047},[722,725,729,740,1032,1036,1039,1041,1044],[82,723,724],{},"Metric Stream is a purpose-built telemetry ingestion pipeline designed for environments where sensor data arrives faster than a traditional time-series database can absorb it.",[86,726,728],{"id":727},"architecture","Architecture",[82,730,731,732,735,736,739],{},"Producers write events to Redis Streams using ",[101,733,734],{},"XADD",". A pool of Go consumer goroutines reads with ",[101,737,738],{},"XREADGROUP",", processes and enriches the events (unit conversion, anomaly flagging, threshold evaluation), and forwards the result to the downstream store.",[94,741,743],{"className":451,"code":742,"language":453,"meta":99,"style":99},"func (w *Worker) Run(ctx context.Context) error {\n    for {\n        entries, err := w.redis.XReadGroup(ctx, &redis.XReadGroupArgs{\n            Group:    w.group,\n            Consumer: w.id,\n            Streams:  []string{w.stream, \">\"},\n            Count:    100,\n            Block:    time.Second,\n        })\n        if err != nil { continue }\n        for _, e := range entries[0].Messages {\n            w.process(ctx, e)\n        }\n    }\n}\n",[101,744,745,785,791,835,854,870,908,921,938,943,964,997,1017,1022,1027],{"__ignoreMap":99},[104,746,747,749,751,754,757,760,762,765,767,770,773,775,778,780,783],{"class":106,"line":12},[104,748,487],{"class":115},[104,750,134],{"class":126},[104,752,753],{"class":137},"w ",[104,755,756],{"class":130},"*",[104,758,759],{"class":238},"Worker",[104,761,141],{"class":126},[104,763,764],{"class":122}," Run",[104,766,127],{"class":126},[104,768,769],{"class":137},"ctx",[104,771,772],{"class":238}," context",[104,774,254],{"class":126},[104,776,777],{"class":238},"Context",[104,779,141],{"class":126},[104,781,782],{"class":130}," error",[104,784,147],{"class":126},[104,786,787,789],{"class":106,"line":21},[104,788,535],{"class":115},[104,790,147],{"class":126},[104,792,793,796,798,801,803,806,808,811,813,816,818,820,822,825,827,829,832],{"class":106,"line":30},[104,794,795],{"class":137},"        entries",[104,797,159],{"class":126},[104,799,800],{"class":137}," err",[104,802,546],{"class":126},[104,804,805],{"class":137}," w",[104,807,254],{"class":126},[104,809,810],{"class":137},"redis",[104,812,254],{"class":126},[104,814,815],{"class":122},"XReadGroup",[104,817,127],{"class":126},[104,819,769],{"class":137},[104,821,159],{"class":126},[104,823,824],{"class":130}," &",[104,826,810],{"class":238},[104,828,254],{"class":126},[104,830,831],{"class":238},"XReadGroupArgs",[104,833,834],{"class":126},"{\n",[104,836,837,840,843,846,848,851],{"class":106,"line":39},[104,838,839],{"class":137},"            Group",[104,841,842],{"class":126},":",[104,844,845],{"class":137},"    w",[104,847,254],{"class":126},[104,849,850],{"class":137},"group",[104,852,853],{"class":126},",\n",[104,855,856,859,861,863,865,868],{"class":106,"line":48},[104,857,858],{"class":137},"            Consumer",[104,860,842],{"class":126},[104,862,805],{"class":137},[104,864,254],{"class":126},[104,866,867],{"class":137},"id",[104,869,853],{"class":126},[104,871,872,875,877,880,883,886,889,891,894,896,899,902,905],{"class":106,"line":57},[104,873,874],{"class":137},"            Streams",[104,876,842],{"class":126},[104,878,879],{"class":126},"  []",[104,881,882],{"class":130},"string",[104,884,885],{"class":126},"{",[104,887,888],{"class":137},"w",[104,890,254],{"class":126},[104,892,893],{"class":137},"stream",[104,895,159],{"class":126},[104,897,898],{"class":162}," \"",[104,900,901],{"class":166},">",[104,903,904],{"class":162},"\"",[104,906,907],{"class":126},"},\n",[104,909,910,913,915,919],{"class":106,"line":248},[104,911,912],{"class":137},"            Count",[104,914,842],{"class":126},[104,916,918],{"class":917},"s-TwI","    100",[104,920,853],{"class":126},[104,922,923,926,928,931,933,936],{"class":106,"line":306},[104,924,925],{"class":137},"            Block",[104,927,842],{"class":126},[104,929,930],{"class":137},"    time",[104,932,254],{"class":126},[104,934,935],{"class":137},"Second",[104,937,853],{"class":126},[104,939,940],{"class":106,"line":312},[104,941,942],{"class":126},"        })\n",[104,944,945,947,949,952,955,958,961],{"class":106,"line":317},[104,946,559],{"class":115},[104,948,800],{"class":137},[104,950,951],{"class":130}," !=",[104,953,954],{"class":130}," nil",[104,956,957],{"class":126}," {",[104,959,960],{"class":115}," continue",[104,962,963],{"class":126}," }\n",[104,965,966,969,972,974,977,979,981,984,986,989,992,995],{"class":106,"line":341},[104,967,968],{"class":115},"        for",[104,970,971],{"class":137}," _",[104,973,159],{"class":126},[104,975,976],{"class":137}," e",[104,978,546],{"class":126},[104,980,549],{"class":115},[104,982,983],{"class":137}," entries",[104,985,469],{"class":126},[104,987,988],{"class":917},"0",[104,990,991],{"class":126},"].",[104,993,994],{"class":137},"Messages",[104,996,147],{"class":126},[104,998,999,1002,1004,1007,1009,1011,1013,1015],{"class":106,"line":377},[104,1000,1001],{"class":137},"            w",[104,1003,254],{"class":126},[104,1005,1006],{"class":122},"process",[104,1008,127],{"class":126},[104,1010,769],{"class":137},[104,1012,159],{"class":126},[104,1014,976],{"class":137},[104,1016,182],{"class":126},[104,1018,1020],{"class":106,"line":1019},13,[104,1021,621],{"class":126},[104,1023,1025],{"class":106,"line":1024},14,[104,1026,626],{"class":126},[104,1028,1030],{"class":106,"line":1029},15,[104,1031,639],{"class":126},[86,1033,1035],{"id":1034},"throughput","Throughput",[82,1037,1038],{},"In benchmarks on 4 consumer instances, the pipeline sustains 52k events\u002Fsecond with P99 end-to-end latency of 18ms. The Redis consumer group ensures exactly-once delivery semantics even if a worker crashes mid-batch.",[86,1040,404],{"id":403},[82,1042,1043],{},"Deployed in a staging environment with production rollout planned for Q3 2026. Pending load testing at 100k events\u002Fsecond target.",[409,1045,1046],{},"html pre.shiki code .sbBg2, html code.shiki .sbBg2{--shiki-default:#1E754F}html pre.shiki code .sYZai, html code.shiki .sYZai{--shiki-default:#999999}html pre.shiki code .svycV, html code.shiki .svycV{--shiki-default:#B07D48}html pre.shiki code .si04Y, html code.shiki .si04Y{--shiki-default:#AB5959}html pre.shiki code .sUxyF, html code.shiki .sUxyF{--shiki-default:#2E8F82}html pre.shiki code .sySUi, html code.shiki .sySUi{--shiki-default:#59873A}html pre.shiki code .sSP4y, html code.shiki .sSP4y{--shiki-default:#B5695977}html pre.shiki code .spphp, html code.shiki .spphp{--shiki-default:#B56959}html pre.shiki code .s-TwI, html code.shiki .s-TwI{--shiki-default:#2F798A}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":99,"searchDepth":21,"depth":21,"links":1048},[1049,1050,1051],{"id":727,"depth":21,"text":728},{"id":1034,"depth":21,"text":1035},{"id":403,"depth":21,"text":404},"Real-time telemetry pipeline for high-throughput sensor data using Go and Redis Streams, processing over 50k events per second.","S9T0U1",{},"\u002Fprojects\u002Fmetric-stream","EU-WEST-1",{"title":719,"description":1052},"projects\u002Fmetric-stream","\u002Fimages\u002Fthumbnails\u002Fmetric-stream.png","MugEKAYZVkkgQBZB14V9locuNfQvVoHgaGIWQRVeyFw",{"id":1062,"title":1063,"body":1064,"description":1278,"extension":418,"hash":1279,"liveUrl":6,"meta":1280,"navigation":215,"order":306,"path":1281,"rackBay":6,"rackStatus":6,"region":1282,"seo":1283,"stem":1284,"thumbnail":1285,"vault":715,"__hash__":1286},"projects\u002Fprojects\u002Foak-search.md","Oak Search",{"type":79,"value":1065,"toc":1272},[1066,1069,1073,1076,1080,1251,1257,1261,1264,1266,1269],[82,1067,1068],{},"Oak Search is a thin orchestration layer over Elasticsearch that adds per-tenant index isolation, query rewriting for access control, and a structured query DSL consumable from TypeScript.",[86,1070,1072],{"id":1071},"the-problem-it-solves","The Problem It Solves",[82,1074,1075],{},"Multi-tenant search has a nasty default: if tenants share an index, a misconfigured query can return documents from the wrong tenant. Oak Search enforces isolation at the query layer — every search request is rewritten to include a tenant filter before hitting Elasticsearch.",[86,1077,1079],{"id":1078},"query-rewriting","Query Rewriting",[94,1081,1083],{"className":96,"code":1082,"language":98,"meta":99,"style":99},"const search = async (tenantId: string, query: SearchQuery) => {\n  const safe: ElasticQuery = {\n    bool: {\n      must: [toElasticQuery(query)],\n      filter: [{ term: { tenant_id: tenantId } }], \u002F\u002F injected, not user-controlled\n    },\n  }\n  return elastic.search({ index: 'documents', body: { query: safe } })\n}\n",[101,1084,1085,1123,1139,1148,1167,1194,1199,1203,1247],{"__ignoreMap":99},[104,1086,1087,1090,1093,1095,1098,1100,1103,1105,1107,1109,1112,1114,1117,1119,1121],{"class":106,"line":12},[104,1088,1089],{"class":130},"const ",[104,1091,1092],{"class":122},"search",[104,1094,227],{"class":126},[104,1096,1097],{"class":130}," async ",[104,1099,127],{"class":126},[104,1101,1102],{"class":137},"tenantId",[104,1104,235],{"class":126},[104,1106,882],{"class":238},[104,1108,159],{"class":126},[104,1110,1111],{"class":137}," query",[104,1113,235],{"class":126},[104,1115,1116],{"class":238},"SearchQuery",[104,1118,141],{"class":126},[104,1120,144],{"class":126},[104,1122,147],{"class":126},[104,1124,1125,1127,1130,1132,1135,1137],{"class":106,"line":21},[104,1126,221],{"class":130},[104,1128,1129],{"class":137},"safe",[104,1131,235],{"class":126},[104,1133,1134],{"class":238},"ElasticQuery",[104,1136,227],{"class":126},[104,1138,147],{"class":126},[104,1140,1141,1145],{"class":106,"line":30},[104,1142,1144],{"class":1143},"su6XF","    bool",[104,1146,1147],{"class":126},": {\n",[104,1149,1150,1153,1156,1159,1161,1164],{"class":106,"line":39},[104,1151,1152],{"class":1143},"      must",[104,1154,1155],{"class":126},": [",[104,1157,1158],{"class":122},"toElasticQuery",[104,1160,127],{"class":126},[104,1162,1163],{"class":137},"query",[104,1165,1166],{"class":126},")],\n",[104,1168,1169,1172,1175,1178,1181,1184,1186,1188,1191],{"class":106,"line":48},[104,1170,1171],{"class":1143},"      filter",[104,1173,1174],{"class":126},": [{ ",[104,1176,1177],{"class":1143},"term",[104,1179,1180],{"class":126},": { ",[104,1182,1183],{"class":1143},"tenant_id",[104,1185,235],{"class":126},[104,1187,1102],{"class":137},[104,1189,1190],{"class":126}," } }], ",[104,1192,1193],{"class":109},"\u002F\u002F injected, not user-controlled\n",[104,1195,1196],{"class":106,"line":57},[104,1197,1198],{"class":126},"    },\n",[104,1200,1201],{"class":106,"line":248},[104,1202,309],{"class":126},[104,1204,1205,1208,1211,1213,1215,1218,1221,1223,1225,1228,1230,1233,1236,1238,1240,1242,1244],{"class":106,"line":306},[104,1206,1207],{"class":115},"  return",[104,1209,1210],{"class":137}," elastic",[104,1212,254],{"class":126},[104,1214,1092],{"class":122},[104,1216,1217],{"class":126},"({ ",[104,1219,1220],{"class":1143},"index",[104,1222,235],{"class":126},[104,1224,170],{"class":162},[104,1226,1227],{"class":166},"documents",[104,1229,170],{"class":162},[104,1231,1232],{"class":126},", ",[104,1234,1235],{"class":1143},"body",[104,1237,1180],{"class":126},[104,1239,1163],{"class":1143},[104,1241,235],{"class":126},[104,1243,1129],{"class":137},[104,1245,1246],{"class":126}," } })\n",[104,1248,1249],{"class":106,"line":312},[104,1250,639],{"class":126},[82,1252,1253,1254,1256],{},"The ",[101,1255,1183],{}," filter is always injected server-side. The caller has no way to omit or override it.",[86,1258,1260],{"id":1259},"performance","Performance",[82,1262,1263],{},"With a 10M document corpus split across 8 tenants, median search latency is 42ms. The Elasticsearch cluster uses ILM policies to automatically move older indices to frozen tier storage, keeping hot-tier costs stable as the dataset grows.",[86,1265,404],{"id":403},[82,1267,1268],{},"In production for two tenants. Expanding to a third tenant in the next sprint.",[409,1270,1271],{},"html pre.shiki code .si04Y, html code.shiki .si04Y{--shiki-default:#AB5959}html pre.shiki code .sySUi, html code.shiki .sySUi{--shiki-default:#59873A}html pre.shiki code .sYZai, html code.shiki .sYZai{--shiki-default:#999999}html pre.shiki code .svycV, html code.shiki .svycV{--shiki-default:#B07D48}html pre.shiki code .sUxyF, html code.shiki .sUxyF{--shiki-default:#2E8F82}html pre.shiki code .su6XF, html code.shiki .su6XF{--shiki-default:#998418}html pre.shiki code .s8zF2, html code.shiki .s8zF2{--shiki-default:#A0ADA0}html pre.shiki code .sbBg2, html code.shiki .sbBg2{--shiki-default:#1E754F}html pre.shiki code .sSP4y, html code.shiki .sSP4y{--shiki-default:#B5695977}html pre.shiki code .spphp, html code.shiki .spphp{--shiki-default:#B56959}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":99,"searchDepth":21,"depth":21,"links":1273},[1274,1275,1276,1277],{"id":1071,"depth":21,"text":1072},{"id":1078,"depth":21,"text":1079},{"id":1259,"depth":21,"text":1260},{"id":403,"depth":21,"text":404},"Distributed search engine layer built on top of Elasticsearch, providing sub-100ms full-text search across multi-tenant document stores.","V2W3X4",{},"\u002Fprojects\u002Foak-search","AP-SOUTH-1",{"title":1063,"description":1278},"projects\u002Foak-search","\u002Fimages\u002Fthumbnails\u002Foak-search.png","Xpd7AeVt0jL-b_KJf6o-RcvzbbsmSsfy-GijgtpMNDA",{"id":1288,"title":1289,"body":1290,"description":1565,"extension":418,"hash":1566,"liveUrl":6,"meta":1567,"navigation":215,"order":12,"path":1568,"rackBay":1569,"rackStatus":1570,"region":711,"seo":1571,"stem":1572,"thumbnail":1573,"vault":215,"__hash__":1574},"projects\u002Fprojects\u002Fproduction-engine.md","Production Engine",{"type":79,"value":1291,"toc":1560},[1292,1295,1297,1300,1545,1549,1552,1554,1557],[82,1293,1294],{},"Production Engine is the core operational daemon running the KNUST private cloud. It continuously monitors cluster health, collects real-time telemetry from all hypervisors, and triggers autoscaling events when load thresholds are breached.",[86,1296,728],{"id":727},[82,1298,1299],{},"The daemon runs as a privileged service on each manager node, communicating with the OpenStack API to provision or decommission compute resources. State is persisted to an embedded SQLite store with a write-ahead log for crash recovery.",[94,1301,1303],{"className":451,"code":1302,"language":453,"meta":99,"style":99},"type ClusterMonitor struct {\n    client    *openstack.Client\n    db        *sql.DB\n    threshold ScalingThreshold\n}\n\nfunc (m *ClusterMonitor) EvaluateLoad(ctx context.Context) error {\n    metrics, err := m.client.GetClusterMetrics(ctx)\n    if err != nil {\n        return fmt.Errorf(\"metrics fetch: %w\", err)\n    }\n    if metrics.CPUPercent > m.threshold.ScaleUp {\n        return m.scaleOut(ctx, 1)\n    }\n    return nil\n}\n",[101,1304,1305,1317,1333,1349,1357,1361,1365,1400,1430,1443,1474,1478,1507,1529,1533,1540],{"__ignoreMap":99},[104,1306,1307,1309,1312,1315],{"class":106,"line":12},[104,1308,460],{"class":115},[104,1310,1311],{"class":238}," ClusterMonitor",[104,1313,1314],{"class":115}," struct",[104,1316,147],{"class":126},[104,1318,1319,1322,1325,1328,1330],{"class":106,"line":21},[104,1320,1321],{"class":137},"    client",[104,1323,1324],{"class":130},"    *",[104,1326,1327],{"class":238},"openstack",[104,1329,254],{"class":126},[104,1331,1332],{"class":238},"Client\n",[104,1334,1335,1338,1341,1344,1346],{"class":106,"line":30},[104,1336,1337],{"class":137},"    db",[104,1339,1340],{"class":130},"        *",[104,1342,1343],{"class":238},"sql",[104,1345,254],{"class":126},[104,1347,1348],{"class":238},"DB\n",[104,1350,1351,1354],{"class":106,"line":39},[104,1352,1353],{"class":137},"    threshold",[104,1355,1356],{"class":238}," ScalingThreshold\n",[104,1358,1359],{"class":106,"line":48},[104,1360,639],{"class":126},[104,1362,1363],{"class":106,"line":57},[104,1364,216],{"emptyLinePlaceholder":215},[104,1366,1367,1369,1371,1374,1376,1379,1381,1384,1386,1388,1390,1392,1394,1396,1398],{"class":106,"line":248},[104,1368,487],{"class":115},[104,1370,134],{"class":126},[104,1372,1373],{"class":137},"m ",[104,1375,756],{"class":130},[104,1377,1378],{"class":238},"ClusterMonitor",[104,1380,141],{"class":126},[104,1382,1383],{"class":122}," EvaluateLoad",[104,1385,127],{"class":126},[104,1387,769],{"class":137},[104,1389,772],{"class":238},[104,1391,254],{"class":126},[104,1393,777],{"class":238},[104,1395,141],{"class":126},[104,1397,782],{"class":130},[104,1399,147],{"class":126},[104,1401,1402,1405,1407,1409,1411,1414,1416,1419,1421,1424,1426,1428],{"class":106,"line":306},[104,1403,1404],{"class":137},"    metrics",[104,1406,159],{"class":126},[104,1408,800],{"class":137},[104,1410,546],{"class":126},[104,1412,1413],{"class":137}," m",[104,1415,254],{"class":126},[104,1417,1418],{"class":137},"client",[104,1420,254],{"class":126},[104,1422,1423],{"class":122},"GetClusterMetrics",[104,1425,127],{"class":126},[104,1427,769],{"class":137},[104,1429,182],{"class":126},[104,1431,1432,1435,1437,1439,1441],{"class":106,"line":312},[104,1433,1434],{"class":115},"    if",[104,1436,800],{"class":137},[104,1438,951],{"class":130},[104,1440,954],{"class":130},[104,1442,147],{"class":126},[104,1444,1445,1448,1451,1453,1456,1458,1460,1463,1466,1468,1470,1472],{"class":106,"line":317},[104,1446,1447],{"class":115},"        return",[104,1449,1450],{"class":137}," fmt",[104,1452,254],{"class":126},[104,1454,1455],{"class":122},"Errorf",[104,1457,127],{"class":126},[104,1459,904],{"class":162},[104,1461,1462],{"class":166},"metrics fetch: ",[104,1464,1465],{"class":298},"%w",[104,1467,904],{"class":162},[104,1469,159],{"class":126},[104,1471,800],{"class":137},[104,1473,182],{"class":126},[104,1475,1476],{"class":106,"line":341},[104,1477,626],{"class":126},[104,1479,1480,1482,1485,1487,1490,1493,1495,1497,1500,1502,1505],{"class":106,"line":377},[104,1481,1434],{"class":115},[104,1483,1484],{"class":137}," metrics",[104,1486,254],{"class":126},[104,1488,1489],{"class":137},"CPUPercent",[104,1491,1492],{"class":130}," >",[104,1494,1413],{"class":137},[104,1496,254],{"class":126},[104,1498,1499],{"class":137},"threshold",[104,1501,254],{"class":126},[104,1503,1504],{"class":137},"ScaleUp",[104,1506,147],{"class":126},[104,1508,1509,1511,1513,1515,1518,1520,1522,1524,1527],{"class":106,"line":1019},[104,1510,1447],{"class":115},[104,1512,1413],{"class":137},[104,1514,254],{"class":126},[104,1516,1517],{"class":122},"scaleOut",[104,1519,127],{"class":126},[104,1521,769],{"class":137},[104,1523,159],{"class":126},[104,1525,1526],{"class":917}," 1",[104,1528,182],{"class":126},[104,1530,1531],{"class":106,"line":1024},[104,1532,626],{"class":126},[104,1534,1535,1537],{"class":106,"line":1029},[104,1536,631],{"class":115},[104,1538,1539],{"class":130}," nil\n",[104,1541,1543],{"class":106,"line":1542},16,[104,1544,639],{"class":126},[86,1546,1548],{"id":1547},"observability","Observability",[82,1550,1551],{},"All scaling events are emitted as structured logs consumed by a Loki instance. Grafana dashboards surface cluster utilisation across a 7-day rolling window with per-hypervisor breakdowns.",[86,1553,404],{"id":403},[82,1555,1556],{},"Live in production, handling approximately 200 VMs across 3 availability zones. Average response time for a scale-out event is under 90 seconds from threshold breach to node registration.",[409,1558,1559],{},"html pre.shiki code .sbBg2, html code.shiki .sbBg2{--shiki-default:#1E754F}html pre.shiki code .sUxyF, html code.shiki .sUxyF{--shiki-default:#2E8F82}html pre.shiki code .sYZai, html code.shiki .sYZai{--shiki-default:#999999}html pre.shiki code .svycV, html code.shiki .svycV{--shiki-default:#B07D48}html pre.shiki code .si04Y, html code.shiki .si04Y{--shiki-default:#AB5959}html pre.shiki code .sySUi, html code.shiki .sySUi{--shiki-default:#59873A}html pre.shiki code .sSP4y, html code.shiki .sSP4y{--shiki-default:#B5695977}html pre.shiki code .spphp, html code.shiki .spphp{--shiki-default:#B56959}html pre.shiki code .sEi1f, html code.shiki .sEi1f{--shiki-default:#A65E2B}html pre.shiki code .s-TwI, html code.shiki .s-TwI{--shiki-default:#2F798A}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":99,"searchDepth":21,"depth":21,"links":1561},[1562,1563,1564],{"id":727,"depth":21,"text":728},{"id":1547,"depth":21,"text":1548},{"id":403,"depth":21,"text":404},"A custom-built live monitoring and autoscaling daemon for the KNUST Cloud, ensuring high availability across all cluster nodes.","A1B2C3",{},"\u002Fprojects\u002Fproduction-engine","BAY 01","live",{"title":1289,"description":1565},"projects\u002Fproduction-engine","\u002Fimages\u002Fthumbnails\u002Fproduction-engine.png","KC6VHsNbYyyWtTidhS6I8zgUmAdY2fxxqSOzaRqsqsg",{"id":1576,"title":1577,"body":1578,"description":1941,"extension":418,"hash":1942,"liveUrl":6,"meta":1943,"navigation":215,"order":21,"path":1944,"rackBay":1945,"rackStatus":1570,"region":1056,"seo":1946,"stem":1947,"thumbnail":1948,"vault":215,"__hash__":1949},"projects\u002Fprojects\u002Fservice-autoscaler.md","Service Autoscaler",{"type":79,"value":1579,"toc":1936},[1580,1583,1587,1590,1917,1921,1928,1930,1933],[82,1581,1582],{},"Service Autoscaler is a lightweight Go daemon that subscribes to a Prometheus metrics stream and drives Docker Swarm service scaling decisions without any manual intervention.",[86,1584,1586],{"id":1585},"how-it-works","How It Works",[82,1588,1589],{},"The autoscaler queries a set of configurable PromQL expressions on a 15-second tick. When a metric crosses a defined threshold, it calls the Swarm API to update the target replica count. Scale-down events include a stabilisation window to prevent thrashing.",[94,1591,1593],{"className":451,"code":1592,"language":453,"meta":99,"style":99},"func (a *Autoscaler) Tick(ctx context.Context) {\n    for _, rule := range a.rules {\n        val, err := a.prom.QueryInstant(ctx, rule.Query)\n        if err != nil || val == nil {\n            continue\n        }\n        if *val > rule.ScaleUpThreshold {\n            a.swarm.Scale(ctx, rule.Service, rule.CurrentReplicas+rule.Step)\n        } else if *val \u003C rule.ScaleDownThreshold && rule.StabilisedFor(5*time.Minute) {\n            a.swarm.Scale(ctx, rule.Service, max(rule.MinReplicas, rule.CurrentReplicas-rule.Step))\n        }\n    }\n}\n",[101,1594,1595,1628,1653,1691,1714,1719,1723,1744,1794,1847,1905,1909,1913],{"__ignoreMap":99},[104,1596,1597,1599,1601,1604,1606,1609,1611,1614,1616,1618,1620,1622,1624,1626],{"class":106,"line":12},[104,1598,487],{"class":115},[104,1600,134],{"class":126},[104,1602,1603],{"class":137},"a ",[104,1605,756],{"class":130},[104,1607,1608],{"class":238},"Autoscaler",[104,1610,141],{"class":126},[104,1612,1613],{"class":122}," Tick",[104,1615,127],{"class":126},[104,1617,769],{"class":137},[104,1619,772],{"class":238},[104,1621,254],{"class":126},[104,1623,777],{"class":238},[104,1625,141],{"class":126},[104,1627,147],{"class":126},[104,1629,1630,1632,1634,1636,1639,1641,1643,1646,1648,1651],{"class":106,"line":21},[104,1631,535],{"class":115},[104,1633,971],{"class":137},[104,1635,159],{"class":126},[104,1637,1638],{"class":137}," rule",[104,1640,546],{"class":126},[104,1642,549],{"class":115},[104,1644,1645],{"class":137}," a",[104,1647,254],{"class":126},[104,1649,1650],{"class":137},"rules",[104,1652,147],{"class":126},[104,1654,1655,1658,1660,1662,1664,1666,1668,1671,1673,1676,1678,1680,1682,1684,1686,1689],{"class":106,"line":30},[104,1656,1657],{"class":137},"        val",[104,1659,159],{"class":126},[104,1661,800],{"class":137},[104,1663,546],{"class":126},[104,1665,1645],{"class":137},[104,1667,254],{"class":126},[104,1669,1670],{"class":137},"prom",[104,1672,254],{"class":126},[104,1674,1675],{"class":122},"QueryInstant",[104,1677,127],{"class":126},[104,1679,769],{"class":137},[104,1681,159],{"class":126},[104,1683,1638],{"class":137},[104,1685,254],{"class":126},[104,1687,1688],{"class":137},"Query",[104,1690,182],{"class":126},[104,1692,1693,1695,1697,1699,1701,1704,1707,1710,1712],{"class":106,"line":39},[104,1694,559],{"class":115},[104,1696,800],{"class":137},[104,1698,951],{"class":130},[104,1700,954],{"class":130},[104,1702,1703],{"class":130}," ||",[104,1705,1706],{"class":137}," val",[104,1708,1709],{"class":130}," ==",[104,1711,954],{"class":130},[104,1713,147],{"class":126},[104,1715,1716],{"class":106,"line":48},[104,1717,1718],{"class":115},"            continue\n",[104,1720,1721],{"class":106,"line":57},[104,1722,621],{"class":126},[104,1724,1725,1727,1730,1733,1735,1737,1739,1742],{"class":106,"line":248},[104,1726,559],{"class":115},[104,1728,1729],{"class":130}," *",[104,1731,1732],{"class":137},"val",[104,1734,1492],{"class":130},[104,1736,1638],{"class":137},[104,1738,254],{"class":126},[104,1740,1741],{"class":137},"ScaleUpThreshold",[104,1743,147],{"class":126},[104,1745,1746,1749,1751,1754,1756,1759,1761,1763,1765,1767,1769,1772,1774,1776,1778,1781,1784,1787,1789,1792],{"class":106,"line":306},[104,1747,1748],{"class":137},"            a",[104,1750,254],{"class":126},[104,1752,1753],{"class":137},"swarm",[104,1755,254],{"class":126},[104,1757,1758],{"class":122},"Scale",[104,1760,127],{"class":126},[104,1762,769],{"class":137},[104,1764,159],{"class":126},[104,1766,1638],{"class":137},[104,1768,254],{"class":126},[104,1770,1771],{"class":137},"Service",[104,1773,159],{"class":126},[104,1775,1638],{"class":137},[104,1777,254],{"class":126},[104,1779,1780],{"class":137},"CurrentReplicas",[104,1782,1783],{"class":130},"+",[104,1785,1786],{"class":137},"rule",[104,1788,254],{"class":126},[104,1790,1791],{"class":137},"Step",[104,1793,182],{"class":126},[104,1795,1796,1799,1802,1805,1807,1809,1811,1813,1815,1818,1821,1823,1825,1828,1830,1833,1835,1838,1840,1843,1845],{"class":106,"line":312},[104,1797,1798],{"class":126},"        }",[104,1800,1801],{"class":115}," else",[104,1803,1804],{"class":115}," if",[104,1806,1729],{"class":130},[104,1808,1732],{"class":137},[104,1810,572],{"class":130},[104,1812,1638],{"class":137},[104,1814,254],{"class":126},[104,1816,1817],{"class":137},"ScaleDownThreshold",[104,1819,1820],{"class":130}," &&",[104,1822,1638],{"class":137},[104,1824,254],{"class":126},[104,1826,1827],{"class":122},"StabilisedFor",[104,1829,127],{"class":126},[104,1831,1832],{"class":917},"5",[104,1834,756],{"class":130},[104,1836,1837],{"class":137},"time",[104,1839,254],{"class":126},[104,1841,1842],{"class":137},"Minute",[104,1844,141],{"class":126},[104,1846,147],{"class":126},[104,1848,1849,1851,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1876,1878,1880,1882,1885,1887,1889,1891,1893,1896,1898,1900,1902],{"class":106,"line":317},[104,1850,1748],{"class":137},[104,1852,254],{"class":126},[104,1854,1753],{"class":137},[104,1856,254],{"class":126},[104,1858,1758],{"class":122},[104,1860,127],{"class":126},[104,1862,769],{"class":137},[104,1864,159],{"class":126},[104,1866,1638],{"class":137},[104,1868,254],{"class":126},[104,1870,1771],{"class":137},[104,1872,159],{"class":126},[104,1874,1875],{"class":122}," max",[104,1877,127],{"class":126},[104,1879,1786],{"class":137},[104,1881,254],{"class":126},[104,1883,1884],{"class":137},"MinReplicas",[104,1886,159],{"class":126},[104,1888,1638],{"class":137},[104,1890,254],{"class":126},[104,1892,1780],{"class":137},[104,1894,1895],{"class":130},"-",[104,1897,1786],{"class":137},[104,1899,254],{"class":126},[104,1901,1791],{"class":137},[104,1903,1904],{"class":126},"))\n",[104,1906,1907],{"class":106,"line":341},[104,1908,621],{"class":126},[104,1910,1911],{"class":106,"line":377},[104,1912,626],{"class":126},[104,1914,1915],{"class":106,"line":1019},[104,1916,639],{"class":126},[86,1918,1920],{"id":1919},"configuration","Configuration",[82,1922,1923,1924,1927],{},"Rules are declared in a YAML file and hot-reloaded on change via ",[101,1925,1926],{},"inotify",", so threshold adjustments don't require a daemon restart.",[86,1929,404],{"id":403},[82,1931,1932],{},"Running in production. Has handled scale events across 12 services with zero missed scaling opportunities recorded over a 90-day observation window.",[409,1934,1935],{},"html pre.shiki code .sbBg2, html code.shiki .sbBg2{--shiki-default:#1E754F}html pre.shiki code .sYZai, html code.shiki .sYZai{--shiki-default:#999999}html pre.shiki code .svycV, html code.shiki .svycV{--shiki-default:#B07D48}html pre.shiki code .si04Y, html code.shiki .si04Y{--shiki-default:#AB5959}html pre.shiki code .sUxyF, html code.shiki .sUxyF{--shiki-default:#2E8F82}html pre.shiki code .sySUi, html code.shiki .sySUi{--shiki-default:#59873A}html pre.shiki code .s-TwI, html code.shiki .s-TwI{--shiki-default:#2F798A}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":99,"searchDepth":21,"depth":21,"links":1937},[1938,1939,1940],{"id":1585,"depth":21,"text":1586},{"id":1919,"depth":21,"text":1920},{"id":403,"depth":21,"text":404},"Go-based daemon that monitors Swarm service load and adjusts replica counts in real time based on Prometheus metrics.","D4E5F6",{},"\u002Fprojects\u002Fservice-autoscaler","BAY 02",{"title":1577,"description":1941},"projects\u002Fservice-autoscaler","\u002Fimages\u002Fthumbnails\u002Fservice-autoscaler.png","6jraPhE5BqB7rMeWOOshRgbYJmvkH4sWjcymC74tzfk",{"id":1951,"title":1952,"body":1953,"description":2064,"extension":418,"hash":2065,"liveUrl":6,"meta":2066,"navigation":215,"order":30,"path":2067,"rackBay":2068,"rackStatus":1570,"region":2069,"seo":2070,"stem":2071,"thumbnail":2072,"vault":215,"__hash__":2073},"projects\u002Fprojects\u002Ftraefik-mesh.md","Traefik Mesh",{"type":79,"value":1954,"toc":2059},[1955,1958,1962,1965,2044,2048,2051,2053,2056],[82,1956,1957],{},"Traefik Mesh is the ingress and internal routing layer for the production service cluster. It handles TLS termination, per-service rate limiting, and request authentication via a forward-auth middleware chain backed by Keycloak.",[86,1959,1961],{"id":1960},"ingress-configuration","Ingress Configuration",[82,1963,1964],{},"All services are declared via Docker labels, making the routing configuration live alongside the service definition in the compose stack:",[94,1966,1970],{"className":1967,"code":1968,"language":1969,"meta":99,"style":99},"language-yaml shiki shiki-themes vitesse-light","deploy:\n  labels:\n    - \"traefik.enable=true\"\n    - \"traefik.http.routers.api.rule=Host(`api.example.com`)\"\n    - \"traefik.http.routers.api.tls.certresolver=letsencrypt\"\n    - \"traefik.http.middlewares.auth.forwardauth.address=http:\u002F\u002Fauth-service\u002Fverify\"\n    - \"traefik.http.routers.api.middlewares=auth@docker\"\n","yaml",[101,1971,1972,1980,1987,2000,2011,2022,2033],{"__ignoreMap":99},[104,1973,1974,1977],{"class":106,"line":12},[104,1975,1976],{"class":1143},"deploy",[104,1978,1979],{"class":126},":\n",[104,1981,1982,1985],{"class":106,"line":21},[104,1983,1984],{"class":1143},"  labels",[104,1986,1979],{"class":126},[104,1988,1989,1992,1994,1997],{"class":106,"line":30},[104,1990,1991],{"class":126},"    -",[104,1993,898],{"class":162},[104,1995,1996],{"class":166},"traefik.enable=true",[104,1998,1999],{"class":162},"\"\n",[104,2001,2002,2004,2006,2009],{"class":106,"line":39},[104,2003,1991],{"class":126},[104,2005,898],{"class":162},[104,2007,2008],{"class":166},"traefik.http.routers.api.rule=Host(`api.example.com`)",[104,2010,1999],{"class":162},[104,2012,2013,2015,2017,2020],{"class":106,"line":48},[104,2014,1991],{"class":126},[104,2016,898],{"class":162},[104,2018,2019],{"class":166},"traefik.http.routers.api.tls.certresolver=letsencrypt",[104,2021,1999],{"class":162},[104,2023,2024,2026,2028,2031],{"class":106,"line":57},[104,2025,1991],{"class":126},[104,2027,898],{"class":162},[104,2029,2030],{"class":166},"traefik.http.middlewares.auth.forwardauth.address=http:\u002F\u002Fauth-service\u002Fverify",[104,2032,1999],{"class":162},[104,2034,2035,2037,2039,2042],{"class":106,"line":248},[104,2036,1991],{"class":126},[104,2038,898],{"class":162},[104,2040,2041],{"class":166},"traefik.http.routers.api.middlewares=auth@docker",[104,2043,1999],{"class":162},[86,2045,2047],{"id":2046},"zero-trust-auth-layer","Zero-Trust Auth Layer",[82,2049,2050],{},"Every service route passes through the forward-auth middleware. The auth service validates JWTs issued by Keycloak and returns a 401 for unauthenticated requests before traffic ever reaches the upstream service.",[86,2052,404],{"id":403},[82,2054,2055],{},"Handling ~15k requests per minute in steady state. Rate limiting has successfully throttled three separate credential-stuffing attempts without any manual intervention. Auto-renewing Let's Encrypt certificates across 8 domains.",[409,2057,2058],{},"html pre.shiki code .su6XF, html code.shiki .su6XF{--shiki-default:#998418}html pre.shiki code .sYZai, html code.shiki .sYZai{--shiki-default:#999999}html pre.shiki code .sSP4y, html code.shiki .sSP4y{--shiki-default:#B5695977}html pre.shiki code .spphp, html code.shiki .spphp{--shiki-default:#B56959}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":99,"searchDepth":21,"depth":21,"links":2060},[2061,2062,2063],{"id":1960,"depth":21,"text":1961},{"id":2046,"depth":21,"text":2047},{"id":403,"depth":21,"text":404},"High-performance reverse proxy configuration and zero-trust identity layer for distributed microservices running on Docker Swarm.","G7H8I9",{},"\u002Fprojects\u002Ftraefik-mesh","BAY 04","EU-CENTRAL-1",{"title":1952,"description":2064},"projects\u002Ftraefik-mesh","\u002Fimages\u002Fthumbnails\u002Ftraefik-mesh.png","OkxpNVZgJlXM3F8wDkLjH_tzGrCJXLuk21a83G5TLNM",{"id":2075,"title":2076,"body":2077,"description":2464,"extension":418,"hash":2465,"liveUrl":6,"meta":2466,"navigation":215,"order":312,"path":2467,"rackBay":6,"rackStatus":6,"region":2468,"seo":2469,"stem":2470,"thumbnail":2471,"vault":715,"__hash__":2472},"projects\u002Fprojects\u002Fveil-auth.md","Veil Auth",{"type":79,"value":2078,"toc":2458},[2079,2082,2086,2089,2437,2441,2444,2448,2451,2453,2456],[82,2080,2081],{},"Veil Auth is the identity and access management service powering the administrative interfaces across the cluster. It issues short-lived JWTs, scoped API tokens for service-to-service calls, and enforces biometric second-factor for privileged operations.",[86,2083,2085],{"id":2084},"token-architecture","Token Architecture",[82,2087,2088],{},"Access tokens are valid for 15 minutes. Refresh tokens are stored as opaque references in Redis with a 7-day TTL. Revoking a refresh token is an O(1) operation — delete the Redis key.",[94,2090,2092],{"className":451,"code":2091,"language":453,"meta":99,"style":99},"func (s *TokenService) Issue(ctx context.Context, subject string, scopes []string) (*TokenPair, error) {\n    claims := jwt.MapClaims{\n        \"sub\":    subject,\n        \"scopes\": scopes,\n        \"exp\":    time.Now().Add(15 * time.Minute).Unix(),\n        \"jti\":    uuid.New().String(),\n    }\n    access, _ := s.key.Sign(claims)\n\n    refreshID := uuid.New().String()\n    s.redis.SetEx(ctx, \"refresh:\"+refreshID, subject, 7*24*time.Hour)\n\n    return &TokenPair{Access: access, RefreshID: refreshID}, nil\n}\n",[101,2093,2094,2157,2174,2191,2206,2253,2279,2283,2314,2318,2339,2396,2400,2433],{"__ignoreMap":99},[104,2095,2096,2098,2100,2103,2105,2108,2110,2113,2115,2117,2119,2121,2123,2125,2128,2131,2133,2136,2138,2140,2142,2144,2146,2149,2151,2153,2155],{"class":106,"line":12},[104,2097,487],{"class":115},[104,2099,134],{"class":126},[104,2101,2102],{"class":137},"s ",[104,2104,756],{"class":130},[104,2106,2107],{"class":238},"TokenService",[104,2109,141],{"class":126},[104,2111,2112],{"class":122}," Issue",[104,2114,127],{"class":126},[104,2116,769],{"class":137},[104,2118,772],{"class":238},[104,2120,254],{"class":126},[104,2122,777],{"class":238},[104,2124,159],{"class":126},[104,2126,2127],{"class":137}," subject",[104,2129,2130],{"class":130}," string",[104,2132,159],{"class":126},[104,2134,2135],{"class":137}," scopes",[104,2137,512],{"class":126},[104,2139,882],{"class":130},[104,2141,141],{"class":126},[104,2143,134],{"class":126},[104,2145,756],{"class":130},[104,2147,2148],{"class":238},"TokenPair",[104,2150,159],{"class":126},[104,2152,782],{"class":130},[104,2154,141],{"class":126},[104,2156,147],{"class":126},[104,2158,2159,2162,2164,2167,2169,2172],{"class":106,"line":21},[104,2160,2161],{"class":137},"    claims",[104,2163,546],{"class":126},[104,2165,2166],{"class":238}," jwt",[104,2168,254],{"class":126},[104,2170,2171],{"class":238},"MapClaims",[104,2173,834],{"class":126},[104,2175,2176,2179,2182,2184,2186,2189],{"class":106,"line":30},[104,2177,2178],{"class":162},"        \"",[104,2180,2181],{"class":166},"sub",[104,2183,904],{"class":162},[104,2185,842],{"class":126},[104,2187,2188],{"class":137},"    subject",[104,2190,853],{"class":126},[104,2192,2193,2195,2198,2200,2202,2204],{"class":106,"line":39},[104,2194,2178],{"class":162},[104,2196,2197],{"class":166},"scopes",[104,2199,904],{"class":162},[104,2201,842],{"class":126},[104,2203,2135],{"class":137},[104,2205,853],{"class":126},[104,2207,2208,2210,2213,2215,2217,2219,2221,2224,2227,2230,2232,2235,2237,2240,2242,2244,2247,2250],{"class":106,"line":48},[104,2209,2178],{"class":162},[104,2211,2212],{"class":166},"exp",[104,2214,904],{"class":162},[104,2216,842],{"class":126},[104,2218,930],{"class":137},[104,2220,254],{"class":126},[104,2222,2223],{"class":122},"Now",[104,2225,2226],{"class":126},"().",[104,2228,2229],{"class":122},"Add",[104,2231,127],{"class":126},[104,2233,2234],{"class":917},"15",[104,2236,1729],{"class":130},[104,2238,2239],{"class":137}," time",[104,2241,254],{"class":126},[104,2243,1842],{"class":137},[104,2245,2246],{"class":126},").",[104,2248,2249],{"class":122},"Unix",[104,2251,2252],{"class":126},"(),\n",[104,2254,2255,2257,2260,2262,2264,2267,2269,2272,2274,2277],{"class":106,"line":57},[104,2256,2178],{"class":162},[104,2258,2259],{"class":166},"jti",[104,2261,904],{"class":162},[104,2263,842],{"class":126},[104,2265,2266],{"class":137},"    uuid",[104,2268,254],{"class":126},[104,2270,2271],{"class":122},"New",[104,2273,2226],{"class":126},[104,2275,2276],{"class":122},"String",[104,2278,2252],{"class":126},[104,2280,2281],{"class":106,"line":248},[104,2282,626],{"class":126},[104,2284,2285,2288,2290,2292,2294,2297,2299,2302,2304,2307,2309,2312],{"class":106,"line":306},[104,2286,2287],{"class":137},"    access",[104,2289,159],{"class":126},[104,2291,971],{"class":137},[104,2293,546],{"class":126},[104,2295,2296],{"class":137}," s",[104,2298,254],{"class":126},[104,2300,2301],{"class":137},"key",[104,2303,254],{"class":126},[104,2305,2306],{"class":122},"Sign",[104,2308,127],{"class":126},[104,2310,2311],{"class":137},"claims",[104,2313,182],{"class":126},[104,2315,2316],{"class":106,"line":312},[104,2317,216],{"emptyLinePlaceholder":215},[104,2319,2320,2323,2325,2328,2330,2332,2334,2336],{"class":106,"line":317},[104,2321,2322],{"class":137},"    refreshID",[104,2324,546],{"class":126},[104,2326,2327],{"class":137}," uuid",[104,2329,254],{"class":126},[104,2331,2271],{"class":122},[104,2333,2226],{"class":126},[104,2335,2276],{"class":122},[104,2337,2338],{"class":126},"()\n",[104,2340,2341,2344,2346,2348,2350,2353,2355,2357,2359,2361,2364,2366,2368,2371,2373,2375,2377,2380,2382,2385,2387,2389,2391,2394],{"class":106,"line":341},[104,2342,2343],{"class":137},"    s",[104,2345,254],{"class":126},[104,2347,810],{"class":137},[104,2349,254],{"class":126},[104,2351,2352],{"class":122},"SetEx",[104,2354,127],{"class":126},[104,2356,769],{"class":137},[104,2358,159],{"class":126},[104,2360,898],{"class":162},[104,2362,2363],{"class":166},"refresh:",[104,2365,904],{"class":162},[104,2367,1783],{"class":130},[104,2369,2370],{"class":137},"refreshID",[104,2372,159],{"class":126},[104,2374,2127],{"class":137},[104,2376,159],{"class":126},[104,2378,2379],{"class":917}," 7",[104,2381,756],{"class":130},[104,2383,2384],{"class":917},"24",[104,2386,756],{"class":130},[104,2388,1837],{"class":137},[104,2390,254],{"class":126},[104,2392,2393],{"class":137},"Hour",[104,2395,182],{"class":126},[104,2397,2398],{"class":106,"line":377},[104,2399,216],{"emptyLinePlaceholder":215},[104,2401,2402,2404,2406,2408,2410,2413,2415,2418,2420,2423,2425,2428,2431],{"class":106,"line":1019},[104,2403,631],{"class":115},[104,2405,824],{"class":130},[104,2407,2148],{"class":238},[104,2409,885],{"class":126},[104,2411,2412],{"class":137},"Access",[104,2414,842],{"class":126},[104,2416,2417],{"class":137}," access",[104,2419,159],{"class":126},[104,2421,2422],{"class":137}," RefreshID",[104,2424,842],{"class":126},[104,2426,2427],{"class":137}," refreshID",[104,2429,2430],{"class":126},"},",[104,2432,1539],{"class":130},[104,2434,2435],{"class":106,"line":1024},[104,2436,639],{"class":126},[86,2438,2440],{"id":2439},"biometric-second-factor","Biometric Second Factor",[82,2442,2443],{},"WebAuthn handles the biometric flow. The server stores credential public keys, never any biometric data. Browser passkeys and hardware security keys are both supported. The fallback for non-WebAuthn clients is TOTP.",[86,2445,2447],{"id":2446},"audit-log","Audit Log",[82,2449,2450],{},"Every authentication event, token issue, and access denial is written to an append-only audit log in Postgres with a cryptographic hash chain — each record includes the hash of the previous record, making retroactive tampering detectable.",[86,2452,404],{"id":403},[82,2454,2455],{},"Running in production, protecting 6 administrative interfaces. Planning a self-service credential management UI for the next release.",[409,2457,1046],{},{"title":99,"searchDepth":21,"depth":21,"links":2459},[2460,2461,2462,2463],{"id":2084,"depth":21,"text":2085},{"id":2439,"depth":21,"text":2440},{"id":2446,"depth":21,"text":2447},{"id":403,"depth":21,"text":404},"Zero-trust identity layer with JWT-based authentication, role-scoped API tokens, and biometric second factor for administrative consoles.","Y5Z6A7",{},"\u002Fprojects\u002Fveil-auth","CA-CENTRAL-1",{"title":2076,"description":2464},"projects\u002Fveil-auth","\u002Fimages\u002Fthumbnails\u002Fveil-auth.png","3RnHwxVVupReRkyUAJhnBTtaDsZ_Q9PgFtbZ1leF9nA",1779361989236]