Ports inventory management and SCA-style cupping scoring from hope_roaster: lot tracking with audit-logged consumption, cupping sessions with server-authoritative scoring and a live radar chart, and links from the planner (draw-from-lot, open-cupping-session). Also fixes the Blend/Single-origin toggle layout, replaces tooltips with an in-context "why" teaching layer, and stages the planner UI into pre-roast vs. post-roast phases.
10 lines
475 B
JavaScript
10 lines
475 B
JavaScript
/** Sends transactional email via SMTP when configured; the caller decides what to do when this
|
|
* returns false (e.g. log the link so an admin can hand it to the user manually). */
|
|
export async function sendMail({ smtpUrl, from, to, subject, text }) {
|
|
if (!smtpUrl) return false;
|
|
const { default: nodemailer } = await import("nodemailer");
|
|
const transporter = nodemailer.createTransport(smtpUrl);
|
|
await transporter.sendMail({ from, to, subject, text });
|
|
return true;
|
|
}
|