Loading
Loading
// Every standalone product now ships its own
// operator console, not just school management
const products = [
'ExamVault', 'Code Academy', 'Tutor Studio',
'API Consumers', 'Org Workspace', 'Store',
];
// Operations tab, Needs Attention, revenue trend,
// tier-aware viewer roles, same depth, every product// Per-tenant billing profile: anchor day,
// grace period, and dunning are now real
const profile = await getBillingProfile(tenantId);
// auto-invoices on the tenant's own billing day,
// retries failed charges, then dunning emails// ExamVault PaperForge: DOCX/PDF import
const result = await importPastPaper({
file: uploadedDocx,
board: 'WAEC',
subject: 'Mathematics',
year: 2023,
});
// Claude Vision parses → staged review → publish// 19 academy slugs live
const academies = [
'python', 'web', 'scratch', 'fullstack',
'sql', 'typing', 'linux', 'ai',
'networking', 'iot', 'cybersecurity',
'ethical-hacking', 'pentest', 'digital-forensics',
'data-science', 'bug-bounty', 'git',
'it-support', 'devops-cloud'
];// Textbook RAG: student asks question
const answer = await askTextbookAI({
question: "Explain recursion with examples",
subject: "Computing",
year: 3,
curriculum: "OIC",
});// Foundation: multi-tenant Prisma client router
export async function getPrisma() {
const tenant = await resolveTenant();
return getTenantPrismaClient(tenant.dbUrl);
}
// Day 1 of building Africa's most complete AI Education Operating System