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

# An open-source health ledger

> Record health observations through MCP or REST, review your day, and keep the ledger on infrastructure you control.

export const ThemeImage = ({light, dark, alt, width, height, sizes, priority = false}) => <>
    <div className="oss-product-light">
      <img src={light} alt={alt} width={width} height={height} sizes={sizes} loading={priority ? "eager" : "lazy"} fetchPriority={priority ? "high" : "auto"} />
    </div>
    <div className="oss-product-dark">
      <img src={dark || light} alt={alt} width={width} height={height} sizes={sizes} loading={priority ? "eager" : "lazy"} fetchPriority={priority ? "high" : "auto"} />
    </div>
  </>;

export const Points = ({children}) => <div className="oss-ownership-points">{children}</div>;

export const SplitSection = ({id, children}) => <section className="oss-ownership" aria-labelledby={id}>
    {children}
  </section>;

export const Eyebrow = ({children}) => <p className="oss-feature-label">{children}</p>;

export const SectionIntro = ({children}) => <div className="oss-section-intro">{children}</div>;

export const Process = ({id, children}) => <section className="oss-process" aria-labelledby={id}>
    {children}
  </section>;

export const InlineLink = ({children, ...props}) => <a {...props} className="oss-link">
    {children}
  </a>;

export const Highlights = ({children, ...props}) => <section {...props} className="oss-highlights">
    {children}
  </section>;

export const ProductFrame = ({children}) => <div className="oss-product">
    <div className="oss-product-frame">{children}</div>
  </div>;

export const ActionLink = ({variant = "primary", children, ...props}) => <a {...props} data-oss-action={variant} className="group pl-3 pr-2 py-2 relative inline-flex items-center text-sm font-medium">
    <span className="absolute inset-0 bg-primary-dark rounded-xl group-hover:opacity-[0.9]" aria-hidden="true" />
    <div className="z-10 gap-1 flex items-center">
      <span className="text-white">{children}</span>
    </div>
  </a>;

export const Actions = ({children}) => <div className="oss-actions">{children}</div>;

export const Hero = ({id, children}) => <section className="oss-hero" aria-labelledby={id}>
    {children}
  </section>;

export const Home = ({children, ...props}) => <div {...props} className="oss-home">
    {children}
  </div>;

<Home>
  <Hero id="hero-heading">
    <h1 id="hero-heading">
      Open-source

      <br />

      <span>health ledger</span>
    </h1>

    <p className="oss-lead">
      <span className="oss-lead-primary">
        Record observations. Review your day. Keep your data.
      </span>

      <span>
        A self-hosted dashboard, REST API and MCP for one person's health
        records.
      </span>
    </p>

    <Actions>
      <ActionLink href="/quickstart">
        Get started <span aria-hidden="true">→</span>
      </ActionLink>

      <ActionLink href="https://github.com/avgeek-oss/vitalog" variant="secondary">
        Explore on GitHub <span aria-hidden="true">↗</span>
      </ActionLink>
    </Actions>
  </Hero>

  <ProductFrame>
    <ThemeImage light="/assets/dashboard-light.png" dark="/assets/dashboard-dark.png" alt="Vitalog Daily View with sample nutrition, mood, water, exercise and expandable logs" width={2560} height={1648} sizes="(max-width: 640px) calc(100vw - 42px), (max-width: 1200px) calc(100vw - 66px), 1134px" priority />
  </ProductFrame>

  <Highlights aria-label="What you can do with Vitalog">
    <div>
      <h2>Log through your client</h2>

      <p>
        Record meals, water, activity, measurements and lab results through MCP
        or REST. Retain dates, units and sources alongside each observation.
      </p>

      <InlineLink href="/logging">Log your first observation →</InlineLink>
    </div>

    <div>
      <h2>Review the day</h2>

      <p>
        See daily totals, mood and goal progress. Expand a log to inspect its
        details or follow weigh-ins over time.
      </p>

      <InlineLink href="/dashboard">Explore the dashboard →</InlineLink>
    </div>

    <div>
      <h2>Host your own ledger</h2>

      <p>
        Run the API, web app and PostgreSQL on your infrastructure. Export
        records and back up attachments in private object storage.
      </p>

      <InlineLink href="/installation">Install Vitalog →</InlineLink>
    </div>
  </Highlights>

  <Process id="start-heading">
    <SectionIntro>
      <Eyebrow>How it works</Eyebrow>
      <h2 id="start-heading">From an observation to a daily view.</h2>
      <p>Use the dashboard for viewing and a connected client for logging.</p>
    </SectionIntro>

    <ol>
      <li>
        <span aria-hidden="true">01</span>
        <h3>Run Vitalog</h3>

        <p>
          Start PostgreSQL, the API and the web app with Docker Compose or
          deploy them with Towbar.
        </p>
      </li>

      <li>
        <span aria-hidden="true">02</span>
        <h3>Connect a client</h3>

        <p>
          Approve an MCP OAuth connection or create a named API key with
          explicit permissions and expiry.
        </p>
      </li>

      <li>
        <span aria-hidden="true">03</span>
        <h3>Record and review</h3>

        <p>
          Log supplied observations, add goals you choose and open Daily View to
          see the results.
        </p>
      </li>
    </ol>

    <InlineLink href="/quickstart">Follow the quickstart →</InlineLink>
  </Process>

  <SplitSection id="records-heading">
    <SectionIntro>
      <Eyebrow>Record integrity</Eyebrow>
      <h2 id="records-heading">Keep the context behind each value.</h2>

      <p>
        A health record is more than a number. Vitalog preserves what was
        supplied and how it changed.
      </p>
    </SectionIntro>

    <Points>
      <div>
        <h3>Sources and corrections</h3>

        <p>
          Keep provenance and immutable revisions. Correct or void a record
          without silently overwriting its history.
        </p>
      </div>

      <div>
        <h3>Measurements stay explicit</h3>

        <p>
          Missing values remain unknown in the API. Goals come from values you
          set, rather than inferred targets.
        </p>
      </div>

      <div>
        <h3>Files you can reuse</h3>

        <p>
          Upload an image or PDF once and link it to multiple records. Private
          signed URLs keep files separate from JSON requests.
        </p>
      </div>
    </Points>
  </SplitSection>

  <Actions>
    <ActionLink href="/quickstart">Set up your ledger →</ActionLink>

    <ActionLink href="/concepts" variant="secondary">
      Understand the data model →
    </ActionLink>
  </Actions>
</Home>


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