尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證technical Support App for Installers
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗The Heat Merchants technical assistant for heat pump installers, as a web app that works on any phone and can be added to the home screen like an app. It has the same screens as the demo:
A switch at the top keeps the Panasonic J-series Mini Monobloc, J-series T-Cap (9 and 12 kW, WH-MXC09J3E5 / WH-MXC12J6E5), L-series R290 (E51 tank unit, WH-WDG05/07/09LE5 outdoor), K-series and Baxi HP55 separate.
HMG-Installer-Assist > Deploy. No settings to change; Vercel reads vercel.json.ANTHROPIC_API_KEY: the key from step 1. Without it everything works except Ask and "Fill from chat".APP_ACCESS_CODE: a code you give your installers (for example heatpump2026). They type it once on each phone. Strongly recommended: without it anyone who finds the link can use Ask on your bill.DAILY_QUESTION_LIMIT (for example 10, or 0 for no limit).ADMIN_CODE in Vercel (a long password only you know), then Redeploy. Open /admin.html on the app's link (for example hmg-installer-assist.vercel.app/admin.html) and sign in with it. Add each installer there: the page makes them a personal code (like HMG-7K4P2Q) and a message to text or email them. They enter it once on their phone instead of the shared access code. Installers can also tap No code yet? Request access in the app: the request appears on the admin page under Requests waiting, and (once email is set up, below) is emailed to you with an Approve link. Approving creates their account and emails them their code. On the same page you can see each installer's questions today and this month, switch an installer off, give them a new code, or give one installer a bigger or smaller daily limit or their own discount % off RRP for a product group where it differs from the standard. The tab holds the RRP for every HMG code on the quote (): paste the price list from Excel (any rows with an HMG code and a price), say whether it is ex VAT and the VAT % to add, and set the % for each product group (J-series, T-Cap, K-series, L-series, Baxi, the two cylinder types, each cylinder kit part, radiators Type 11/22/33). The list is kept in Upstash, not in the code. Until one is loaded, quotes show clearly marked placeholder prices. Needs Upstash (step 5). The shared keeps working alongside personal codes; remove it once everyone has their own code.Until this is set up, Escalate opens the installer's own email app with everything filled in (as in the demo), access requests only show on the admin page, and you send approved installers their code yourself (the admin page has Text it / Email it buttons). To have the app send these emails itself:
heatmerchants.ie domain (your IT person adds a few DNS records).RESEND_API_KEY, and ESCALATION_FROM (for example HMG Installer Assistant <[email protected]>). Optionally ESCALATION_TO if escalations should go somewhere other than [email protected], and APPROVAL_TO if access requests should go somewhere other than the escalation address.Trying it without a domain (prototype): set ESCALATION_FROM to HMG Installer Assistant <[email protected]> and ESCALATION_TO to the email address your Resend account is under. Resend's test sender only delivers to that one address, so the app sends design requests and escalations there with no copy to the installer, and approved installers' codes aren't emailed (send them from the admin page).
Everything the assistant knows is in source/:
| File | What it is |
|---|---|
source/hmg-field-notes.md | HMG Field Notes. Add a new fix here, in the same format as the others. Fault codes in the Symptoms line make the note show on that fault card. |
source/hmg-outdoor-unit-clearances.md | HMG clearance guidance |
source/hmg-primary-pipe-sizing.md | HMG pipe sizing guidance |
source/warmhaus-radiators.json | HMG radiator list: the Warmhaus Standard steel panel range (Types 11, 22, 33), one line per radiator with its code, size, depth, output at ΔT 50 and its own n-coefficient. To update it from a new spreadsheet, replace the lines here. |
source/hmg-radiators.md | HMG radiator selection guidance (Design › Radiators and Ask): 45 °C flow, 5 °C drop, 21 °C room by default. |
source/hmg-heat-pump-sizing.json | HMG quick survey: the heat loss each unit covers (HMG kW bands per range), the model code that goes on the quote, and the default room temperatures. Change a band here. K-series bands are still to come. |
source/hmg-quick-survey.md | HMG quick survey guidance (Design › Quick survey and Ask), with the disclaimer. |
source/hmg-r290-exclusion-zones.md | HMG R290 exclusion zone guidance (Design › Exclusion zones, L-series and Baxi HP55 only). Zone drawings are in public/zones/. |
source/hmg-commissioning-panasonic.md | HMG commissioning procedure (Controller › Commissioning). Each - **Step.** line is one tick box. Replace "HMG TO CONFIRM" with the HMG value once it is decided. |
source/manuals/ | Manual text (one --- Page N --- marker per printed page) and the controller navigation references |
source/j-series-faults.json | J-series error codes table (SM pp.164-165) |
source/t-cap-faults.json | J-series T-Cap error codes table (T-Cap SM pp.164-165). The check procedure pages for each code are found from the manual's 18.5 headings. |
source/k-series-faults.json | K-series error codes table (SM pp.209-210). The check procedure pages for each code are found from the manual's 19.5 headings. |
source/l-series-faults.json |
Edit a file on GitHub and commit: Vercel rebuilds and the app updates within a minute or two. The answer rules themselves are in lib/prompt.js, and the screens are public/index.html.
public/ is the app installers see: index.html (all screens), knowledge.json (fault lists, controller tasks, diagram catalogue), the PDFs, diagrams, icons, vendor/ (jsPDF and pdf-lib, MIT, make the quick survey's Download PDF on the phone), datasheets/ (product data sheets added after the quotation PDF; which sheet goes with which product is QS_SHEETS in index.html), and sw.js (offline: screens, fault codes, diagrams and any manual already opened work with no signal; Ask needs signal).api/ are small server functions on Vercel. ask finds the relevant manual pages, adds the HMG rules for the selected unit, and streams Claude's answer back. The API key stays on the server and is never sent to phones. extract fills the escalation form from the chat. escalate sends the email when Resend is set up. apply takes access requests from the app and approve handles the approval link (public/approve.html); admin runs the admin page. history gives an installer their own past questions. config tells the app what is switched on.scripts/build-knowledge.mjs turns source/ into data/knowledge.json (server only, includes the manual text) and public/knowledge.json. Vercel runs it on every deploy (npm run build).lib/trends.js): unit, fault code, installer, date, the question, and whether the app could answer it from the manuals. The admin page's Fault trends tab counts them per week, overall, per unit and per installer, lists the questions the app couldn't answer, and shows a short summary Claude writes every Monday at about 7am (api/trends.js, a Vercel cron job in vercel.json; about 5 cent a week) or when you tap Write summary now. Questions are kept 100 days, summaries about a year. Installers are told on the code screen and under the Ask box that questions are saved to improve the service. Optional: set CRON_SECRET in Vercel so only Vercel can start the Monday job (without it, a repeat call does nothing because each week is only written once), and TRENDS_MODEL to use a different Claude model for the summary.lib/answers.js): the first time a question is asked for a unit, Claude's answer is saved in Upstash. When anyone asks the same question again for the same unit (same fault code and same key words, so "H62, what do I check?", "what does H62 mean" and the H62 fault card's Ask button all match), the stored answer comes back straight away, with no Claude cost, and it doesn't use one of the installer's questions for the day. Follow-ups in a conversation and photo questions always go to Claude, and answers that were cut short or said the manuals don't cover it aren't stored. Under a stored answer the installer can tap , which asks Claude again and replaces the stored answer. The admin page's tab lists them with how often each was reused and how many installers said it didn't help, and lets you edit (an edited answer is kept even after a "didn't help"), delete or clear them. When a unit's manuals, field notes or answer rules change, that unit starts afresh. Set to send every question to Claude.Optional settings: ADMIN_CODE (turns on installer accounts and the admin page; see lib/accounts.js), DAILY_QUESTION_LIMIT (default 5 Ask questions per installer, or per phone without an account, per day; 0 for no limit; see lib/quota.js), CLAUDE_MODEL (default claude-opus-5-5), CLAUDE_EFFORT (default medium), CLAUDE_EXTRACT_MODEL (default claude-haiku-5-5), and STORED_ANSWERS=off (see above), and CLAUDE_FALLBACKS=off if Anthropic ever rejects the automatic fallback setting on your account.
Needs Node.js 20 or later.
npm install
cp .env.example .env # then put your API key in .env
npm run dev # open http://localhost:3000
npm test # tests against a stand-in Claude, no key needed
source/.public/manuals/ can be downloaded by anyone with the link.lib/prices.jsAPP_ACCESS_CODEhmg-installer-assist.vercel.app) on your phone. On Android, tap Install when it offers; on iPhone, Share > Add to Home Screen. Later you can point a Heat Merchants address at it (for example assist.heatmerchants.ie) under Project > Settings > Domains.| L-series R290 error codes table (L-series SM pp.237-238). The check procedure pages for each code are found from the manual's 18.5 headings. |
source/wiring-index.json | Catalogue of the diagrams in public/wiring/ |
source/j-series-parts.json | J-series spare parts (SM pp.237-246): one line per part, with the part number for each model. Correct a superseded number here. Exploded view images are in public/parts/. |
source/t-cap-parts.json | J-series T-Cap spare parts (T-Cap SM pp.230-237), two lists with their own ref numbers: water system (w) and refrigerant system (r). One line per part with the part number for the 9 and 12 kW. |
source/k-series-parts.json | K-series spare parts, three lists with their own ref numbers: outdoor 3 kW and outdoor 5/7/9 kW (outdoor SM pp.299-306), and the K3E5/K6E5 tank unit (tank unit SM pp.439-443). One line per part with the part number for each model. The outdoor SM's tank unit list is left out: it's for the WH-ADC0309K0E5A, not the K3E5/K6E5 HMG supplies. |
source/l-series-parts.json | L-series R290 spare parts, two lists with their own ref numbers: the E51 tank unit (in, SM pp.310-325) and the 5/7/9 kW outdoor unit (o0509, SM pp.326-333). The UK1 tank unit is left out: HMG supplies the E51 only. |
source/components.json | Component identifier (Design › Components): the drawings (images in public/components/) and, for each component, its number on the drawing, what it does, fault codes, parts list refs, wiring diagrams and manual pages. Edit a description or add a fault code here. To use your own photo instead of a manual drawing, put the image in public/components/ and change the drawing's file, w and h. |
STORED_ANSWERS=offlib/history.js, api/history.js): every question an installer asks, and the answer they got, is kept so they can look it up again from My questions history at the top of Ask, free (opening one never calls Claude or uses a day's question). They can search by fault code or words, filter by unit, open a whole chat, carry on with it, or delete it. With a personal installer code they're kept on the installer's account in Upstash (their latest 1000, no expiry), so they show on any phone they sign in on; deleting the installer deletes them. Each phone also keeps its own latest 150, which is all there is with the shared access code and what shows with no signal. New question starts a clean chat.