Initial project commit for Coolify staging
CI / Quality gate (push) Has been cancelled

This commit is contained in:
Andres Resiri
2026-08-03 10:45:41 -04:00
commit 70daeb214a
1199 changed files with 243503 additions and 0 deletions
+109
View File
@@ -0,0 +1,109 @@
/**
* Seed default billing plans
* ----------------------------
* Run with: npx ts-node prisma/seed-plans.ts
* Or via the API: POST /api/billing { action: "seed_plans" }
*
* Creates 4 plans: Free, Starter ($49/mo), Pro ($149/mo), Enterprise ($499/mo)
*/
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
async function main() {
const plans = [
{
name: "Free",
slug: "free",
priceMonthly: 0,
sortOrder: 0,
limitBrands: 1,
limitWebsites: 1,
limitEvents: 1000,
limitUsers: 1,
features: {
dashboard: true,
technical_audit: true,
site_tag: true,
},
},
{
name: "Starter",
slug: "starter",
priceMonthly: 4900, // $49.00
sortOrder: 1,
limitBrands: 3,
limitWebsites: 3,
limitEvents: 10000,
limitUsers: 3,
features: {
dashboard: true,
technical_audit: true,
site_tag: true,
content_briefs: true,
competitors: true,
ai_avatar: true,
},
},
{
name: "Pro",
slug: "pro",
priceMonthly: 14900, // $149.00
sortOrder: 2,
limitBrands: 10,
limitWebsites: 10,
limitEvents: 100000,
limitUsers: 10,
features: {
dashboard: true,
technical_audit: true,
site_tag: true,
content_briefs: true,
competitors: true,
ai_avatar: true,
conversion_intelligence: true,
local_geo: true,
report_studio: true,
},
},
{
name: "Enterprise",
slug: "enterprise",
priceMonthly: 49900, // $499.00
sortOrder: 3,
limitBrands: 100,
limitWebsites: 100,
limitEvents: 1000000,
limitUsers: 50,
features: {
dashboard: true,
technical_audit: true,
site_tag: true,
content_briefs: true,
competitors: true,
ai_avatar: true,
conversion_intelligence: true,
local_geo: true,
report_studio: true,
api_access: true,
white_label: true,
},
},
];
for (const p of plans) {
await prisma.plan.upsert({
where: { slug: p.slug },
create: { ...p, features: p.features },
update: { ...p, features: p.features },
});
console.log(`${p.name} plan — $${(p.priceMonthly / 100).toFixed(2)}/mo, ${p.limitBrands} brands, ${p.limitEvents.toLocaleString()} events`);
}
console.log("\nDone! 4 plans seeded.");
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());