File size: 1,365 Bytes
27cc612
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
require("dotenv").config();
const path = require("path");
const express = require("express");
const cron = require("node-cron");
const { generateNewsletter, getLatestNewsletter } = require("./lib/generate");

const app = express();
const PORT = process.env.PORT || 7860;

app.use(express.static(path.join(__dirname, "public")));

app.get("/api/newsletter", (req, res) => {
  try {
    const issue = getLatestNewsletter();
    res.json(issue);
  } catch (err) {
    console.error("Failed to read newsletter:", err);
    res.status(500).json({ error: err.message });
  }
});

app.get("/api/generate-now", async (req, res) => {
  try {
    const issue = await generateNewsletter();
    res.json({ ok: true, issueDate: issue.issueDate, volume: issue.volume });
  } catch (err) {
    console.error("Manual generation failed:", err);
    res.status(500).json({ ok: false, error: err.message });
  }
});

// Runs automatically every Monday at 06:00 UTC.
cron.schedule(
  "0 6 * * 1",
  () => {
    console.log("Running scheduled weekly newsletter generation...");
    generateNewsletter()
      .then((issue) => console.log(`Generated issue dated ${issue.issueDate}`))
      .catch((err) => console.error("Scheduled generation failed:", err));
  },
  { timezone: "UTC" }
);

app.listen(PORT, () => {
  console.log(`The AI Herald running at http://localhost:${PORT}`);
});