From: Snapshot-Content-Location: http://remote-openframe:8888/ Subject: LocalYokel Date: Tue, 31 Mar 2026 00:59:27 -0400 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----MultipartBoundary--v25OE9qB1GAgcKQys89mBgLwHRpW3Sm1d1VkqJ6Wq3----" ------MultipartBoundary--v25OE9qB1GAgcKQys89mBgLwHRpW3Sm1d1VkqJ6Wq3---- Content-Type: text/html Content-ID: Content-Transfer-Encoding: quoted-printable Content-Location: http://remote-openframe:8888/ LocalYokel

LocalYokel

Building tools for people who work with their ha= nds and data.

Products

Sala

Live

Restaurant operations platform. Staff training, shift scheduling= , allergen compliance, and operational intelligence =E2=80=94 built for the= way restaurants actually work.

Training Scheduling Compliance Multi-concept
Live= demo =E2=86=92

OpenFrame

In Development

Local-first AI agent orchestration. Multi-agent coordination wit= h episodic memory, quality evaluation, and self-hosted infrastructure. No c= loud dependency.

Multi-agent Episodic memory Self-hosted Local inference

Infrastructure

Topology 2-host homelab =E2=80=94 workstation = + training server
Inference Ollama on Intel A770, local fine-tuni= ng
Memory Letta agents with episodic + archival= retrieval
Messaging Matrix federation, Conduit homeserver= s
Dashboards Marimo notebooks served as Matrix wid= gets

About

One-person shop. I build AI systems for restaurant operations =E2= =80=94 the kind of work where a missed allergen alert or an unstaffed shift= has real consequences. Sala is live in kitchens. = OpenFrame is the platform underneath it.

Self-taught. Started two years ago asking what Docker was. Now I'm = fine-tuning models on consumer GPUs and running multi-agent systems with pe= rsistent memory. I use the tools available to me to learn how to better use= those tools. It's a virtuous cycle.

------MultipartBoundary--v25OE9qB1GAgcKQys89mBgLwHRpW3Sm1d1VkqJ6Wq3---- Content-Type: text/css Content-Transfer-Encoding: quoted-printable Content-Location: https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,400;0,500;1,400&family=DM+Serif+Display&display=swap @charset "utf-8"; @font-face { font-family: "DM Sans"; font-style: italic; font-weight: 400; = font-display: swap; src: url("https://fonts.gstatic.com/s/dmsans/v17/rP2rp2= ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDV36TGc5pg.woff2") format("wo= ff2"); unicode-range: U+100-2BA, U+2BD-2C5, U+2C7-2CC, U+2CE-2D7, U+2DD-2FF= , U+304, U+308, U+329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A= 0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } @font-face { font-family: "DM Sans"; font-style: italic; font-weight: 400; = font-display: swap; src: url("https://fonts.gstatic.com/s/dmsans/v17/rP2rp2= ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDV30TGc.woff2") format("woff2= "); unicode-range: U+0-FF, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC= , U+304, U+308, U+329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212,= U+2215, U+FEFF, U+FFFD; } @font-face { font-family: "DM Sans"; font-style: normal; font-weight: 400; = font-display: swap; src: url("https://fonts.gstatic.com/s/dmsans/v17/rP2Yp2= ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6h9Q.woff2") format("woff2"); unicode-range= : U+100-2BA, U+2BD-2C5, U+2C7-2CC, U+2CE-2D7, U+2DD-2FF, U+304, U+308, U+32= 9, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0,= U+2113, U+2C60-2C7F, U+A720-A7FF; } @font-face { font-family: "DM Sans"; font-style: normal; font-weight: 400; = font-display: swap; src: url("https://fonts.gstatic.com/s/dmsans/v17/rP2Yp2= ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K4.woff2") format("woff2"); unicode-range: U= +0-FF, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304, U+308, U+32= 9, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+F= FFD; } @font-face { font-family: "DM Sans"; font-style: normal; font-weight: 500; = font-display: swap; src: url("https://fonts.gstatic.com/s/dmsans/v17/rP2Yp2= ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6h9Q.woff2") format("woff2"); unicode-range= : U+100-2BA, U+2BD-2C5, U+2C7-2CC, U+2CE-2D7, U+2DD-2FF, U+304, U+308, U+32= 9, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0,= U+2113, U+2C60-2C7F, U+A720-A7FF; } @font-face { font-family: "DM Sans"; font-style: normal; font-weight: 500; = font-display: swap; src: url("https://fonts.gstatic.com/s/dmsans/v17/rP2Yp2= ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K4.woff2") format("woff2"); unicode-range: U= +0-FF, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304, U+308, U+32= 9, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+F= FFD; } @font-face { font-family: "DM Serif Display"; font-style: normal; font-weig= ht: 400; font-display: swap; src: url("https://fonts.gstatic.com/s/dmserifd= isplay/v17/-nFnOHM81r4j6k0gjAW3mujVU2B2G_5x0ujy.woff2") format("woff2"); un= icode-range: U+100-2BA, U+2BD-2C5, U+2C7-2CC, U+2CE-2D7, U+2DD-2FF, U+304, = U+308, U+329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U= +20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } @font-face { font-family: "DM Serif Display"; font-style: normal; font-weig= ht: 400; font-display: swap; src: url("https://fonts.gstatic.com/s/dmserifd= isplay/v17/-nFnOHM81r4j6k0gjAW3mujVU2B2G_Bx0g.woff2") format("woff2"); unic= ode-range: U+0-FF, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304,= U+308, U+329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,= U+FEFF, U+FFFD; } ------MultipartBoundary--v25OE9qB1GAgcKQys89mBgLwHRpW3Sm1d1VkqJ6Wq3---- Content-Type: text/css Content-Transfer-Encoding: quoted-printable Content-Location: cid:css-524813af-7b38-4bfe-b472-7c2d61cf6a4c@mhtml.blink @charset "utf-8"; *, ::before, ::after { margin: 0px; padding: 0px; box-sizing: border-box; } :root { --bg: #0a0a0a; --bg-raised: #111111; --bg-subtle: #161616; --text: = #e8e0d4; --text-dim: #8a8279; --text-faint: #5a554f; --accent: #c17f59; --a= ccent-dim: #8a5a3d; --rule: #2a2520; --serif: 'DM Serif Display', Georgia, = 'Times New Roman', serif; --sans: 'DM Sans', -apple-system, 'Segoe UI', Hel= vetica, sans-serif; --mono: 'SFMono-Regular', 'Cascadia Code', 'Fira Code',= Consolas, monospace; } html { font-size: 16px; scroll-behavior: smooth; } body { background: var(--bg); color: var(--text); font-family: var(--sans);= line-height: 1.6; -webkit-font-smoothing: antialiased; } .container { max-width: 720px; margin: 0px auto; padding: 0px 1.5rem; } section { padding: 4rem 0px; border-bottom: 1px solid var(--rule); } section:last-of-type { border-bottom: none; } h1 { font-family: var(--serif); font-size: clamp(2.4rem, 6vw, 3.5rem); font= -weight: 400; letter-spacing: -0.01em; line-height: 1.1; color: var(--text)= ; } h2 { font-family: var(--sans); font-size: 0.75rem; font-weight: 500; text-t= ransform: uppercase; letter-spacing: 0.12em; color: var(--text-dim); margin= -bottom: 2rem; } h3 { font-family: var(--serif); font-size: 1.5rem; font-weight: 400; line-h= eight: 1.2; color: var(--text); } p { color: var(--text-dim); } a { color: var(--accent); text-decoration: none; border-bottom: 1px solid t= ransparent; } a:hover { border-bottom-color: var(--accent); } code, .mono { font-family: var(--mono); font-size: 0.85em; } .hero { padding: 6rem 0px 4rem; border-bottom: 1px solid var(--rule); } .hero .tagline { font-family: var(--sans); font-size: 1.1rem; color: var(--= text-dim); margin-top: 1rem; max-width: 480px; } .hero .mark { color: var(--accent); } .product { margin-bottom: 3rem; } .product:last-child { margin-bottom: 0px; } .product-header { display: flex; align-items: baseline; gap: 1rem; margin-b= ottom: 0.75rem; flex-wrap: wrap; } .product-tag { font-family: var(--mono); font-size: 0.7rem; text-transform:= uppercase; letter-spacing: 0.08em; padding: 0.2em 0.6em; border: 1px solid= var(--accent-dim); color: var(--accent); border-radius: 2px; position: rel= ative; top: -2px; } .product-tag.soon { border-color: var(--text-faint); color: var(--text-fain= t); } .product p { margin-bottom: 0.5rem; max-width: 540px; } .product-capabilities { display: flex; gap: 1.5rem; margin-top: 1rem; flex-= wrap: wrap; } .product-capabilities span { font-family: var(--mono); font-size: 0.8rem; c= olor: var(--text-faint); } .product-capabilities span::before { content: ""; display: inline-block; wi= dth: 6px; height: 6px; background: var(--accent-dim); border-radius: 1px; m= argin-right: 0.5rem; position: relative; top: -1px; } .product-capabilities .soon-dot::before { background: var(--text-faint); } .product-link { display: inline-block; margin-top: 1.25rem; font-family: va= r(--mono); font-size: 0.8rem; letter-spacing: 0.02em; } .product-link .arrow { display: inline-block; transition: transform 0.15s; = } .product-link:hover .arrow { transform: translateX(3px); } .infra-grid { display: grid; grid-template-columns: 1fr; gap: 0px; } .infra-row { display: grid; grid-template-columns: 140px 1fr; gap: 1rem; pa= dding: 0.75rem 0px; border-bottom: 1px solid var(--rule); align-items: base= line; } .infra-row:last-child { border-bottom: none; } .infra-label { font-family: var(--mono); font-size: 0.8rem; color: var(--te= xt-faint); } .infra-value { font-family: var(--sans); font-size: 0.9rem; color: var(--te= xt-dim); } .about-text { max-width: 540px; font-size: 1.05rem; line-height: 1.7; color= : var(--text-dim); } .about-text strong { color: var(--text); font-weight: 500; } footer { padding: 3rem 0px; border-top: 1px solid var(--rule); } .footer-content { display: flex; justify-content: space-between; align-item= s: baseline; flex-wrap: wrap; gap: 1rem; } .footer-copy { font-family: var(--mono); font-size: 0.75rem; color: var(--t= ext-faint); } .footer-links { display: flex; gap: 1.5rem; } .footer-links a { font-family: var(--mono); font-size: 0.75rem; color: var(= --text-faint); } .footer-links a:hover { color: var(--accent); } @media (max-width: 540px) { .hero { padding: 4rem 0px 3rem; } section { padding: 3rem 0px; } .infra-row { grid-template-columns: 1fr; gap: 0.2rem; } .product-capabilities { flex-direction: column; gap: 0.5rem; } .footer-content { flex-direction: column; gap: 0.75rem; } } ------MultipartBoundary--v25OE9qB1GAgcKQys89mBgLwHRpW3Sm1d1VkqJ6Wq3------