> ## Documentation Index
> Fetch the complete documentation index at: https://talunavo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Principles

> Comparison over prophecy. Every number traceable. Assumptions first-class. No recommendations, no scores, no success probabilities. Planning-grade tax, and honest about it.

export const LedgerOrnament = () => <svg className="tl-figure" viewBox="0 0 400 200" aria-hidden="true">
    <g stroke="currentColor" strokeWidth="1" opacity="0.25">
      <line x1="0" y1="40" x2="400" y2="40" />
      <line x1="0" y1="80" x2="400" y2="80" />
      <line x1="0" y1="120" x2="400" y2="120" />
      <line x1="0" y1="160" x2="400" y2="160" />
    </g>
    <g fill="currentColor" fontFamily="Inter, system-ui, sans-serif" fontSize="12" opacity="0.8">
      <text x="0" y="28">2031 · retire</text>
      <text x="400" y="28" textAnchor="end">$5.64M</text>
      <text x="0" y="68">2035 · SEPP lock ends</text>
      <text x="400" y="68" textAnchor="end">$5.21M</text>
      <text x="0" y="108">2051 · RMD wall</text>
      <text x="400" y="108" textAnchor="end">$6.02M</text>
      <text x="0" y="148">2074 · horizon</text>
      <text x="400" y="148" textAnchor="end">$7.31M</text>
    </g>
    <path d="M0 190 C 100 184, 200 160, 300 140 S 380 118, 400 110" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" opacity="0.9" pathLength="1" className="tl-draw" />
  </svg>;

export const SiteFooter = () => <footer className="tl-footer">
    <div className="tl-wrap">
      <div className="tl-footer__grid">
        <div className="tl-footer__brand">
          {Wordmark({})}
          <p className="tl-caption">Retirement planning that shows its work. Tax-aware plans you can compare, trace, adopt, and check against reality.</p>
        </div>
        <div>
          <h5>Product</h5>
          <ul>
            <li><a href="/product">How it works</a></li>
            <li><a href="/product#strategies">Strategies</a></li>
            <li><a href="/product#live">Checkpoints</a></li>
            <li><a href="/principles">Principles</a></li>
          </ul>
        </div>
        <div>
          <h5>Company</h5>
          <ul>
            <li><a href="/who-its-for">Who it's for</a></li>
            <li><a href="/faq">FAQ</a></li>
            <li><a href="/get-started">Get started</a></li>
            <li><a href="https://app.talunavo.com">Open the app</a></li>
            <li><a href="mailto:support@talunavo.com">support@talunavo.com</a></li>
          </ul>
        </div>
        <div>
          <h5>Honesty</h5>
          <ul>
            <li><a href="/principles#not-advice">Not financial advice</a></li>
            <li><a href="/principles#planning-grade">Planning-grade tax</a></li>
            <li><a href="/principles#privacy">Your data stays yours</a></li>
          </ul>
        </div>
      </div>
      <div className="tl-footer__legal">
        <span>© 2026 Talunavo. Models arithmetic under stated assumptions. It is not financial, tax, or legal advice.</span>
        <span>Every figure cites its source.</span>
      </div>
    </div>
  </footer>;

export const CtaBand = ({title, lede, primary = "Try Talunavo", primaryHref = "https://app.talunavo.com", secondary = "See the product", secondaryHref = "/product", figure = null}) => <div className="tl-cta" data-reveal="">
    <div>
      <h2 className="tl-h2">{title}</h2>
      {lede ? <p className="tl-lede">{lede}</p> : null}
      <div className="tl-actions">
        {CtaLink({
  href: primaryHref,
  children: primary
})}
        {secondary ? CtaLink({
  href: secondaryHref,
  children: secondary,
  variant: "ghost",
  arrow: false
}) : null}
      </div>
    </div>
    {figure ? <div className="tl-cta__figure">{figure}</div> : null}
  </div>;

export const SectionHead = ({eyebrow, title, lede, center = false}) => <div className={["tl-section-head", center ? "tl-section-head--center" : null].filter(Boolean).join(" ")} data-reveal="">
    {eyebrow ? <p className="tl-eyebrow">{eyebrow}</p> : null}
    <h2 className="tl-h2">{title}</h2>
    {lede ? <p className="tl-lede">{lede}</p> : null}
  </div>;

export const Section = ({children, tight = false, id}) => <section id={id} className={["tl-section", tight ? "tl-section--tight" : null].filter(Boolean).join(" ")}>
    <div className="tl-wrap">{children}</div>
  </section>;

export const Glyph = ({name}) => {
  const paths = {
    compare: <path d="M4 5h6v14H4zM14 9h6v10h-6z" />,
    trace: <path d="M4 18L9 10l4 5 7-11M4 21h16" />,
    track: <path d="M3 17l5-5 4 4 9-9M15 7h6v6" />,
    tax: <path d="M4 4h16v16H4zM8 9h8M8 13h8M8 17h5" />,
    goals: <path d="M12 3v3M12 18v3M3 12h3M18 12h3M12 8a4 4 0 100 8 4 4 0 000-8z" />,
    shield: <path d="M12 3l8 3v6c0 5-3.5 8-8 9-4.5-1-8-4-8-9V6l8-3z" />,
    grid: <path d="M4 4h7v7H4zM13 4h7v7h-7zM4 13h7v7H4zM13 13h7v7h-7z" />,
    scale: <path d="M12 3v18M5 7h14M5 7l-3 7a3 3 0 006 0zM19 7l-3 7a3 3 0 006 0z" />,
    home: <path d="M3 12l9-8 9 8M5 10v10h14V10" />,
    sparkle: <path d="M12 3l2 6 6 2-6 2-2 6-2-6-6-2 6-2z" />,
    clock: <path d="M12 3a9 9 0 100 18 9 9 0 000-18zM12 8v4l3 2" />,
    lock: <path d="M6 10h12v10H6zM8 10V7a4 4 0 018 0v3" />
  };
  return <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
      {paths[name] || paths.sparkle}
    </svg>;
};

export const Wordmark = ({className = ""}) => <svg className={className} viewBox="0 0 172 40" role="img" aria-label="Talunavo">
    <path d="M7 32 H15 V24 H23 V16 H31 V8" fill="none" stroke="currentColor" strokeWidth="3" strokeLinejoin="round" strokeLinecap="round" />
    <circle cx="31" cy="8" r="3" fill="var(--tl-accent-ink)" />
    <text x="46" y="27" fontFamily="Inter, system-ui, sans-serif" fontSize="22" fontWeight="600" letterSpacing="-0.5" fill="currentColor">Talunavo</text>
  </svg>;

export const CtaLink = ({href, children, variant = "primary", arrow = true}) => <a className={["tl-btn", "tl-btn--" + variant].join(" ")} href={href}>
    <span>{children}</span>
    {arrow ? <svg viewBox="0 0 16 16" fill="none" aria-hidden="true">
        <path d="M3 8h10M9 4l4 4-4 4" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round" />
      </svg> : null}
  </a>;

<div className="tl-page">
  <div className="tl-wrap">
    <div className="tl-pagehead">
      <p className="tl-eyebrow tl-eyebrow--accent tl-fade-up">Principles</p>
      <h1 className="tl-display tl-fade-up d1">Quiet money, <em>operationalised.</em></h1>
      <p className="tl-lede tl-fade-up d2">Most money apps manufacture urgency: flashing tickers, confetti on gains, red alerts on dips. Talunavo does the opposite. Nothing here can express "hurry". Deadlines are dates. Red is spent on exactly one thing: a goal that is short, where a decision is wanted.</p>
    </div>
  </div>

  <Section tight>
    <div className="tl-grid tl-grid--2">
      <div className="tl-card" data-reveal="">
        <div className="tl-card__glyph">
          <Glyph name="compare" />
        </div>

        <h3 className="tl-h4">Comparison over prophecy</h3>
        <p className="tl-body">A single projected number, "you will have \$3.4M", is false precision that invites false confidence. The unit of value is the difference between two plans under identical assumptions, where the shared modelling error largely cancels out.</p>
      </div>

      <div className="tl-card" data-reveal="2">
        <div className="tl-card__glyph">
          <Glyph name="trace" />
        </div>

        <h3 className="tl-h4">Every number is traceable</h3>
        <p className="tl-body">Any figure can be drilled to the year, the line item, the rule that produced it, and, for tax figures, the primary source the rule was derived from.</p>
      </div>

      <div className="tl-card" data-reveal="3">
        <div className="tl-card__glyph">
          <Glyph name="goals" />
        </div>

        <h3 className="tl-h4">Assumptions are first-class</h3>
        <p className="tl-body">Never buried in code. You can see, in one place, every assumption a result rests on, and change any of them. Every scenario input carries its plausible band, and every tax figure its confidence tier.</p>
      </div>

      <div className="tl-card" data-reveal="4">
        <div className="tl-card__glyph">
          <Glyph name="clock" />
        </div>

        <h3 className="tl-h4">A plan is a living document</h3>
        <p className="tl-body">Adopting is the beginning, not the end. The system's job afterwards is to tell you, calmly, annually, not daily, whether the assumptions you bet on are still holding.</p>
      </div>
    </div>
  </Section>

  <Section id="not-advice">
    <SectionHead eyebrow="Explicit non-goals" title="What this is not." lede="Naming these prevents feature creep in the wrong direction, and tells you what to expect before you enter a single number." />

    <ul className="tl-refusals" data-reveal="">
      <li>
        <h3 className="tl-h3">Not financial, tax, or legal advice</h3>
        <p className="tl-body">Talunavo models arithmetic under stated assumptions. It never phrases output as a recommendation, only as a comparison. The export target is a document you take to a meeting, and the language is comparative rather than imperative everywhere.</p>
      </li>

      <li id="planning-grade">
        <h3 className="tl-h3">Not a tax filing tool</h3>
        <p className="tl-body">No forms, no e-file, no attempt at completeness on edge cases. The tax engine is a planning-grade approximation and says so. What each strategy does not model is written down rather than left to be discovered.</p>
      </li>

      <li>
        <h3 className="tl-h3">Not an optimiser first</h3>
        <p className="tl-body">It evaluates plans you write. Automated search over the strategy space can come later, once evaluation is trusted. A tool that hands you an answer before you trust its arithmetic is worse than no tool.</p>
      </li>

      <li>
        <h3 className="tl-h3">Not a replacement for a professional</h3>
        <p className="tl-body">Explicitly the opposite. The goal is a better-informed client who asks sharper questions. Its outputs are an education, a shortlist, a set of sharper questions, and, after a decision is made elsewhere, an early warning system.</p>
      </li>

      <li id="privacy">
        <h3 className="tl-h3">Not a data aggregator</h3>
        <p className="tl-body">You type your data in; no brokerage credentials, no account scraping. Planning reads the portfolios you track and never writes to them. Self-hosting is a feature, not a chore, for the privacy-conscious household that wants its own model on its own machine.</p>
      </li>
    </ul>
  </Section>

  <Section tight>
    <SectionHead eyebrow="Design rules with teeth" title="Tested, not promised." lede="These are not restraint a future screen can forget. Each one is a grammar rule, and most of them fail the build when broken." />

    <div className="tl-grid tl-grid--3">
      <div className="tl-card" data-reveal="">
        <h3 className="tl-h4">No score, no rank, no composite</h3>
        <p className="tl-body">A test walks every shape in the plan comparison and fails if a score, rank, or composite field appears.</p>
      </div>

      <div className="tl-card" data-reveal="2">
        <h3 className="tl-h4">No "success probability"</h3>
        <p className="tl-body">The store refuses to write a payload containing that vocabulary, and both test suites walk the payloads hunting for it.</p>
      </div>

      <div className="tl-card" data-reveal="3">
        <h3 className="tl-h4">No re-projection on the track</h3>
        <p className="tl-body">A funding track is measured against the path stored at adoption, never a fresh run. A target recomputed at read time would move to meet you.</p>
      </div>

      <div className="tl-card" data-reveal="">
        <h3 className="tl-h4">A watch finds, never executes</h3>
        <p className="tl-body">When a watch's condition binds, it produces a finding. The six verbs that would do more are refused by name, with a test walking every served field.</p>
      </div>

      <div className="tl-card" data-reveal="2">
        <h3 className="tl-h4">Shapes first, colour second</h3>
        <p className="tl-body">Funded, tight, short, needs input are glyphs, legible in greyscale, in sunlight, printed, and to a colourblind reader. If removing all colour destroys the meaning, the design is wrong.</p>
      </div>

      <div className="tl-card" data-reveal="3">
        <h3 className="tl-h4">Every axis carries its frame</h3>
        <p className="tl-body">No number without the plan, scenario, and real-or-nominal it was computed under. Nominal roughly triples every figure over a horizon, so the frame is never implied.</p>
      </div>
    </div>
  </Section>

  <Section>
    <CtaBand title="A tool that shows its work earns the right to be trusted." lede="If you would rather audit a model than believe one, you are who this was built for." secondary="Who it's for" secondaryHref="/who-its-for" figure={<LedgerOrnament />} />
  </Section>

  <SiteFooter />
</div>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.