diff --git a/image-renderer/index.js b/image-renderer/index.js new file mode 100644 index 0000000..9d30c65 --- /dev/null +++ b/image-renderer/index.js @@ -0,0 +1,284 @@ +const express = require('express'); +const puppeteer = require('puppeteer'); +const cors = require('cors'); + +const app = express(); +app.use(cors()); +app.use(express.json({ limit: '10mb' })); + +app.post('/api/render', async (req, res) => { + const { data } = req.body; + + if (!data || !data.items) { + return res.status(400).json({ error: 'Missing analysis data' }); + } + + const { items, total, health_score, confidence, tip, insights } = data; + + let scoreEmoji = '🟢'; + if (health_score < 50) scoreEmoji = '🔴'; + else if (health_score < 80) scoreEmoji = '🟡'; + + // Build items HTML + const itemsHtml = items.map(it => ` +
{loadingStats ? '...' : stats.currentStreak} 🔥
+{t.dashboard.statDishes}
{loadingStats ? '...' : stats.totalCount}
{t.dashboard.statCals}
-{loadingStats ? '...' : Math.round(stats.avgCals)}
+{loadingStats ? '...' : Math.round(stats.avgCals || 0)}
{t.dashboard.emptyRecent}
+ {/* Recent History */} +{t.dashboard.emptyRecent}
+ +${safeStr(analysis.summary, "Sem detalhes.")}
`; + + const improvementsHtml = improvements.length + ? `${safeStr(analysis.improvement_summary, "Sem detalhes.")}
`; + + const mealsHtml = meals.map((meal: any, i: number) => { + const options = Array.isArray(meal.options) ? meal.options : []; + const opt1 = options[0] || meal.main_option || ""; + const opt2 = options[1] || ""; + const sub = meal.substitution_suggestion || meal.substitution || ""; + + let html = `"O sucesso é a soma de pequenos esforços repetidos dia após dia."
+