# Project export: Yammy Diet

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: OpenAI Build Week
- Tagline: Food pairs for a healthier diet! Yammy Diet is a mobile-first meal companion app.
- Devpost: https://devpost.com/software/yammy-diet
- GitHub: https://github.com/YammyCookie/yammy-diet
- Demo: https://yammy-diet-hackathon.vercel.app/
- Video: https://www.youtube.com/embed/kad-yckW69I?enablejsapi=1&hl=en_US&rel=0&start=&version=3&wmode=transparent
- Team: 1 GitHub contributor(s) — YammyCookie (4 commits)

## Devpost submission (written by the team)

### Inspiration

When people are asked about what to eat to be healthy, the answer has become almost always the same- more protein, more fibre, less carbs , sugar and calories. Whilst it's great that people have become more aware of macronutrients, there is a huge lack of appreciation for all the micronutrients and their dependence on each other for added absorption and better health. We wanted to be the first app that doesn't put the main focus on macronutrients in a vacuum and focuses on what foods you can actually eat together to improve your health and educate people that there is an importance and need for real food pairings that go beyond a list of nutrients and numbers on the back of the ingredients. This information is well-documented and known by scientists and nutritionists but is not taught nor emphasised for the average person.

### What it does

The app gives you suggestions based on what foods you plan to eat or have on hand for what you can add to it to achieve a harmonious food pairing for better nutrient absorption and added health benefits. It provides a great way to construct healthy meals whilst understanding the purpose of combining different types of food together.

### How we built it

We built this app by first brainstorming ideas of what challenges we faced on a daily basis that we had to overcome but wanted to help others overcome more easily. Once we landed on the idea, we gave the idea into codex and iterated it continuously to construct the interface we wanted and provide the features we wanted.

### Challenges we ran into

At first we didn't have any suggestions for food options which would make the experience harder for a new user. We added suggestions for food pairings to provide some quick suggestions and help people understand how to use this app.

### Accomplishments we're proud of

We're proud of putting together an idea we think is very important and being able to bring it to reality as a team.

### What we learned

We learned that as long as you have a good idea you have the ability to build it out and that it takes a constant process of new ideas and improvement when you are developing something.

### What's next

Add more food options, improve the interface, give more explanations for the science behind food pairings and make that more prominent in suggestions.

## README (from the GitHub repository)

# Yammy Diet — Tandem Plate MVP

**Make food work better together.**

**Live demo:** [https://yammy-diet-hackathon.vercel.app](https://yammy-diet-hackathon.vercel.app)

Yammy Diet is a mobile-first, local-only meal companion. A user describes a meal, confirms locally recognised ingredients, and receives a small number of deterministic, evidence-cited food-pairing suggestions. The product avoids calorie scoring, medical interpretation, and runtime AI.

This repository makes no trademark, availability, registration, or clearance claim.

## Hackathon snapshot

| | |
| --- | --- |
| **Experience** | Mobile-first meal builder, pairing recommendations, meal history, and weekly review |
| **Runtime** | Runs entirely in the browser; no backend, account, API key, or environment variables |
| **Data** | Stored locally in the current browser using IndexedDB; each judge starts with a fresh profile |
| **Recommendation model** | Deterministic, versioned rules with visible evidence grades and safety exclusions |
| **Current status** | Hackathon MVP for adult general-wellbeing education; not a clinical product |

### Two-minute judge walkthrough

1. Select **Set up my companion**, confirm that you are 18+, and complete the short preference setup.
2. In **Pair**, enter `Lentil curry and rice` and select **Recognise foods**.
3. Confirm the recognised lentils and white rice, then select **Find a pairing**.
4. Open **Evidence and rule details** on the vitamin C suggestion, then select **Add this**.
5. Select **Mark eaten**, open **Week**, and see the pairing reflected in the local weekly summary.
6. Open **You** to inspect local-only privacy controls, export/import, and permanent deletion.

## Intended purpose

> “Tandem Plate provides general educational food-pairing suggestions for adults seeking to improve everyday meal variety and nutrient utilisation. It estimates nutrition coverage only from sufficiently complete food logs. It cannot determine how much of a nutrient an individual absorbs, diagnose a deficiency, interpret laboratory results, recommend supplements or diagnose, monitor, manage or treat disease.”

This v1 build is for adults aged 18+ seeking general wellbeing. It is not intended for diagnosis, treatment, supplement advice, medication changes, laboratory interpretation, pregnancy/child nutrition, or condition management.

## Run locally

Prerequisites:

- Node.js `>=22.12.0` (Node.js 24 LTS recommended)
- npm, which is included with Node.js

No account, API key, `.env` file, database server, or external service is required.

### Windows PowerShell

Use the `.cmd` form so the commands also work when PowerShell script execution is restricted:

```powershell
npm.cmd ci
npm.cmd run dev
```

### macOS, Linux, or Windows Command Prompt

```sh
npm ci
npm run dev
```

Keep that terminal window open and visit exactly [http://127.0.0.1:4173/](http://127.0.0.1:4173/). Press `Ctrl+C` in the terminal to stop the app. After the first install, subsequent launches only need the `run dev` command.

### If the page appears blank

1. Confirm the terminal still says `VITE ... ready` and open exactly `http://127.0.0.1:4173/`.
2. Hard-refresh with `Ctrl+Shift+R`, or try a private/incognito browser window.
3. If this address previously served an older build, clear site data for `127.0.0.1` so an old service worker cannot serve cached files.

## Deploy a public demo while keeping the code private

The simplest submission setup is a **private personal GitHub repository connected to Vercel**. The source repository remains private, while Vercel provides a public `*.vercel.app` demo URL. Each push to the repository's production branch can redeploy the demo automatically.

In Vercel, import the GitHub repository with these settings:

| Setting | Value |
| --- | --- |
| Framework | Vite |
| Root directory | `./` |
| Build command | `npm run build` |
| Output directory | `dist` |
| Environment variables | None |

After deployment, test the production URL in a private/incognito window before sharing it. The compiled browser assets are naturally visible to visitors even though the source repository is private.

## Production build

Build and preview the production bundle:

```sh
npm run build
npm run preview
```

The preview uses the same local address. The static service worker/PWA shell is intended to keep the app usable offline after a successful first load. Offline behaviour is origin- and browser-dependent; clear site data when testing a fresh install.

## Validation commands

```sh
npm run test
npm run typecheck
npm run build
```

For the mobile and desktop Playwright flows, install Chromium once and then run:

```sh
npx playwright install chromium
npm run test:e2e
```

| Command | Purpose |
| --- | --- |
| `npm run dev` | Run Vite on `127.0.0.1:4173`. |
| `npm run test` | Run the Vitest unit/component suite once. |
| `npm run test:watch` | Run Vitest interactively. |
| `npm run typecheck` | Check the TypeScript project without emitting app files. |
| `npm run build` | Type-check and create the production bundle. |
| `npm run preview` | Serve the production bundle locally. |
| `npm run test:e2e` | Run mobile and desktop Chromium end-to-end/accessibility coverage. |

## Architecture

- **React, TypeScript, and Vite** provide the responsive single-page interface.
- **Pure TypeScript domain modules** own schemas, local food recognition, reviewed pairing rules, safety decisions, stable ranking, and weekly recomputation. They do not depend on React.
- **Versioned local data** contains the qualitative food catalogue, evidence records, approved rule templates, and disabled reference-value layer. There is no runtime food API or nutrition-generating language model.
- **Dexie/IndexedDB** stores preferences, meals, recommendation feedback, day completion, and any future explicitly selected reference profile through explicit schema migrations.
- **Zod** validates domain records, database boundaries, and complete JSON imports/exports.
- **Feature modules** cover onboarding, Pair/meal building and history, recommendation cards, Week, and You/settings.
- **Custom CSS variables, local SVG/CSS shapes, and accessible primitives** create the ingredient-tandem visual system without a generic UI framework.
- **Vitest, Testing Library, Playwright, and axe** cover the domain, interaction, end-to-end, responsive, and accessibility boundaries.
- **A static service worker and web manifest** provide a small PWA shell without a backend.

The app follows this dependency direction:

```text
React features → pure domain services → versioned local data
       │                  │
       └──── local repository / schema-validated import-export
                              │
                        Dexie / IndexedDB
```

See [the product specification](./docs/PRODUCT_SPEC.md) for the user journey, data model, recommendation pipeline, weekly gates, safety controls, and validation plan.

## Evidence governance

Rules fail closed. A recommendation can appear only when its rule is active, uses supported evidence, has approved narrow copy, records an honest MVP evidence/content review and date, passes exclusions, and remains compatible with the user’s confirmed foods and preferences.

- **A:** explicit authoritative guidance or a strong applicable synthesis, followed by MVP content review.
- **B:** replicated human evidence with narrow wording, visible uncertainty, and MVP content review.
- **C:** preliminary, indirect, mechanistic, observational, or otherwise insufficient evidence; disabled by default.

Every recommendation exposes its type, action, meal trigger, concise mechanism, caveat, evidence strength and source, rule version, content-review date, compatibility, and feedback controls. It does not display a predicted absorption percentage. Missing, weakened, or unreviewed evidence moves a rule to `needs-review` or `disabled`; it does not trigger fallback health copy.

Full rule decisions, citations, activati

[README truncated for size]

## Detected evidence (automated analysis)

Indexed codebase: 67 recognized source files, 344 KB.
- CSS (language) — detected in the code
- HTML (language) — detected in the code
- JavaScript (language) — detected in the code
- React (technology) — detected in the code
- TypeScript (language) — detected in the code

## Codebase structure (from repository index)

### Files (75 of 75)

```
.gitattributes
.github/workflows/ci.yml
.gitignore
.nvmrc
docs/DATA_PROVENANCE.md
docs/EVIDENCE_POLICY.md
docs/PRODUCT_SPEC.md
e2e/app.spec.ts
index.html
package.json
playwright.config.ts
public/manifest.webmanifest
public/sw.js
README.md
scripts/nutrient-data-ingestion/README.md
src/App.tsx
src/app/useAppStore.ts
src/config/featureFlags.ts
src/data/evidence/index.ts
src/data/evidence/library.ts
src/data/foods/catalogue.ts
src/data/foods/index.ts
src/data/rules/index.ts
src/data/rules/library.ts
src/domain/models/app-data-export.ts
src/domain/models/common.ts
src/domain/models/evidence.ts
src/domain/models/feedback.ts
src/domain/models/food.ts
src/domain/models/index.ts
src/domain/models/meal.ts
src/domain/models/models.test.ts
src/domain/models/pairing-rule.ts
src/domain/models/preferences.ts
src/domain/models/weekly.ts
src/domain/pairing-engine/engine.test.ts
src/domain/pairing-engine/engine.ts
src/domain/pairing-engine/index.ts
src/domain/pairing-engine/recognizer.test.ts
src/domain/pairing-engine/recognizer.ts
src/domain/safety/boundary-classifier.test.ts
src/domain/safety/boundary-classifier.ts
src/domain/safety/index.ts
src/domain/weekly-insights/index.ts
src/domain/weekly-insights/weekly-insights.test.ts
src/features/meal-builder/IngredientEditor.tsx
src/features/meal-builder/PairScreen.test.tsx
src/features/meal-builder/PairScreen.tsx
src/features/meal-history/MealHistory.tsx
src/features/onboarding/Onboarding.test.tsx
src/features/onboarding/Onboarding.tsx
src/features/recommendations/RecommendationCard.tsx
src/features/settings/YouScreen.tsx
src/features/weekly-review/WeekScreen.tsx
src/main.tsx
src/storage/database/database.ts
src/storage/database/index.ts
src/storage/database/migration.test.ts
src/storage/database/repository.ts
src/storage/import-export/import-export.test.ts
src/storage/import-export/index.ts
src/storage/import-export/security.test.ts
src/storage/import-export/security.ts
src/storage/index.ts
src/test/accessibility.test.tsx
src/test/setup.ts
src/ui/components/BrandMark.tsx
src/ui/components/Button.tsx
src/ui/components/Dialog.tsx
src/ui/icons/Icons.tsx
src/ui/styles.css
tsconfig.app.json
tsconfig.json
tsconfig.node.json
vite.config.ts
```

### Dependencies

- package.json: @axe-core/playwright@^4.12.1, @playwright/test@^1.61.1, @testing-library/jest-dom@^6.9.1, @testing-library/react@^16.3.2, @types/node@^26.1.1, @types/react@^19.2.17, @types/react-dom@^19.2.3, @vitejs/plugin-react@^6.0.3, @vitest/coverage-v8@^4.1.10, axe-core@^4.12.1, dexie@^4.4.4, fake-indexeddb@^6.2.5, jsdom@^29.1.1, react@^19.2.7, react-dom@^19.2.7, typescript@^7.0.2, vite@^8.1.5, vitest@^4.1.10, zod@^4.4.3

### Recent commits (newest first)

- Update README.md
- Add live demo link
- Update GitHub Actions runtime
- Initial hackathon submission

## Key source files (fetched from GitHub, selected and truncated for size)

### docs/PRODUCT_SPEC.md

```markdown
# Tandem Plate / Yammy Diet MVP product specification

**Status:** v1 local-first MVP  
**Audience:** adults aged 18+ seeking general wellbeing  
**Working name:** Yammy Diet  
**Tagline:** Make food work better together.

The working name is provisional. This specification makes no claim about trademark registration, availability, or clearance.

## Intended purpose

> “Tandem Plate provides general educational food-pairing suggestions for adults seeking to improve everyday meal variety and nutrient utilisation. It estimates nutrition coverage only from sufficiently complete food logs. It cannot determine how much of a nutrient an individual absorbs, diagnose a deficiency, interpret laboratory results, recommend supplements or diagnose, monitor, manage or treat disease.”

## Product intent and boundaries

The product is a helpful meal companion: a user describes a planned meal, confirms the recognised ingredients, and receives at most one prominent practical pairing suggestion plus two alternatives. The v1 experience is qualitative and food-first. It is not a calorie tracker, health score, medical dashboard, generic chatbot, or condition-management tool.

V1 has no account, backend, telemetry, advertising, social feature, or runtime AI dependency. It does not collect conditions, medicines, laboratory results, or symptoms. It does not recommend supplements, doses, medication changes, weight-loss targets, detox products, disease-treatment diets, or claims of guaranteed absorption or disease benefit.

## User journey

1. **Onboard:** read the promise and non-medical boundary; confirm age 18+; set dietary pattern, allergies/intolerances, dislikes, never-recommend foods, effort level, and logging preference. Allergies remain separate hard exclusions and every setting is revisable.
2. **Describe:** land directly on **Pair** and answer “What are you thinking of eating?” in ordinary language.
3. **Confirm:** local deterministic recognition converts supported foods into editable ingredient chips. Uncertain and ambiguous candidates are visibly marked and require confirmation; unknown foods remain unsupported rather than being guessed.
4. **Pair:** confirmed foods enter the reviewed, deterministic rules engine. The result is one primary recommendation and up to two safe alternatives, or the explicit no-match state: “We do not have a high-confidence absorption pairing for this meal yet.”
5. **Act and respond:** choose **Add this**, **Show another**, **I do not have it**, or **Not for me**. Accepted and rejected suggestions are retained locally to improve deterministic variety without inventing new rules.
6. **Log:** save the meal as planned or eaten. Complete-diary users may add portions and mark days complete; pairing-only users are not pressed to quantify food.
7. **Review:** **Week** shows pairing habits, missed opportunities, food-source variety, data coverage, and up to three practical next actions. **You** contains revisable preferences, evidence/priva
[truncated — 13719 more characters]
```

### docs/DATA_PROVENANCE.md

```markdown
# Food-data provenance and ingestion plan

**Product:** Tandem Plate (working product name: Yammy Diet)  
**Status date:** 17 July 2026  
**Current quantitative-data status:** no official nutrient-data snapshot or reference-target dataset has been ingested into this MVP. Quantitative weekly nutrition coverage must remain disabled.

## 1. Current data boundary

The app can safely ship a qualitative food catalogue for local meal recognition and reviewed pairing rules. Names, aliases, food groups, dietary tags and rule tags are not nutrient measurements.

At the date of this review:

| Data layer | Current status | Permitted use |
| --- | --- | --- |
| App-curated food names, aliases and pairing tags | Qualitative catalogue may be bundled and versioned locally. | Ingredient recognition, editable chips, allergy/dietary filtering and qualitative pairing triggers. |
| Official nutrient values per 100 g | **Not ingested and not pinned to source records.** | No user-facing calculation. Values must be `null`, absent under a clearly validated optional field, or otherwise explicitly marked unavailable. |
| Common portion weights | Not established from an approved source. | Users may enter grams; the app must not invent a weight from a meal name. |
| Versioned reference targets | **Not ingested.** | No comparison with an RNI, AI or other reference. |
| Synthetic test fixtures | Allowed only in automated tests and clearly labelled synthetic. | Test calculation and missing-data behaviour only; never bundled as real food data or shown to users. |

This boundary is deliberate. A useful ingredient-recognition catalogue is not sufficient evidence for an intake estimate.

## 2. Why quantitative weekly coverage is disabled

A quantitative weekly estimate needs all of the following:

1. confirmed food identities tied to official source record IDs;
2. source-versioned nutrient values in known units and on a known per-weight basis;
3. portions for the logged foods;
4. explicit handling of missing, trace, estimated and calculated values;
5. a separately versioned, cited reference profile selected by the user; and
6. enough complete logging to make the result interpretable.

None of the first, second or fifth prerequisites has been completed for this build. Showing numbers now would require fabricated values, unlabeled substitutions or unsupported reference targets. It would also make missing nutrients look like zero if handled naively.

Therefore the quantitative feature flag must stay off and the interface must use:

> Not enough complete data for a weekly nutrition estimate.

Pairing-only weekly insights may still count observed habits, for example how often a recognised vitamin C source appeared with a plant-iron food. Those are event counts, not nutrient-intake, absorption or deficiency estimates.

## 3. Candidate official food-data sources

### 3.1 Preferred UK source: CoFID 2021

The official GOV.UK publication page provides Public Health England’s **McCance and W
[truncated — 15507 more characters]
```

### package.json

```
{
  "name": "yammy-diet",
  "description": "A local-first, evidence-governed food-pairing companion for adults.",
  "private": true,
  "version": "0.1.0",
  "type": "module",
  "engines": {
    "node": ">=22.12.0"
  },
  "scripts": {
    "dev": "vite",
    "build": "tsc -b && vite build",
    "preview": "vite preview",
    "typecheck": "tsc -b --pretty false",
    "test": "vitest run",
    "test:watch": "vitest",
    "test:e2e": "playwright test"
  },
  "dependencies": {
    "dexie": "^4.4.4",
    "react": "^19.2.7",
    "react-dom": "^19.2.7",
    "zod": "^4.4.3"
  },
  "devDependencies": {
    "@axe-core/playwright": "^4.12.1",
    "@playwright/test": "^1.61.1",
    "@testing-library/jest-dom": "^6.9.1",
    "@testing-library/react": "^16.3.2",
    "@types/node": "^26.1.1",
    "@types/react": "^19.2.17",
    "@types/react-dom": "^19.2.3",
    "@vitejs/plugin-react": "^6.0.3",
    "@vitest/coverage-v8": "^4.1.10",
    "axe-core": "^4.12.1",
    "fake-indexeddb": "^6.2.5",
    "jsdom": "^29.1.1",
    "typescript": "^7.0.2",
    "vite": "^8.1.5",
    "vitest": "^4.1.10"
  }
}

```

### src/main.tsx

```typescript
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import App from "./App";

createRoot(document.getElementById("root")!).render(
  <StrictMode>
    <App />
  </StrictMode>,
);

if (import.meta.env.PROD && "serviceWorker" in navigator) {
  window.addEventListener("load", () => {
    navigator.serviceWorker.register("/sw.js").catch(() => {
      // Offline support is progressive enhancement; the app remains local-first via IndexedDB.
    });
  });
}

```

### src/App.tsx

```typescript
import { useEffect, useState } from "react";
import { useAppStore } from "./app/useAppStore";
import type { UserPreferences } from "./domain/models";
import { Onboarding, APP_DISCLAIMER } from "./features/onboarding/Onboarding";
import { PairScreen } from "./features/meal-builder/PairScreen";
import { WeekScreen } from "./features/weekly-review/WeekScreen";
import { YouScreen } from "./features/settings/YouScreen";
import { BrandMark } from "./ui/components/BrandMark";
import { PairIcon, WeekIcon, YouIcon } from "./ui/icons/Icons";

type Destination = "pair" | "week" | "you";

const NAV_ITEMS: Array<{ id: Destination; label: string; icon: React.ReactNode }> = [
  { id: "pair", label: "Pair", icon: <PairIcon /> },
  { id: "week", label: "Week", icon: <WeekIcon /> },
  { id: "you", label: "You", icon: <YouIcon /> },
];

export default function App() {
  const store = useAppStore();
  const [active, setActive] = useState<Destination>("pair");
  const [editingPreferences, setEditingPreferences] = useState(false);
  const [toast, setToast] = useState<string | null>(null);

  useEffect(() => {
    if (!toast) return;
    const timeout = window.setTimeout(() => setToast(null), 4_000);
    return () => window.clearTimeout(timeout);
  }, [toast]);

  const saveOnboarding = async (preferences: UserPreferences) => {
    await store.savePreferences(preferences);
    setEditingPreferences(false);
    setActive("pair");
    setToast("Preferences saved. Suggestions now use your updated boundaries.");
  };

  if (!store.ready) {
    return (
      <main className="loading-screen" id="main-content" aria-busy="true">
        <BrandMark />
        <p>Opening your local meal companion…</p>
      </main>
    );
  }

  if (!store.preferences || editingPreferences) {
    return (
      <Onboarding
        initialPreferences={store.preferences ?? undefined}
        onComplete={saveOnboarding}
      />
    );
  }

  return (
    <div className="app">
      <aside className="app__header" aria-label="Yammy Diet navigation">
        <div>
          <BrandMark />
          <nav className="app__nav">
            <PrimaryNavigation active={active} onChange={setActive} />
          </nav>
        </div>
        <p className="app__aside-note">{APP_DISCLAIMER}</p>
      </aside>

      <main className="app__main" id="main-content" tabIndex={-1}>
        <div className="mobile-topbar">
          <BrandMark compact />
          <span className="tag tag--ink">Local only</span>
        </div>

        {store.error ? (
          <div className="notice notice--danger space-bottom" role="alert">
            <strong>Local data error:</strong> {store.error}
          </div>
        ) : null}

        {active === "pair" ? (
          <PairScreen
            preferences={store.preferences}
            meals={store.meals}
            feedback={store.feedback}
            onSaveMeal={store.saveMeal}
            onDeleteMeal={store.deleteMeal}
            onSaveFeedback={store.saveFeedback}
            onNotify={setToast}
          />
        ) : null}

        {active === "week" ? (
          <WeekScreen
            preferences={store.preferences}
            meals={store.meals}
            dayCompletions={store.dayCompletions}
            referenceProfile={store.referenceProfile}
            onToggleDay={store.saveDayCompletion}
          />
        ) : null}

        {active === "you" ? (
          <YouScreen
            preferences={store.preferences}
            mealCount={store.meals.length}
            feedbackCount={store.feedback.length}
            onEditPreferences={() => setEditingPreferences(true)}
            onExport={store.exportData}
            onImport={store.importData}
            onDeleteAll={store.clearAll}
            onNotify={setToast}
          />
        ) : null}
      </main>

      <nav className="mobile-navigation" aria-label="Primary navigation">
        <PrimaryNavigation active={active} onChange={setActive} />
      </nav>

      {toast ? (
        <div className="toast" role="status">
          <span>{toast}</span>
          <button type="button" onClick={() => setToast(null)} aria-label="Dismiss message">Close</button>
        </div>
      ) : null}
    </div>
  );
}

function PrimaryNavigation({ active, onChange }: { active: Destination; onChange: (destination: Destination) => void }) {
  return (
    <div className="bottom-nav">
      {NAV_ITEMS.map((item) => (
        <button
          className="bottom-nav__item"
          type="button"
          key={item.id}
          aria-current={active === item.id ? "page" : undefined}
          onClick={() => {
            onChange(item.id);
            requestAnimationFrame(() => document.getElementById("main-content")?.focus());
          }}
        >
          {item.icon}
          <span>{item.label}</span>
        </button>
      ))}
    </div>
  );
}

```

### src/storage/index.ts

```typescript
export * from "./database";
export * from "./import-export";

```

### src/data/rules/index.ts

```typescript
export * from "./library";

```

### src/data/evidence/index.ts

```typescript
export * from "./library";


```

### src/data/foods/index.ts

```typescript
export * from "./catalogue";

```

### src/domain/safety/index.ts

```typescript
export * from "./boundary-classifier";

```

[56 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]