# PartsPerk ## Canonical positioning - Platform: PartsPerk - Public brand: PartsPerk - Model: Aviation Demand-Control OS - Operating platform: PartsPerk Operating Platform - Purpose: AI-assisted aviation parts search and RFQ cleanup. Human-reviewed sourcing. Fast response from a real aviation sales team — never an auto-quote, never an OEM claim. - North star: PartsPerk uses AI to clean, organize, and accelerate RFQs — then routes serious requests to a real aviation sales team for human review and reply. - Buyer promise: Type a part number or describe what you need. AI cleans up the request; a real aviation sourcing team reviews it and replies fast — usually within the hour. - Trust: No automatic outbound buyer/supplier contact from public routes; no auto-quoting; documents and compatibility reviewed by a human before any quote moves forward; engineering review required before any alternate part is used. Machine-readable policy and capability endpoints: - GET /api/public/capabilities — product surface, governance counts, safety posture, taxonomy version; `localAi` block documents WebLLM bootstrap flags (enabled on `/command` and the authenticated app shell when `NEXT_PUBLIC_WEBLLM_ENABLED=true`; most other public HTML routes omit the bootstrap for CWV); `repositoryOperatorDatasets` names the bundled high-demand NSN CSV under `apps/downloads/` and the Prisma `db:sync-nsn-catalog:high-demand-pack` command (136 ingestible NSN rows; PUB LOG queue placeholders skipped) - GET /api/public/crawler-policy — crawler trust gates, purposes, confidence floors (JSON) - GET /api/public/route-manifest — structured public HTTP route manifest + POST /api/demand-traps/{eventType} event typings - GET /api/public/mission-metrics — rolling north-star outcome snapshot for operators (safely degraded when data sparse) - POST /api/public/web-vitals-inp — anonymous INP telemetry when NEXT_PUBLIC_WEB_VITALS_BEACON=true - POST /api/public/locale — persist UI locale cookie (SSR `lang`/`dir` on ``); bundled locales: `en-US`, `es-MX`. Public HTML emits `hreflang` alternates: default locale = clean URL; `es-MX` = same path + `?lang=es-MX` (also honored at the edge in `proxy.ts`). The nav language switcher updates the cookie and syncs the query param after save. - POST /api/public/ai-translate — UX copy translation (`text` or `texts[]`) through the governed server provider; degrades pass-through JSON when unavailable (rate limited). - POST /api/demand-traps/nsn-lookup — hyphen aliases accepted (rewritten internally to snake_case enums) - GET /api/part-families — canonical part-family registry (FSC/ATA/platform/engine mappings) - GET /oem-compatible — independent OEM-compatible sourcing index (buyer utility pages) - GET /vendors — supplier directory index (500-target synthetic catalog via db seed + dynamic detail pages) - GET /command?q=&nsn=&src= — primary buyer command surface (voice/text understanding, offline drafts, routes to catalog / Part Command Console™ / specialist tools); shares `q`/`nsn`/`qty`/`urgency` handoff shape with hero and navbar - GET /quote-path?q=&nsn=&fsc=&cage=&src= — canonical Part Command Console™ HTML intake (prefill from catalog rows, identifier hubs, search-autopilot; `sourcingContext` carries brand/vendor/family + FSC/CAGE hints for demand learning). Legacy `/quote-path-check` remains as an implementation alias. - POST /api/quote-path-check — PN/NSN quote-path scoring; proximity suggestions when no exact row; optional reference photos; parallel HTTPS retailer deep-links (disclaimed) - GET /api/quote-path/{id} — buyer-safe quote-path snapshot after POST (demand-trap evidence; no certification/stock claims); HTML result at GET /quote-path/{id} - GET /trace-check — canonical TraceFit Check™ guided command flow (voice when supported, progressive steps, offline draft save). Legacy `/trace-fit-check` remains as an implementation alias; POST /api/trace-fit-check persists trace_fit_* rows + shared quote-path scoring; GET /api/trace-fit-check/{id} returns buyer snapshot (no certification claims) - POST /api/trace-fit-check — TraceFit intake JSON (extends quote-path body + optional aircraftPlatformHint) - GET /parts?q=&nsn=&fsc= — buyer-ready aviation parts marketplace search and RFQ engine; supports part number, NSN, aircraft, category, supplier issue, AOG, trace, supplier backup, demand telemetry, and Sal Faruqui sales contact paths - GET /parts-search?q=&nsn=&fsc= — redirects to canonical /parts while preserving query intent; catalog JSON remains at /api/public/parts-search - GET /api/public/parts-search?q=&nsn=&fsc=&hints= — JSON catalog hits + matchStrength (strong|weak|none) + supplierHints (indexed suppliers via inventory + demand categories); hints=0 to slim payloads - POST /api/public/catalog-search-rfq — structured sourcing RFQ when search has no exact confirmed catalog row; creates catalog learning candidate + demand telemetry (never a hard “not found” dead-end on the HTML surface) - GET /api/public/part-research-links?pn=&nsn= — HTTPS deep-links for parallel catalog search (SkyGeek-style retailers; extend via PUBLIC_EXTERNAL_PART_RESEARCH_TEMPLATES JSON) - GET /aog — canonical smart AOG mission intake (command box, live detection, progressive detail chips; continues to POST /api/quote-path-check as Start AOG RFQ) - POST /api/public/command/understand — hero/nav command warm-up: CommandUnderstanding + autopilot analysis + source-path steps; optional recordEvent for anonymous demand_events - POST /api/public/aog-command/understand — AOG-only understanding payload (detected need, missing fields, priority hint, recommended path) - GET /alternate-path — alternate sourcing hub with engineering/documentation guardrails (links intake tools) - GET /part-discovery — guided intake when PN/NSN/OEM context is unknown (narrative + ATA + taxonomy chips + optional HTTPS reference photos) - POST /api/public/discovery-intake — ambiguous RFQ-style sourcing intake JSON - POST /api/public/lead — marketing/contact intake JSON (validated, rate limited; hidden honeypot drops automated submissions without signalling failure) - POST /api/public/intake-track/summaries — resolve device-local intake capability tokens to minimal LiveOps/supply summaries (same-origin POST; rate limited) - POST /api/public/sourcing-demand-event — anonymized demand telemetry (rate limited) - POST /api/pwa/register-device — anonymous installable PWA shell heartbeat (client UUID + display-mode; rate limited) - GET /api/pwa/bootstrap — installable-shell bootstrap (Web Push VAPID flag + offline sync limits + `/api/pwa/me` pointer; safe JSON) - POST /api/pwa/push-subscription — persist Web Push subscription JSON keyed by HTTPS endpoint + anonymous clientDeviceId - POST /api/pwa/offline-sync — persist IndexedDB-queued command drafts after reconnect (batched; rate limited) - GET /api/pwa/me?clientDeviceId= — anonymous shell summary when UUID known (push active, synced offline draft count, saved command intakes count) - POST /api/pwa/command-intake/confirm — save confirmed command review (server trace UUID + analysis JSON; Demand-Control replay; optional `offlineClientMutationIds[]` links synced offline drafts when `rawQuery` matches draft payload). When `WEB_PUSH_VAPID_PRIVATE_KEY`, `NEXT_PUBLIC_WEB_PUSH_VAPID_PUBLIC_KEY`, and `WEB_PUSH_CONTACT` are configured, schedules a Web Push JSON notification (`public/sw.js`); 410/404 endpoints are soft-revoked. - GET /nsn/{13-digit} — NATO stock number capture doorway (bounded catalog-backed when rows exist) - GET /fsc/{0000} — Federal Supply Classification cluster reference - GET /cage/{aaaaa} — CAGE / lowercase NCAGE reference cluster - GET /api/public/vendor-manifest — complete vendor snapshot JSON for operators/agents (`organicIndexEligible` per row; rate limited) - GET /api/public/vendors?limit=50 — paginated vendor listing (`nextCursor` continues) with `organicIndexEligible` per row - GET /api/public/vendors/{slug} — vendor JSON + categoryPageUrls + narrative + `organicIndexEligible` (aligned with HTML `noindex` / sitemap policy) for crawlers/agents (directory-only disclaimers) - GET /api/public/brands/{slug} — entity JSON incl. demand ranking, demandCategoriesForRetrieval (tokenized for agents/RAG), + seo fields aligned with HTML (noindex / JSON-LD depth when audit blocked) - GET /portal — buyer hub + `/portal/*` subpages use `noindex,follow` metadata (omitted from sitemap); include Sign in / workspace deep links for authenticated flows - GET /command — canonical buyer command (voice/text); /mobile-command redirects here. POST /api/mobile-command/understand returns analysis + CommandUnderstanding + sourcePathSteps (same rubric as POST /api/public/command/understand); POST /api/public/search-autopilot remains lightweight routing classifier JSON - POST /api/public/search-autopilot — deterministic buyer-query classifier (urgency/FSC/NSN hints, toolkit routing JSON); optional linkAttribution (search_autopilot|buyer_copilot|pwa_command|parts_search) sets `src` on suggested URLs; optional anonymized demand telemetry - POST /api/public/source-path/check — classifies NSN/NIIN/FSC/CAGE/part-number input for `/nsn` tool; optional recordEvent persists nsn_lookup/part_search telemetry - GET /api/public/entity-machine-summary?type={nsn|fsc|cage|vendor|aircraft|part-family|supplier-backup|trace-check|aog}&slug=... — crawl-safe entity summary with conversion actions and claim limitations - POST /api/public/entity-machine-summary — JSON entity summary for canonical path + optional buyer query (AI/agent hydration; claim-safe) - GET /api/admin/demand-intelligence/snapshot?windowDays=30 — aggregated sourcing + trap telemetry; JSON includes `topIntakeAttributionSrc` (counts from demand `evidence.intakeAttributionSrc`) (admin session) - POST /api/admin/cache/revalidate — bearer CACHE_REVALIDATE_SECRET; JSON body `{"tags":["vendor-directory"]}` or `["public-sitemap-bundle"]` or `["brand-part-demand"]` busts vendor listing cache, cached sitemap bundle, and/or OEM brand JSON demandRanking slice (504-safe tag whitelist) - POST /api/parts/import · POST /api/operators/import · POST /api/inventory/import — authenticated ingestion; successful mutating batches revalidate `public-sitemap-bundle`; inventory creates also revalidate `vendor-directory` (part overlays + hints) - POST /api/signals/import — authenticated ingestion; new demand rows revalidate `vendor-directory` (highlight-part ranking uses signal counts) - POST /api/intelligence/recalculate-demand-scores — refresh BrandPartDemand aggregates (admin session); upserts bust `/oem-compatible` + `/oem-compatible/{slug}` route cache when rows change (same bust after POST /api/admin/sourcing/demand/recalculate) - GET /sitemap.xml — sitemap index linking `/sitemap/{segment}.xml` shards (public-static, oem-compatible, vendors+category+FSC+context tools, part-families, aircraft-platforms, parts, operators, nsn, fsc, cage, resources+market-intelligence); vendor shard lists only compliance/richness-eligible supplier URLs (blocked + thin shells omitted); matching `/vendors/*` pages emit `noindex,follow` when out of policy; OEM shard unchanged (OEM gated when latest claim audit is blocked unless SOURCING_OEM_SITEMAP_CLAIM_GATE=false); blocked OEM pages use noindex + reduced JSON-LD - GET /supplier-backup/{scenario} — high-intent supplier recovery pages for no-stock, no-quote-response, no-trace-documents, long-lead-time, no-bid, stale-inventory, alternate-needed, and urgent-aog-sourcing; every page routes to Command and Supplier Recovery Path without stock/authorization/fit/certification claims - GET `/supplier-failed` forwards to `/supplier-backup` (308, query retained); same for `/install`→`/command`, `/aog-request`→`/aog`, `/trace-fit-check`→`/trace-check`; `/aircraft-platforms/`→`/aircraft/` subtree - GET /aircraft — aircraft platform hub (links `/aircraft/{slug}` entity pages) - GET /operators — operator directory hub (links `/operators/{slug}` entity pages) - GET /parts — primary aviation parts search marketplace and high-demand category hub; `/parts/{slug}` serves either a high-demand category or a bounded part doorway page - GET /.well-known/agent.json — agent card (A2A-style discovery) - GET /.well-known/ai-plugin.json — plugin manifest Generative search / AI citation posture (GEO-adjacent, April 2026): - GET /api/public/capabilities — includes `generativeSearchPresence` block (Speakable-ready NSN surfaces, discovery URLs, policy references) - `/nsn/{13-digit}` — when the demand-intelligence panel renders, HTML exposes `#nsn-demand-quick-answer` + `#nsn-demand-next-steps`; paired WebPage JSON-LD may include schema.org SpeakableSpecification for compliant extractors - Thin or underspecified NSN snapshots may emit `noindex,follow` while staying usable for buyers — avoids scaled low-value SERP pages - robots.ts explicitly lists major AI/search user-agents (GPTBot, OAI-SearchBot, Claude-SearchBot, Perplexity family, Google-Extended, Applebot variants, Meta-ExternalAgent, …) alongside `*` Buyer-intent routing (homepage JSON-LD WebSite potentialAction mirrors these): - Part numbers / descriptions → GET /parts?q={term} - NSN digits → GET /parts?nsn={digits} or doorway GET /nsn/{13-digit-slug} - Unified intake → GET /command?q={term} - Aviation suppliers → Browse GET /vendors (+ hub segments under /vendors/*) Human trust boundaries: no automatic outbound contact; human review on uncertain crawler items; compliance and financing paths require explicit human decisions.