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

# Tech stack

> Versions and roles of every major dependency.

Everything in `package.json`, grouped by what it does.

## Framework & runtime

| Package               | Version | Role                 |
| --------------------- | ------- | -------------------- |
| `next`                | 16.1.1  | App Router framework |
| `react` / `react-dom` | 19.2.3  | UI                   |
| `typescript`          | 5.9.3   | Type safety          |

## Database

| Package                             | Version | Role                     |
| ----------------------------------- | ------- | ------------------------ |
| `pg`                                | 8.20.0  | Postgres driver          |
| `@google-cloud/cloud-sql-connector` | 1.9.1   | Secure auth to Cloud SQL |
| `@types/pg`                         | 8.18.0  | Type definitions         |

## State & data

| Package                 | Version | Role                       |
| ----------------------- | ------- | -------------------------- |
| `@tanstack/react-query` | 5.90.14 | Client cache (5-min stale) |
| `xlsx`                  | 0.18.5  | Excel parsing              |

## UI primitives

| Package                     | Version | Role                       |
| --------------------------- | ------- | -------------------------- |
| `@radix-ui/react-select`    | 2.2.6   | Dropdowns                  |
| `@radix-ui/react-tabs`      | 1.1.13  | Tabbed pages (methodology) |
| `@radix-ui/react-separator` | 1.1.8   | Dividers                   |
| `@radix-ui/react-slot`      | 1.2.4   | Composition                |
| `lucide-react`              | 0.562.0 | Icons                      |

## Charts & maps

| Package                        | Version       | Role                                                     |
| ------------------------------ | ------------- | -------------------------------------------------------- |
| `recharts`                     | 3.6.0         | CII gauge, distribution, rolling charts, daily timelines |
| `leaflet` + `react-leaflet`    | 1.9.4 / 5.0.0 | Voyage map (fallback)                                    |
| `maplibre-gl` + `react-map-gl` | 4.7.1 / 7.1.7 | Voyage map (primary)                                     |

## Styling

| Package                    | Version       | Role                |
| -------------------------- | ------------- | ------------------- |
| `tailwindcss`              | 4             | Utility classes     |
| `@tailwindcss/postcss`     | 4             | Build integration   |
| `tw-animate-css`           | 1.4.0         | Animation utilities |
| `class-variance-authority` | 0.7.1         | Component variants  |
| `clsx` / `tailwind-merge`  | 2.1.1 / 3.4.0 | Class composition   |

## PDF generation

| Package           | Version | Role                      |
| ----------------- | ------- | ------------------------- |
| `jspdf`           | 4.1.0   | PDF rendering for reports |
| `jspdf-autotable` | 5.0.7   | Tabular data in PDFs      |

## Tooling

| Package                         | Version    | Role                  |
| ------------------------------- | ---------- | --------------------- |
| `eslint` + `eslint-config-next` | 9 / 16.1.1 | Linting (flat config) |
| `@typescript-eslint/*`          | 8.51.0     | TypeScript linting    |

## Notable absences

* **No test framework.** No Jest, Vitest, or Playwright in the repo. Type checking and linting catch most issues.
* **No state library.** No Redux, Zustand, etc. React Query handles all server state; React Context handles year + vessel selection.
* **No CSS-in-JS.** Pure Tailwind.
* **No ORM.** Plain `pg` queries via helper functions in `src/lib/db/postgres.ts`.
