Based on this github action, help me setup vercel, using the LEAST AMOUNT OF CHANGES
// .github/scripts/notion-sync.js
const fs = require(“node:fs”);
const path = require(“node:path”);
const token = process.env.NOTION_TOKEN;
const dbId = process.env.NOTION_COMMISSIONERS_DB_ID;
if (!token) {
console.error(“Missing NOTION_TOKEN”);
process.exit(1);
}
if (!dbId) {
console.error(“Missing NOTION_COMMISSIONERS_DB_ID”);
process.exit(1);
}
async function notionQueryDatabase({ databaseId, startCursor }) {
const body = {
page_size: 100,
…(startCursor ? { start_cursor: startCursor } : {}),
// Optional filter example:
// --- FILTERS ---
filter: {
and: [
{ property: ‘Type’, select: { equals: ‘Client’ } },
// Assumes your Rollup aggregation is “Count”
{ property: ‘Project_Count’, rollup: { number: { greater_than: 0 } } }
]
},
sorts: [{ property: ‘Name’, direction: ‘ascending’ }]
};
const r = await fetch(https://api.notion.com/v1/databases/${databaseId}/query, {
method: “POST”,
headers: {
Authorization: Bearer ${token},
“Notion-Version”: “2022-06-28”,
“Content-Type”: “application/json”,
},
body: JSON.stringify(body),
});
if (!r.ok) {
const txt = await r.text();
throw new Error(Notion ${r.status}: ${txt});
}
return r.json();
}
function getTitle(page) {
// Try common title property names; adjust if your DB uses a different one
const name =
page?.properties?.Name?.title?.[0]?.plain_text ??
page?.properties?.Title?.title?.[0]?.plain_text ??
page?.properties?.Label?.title?.[0]?.plain_text ??
page?.id?.slice(0, 8);
return name;
}
async function run() {
let results = [];
let cursor = undefined;
do {
const data = await notionQueryDatabase({ databaseId: dbId, startCursor: cursor });
results = results.concat(data.results || []);
cursor = data.has_more ? data.next_cursor : undefined;
} while (cursor);
const items = results.map((p) => ({
id: getTitle(p),
name: getTitle(p),
}));
const outDir = path.join(process.cwd(), “public”, “data”);
fs.mkdirSync(outDir, { recursive: true });
const outPath = path.join(outDir, “commissioners.json”);
fs.writeFileSync(outPath, JSON.stringify({ items }, null, 2), “utf8”);
console.log(Wrote ${items.length} items → ${path.relative(process.cwd(), outPath)});
}
run().catch((err) => {
console.error(err.stack || err.message || String(err));
process.exit(1);
});