The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Harris Boat Works Mercury Repower listing page.
Mercury Repower is Harris Boat Works' public Mercury outboard catalogue and quote builder.
harrisboatworks/mercury-builder-pro on main is the authoritative source.Use Node 22, as declared in engines.node.
The Vite development server runs on http://localhost:8080.
For a normal small frontend change, run:
This runs frontend and Vite-config TypeScript checking followed by the unit suite. Both npm test and verify:small deliberately exclude financing-submission-permissions.test.ts, because that credential-gated integration test writes a financing log row and is not safe routine validation. Only the dedicated test:integration:financing runner supplies its ephemeral write opt-in; do not persist that internal marker in an environment file.
Server changes require an additional scoped check:
The Edge command fails when no entry point is supplied, rejects paths outside supabase/functions, pins Deno 2.9.5, accepts multiple changed TypeScript paths, disables local node_modules materialization, and checks the dedicated tracked supabase/functions/deno.lock in frozen mode. A dependency change therefore fails until its reviewed lockfile update is committed. Pair each scoped checker with the relevant focused tests. Running npm run test:integration:financing is itself the per-run write opt-in and requires separate authorization, an approved target, and both test credentials in the invoking environment or ignored .env.local; the runner loads that local file before its credential preflight and fails before Vitest if either value is absent. It is never implied by npm test or verify:small.
To run one unit test file directly:
npm run build is the full release/content pipeline, not the routine small-change check. Its lifecycle regenerates and validates many content artifacts, fetches live Google Places data, and runs scripts/indexnow-ping.mjs in postbuild. Treat it as release-adjacent external work and require the same authorization as a production trigger.
Do not hand-edit files marked as generated. Change the owning source or generator, run the relevant generate:*, rewrite:agent-urls, or other named generator script from package.json, and review the resulting diff before committing it.
.env is public-only..env.local; *.local is already ignored.Inventory is synced directly from Lightspeed DMS (the mercury_motor_inventory view). The public quote builder must not invoke sync-lightspeed-inventory.
For a manual sync, use the authenticated admin Stock Sync or inventory dashboard. Never put an internal secret in frontend code or paste a service-role key into a local curl.
Nightly Lightspeed sync remains a server-side scheduler concern. Changing Edge Function auth or cron is a separate production configuration change.
Inventory sync is production-adjacent. Do not document service-role keys, bearer tokens, customer-private data, or copy-and-paste production requests in this repository. Any manual production trigger or write requires explicit authorization and must use approved stored-secret tooling.