{
  "schema": "leumas.docs.page/1",
  "id": "adapter:domain/itinerary-planner",
  "slug": "adapters/domain/itinerary-planner",
  "kind": "capabilities",
  "bucket": "package",
  "title": "itinerary-planner",
  "name": "Itinerary Planner",
  "eyebrow": null,
  "chip": null,
  "summary": "Travel itinerary and trip-planning engine for tour builders, travel apps and concierge bots: heuristic day-by-day itinerary generation plus budget, packing and pacing helpers. build turns a...",
  "keywords": [
    "itinerary-planner",
    "itinerary",
    "trip-planning",
    "concierge",
    "interests",
    "leumas itinerary planner",
    "pace",
    "evening"
  ],
  "audience": "both",
  "funnel": {
    "product": null,
    "cta": null
  },
  "body": "# itinerary-planner\n\nTravel itinerary and trip-planning engine for tour builders, travel apps and concierge bots. Heuristic\nday-by-day itinerary generation plus budget, packing and pacing helpers — packaged as a Leumas\n\"intelligent microservice\" adapter pack.\n\nEvery tool has a deterministic heuristic-template core (embedded interest / climate / budget tables)\nthat works fully **offline** with no model. The generative tools (`build`, `dayPlan`) *optionally*\nenrich their narrative summary with an LLM when one is reachable (via `../_shared/llm.js`) and silently\nfall back to the template otherwise. Results carry `mode: 'heuristic' | 'llm'`.\n\n## Tools\n\n| Tool | Input | Returns |\n|---|---|---|\n| `build` | `{ destination, days, interests, pace?, options? }` | Full day-by-day plan: each day themed to an interest with morning/afternoon/evening time-blocked activities + meal slots and a rest cadence. |\n| `dayPlan` | `{ destination?, interests, options? }` | A single themed, time-blocked day schedule. |\n| `budgetEstimate` | `{ days, style, options? }` | Per-day and total per-person cost by style (shoestring/budget/mid/comfort/luxury) with lodging/food/transport/activities/misc breakdown. |\n| `packingList` | `{ destination?, season?, days?, options? }` | Categorized packing checklist tailored to destination climate, season and trip length. |\n| `paceCheck` | `{ plan, pace?, options? }` | Evaluates whether each day is under/well/over-packed vs the pace and flags days to rebalance. |\n| `mustSeeByInterest` | `{ interests, options? }` | Curated must-do activity archetypes + categories per interest, plus a merged top-picks list. |\n\n## Interests\n\n`history`, `art`, `food`, `nature`, `adventure`, `relaxation`, `nightlife`, `shopping`, `architecture`,\n`family`, and a `general` fallback. Unknown tags fall back to `general` highlights. Interests accept an\narray or a comma-separated string.\n\n## Pace & style\n\n- **pace**: `relaxed` (2 activities/day + downtime) · `moderate` (3) · `packed` (4).\n- **style** (budget): `shoestring` · `budget` · `mid` · `comfort` · `luxury` — per-person USD/day tables.\n\n## Usage\n\n```js\nimport trip from './index.js';\n\ntrip.adapters.build({ destination: 'Kyoto', days: 4, interests: ['history', 'food', 'nature'], pace: 'moderate' });\n// -> { mode:'heuristic', destination:'Kyoto', days:4, plan:[ {day:1, theme:'History & heritage', blocks:[...]}, ... ] }\n\ntrip.adapters.budgetEstimate({ days: 4, style: 'mid' });\n// -> { total:1140, perDayTotal:245, breakdown:{ lodging:{...}, food:{...}, ... } }\n\ntrip.adapters.packingList({ destination: 'Iceland', season: 'winter', days: 6 });\n// -> climate:'cold', categories:{ clothing:[...], climate:['Insulated jacket', ...], ... }\n```\n\nDeterministic: pass `options.seed` to make activity selection reproducible.\n\n## DRY boundary\n\nNew capability — a travel/itinerary planner. It deliberately does **not** overlap:\n- `datetime` / `ical` — generic date math and calendar-file generation (this owns trip scheduling logic).\n- `geo` — distance/geocoding primitives (this uses only light name-keyword climate inference).\n- `finance` / `invoice` — money math (this owns the travel-style cost estimation tables).\n\nSelf-contained: Node built-ins only, zero npm deps. The only cross-pack import is `../_shared/llm.js`\nfor optional narrative enrichment. Cost figures are per-person planning estimates, not live prices.\n",
  "source": {
    "path": "shared/engines/adapters/domain/itinerary-planner/README.md",
    "blobSha": "",
    "commit": "",
    "committedAt": "",
    "provenance": "no-git",
    "bytes": 3632,
    "hash": "1f664f52cd0797dcabc420f463f5b2db06dccfc4"
  },
  "urls": {
    "html": "/p/adapters/domain/itinerary-planner",
    "json": "/docs/adapters/domain/itinerary-planner.json",
    "md": "/docs/adapters/domain/itinerary-planner.md"
  },
  "links": {
    "composes": [],
    "usedBy": [],
    "product": [],
    "howTo": [],
    "skills": []
  }
}
