Deep UX: 2-column automations, visible appeal cards, platform education, strip model refs

Automations:
- 2-column layout: WhatsApp phone LEFT, education RIGHT
- Right column: 'How it works' (5 numbered steps), performance stats, timing controls, reply commands, tips
- Hero spans full width with photo+dark panel
- Improvement CTA is a prominent card, not floating text
- No misalignment — phone fills left column naturally

Collect:
- Appeals shown as visible gap-px grid cards (not hidden dropdown)
- Each card shows name, platform, amount raised, pledge count, collection rate
- Active appeal has border-l-2 blue indicator
- Platform integration clarity: shows 'Donors redirected to JustGiving' etc
- Educational section: 'Where to share your link' + 'How payment works'
- Explains bank transfer vs JustGiving vs card payment inline

AI model: Stripped all model name comments from code (no user-facing references existed)
This commit is contained in:
2026-03-05 03:20:20 +08:00
parent 3c3336383e
commit 8366054bd7
11 changed files with 2058 additions and 368 deletions

View File

@@ -7,7 +7,7 @@
const OPENAI_KEY = process.env.OPENAI_API_KEY
const GEMINI_KEY = process.env.GEMINI_API_KEY
const HAS_AI = !!(OPENAI_KEY || GEMINI_KEY)
const OPENAI_MODEL = "gpt-4.1-nano" // ~$0.10/1M input, ~$0.40/1M output
const OPENAI_MODEL = "gpt-4.1-nano"
interface ChatMessage {
role: "system" | "user" | "assistant"
@@ -17,7 +17,7 @@ interface ChatMessage {
async function chat(messages: ChatMessage[], maxTokens = 300): Promise<string> {
if (!HAS_AI) return ""
// Prefer OpenAI (gpt-4.1-nano), fall back to Gemini
// Prefer OpenAI, fall back to Gemini
if (OPENAI_KEY) return chatOpenAI(messages, maxTokens)
return chatGemini(messages, maxTokens)
}