<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Liana Grigory (Grigoryan) | Entrepreneur &amp; Software Engineer</title>
<meta name="description" content="Liana Grigory (Liana Grigoryan) — entrepreneur, software engineer & U.S. Army veteran in Los Angeles. Founder & CEO of Grigoryan Capital Group.">
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
<meta property="og:title" content="Liana Grigory — I build your software for equity, not invoices">
<meta property="og:description" content="You built the business. Liana Grigory builds the software, end to end, for equity rather than an invoice. Nothing upfront, no retainer. If it does not work, she is not paid.">
<meta property="og:type" content="website">
<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" type="image/png" sizes="512x512" href="/icon-512.png">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="canonical" href="https://lianagrigory.com/">
<meta name="robots" content="index,follow,max-image-preview:large">
<meta name="author" content="Liana Grigory">
<meta property="og:url" content="https://lianagrigory.com/">
<meta property="og:site_name" content="Liana Grigory">
<meta property="og:image" content="https://lianagrigory.com/img/liana-800.jpg">
<meta name="twitter:card" content="summary_large_image">
<link rel="alternate" type="text/plain" href="/llms.txt" title="Site summary for language models">
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://lianagrigory.com/#website",
      "url": "https://lianagrigory.com/",
      "name": "Liana Grigory",
      "alternateName": "Liana Grigoryan",
      "inLanguage": "en-US",
      "publisher": {
        "@id": "https://lianagrigory.com/#person"
      }
    },
    {
      "@type": "ProfilePage",
      "@id": "https://lianagrigory.com/#profile",
      "url": "https://lianagrigory.com/",
      "name": "Liana Grigory (Liana Grigoryan) — Entrepreneur and Software Engineer",
      "mainEntity": {
        "@id": "https://lianagrigory.com/#person"
      },
      "isPartOf": {
        "@id": "https://lianagrigory.com/#website"
      },
      "inLanguage": "en-US"
    },
    {
      "@type": "FAQPage",
      "@id": "https://lianagrigory.com/#faq",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Who is Liana Grigory?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Liana Grigory, also written Liana Grigoryan, is an entrepreneur, software engineer and United States Army veteran based in Los Angeles, California. She is the founder and chief executive of Grigoryan Capital Group LLC, the Wyoming holding company behind The Care Royal and Tegula Stone, and the founder of Unified Savers and DNL Bureau. She builds the products herself."
          }
        },
        {
          "@type": "Question",
          "name": "Is Liana Grigory the same person as Liana Grigoryan?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes. Grigory is the name she works and publishes under and the name her companies are registered against; Grigoryan is her birth name and still appears on her degree certificates and on LinkedIn. Both refer to the same founder in Los Angeles."
          }
        },
        {
          "@type": "Question",
          "name": "What does Liana Grigory build?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "She founded The Care Royal, a multi-tenant platform for home care agencies; Tegula Stone, a two-sided marketplace for stone and tile contractors; Unified Savers, a non-profit informational resource for healthcare workers; DNL Bureau, a government contracting agency; and Grigoryan Capital Group LLC, the Wyoming holding company behind them."
          }
        },
        {
          "@type": "Question",
          "name": "How does Liana Grigory work with founders?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "She takes equity instead of an invoice: nothing upfront, no retainer, no hourly, and nothing at all if the business does not work. She builds the product, the apps and the automation end to end. She works with US-registered businesses that already have revenue and a real market, and passes on pre-revenue ideas and on anyone who wants a pair of hands."
          }
        },
        {
          "@type": "Question",
          "name": "What technologies does Liana Grigory use?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "TypeScript, React, Next.js, Node.js, Firebase including Firestore and Security Rules, Cloudflare Workers and Workers AI, Capacitor for native iOS and Android, Stripe, and Google Cloud. She writes about applying them at lianagrigory.com/publications."
          }
        },
        {
          "@type": "Question",
          "name": "How do you contact Liana Grigory?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Email info@lianagrigory.com, use the contact form at lianagrigory.com, or connect on LinkedIn."
          }
        }
      ]
    },
    {
      "@type": "Person",
      "@id": "https://lianagrigory.com/#person",
      "name": "Liana Grigory",
      "alternateName": [
        "Liana Grigoryan",
        "Liana G. Grigory"
      ],
      "givenName": "Liana",
      "familyName": "Grigory",
      "jobTitle": "Entrepreneur and Software Engineer",
      "hasOccupation": [
        {
          "@type": "Occupation",
          "name": "Entrepreneur"
        },
        {
          "@type": "Occupation",
          "name": "Software Engineer"
        }
      ],
      "description": "Entrepreneur, software engineer and United States Army veteran in Los Angeles, who served as a Sergeant. Founder and chief executive of Grigoryan Capital Group LLC, the Wyoming holding company behind The Care Royal and Tegula Stone, and founder of Unified Savers and DNL Bureau. Learned to code because nobody would build the software her own company needed, and now builds the products herself, taking equity rather than fees.",
      "url": "https://lianagrigory.com/",
      "mainEntityOfPage": {
        "@id": "https://lianagrigory.com/about#page"
      },
      "image": {
        "@type": "ImageObject",
        "@id": "https://lianagrigory.com/#portrait",
        "url": "https://lianagrigory.com/img/liana-800.jpg",
        "contentUrl": "https://lianagrigory.com/img/liana-800.jpg",
        "width": 799,
        "height": 800,
        "caption": "Liana Grigory, entrepreneur and software engineer",
        "name": "Liana Grigory",
        "description": "Liana Grigory, also written Liana Grigoryan — entrepreneur, software engineer and U.S. Army veteran in Los Angeles.",
        "creditText": "Photo courtesy of Liana Grigory",
        "copyrightNotice": "Â© Liana Grigory",
        "creator": {
          "@id": "https://lianagrigory.com/#person"
        },
        "license": "https://lianagrigory.com/press",
        "acquireLicensePage": "https://lianagrigory.com/press",
        "sameAs": "https://commons.wikimedia.org/wiki/File:Liana_Grigory.jpg"
      },
      "email": "mailto:info@lianagrigory.com",
      "address": {
        "@type": "PostalAddress",
        "addressLocality": "Los Angeles",
        "addressRegion": "CA",
        "addressCountry": "US"
      },
      "nationality": {
        "@type": "Country",
        "name": "United States"
      },
      "alumniOf": [
        {
          "@type": "CollegeOrUniversity",
          "name": "University of Hertfordshire",
          "sameAs": "https://www.wikidata.org/wiki/Q1745633"
        },
        {
          "@type": "CollegeOrUniversity",
          "name": "American Military University",
          "sameAs": "https://www.wikidata.org/wiki/Q21980979"
        }
      ],
      "knowsAbout": [
        "Entrepreneurship",
        "Company Building",
        "Technology Startups",
        "Product Strategy",
        "Multi-tenant SaaS",
        "Marketplaces",
        "Software Engineering",
        "TypeScript",
        "React",
        "Next.js",
        "Firebase",
        "Firestore Security Rules",
        "Cloudflare Workers",
        "iOS Development",
        "Android Development",
        "Product Management",
        "Multi-tenant SaaS",
        "AI Integration",
        "Automation",
        "Application Security",
        "HIPAA Security Rule",
        "Role-Based Access Control",
        "Data Isolation"
      ],
      "identifier": [
        {
          "@type": "PropertyValue",
          "propertyID": "Wikidata",
          "value": "Q141199983"
        },
        {
          "@type": "PropertyValue",
          "propertyID": "Crunchbase",
          "value": "liana-grigory"
        }
      ],
      "sameAs": [
        "https://www.wikidata.org/wiki/Q141199983",
        "https://www.crunchbase.com/person/liana-grigory",
        "https://github.com/grigoryan0013",
        "https://www.linkedin.com/in/liana-grigory-a03148239/",
        "https://www.instagram.com/liana.grigory/",
        "https://grigoryancapitalgroup.com/",
        "https://thecareroyal.com/",
        "https://tegulastone.com/",
        "https://unifiedsavers.com/"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://grigoryancapitalgroup.com/#organization",
      "name": "Grigoryan Capital Group LLC",
      "url": "https://grigoryancapitalgroup.com/",
      "description": "Wyoming venture firm and software holding company.",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q141199871"
      ],
      "founder": {
        "@id": "https://lianagrigory.com/#person"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://thecareroyal.com/#organization",
      "name": "The Care Royal",
      "url": "https://thecareroyal.com/",
      "description": "Multi-tenant platform for home care agencies, live on web, iOS and Android.",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q141200164"
      ],
      "founder": {
        "@id": "https://lianagrigory.com/#person"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://tegulastone.com/#organization",
      "name": "Tegula Stone",
      "url": "https://tegulastone.com/",
      "description": "Two-sided marketplace for stone and tile contractors, live on web, iOS and Android.",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q141200123"
      ],
      "founder": {
        "@id": "https://lianagrigory.com/#person"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://unifiedsavers.com/#organization",
      "name": "Unified Savers",
      "url": "https://unifiedsavers.com/",
      "description": "Non-profit informational resource platform for healthcare workers.",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q141200175"
      ],
      "founder": {
        "@id": "https://lianagrigory.com/#person"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://thednlbureau.com/#organization",
      "name": "DNL Bureau",
      "url": "https://thednlbureau.com/",
      "description": "Government contracting agency for procurement, management and consulting.",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q141200191"
      ],
      "founder": {
        "@id": "https://lianagrigory.com/#person"
      }
    }
  ]
}
</script>

<style>
  /* ---- tokens -------------------------------------------------------------
     Palette: cool slate paper against a deep blue-black ink, with amber as the
     single accent — the colour of a build indicator, which is the subject here.
     Green is reserved as semantic "live in production", never decorative. */
  :root{
    --paper:#EAECEF; --panel:#F4F5F7; --ink:#0E1219; --body:#2A3040;
    --muted:#556070; --rule:#C9CED6;
    --amber:#945206; --amber-soft:rgba(148,82,6,.10);
    --live:#1A6740; --live-soft:rgba(26,103,64,.12);
    --shadow:0 1px 0 rgba(14,18,25,.05);
  }
  @media (prefers-color-scheme:dark){
    :root{
      --paper:#080B11; --panel:#0E131B; --ink:#EDEFF2; --body:#B9C0CC;
      --muted:#7B8598; --rule:#1E2530;
      --amber:#E0973F; --amber-soft:rgba(224,151,63,.12);
      --live:#4FBF85; --live-soft:rgba(79,191,133,.14);
      --shadow:none;
    }
  }
  :root[data-theme="dark"]{
    --paper:#080B11; --panel:#0E131B; --ink:#EDEFF2; --body:#B9C0CC;
    --muted:#7B8598; --rule:#1E2530;
    --amber:#E0973F; --amber-soft:rgba(224,151,63,.12);
    --live:#4FBF85; --live-soft:rgba(79,191,133,.14);
    --shadow:none;
  }
  :root[data-theme="light"]{
    --paper:#EAECEF; --panel:#F4F5F7; --ink:#0E1219; --body:#2A3040;
    --muted:#556070; --rule:#C9CED6;
    --amber:#945206; --amber-soft:rgba(148,82,6,.10);
    --live:#1A6740; --live-soft:rgba(26,103,64,.12);
    --shadow:0 1px 0 rgba(14,18,25,.05);
  }

  *{box-sizing:border-box}
  body{
    margin:0; background:var(--paper); color:var(--body);
    position:relative;
    font:400 17px/1.62 Georgia,"Iowan Old Style","Times New Roman",serif;
    -webkit-font-smoothing:antialiased;
  }
  .sans{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif}
  .mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}

  /* Faint measured grid — the surface of an instrument, not decoration.
     Light theme keeps it almost invisible so the page stays a document. */
  .grid-bg{position:fixed;inset:0;z-index:-2;pointer-events:none;
    background-image:linear-gradient(var(--rule) 1px,transparent 1px),
                     linear-gradient(90deg,var(--rule) 1px,transparent 1px);
    background-size:68px 68px;opacity:.30;
    -webkit-mask-image:radial-gradient(ellipse 82% 55% at 50% 0%,#000 30%,transparent 78%);
            mask-image:radial-gradient(ellipse 82% 55% at 50% 0%,#000 30%,transparent 78%)}
  @media(prefers-color-scheme:light){.grid-bg{opacity:.5}}
  :root[data-theme="light"] .grid-bg{opacity:.5}
  #net{position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.42}
  @media(prefers-color-scheme:light){#net{opacity:.20}}
  :root[data-theme="light"] #net{opacity:.20}

  .skip{position:absolute;left:-9999px;top:0;z-index:100;background:var(--ink);
    color:var(--paper);padding:12px 18px;border-radius:0 0 4px 0;
    font:600 14px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-decoration:none}
  .skip:focus{left:0}
  .code{margin:42px 0 0;border:1px solid var(--rule);border-radius:7px;
    background:var(--panel);box-shadow:var(--shadow);overflow:hidden}
  .codebar{display:flex;align-items:center;gap:7px;padding:10px 14px;
    border-bottom:1px solid var(--rule);
    background:color-mix(in srgb,var(--panel) 70%,var(--paper))}
  .dot{width:10px;height:10px;border-radius:50%;display:inline-block;opacity:.8}
  .dot.r{background:#E0625A}.dot.y{background:#E0AE3F}.dot.g{background:#4FBF85}
  .codetitle{margin-left:8px;font:600 10px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
    letter-spacing:.15em;text-transform:uppercase;color:var(--muted)}
  .codebody{margin:0;padding:18px 20px;min-height:340px;
    font:400 13px/1.85 ui-monospace,SFMono-Regular,Menlo,monospace;
    color:var(--body);white-space:pre-wrap;word-break:break-word}
  @media(max-width:600px){.codebody{font-size:11.5px;min-height:390px;padding:14px}}
  .c-key{color:var(--amber);font-weight:700}
  .c-str{color:var(--live)}
  .c-com{color:var(--muted);font-style:italic}
  .c-fn{color:var(--ink);font-weight:700}
  .c-num{color:var(--ink)}
  .caret{display:inline-block;width:8px;background:var(--amber);
    animation:blink 1.05s step-end infinite}
  @keyframes blink{50%{opacity:0}}
  .wrap{max-width:1040px;margin:0 auto;padding:0 28px}
  .top{display:flex;align-items:baseline;justify-content:space-between;gap:18px;
    flex-wrap:wrap;padding:26px 0 22px;border-bottom:1px solid var(--rule);margin-bottom:40px}
  .top a{color:var(--body);text-decoration:none}
  .brand{font:600 15px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
    letter-spacing:.02em;color:var(--ink)}
  .nav{display:flex;gap:20px;font:500 14px/1 -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif}
  .nav a{color:var(--muted)}
  .nav a:hover,.nav a[aria-current]{color:var(--amber)}
  @media(max-width:640px){.wrap{padding:0 20px}}

  /* ---- masthead ---- */
  header{padding:76px 0 0}
  .mast{display:grid;grid-template-columns:1fr 168px;gap:36px;align-items:start}
  @media(max-width:720px){.mast{grid-template-columns:1fr}
    .portrait{width:112px}}
  .portrait{width:168px;height:auto;border-radius:50%;display:block;
    border:1px solid var(--rule);box-shadow:var(--shadow)}
  .eyebrow{
    font:600 11px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
    letter-spacing:.19em; text-transform:uppercase; color:var(--amber);
    display:flex; align-items:center; gap:10px;
  }
  .eyebrow::after{content:"";flex:1;height:1px;background:var(--rule)}
  h1{
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
    font-size:clamp(33px,5.4vw,56px); line-height:1.06; letter-spacing:-.03em;
    font-weight:800; color:var(--ink); margin:22px 0 0; text-wrap:balance;
  }
  .thesis{
    max-width:60ch; margin:22px 0 0; font-size:clamp(18px,2.1vw,21px);
    line-height:1.58; color:var(--body);
  }
  .thesis b{color:var(--ink);font-weight:700}

  /* ---- the count strip: the one number that matters ---- */
  .strip-unused{
    display:grid; grid-template-columns:repeat(4,1fr); gap:1px;
    background:var(--rule); border:1px solid var(--rule);
    margin:44px 0 0; box-shadow:var(--shadow);
  }
  @media(max-width:700px){.strip{grid-template-columns:repeat(2,1fr)}}
  .cell-unused{background:var(--panel);padding:18px 18px 16px}
  .cell .n{
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
    font-size:30px;font-weight:800;color:var(--ink);letter-spacing:-.02em;
    font-variant-numeric:tabular-nums;line-height:1;
  }
  .cell .k{
    font:600 10.5px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;
    letter-spacing:.13em;text-transform:uppercase;color:var(--muted);margin-top:9px;
  }

  /* ---- records ---- */
  section{padding:74px 0 0}
  .shead{
    font:600 11px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
    letter-spacing:.19em;text-transform:uppercase;color:var(--muted);
    display:flex;align-items:center;gap:12px;margin:0 0 30px;
  }
  .shead::after{content:"";flex:1;height:1px;background:var(--rule)}

  .rec{border-top:1px solid var(--rule);padding:30px 0}
  .rec:last-of-type{border-bottom:1px solid var(--rule)}
  .rtop{display:flex;flex-wrap:wrap;align-items:baseline;gap:12px}
  .rname{
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
    font-size:clamp(23px,3vw,30px);font-weight:800;letter-spacing:-.022em;
    color:var(--ink);line-height:1.1;
  }
  .badge{
    font:600 10px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
    letter-spacing:.13em;text-transform:uppercase;padding:5px 9px;
    border-radius:3px;background:var(--live-soft);color:var(--live);
    border:1px solid color-mix(in srgb,var(--live) 34%,transparent);
    white-space:nowrap;
  }
  .rrole{
    font:600 11px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
    letter-spacing:.11em;text-transform:uppercase;color:var(--muted);
    margin-left:auto;white-space:nowrap;
  }
  @media(max-width:640px){.rrole{margin-left:0;width:100%}}

  .rgrid{display:grid;grid-template-columns:1fr 232px;gap:34px;margin-top:16px}
  @media(max-width:820px){.rgrid{grid-template-columns:1fr;gap:20px}}
  .shotwrap{margin:20px 0 4px;border:1px solid var(--rule);border-radius:5px;
    overflow:hidden;background:var(--panel);box-shadow:var(--shadow);line-height:0}
  .shotwrap img{width:100%;height:auto;display:block}
  .cap{font:500 11px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;
    letter-spacing:.09em;text-transform:uppercase;color:var(--muted);
    padding:9px 12px;border-top:1px solid var(--rule);background:var(--panel)}
  .rbody p{margin:0 0 13px;max-width:64ch}
  .rbody p:last-child{margin-bottom:0}
  .rbody strong{color:var(--ink);font-weight:700}

  .stack{border-left:2px solid var(--amber);padding-left:15px}
  .stack .lab{
    font:600 10px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
    letter-spacing:.15em;text-transform:uppercase;color:var(--amber);
  }
  .stack ul{list-style:none;margin:11px 0 0;padding:0;
    font:400 13.5px/1.85 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}

  /* ---- craft notes ---- */
  .notes{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;
    background:var(--rule);border:1px solid var(--rule);box-shadow:var(--shadow)}
  @media(max-width:820px){.notes{grid-template-columns:1fr}}
  .note{background:var(--panel);padding:24px 22px}
  .note h3{
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
    font-size:16.5px;font-weight:700;color:var(--ink);margin:0 0 9px;letter-spacing:-.012em;
  }
  .note p{margin:0;font-size:15.5px;line-height:1.6}

  /* ---- close ---- */
  .close{margin:84px 0 0;border-top:2px solid var(--ink);padding:38px 0 90px}
  .close h2{
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
    font-size:clamp(26px,3.6vw,38px);font-weight:800;letter-spacing:-.025em;
    color:var(--ink);margin:0;text-wrap:balance;
  }
  .close p{max-width:56ch;margin:15px 0 24px}
  .mail{
    display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
    font-size:16px;font-weight:600;letter-spacing:.01em;
    color:var(--paper);background:var(--ink);
    padding:15px 22px;border-radius:4px;text-decoration:none;
    transition:transform .15s ease,opacity .15s ease;
  }
  .mail:hover{opacity:.9;transform:translateY(-1px)}
  .mail:focus-visible{outline:3px solid var(--amber);outline-offset:3px}
  .fine{margin-top:26px;font-size:14px;color:var(--muted)}

  .form{display:flex;flex-direction:column;gap:14px;max-width:640px;margin:6px 0 28px}
  .row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
  @media(max-width:640px){.row{grid-template-columns:1fr}}
  .sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
    clip:rect(0 0 0 0);white-space:nowrap;border:0}
  .form label{display:block;margin-bottom:6px;
    font:600 10.5px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
    letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
  .form input,.form select,.form textarea{
    font:400 16px/1.5 Georgia,serif;color:var(--ink);background:var(--panel);
    border:1px solid var(--rule);border-radius:4px;padding:12px 13px;width:100%;
    -webkit-appearance:none;appearance:none}
  .form textarea{resize:vertical;font-size:15.5px}
  .form input:focus,.form select:focus,.form textarea:focus{
    outline:2px solid var(--amber);outline-offset:1px;border-color:transparent}
  #send{align-self:flex-start;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
    font-size:15px;font-weight:600;color:var(--paper);background:var(--ink);
    border:0;padding:15px 24px;border-radius:4px;cursor:pointer;
    transition:opacity .15s ease,transform .15s ease}
  #send:hover{opacity:.9;transform:translateY(-1px)}
  #send:disabled{opacity:.5;cursor:default;transform:none}
  #send:focus-visible{outline:3px solid var(--amber);outline-offset:3px}
  .formnote{font:400 13px/1.5 Georgia,serif;color:var(--muted);margin:0}
  .formnote.ok{color:var(--live);font-weight:700}
  .formnote.err{color:#B4342B;font-weight:700}
  .alt{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin-top:6px}
  .li{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:14px;
    font-weight:600;color:var(--amber);text-decoration:none;letter-spacing:.02em}
  .li:hover{text-decoration:underline}
  .li:focus-visible{outline:3px solid var(--amber);outline-offset:3px}
  /* systems panel */
  .sys{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--rule);
    border:1px solid var(--rule);box-shadow:var(--shadow)}
  @media(max-width:760px){.sys{grid-template-columns:1fr}}
  .sysitem{background:var(--panel);padding:24px 22px;position:relative}
  .sysitem::before{content:"";position:absolute;left:0;top:22px;bottom:22px;width:2px;background:var(--amber)}
  .sysitem h3{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
    font-size:16.5px;font-weight:700;color:var(--ink);margin:0 0 8px;letter-spacing:-.012em}
  .sysitem p{margin:0;font-size:15.5px;line-height:1.6}
  .tag{display:inline-block;font:600 9.5px/1 ui-monospace,SFMono-Regular,Menlo,monospace;
    letter-spacing:.14em;text-transform:uppercase;color:var(--amber);
    background:var(--amber-soft);border:1px solid color-mix(in srgb,var(--amber) 30%,transparent);
    padding:4px 7px;border-radius:3px;margin-bottom:11px}
  @media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
</style>
</head>
<body>
<a class="skip" href="#main">Skip to content</a>
<div class="grid-bg"></div>
<canvas id="net" aria-hidden="true" role="presentation"></canvas>

<div class="wrap" role="main">

  <div class="top sans">
    <a class="brand" href="/">LIANA GRIGORY</a>
    <nav class="nav" aria-label="Primary">
      <a href="/" aria-current="page">Home</a>
      <a href="/about">About</a>
      <a href="/speaking">Speaking</a>
      <a href="/publications">Writing</a>
      <a href="/press">Press</a>
      <a href="#contact">Contact</a>
    </nav>
  </div>

  <header id="main">
    <div class="mast"><div>
    <div class="eyebrow">Los Angeles &middot; I take equity, not invoices</div>
    <h1>You built the business. I&rsquo;ll build the software. I only get paid if it works.</h1>
    <p class="thesis">
      The business is real &mdash; customers, revenue, a market that wants the thing. It is
      being run on spreadsheets, group chats and somebody&rsquo;s phone, and it is starting to
      come apart at exactly the point it started working. What would fix it is software nobody
      in the building can build, and the quotes come back at six figures.
    </p>
    <p class="thesis">
      <b>I don&rsquo;t write you a check. I build the thing the check was for.</b> End to end
      &mdash; the product, the apps, the automation that should never have needed a person
      &mdash; and I take equity instead of an invoice. Nothing upfront, no retainer, no hourly.
      If the business does not work, I have worked for free, which is precisely why I am
      selective about whose business it is.
    </p>
    <p class="thesis">
      Liana Grigory &mdash; also written Liana Grigoryan. Three products have gone from an empty
      repository to a running business, two of them through App Store and Google Play review.
      I built all of them myself.
    </p>
    </div>
    <img class="portrait" src="img/liana-800.jpg" alt="Liana Grigory, entrepreneur and software engineer in Los Angeles" width="799" height="800">
    </div>    </div>
    </div>
    <div class="code" aria-label="Terms of engagement">
      <div class="codebar">
        <span class="dot r"></span><span class="dot y"></span><span class="dot g"></span>
        <span class="codetitle">terms.ts</span>
      </div>
      <pre class="codebody" id="codebody"></pre>
    </div>
  </header>

  <section>
    <h2 class="shead">Selected work</h2>

    <article class="rec">
      <div class="rtop">
        <span class="rname">The Care Royal</span>
        <span class="badge">Live &middot; Web, iOS, Android</span>
      </div>
      <div class="shotwrap"><img src="img/careroyal_app.jpg" alt="The Care Royal running in production" loading="lazy" width="1120" height="700"><div class="cap">The Care Royal &mdash; onboarding in the live product</div></div>
      <div class="rgrid">
        <div class="rbody">
          <p>
            A multi-tenant platform that home care agencies run their day on:
            shift scheduling, caregiver and client records, applicant tracking,
            messaging and documents. Four roles — owner, manager, caregiver and
            family — each seeing a different product.
          </p>
          <p>
            The work that matters most here is invisible: <strong>per-tenant isolation
            enforced at the database layer</strong>, so no agency can reach
            another's records even if the application code is wrong. Security
            that depends on the UI behaving is not security.
          </p>
          <p>
            Caregivers clock in and out with GPS verification and the timesheet
            builds itself, then the platform computes gross, tax and net against
            current federal and California tables. Rather than depend on an external payroll provider, the calculation runs in-house — which removed the dependency and kept
            the platform out of the money-transmission path entirely.
          </p>
        </div>
        <aside class="stack">
          <div class="lab">Stack</div>
          <ul>
            <li>Next.js 14</li><li>TypeScript</li><li>Firebase Auth</li>
            <li>Firestore + Rules</li><li>Cloud Functions</li><li>Capacitor</li>
            <li>Stripe</li><li>Cloudflare Pages</li>
          </ul>
        </aside>
      </div>
    </article>

    <article class="rec">
      <div class="rtop">
        <span class="rname">Tegula Stone</span>
        <span class="badge">Live &middot; Web, iOS, Android</span>
      </div>
      <div class="shotwrap"><img src="img/tegula.jpg" alt="Tegula Stone running in production" loading="lazy" width="1120" height="700"><div class="cap">tegulastone.com &mdash; contractor marketplace</div></div>
      <div class="rgrid">
        <div class="rbody">
          <p>
            A two-sided marketplace connecting homeowners with stone and tile
            contractors — quoting, bookings, messaging, reviews, and subscription
            billing driven by Stripe webhooks.
          </p>
          <p>
            A production error-monitoring pipeline captures browser
            and backend faults, groups them by normalized signature, and alerts
            once per issue rather than once per occurrence &mdash; then does the
            less obvious half: <strong>filters out third-party scripts the
            business does not control</strong>. Most of the alerts were a bug in someone else's
            analytics beacon. An alert stream nobody reads is worse than none.
          </p>
          <p>
            Instrumentation is only useful if it is honest. Edge counts and analytics were reconciled against each other before either was trusted, which caught a gap wide enough to have sent the roadmap the wrong way. <strong>Killing a conclusion beats defending it.</strong>
          </p>
        </div>
        <aside class="stack">
          <div class="lab">Stack</div>
          <ul>
            <li>Cloudflare Workers</li><li>Workers AI</li><li>JavaScript</li>
            <li>Firebase</li><li>Stripe Connect</li><li>Capacitor</li>
            <li>GitHub Actions</li><li>Node.js</li>
          </ul>
        </aside>
      </div>
    </article>

    <article class="rec">
      <div class="rtop">
        <span class="rname">Unified Savers</span>
        <span class="badge">Live &middot; Web</span>
      </div>
      <div class="shotwrap"><img src="img/unified.jpg" alt="Unified Savers running in production" loading="lazy" width="1120" height="700"><div class="cap">unifiedsavers.com &mdash; consumer product</div></div>
      <div class="rgrid">
        <div class="rbody">
          <p>
            A consumer savings product built on a serverless edge stack with
            static generation, holding a 90+ Lighthouse performance score across
            the site. Content architecture, technical SEO and the automated
            publishing pipeline are all owned in-house.
          </p>
        </div>
        <aside class="stack">
          <div class="lab">Stack</div>
          <ul>
            <li>Cloudflare Pages</li><li>Static generation</li><li>Edge functions</li>
            <li>Technical SEO</li>
          </ul>
        </aside>
      </div>
    </article>
  </section>

  <section>
    <h2 class="shead">Shipped, not prototyped</h2>
    <div class="shotwrap" style="max-width:760px">
      <img src="img/appstore.jpg" alt="Tegula Stone live on the App Store" loading="lazy">
      <div class="cap">Tegula Stone &mdash; live on the App Store</div>
    </div>
    <p style="max-width:64ch;margin:18px 0 0">
      Two of these are native apps built, signed and pushed through App Store
      and Google Play review in-house &mdash; certificates, provisioning, store
      listings and all. Most products never survive that last mile.
    </p>
  </section>

    <p style="max-width:64ch;margin:26px 0 0;color:var(--muted);font-size:15.5px">
      Three examples, not the full list &mdash; an e-commerce storefront, an
      internal operations agent and several under wraps are not shown here.
    </p>
  </section>

  <section>
    <h2 class="shead">Security &amp; compliance</h2>
    <p style="max-width:66ch;margin:0 0 26px">
      Products that hold health records, payment details and client addresses
      are built to be defensible from the first commit, not hardened after
      something goes wrong.
    </p>
    <div class="sys">
      <div class="sysitem">
        <span class="tag">Isolation</span>
        <h3>Enforced below the application</h3>
        <p>
          Multi-tenant data separation written into database security rules, so
          one customer cannot reach another&rsquo;s records even if the
          application code is wrong. A permission check that lives only in the
          interface is a suggestion, not a control.
        </p>
      </div>
      <div class="sysitem">
        <span class="tag">Access control</span>
        <h3>Roles that cannot be self-granted</h3>
        <p>
          Role, tenant and permission fields are immutable to the account they
          belong to. A signed-in user editing their own record cannot promote
          themselves, because the rule pins those fields server-side.
        </p>
      </div>
      <div class="sysitem">
        <span class="tag">Healthcare</span>
        <h3>Built to HIPAA&rsquo;s technical safeguards</h3>
        <p>
          Care platforms are built against the HIPAA Security Rule&rsquo;s
          technical requirements &mdash; unique user identification, role-based
          access, audit controls over record access, automatic logoff, and
          encryption in transit and at rest.
        </p>
      </div>
      <div class="sysitem">
        <span class="tag">Review</span>
        <h3>Adversarial by default</h3>
        <p>
          Auth paths are reviewed as an attacker would: assume the client is
          hostile, assume storage is readable, assume the token is forged. That
          discipline has caught real privilege-escalation holes in production
          code before anyone else found them.
        </p>
      </div>
    </div>
  </section>

  <section>
    <h2 class="shead">AI &amp; automation</h2>
    <p style="max-width:66ch;margin:0 0 26px">
      AI is used where it removes work that would otherwise need a person, and
      kept away from the parts that have to be exactly right. Every system below
      runs in production today, not as a demo.
    </p>
    <div class="sys">
      <div class="sysitem">
        <span class="tag">Content at scale</span>
        <h3>Article generation on edge inference</h3>
        <p>
          A publishing pipeline that researches and drafts articles, running on
          Cloudflare Workers AI. It replaced a paid API that had quietly expired
          and stopped producing for five weeks. The replacement has no key to
          revoke and no per-article cost.
        </p>
      </div>
      <div class="sysitem">
        <span class="tag">Autonomous operations</span>
        <h3>An operations agent that runs overnight</h3>
        <p>
          Every night it collects business data, scans six separate error
          sources, runs the SEO work, drafts marketing, then asks one question
          per business: what would win the next paying customer. The morning
          report is ready before the day starts.
        </p>
      </div>
      <div class="sysitem">
        <span class="tag">Cost discipline</span>
        <h3>The right model for the job</h3>
        <p>
          Volume work &mdash; drafting, summarising, classifying &mdash; goes to
          a free tier. Judgement calls go to a stronger model. That split keeps
          inference cost near zero while the reasoning stays sound.
        </p>
      </div>
      <div class="sysitem">
        <span class="tag">Guardrails</span>
        <h3>Deterministic where it counts</h3>
        <p>
          Audits count real faults in code; a model only prioritises and writes.
          Payroll maths is arithmetic against published tax tables, never
          inference. An AI that invents a problem is worse than no AI, so it
          never gets to decide what is true.
        </p>
      </div>
    </div>
  </section>

  <section>
    <h2 class="shead">Approach</h2>
    <div class="notes">
      <div class="note">
        <h3>Shipping is the job</h3>
        <p>
          Code that is not in production has not been tested by anything that
          matters. Work goes all the way through review, signing, release and
          the monitoring that follows.
        </p>
      </div>
      <div class="note">
        <h3>Measure before concluding</h3>
        <p>
          Numbers mislead more often than they lie. Every metric is reconciled against a second source before a plan is built on it, and the disagreement gets said out loud.
        </p>
      </div>
      <div class="note">
        <h3>Leadership, not just delivery</h3>
        <p>
          A nineteen-person call centre operation, led to first place across the
          entire organization. Coordinating people is a separate skill from
          building systems, and a technical co-founder needs both.
        </p>
      </div>
    </div>
  </section>

  <div class="close" id="contact">
    <h2>Pitch me.</h2>
    <p>
      Tell me what the business is, what is breaking, and what you would give up to fix
      it. If it is a fit you get a call, and we talk about scope and what the split looks
      like. If it is not, you get a straight answer and the reason.
    </p>

    <form id="lead" class="form" novalidate>
      <div class="row">
        <label for="f-name">Your name <span aria-hidden="true">*</span><span class="sr">(required)</span></label>
        <input id="f-name" name="name" type="text" required autocomplete="name" placeholder="Jane Okafor">
        <label for="f-company">Company</label>
        <input id="f-company" name="company" type="text" autocomplete="organization" placeholder="Northwind Care">
      </div>
      <div class="row">
        <label for="f-email">Email <span aria-hidden="true">*</span><span class="sr">(required)</span></label>
        <input id="f-email" name="email" type="email" inputmode="email" required autocomplete="email" placeholder="jane@northwind.com">
        <label for="f-phone">Phone for the call</label>
        <input id="f-phone" name="phone" type="tel" inputmode="tel" autocomplete="tel" placeholder="(555) 555-5555">
      </div>
      <label for="f-kind">What are you building?</label>
      <select id="f-kind" name="kind">
          <option>Marketplace &mdash; two-sided</option>
          <option>SaaS platform</option>
          <option>Mobile app (iOS / Android)</option>
          <option>Consumer web product</option>
          <option>Not sure yet</option>
        </select>
      <label for="f-stage">What stage are you at?</label>
      <select id="f-stage" name="stage">
          <option>Idea &mdash; nothing built</option>
          <option>Have customers, no product</option>
          <option>Have a prototype that needs rebuilding</option>
          <option>Live product that needs an owner</option>
        </select>
      <label for="f-detail">Project details</label>
      <textarea id="f-detail" name="detail" rows="4" placeholder="What the product does, who it is for, and what you are offering."></textarea>
      <!-- Bot traps, both invisible to a person and both checked on the server.
           "website" is a honeypot: off-screen, out of the tab order, hidden from assistive
           technology, and never shown to anyone. A human cannot fill it; a form-stuffer
           fills every input it finds. "t" is when this page rendered, so the server can
           refuse anything returned faster than a person could type it. Neither replaces
           Turnstile, which this zone's CSP does not currently permit. -->
      <div aria-hidden="true" style="position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden">
        <label for="f-website">Website</label>
        <input id="f-website" name="website" type="text" tabindex="-1" autocomplete="off">
      </div>
      <input type="hidden" name="t" id="f-t" value="">
      <button type="submit" id="send">Request a call</button>
      <p class="formnote" id="formnote" role="status" aria-live="polite">Goes straight to Liana. No list, no newsletter.</p>
      <p class="fine">By sending this you agree to the <a href="/terms">Terms of Use</a> &mdash; which resolve disputes by individual arbitration &mdash; and to the <a href="/privacy">Privacy Notice</a>. Do not send confidential material before an NDA.</p>
    </form>

    <div class="alt">
      <a class="mail" href="mailto:info@lianagrigory.com">info@lianagrigory.com</a>
      <a class="li" href="https://www.linkedin.com/in/liana-grigory-a03148239/" target="_blank" rel="noopener">Connect on LinkedIn &rarr;</a>
    </div>

    <p class="fine"><a href="/about">About Liana Grigory</a> &middot; <a href="/speaking">Speaking</a> &middot; <a href="/publications">Writing</a> &middot; <a href="/press">Press kit</a></p>
    <p class="fine">M.B.A., University of Hertfordshire &middot; B.A. Psychology, American Military University</p>
    <p class="fine"><a href="/terms">Terms of Use</a> &middot; <a href="/privacy">Privacy Notice</a></p>
  </div></div>

</div>

<script>
(function(){
  var f=document.getElementById('lead'), b=document.getElementById('send'), n=document.getElementById('formnote');
  if(!f) return;
  /* Stamp when the page rendered, so the server can tell a typed form from a stuffed one. */
  var t=document.getElementById('f-t'); if(t) t.value=String(Date.now());
  f.addEventListener('submit', function(e){
    e.preventDefault();
    var d={}; new FormData(f).forEach(function(v,k){ d[k]=v; });
    if(!d.name || !d.email){ n.textContent='Name and email, please.'; n.className='formnote err'; return; }
    b.disabled=true; b.textContent='Sending…'; n.textContent=''; n.className='formnote';
    fetch('/api/lead',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(d)})
      .then(function(r){ return r.json(); })
      .then(function(r){
        if(r && r.ok){
          f.reset(); b.textContent='Sent';
          n.textContent='Got it. Expect a call within two business days.';
          n.className='formnote ok';
        } else { throw new Error((r && r.error) || 'failed'); }
      })
      .catch(function(){
        b.disabled=false; b.textContent='Request a call';
        n.textContent='That did not send. Email info@lianagrigory.com instead.';
        n.className='formnote err';
      });
  });
})();
</script>
<script>
/* A slow constellation behind the page: nodes drifting, lines only when they
   are close. Deliberately dim and unhurried — this should read as a system
   quietly running, not as a screensaver. Honours reduced-motion by drawing a
   single static frame. */
(function(){
  var c=document.getElementById('net'); if(!c) return;
  var x=c.getContext('2d'), pts=[], raf=null;
  var still=window.matchMedia('(prefers-reduced-motion: reduce)').matches;
  function accent(){
    return getComputedStyle(document.documentElement).getPropertyValue('--amber').trim()||'#E0973F';
  }
  function size(){
    var d=window.devicePixelRatio||1;
    c.width=innerWidth*d; c.height=innerHeight*d;
    c.style.width=innerWidth+'px'; c.style.height=innerHeight+'px';
    x.setTransform(d,0,0,d,0,0);
    var n=Math.min(46,Math.round(innerWidth/34));
    pts=[]; for(var i=0;i<n;i++) pts.push({
      x:Math.random()*innerWidth, y:Math.random()*innerHeight,
      vx:(Math.random()-.5)*.16, vy:(Math.random()-.5)*.16
    });
  }
  function draw(){
    var col=accent();
    x.clearRect(0,0,innerWidth,innerHeight);
    for(var i=0;i<pts.length;i++){
      var p=pts[i];
      if(!still){ p.x+=p.vx; p.y+=p.vy;
        if(p.x<0||p.x>innerWidth) p.vx*=-1;
        if(p.y<0||p.y>innerHeight) p.vy*=-1; }
      x.beginPath(); x.arc(p.x,p.y,1.35,0,6.2832);
      x.fillStyle=col; x.globalAlpha=.55; x.fill();
      for(var j=i+1;j<pts.length;j++){
        var q=pts[j], dx=p.x-q.x, dy=p.y-q.y, d=Math.sqrt(dx*dx+dy*dy);
        if(d<132){
          x.beginPath(); x.moveTo(p.x,p.y); x.lineTo(q.x,q.y);
          x.strokeStyle=col; x.globalAlpha=(1-d/132)*.18; x.lineWidth=1; x.stroke();
        }
      }
    }
    x.globalAlpha=1;
    if(!still) raf=requestAnimationFrame(draw);
  }
  size(); draw();
  addEventListener('resize',function(){ if(raf)cancelAnimationFrame(raf); size(); draw(); });
  // Stop burning frames when the tab is not visible.
  document.addEventListener('visibilitychange',function(){
    if(document.hidden){ if(raf)cancelAnimationFrame(raf); raf=null; }
    else if(!still && !raf){ draw(); }
  });
})();
</script>

<script>
/* The terms of engagement, typed out as source. Says exactly what the deal is
   and what happens next — no invoice, equity instead, US-registered business
   required, and the two ways to start. Reduced-motion gets it instantly. */
(function(){
  var el=document.getElementById('codebody'); if(!el) return;
  var L=[
    ['com','// the deal'],
    ['',''],
    ['code','const <k>deal</k> = {'],
    ['code','  youBring:   [<s>"the market"</s>, <s>"the customers"</s>, <s>"the domain"</s>],'],
    ['code','  iBring:     [<s>"the product"</s>, <s>"the apps"</s>, <s>"the automation"</s>],'],
    ['code','  iTake:      <s>"equity"</s>,'],
    ['code','  upfront:    <n>0</n>,   <c>// no invoice, no retainer, no hourly</c>'],
    ['code','  ifItFails:  <s>"I get nothing"</s>,'],
    ['code','};'],
    ['',''],
    ['code','const <k>iSayYesTo</k> = ['],
    ['code','  <s>"a US registered business"</s>,'],
    ['code','  <s>"revenue already, however small"</s>,'],
    ['code','  <s>"a real market, not an idea"</s>,'],
    ['code','  <s>"the split agreed in writing, first"</s>,'],
    ['code','];'],
    ['',''],
    ['code','const <k>iPassOn</k> = ['],
    ['code','  <s>"pre-revenue, pre-customer, pre-market"</s>,'],
    ['code','  <s>"anyone who wants a pair of hands"</s>,'],
    ['code','  <s>"work I would not fund with my own year"</s>,'],
    ['code','];'],
    ['',''],
    ['code','<f>function</f> <f>start</f>(founder) {'],
    ['code','  <f>if</f> (!founder.registeredInUS) <f>return</f> <s>"not a fit yet"</s>;'],
    ['code','  <f>return</f> founder.<f>submitForm</f>()'],
    ['code','      || founder.<f>connectOn</f>(<s>"LinkedIn"</s>);'],
    ['code','}'],
    ['',''],
    ['com','// reply within two business days']
  ];
  var still=window.matchMedia('(prefers-reduced-motion: reduce)').matches;
  function esc(s){var d=document.createElement('div');d.textContent=s;return d.innerHTML;}
  function paint(t){
    return esc(t)
      .replace(/&lt;k&gt;(.*?)&lt;\/k&gt;/g,'<span class="c-key">$1</span>')
      .replace(/&lt;s&gt;(.*?)&lt;\/s&gt;/g,'<span class="c-str">$1</span>')
      .replace(/&lt;n&gt;(.*?)&lt;\/n&gt;/g,'<span class="c-num">$1</span>')
      .replace(/&lt;f&gt;(.*?)&lt;\/f&gt;/g,'<span class="c-fn">$1</span>')
      .replace(/&lt;c&gt;(.*?)&lt;\/c&gt;/g,'<span class="c-com">$1</span>');
  }
  function render(k,t){ return k==='com' ? '<span class="c-com">'+esc(t)+'</span>' : paint(t); }
  var full=L.map(function(x){return render(x[0],x[1]);}).join('
');
  if(still){ el.innerHTML=full; return; }

  var i=0,c=0,out='';
  function step(){
    if(i>=L.length){ el.innerHTML=out; return; }
    var k=L[i][0], t=L[i][1];
    var plain=t.replace(/<\/?[knsfc]>/g,'');
    if(c<=plain.length){
      var shown=plain.slice(0,c);
      el.innerHTML=out+(k==='com'?'<span class="c-com">'+esc(shown)+'</span>':esc(shown))
                  +'<span class="caret">&nbsp;</span>';
      c++; setTimeout(step, 11);
    } else {
      out+=render(k,t)+'
'; i++; c=0; setTimeout(step, t?70:130);
    }
  }
  var io=new IntersectionObserver(function(e){ if(e[0].isIntersecting){io.disconnect();step();} },{threshold:.2});
  io.observe(el);
})();
</script>
</body>
</html>
