← Back to resume

Flavio Espinoza

flavio.espinoza@gmail.comSchedule a callflavioespinoza.comGitHubLinkedIn(385) 216 - 8969Salt Lake City, UT
Akash ConsoleFeb 2022 – Dec 2022

In early 2022 I joined Overclock Labs to work on Akash Network -- a decentralized cloud where independent datacenters around the world bid to run your Docker containers instead of you renting a server from one company. It is cheaper than AWS and nobody can deplatform you. It was also the hardest thing I had ever watched a developer try to use: to deploy a single container you wrote a manifest in a YAML dialect almost nobody knew, held the network's token, connected a wallet, signed a transaction, generated and registered an on-chain certificate, waited for providers you had never met to bid, and signed again -- nine steps through a CLI, most of them on a blockchain, before anything ran. That friction is the whole reason the Akash Console exists.

Three of us turned that CLI protocol into a web application a developer could actually finish, and I owned the front end and everything behind it: the React app, the wallet signing, the in-browser certificate crypto, and the mutual-TLS proxy that injected a client certificate into every provider connection and relayed the live streams coming back from a hundred datacenters. I proposed the stack at our first planning meeting (create-react-app, Recoil, Fastify); when Recoil turned out to be incompatible with React 18 I found Jotai and moved on -- fail fast, find a new solution. I also built the four-stage GitHub Actions release pipeline, from auto-versioning to approval-gated deploys, so we could ship continuously.

The work itself was abstraction: turn the pieces of a blockchain protocol into UI steps a human could follow. With no designer, I built the five-step wizard, replaced a blank manifest with editable marketplace templates in a Monaco SDL editor, and turned the chain's three hard prerequisites -- a connected wallet, a minimum balance, a registered certificate -- into a preflight gate of three checkboxes. Behind the one 'Create Certificate' button sat a whole pipeline: generate an X.509 keypair in the browser, encrypt the private key so no secret ever touched a server, and write the public certificate to the chain. One click. That is what I am good at -- taking a difficult problem and finding the creative path through it.


The Architecture

The console is one product with a single job: take a developer from “I have a container” to “it is running on someone's hardware and I can watch it” without making them learn a blockchain. It is a three-tier TypeScript monorepo -- a React web app (create-react-app), a Fastify mutual-TLS proxy, and an API layer -- versioned together and shipped through a four-stage GitHub Actions pipeline (auto-version, multi-arch Docker to GHCR, staging, approval-gated production). The components below are ordered the way a user hits them: the wizard, the SDL editor, the wallet-and-certificate gate, the bid marketplace, and the live monitoring that closes the loop. A sixth section covers the state and delivery architecture underneath all of it.

The Deployment WizardThe front door. A five-step stepper -- Featured Apps, Select, Configure, Review, Deploy -- that turns “post a workload to a blockchain marketplace” into something a developer can follow without reading the protocol docs.

  1. A.Built in React (create-react-app) with Material-UI, the wizard is a stepper-driven flow that carries form state across all five steps (Featured Apps → Select → Configure → Review → Deploy), so a user can move backward and forward without losing input instead of each step being a dead end.
  2. B.Multi-step form validation with Formik gated progress at each step, so a user could not reach “Deploy” with an invalid SDL or a misconfigured resource request -- the errors surfaced where the mistake was made, not at the end.
  3. C.A template-driven start: curated, pre-validated SDL configurations (18-plus blockchain node presets -- Validator, RPC, and Sentry nodes among them) pulled via the GitHub API, so the most common deployments started from a working manifest instead of a blank editor.

The SDL EditorFor anything beyond a template, the user works with SDL -- Akash's YAML dialect describing the container, resources, and pricing. A blank YAML box is a wall; a real editor with validation is a ramp.

  1. A.SDL editing runs on Monaco (the engine behind VS Code) with monaco-yaml, wired into the wizard so a user could edit their manifest live during the five-step flow -- real syntax highlighting, inline validation, and autocomplete instead of a plain textarea.
  2. B.The editor surfaced schema validation as the user typed, with the failure pointing at the offending line -- the same “fail where the mistake is” principle as the wizard, applied to free-form config.
  3. C.A visual SDL builder sat alongside the raw editor for users who did not want to touch YAML at all, both views driving the same underlying manifest -- part of the editing surface wired into the deployment flow, shipped in the first MVP and the first commercial release.

The Preflight Gate -- Wallet and CertificateBefore any deploy, the console verifies the prerequisites the network requires: a connected wallet, a minimum balance (at least 5 AKT), and a valid certificate. Making those explicit and actionable in one place -- so a developer is never guessing why a deploy will not go out -- was a core part of the console's job.

  1. A.Integrated Keplr (the Cosmos browser wallet) for blockchain auth and transaction signing, using offline signers with amino-json serialization and auto-adjusted gas estimation across the full deployment lifecycle -- create, update, lease, and close. Akash runs on Cosmos, so every signature here is a Cosmos-SDK transaction.
  2. B.Built the certificate flow end to end: generate an X.509 keypair in the browser, encrypt the private key with AES-256 and keep it in local storage so no secret ever touched a server, and register the public cert on-chain via MsgCreateCertificate so providers could validate the client against the ledger. The “Create Certificate” button in the exhibits is that whole pipeline behind one click.
  3. C.Surfaced the minimum-balance requirement (at least 5 AKT) in the gate itself, so a newcomer who had not yet funded a wallet saw exactly what was missing instead of hitting a failed deploy.

The Provider MarketplaceOnce the deployment is posted on-chain, independent providers bid to run it. The marketplace UI is where a user turns a wall of blockchain bids into one informed click.

  1. A.Rendered live bids from across the provider network, each card showing a monthly cost estimate, the provider's on-chain address, and an audit badge, refreshable in place as new bids arrived.
  2. B.An “Only Audited” filter let users restrict to vetted providers in one toggle -- a trust shortcut on a marketplace of anonymous datacenters.
  3. C.Selecting a bid constructed and signed a MsgCreateLease transaction, and the chosen provider then received the manifest over the proxy -- the moment the deployment stops being an order and becomes a running workload.

Real-Time MonitoringClosing the loop. After a lease is live, the user needs to see their app actually running -- logs, events, lease status -- streamed back from a provider's Kubernetes cluster they do not control. This is where the mTLS proxy earns its keep.

  1. A.Designed a Fastify mutual-TLS proxy gateway that bridged the browser to distributed provider infrastructure: it injected the client certificate into each provider connection and relayed WebSocket streams, so the browser got live data without ever holding the provider's TLS trust directly.
  2. B.Streamed application logs and Kubernetes events in real time over those WebSocket connections, with throttled rendering and stick-to-bottom autoscroll so a chatty container did not lock up the tab -- continuous-stream UI tuned for the failure mode where data never stops.
  3. C.Surfaced lease accounting alongside the logs -- cost per month, spent, balance, time remaining -- and an interactive shell (xterm) into the running container, so monitoring, billing, and debugging lived on one screen across 100-plus independent providers.

State and Delivery ArchitectureThe layer under all of it -- how the app held state, and how it got to production.

  1. A.Atomic state using parameterized atomFamily patterns (Jotai) for per-deployment isolation, so each deployment's state was independent and a change to one lease did not re-render the others -- a deliberate structure that kept the UI fast. (We moved from Recoil to Jotai early when Recoil proved incompatible with the latest React; that story is in the introduction.)
  2. B.Server state via React Query for the chain and provider reads -- bids, lease status, balances -- so the polling, caching, and refetch logic lived in one disciplined place instead of scattered across components.
  3. C.A three-tier monorepo (web / Fastify proxy / API) on Yarn workspaces with unified versioning via custom Node scripts, shipped through a four-stage GitHub Actions pipeline: auto-versioning, multi-arch Docker builds to GHCR, staging deploy, and approval-gated production. The console also dogfooded its own product -- deployed onto Akash itself via templated SDL, the platform running on the marketplace it managed.

What this project showsThe whole console is an onboarding machine. Its job was to take the single hardest developer onboarding I have seen -- a nine-step blockchain protocol, full of wallets and signatures and on-chain certificates -- and make it finishable. That is the work: not a feature, a protocol made walkable. I owned the front end that did it: the React application and the Node mTLS proxy behind it that fed the Akash network, integrating my teammates' work and shipping it on the pipeline I built. Developers shipped real workloads through it.