feat: scaffold Antonym fashion store
Anonymous Bitcoin-only fashion e-commerce with: - Vue 3 + Tailwind 4 frontend with glassmorphism dark/light design system - Express 5 + SQLite backend with BTCPay Server integration - Nostr identity (NIP-07/keypair) for anonymous purchase tracking - ChaCha20-Poly1305 encrypted shipping addresses - Admin panel with order/product/stock management - SVG logo splash animation with clip-path reveal - 5 seeded products across 4 categories Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
24
server/lib/mailer.ts
Normal file
24
server/lib/mailer.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import nodemailer from 'nodemailer'
|
||||
|
||||
let transporter: nodemailer.Transporter | null = null
|
||||
|
||||
function getTransporter(): nodemailer.Transporter | null {
|
||||
if (transporter) return transporter
|
||||
const host = process.env.SMTP_HOST
|
||||
if (!host) return null
|
||||
transporter = nodemailer.createTransport({ host, port: Number(process.env.SMTP_PORT) || 587, secure: Number(process.env.SMTP_PORT) === 465, auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS } })
|
||||
return transporter
|
||||
}
|
||||
|
||||
export async function sendOrderConfirmation(email: string, orderId: string, totalSats: number): Promise<void> {
|
||||
const t = getTransporter()
|
||||
if (!t) return
|
||||
await t.sendMail({ from: process.env.SMTP_FROM || 'orders@antonym.fashion', to: email, subject: `Order Confirmed - ${orderId}`, text: `Your order ${orderId} for ${totalSats.toLocaleString()} sats has been confirmed.\n\nTrack your order: ${process.env.SITE_URL || 'http://localhost:3333'}/order/${orderId}` })
|
||||
}
|
||||
|
||||
export async function sendStatusUpdate(email: string, orderId: string, status: string, note?: string): Promise<void> {
|
||||
const t = getTransporter()
|
||||
if (!t) return
|
||||
const noteText = note ? `\n\nNote: ${note}` : ''
|
||||
await t.sendMail({ from: process.env.SMTP_FROM || 'orders@antonym.fashion', to: email, subject: `Order ${orderId} - ${status.charAt(0).toUpperCase() + status.slice(1)}`, text: `Your order ${orderId} status has been updated to: ${status}${noteText}\n\nTrack your order: ${process.env.SITE_URL || 'http://localhost:3333'}/order/${orderId}` })
|
||||
}
|
||||
Reference in New Issue
Block a user