feat: certificates, landing pages, ai tutor, website update, compliance

This commit is contained in:
Rotimi Best
2026-05-18 03:47:22 +01:00
parent c31ad63955
commit ac3a2c14a7
644 changed files with 56050 additions and 5439 deletions
+59
View File
@@ -0,0 +1,59 @@
import type { CertificateDesign, CertificateTemplateId, CertificateTemplateMeta } from './types';
export const ACCENT_COLORS = ['#7a1f1f', '#1e3a8a', '#ff4500', '#d4af37', '#0a0a0a', '#065f46'] as const;
export type AccentColor = (typeof ACCENT_COLORS)[number];
export const DEFAULT_ACCENT_COLOR: string = ACCENT_COLORS[0];
export const CERTIFICATE_TEMPLATES: CertificateTemplateMeta[] = [
{
id: 'classique',
label: 'Classique',
description: 'Vintage engraved with double-rule border and seal.'
},
{
id: 'brutalist',
label: 'Brutalist',
description: 'Raw editorial grid with oversized typography and stamp.'
},
{
id: 'noir',
label: 'Noir',
description: 'Dark editorial layout with gilt accents and medal.'
},
{
id: 'poster',
label: 'Poster',
description: 'Maximalist editorial with colour blobs and rotated tag.'
},
{
id: 'minimal',
label: 'Minimal',
description: 'Refined Swiss layout with thin rules and pure typography.'
}
];
/**
* Maps the legacy 6 theme ids onto the new 5 templates.
* Existing courses keep rendering until they are re-saved.
*/
export const LEGACY_THEME_MAP: Record<string, CertificateTemplateId> = {
professional: 'classique',
plain: 'minimal',
purpleProfessionalBadge: 'noir',
blueProfessionalBadge: 'noir',
purpleBadgePattern: 'poster',
blueBadgePattern: 'poster'
};
export const DEFAULT_CERTIFICATE_DESIGN: CertificateDesign = {
templateId: 'classique',
accentColor: DEFAULT_ACCENT_COLOR,
subtitle: 'Awarded with Highest Distinction',
signatories: [
{ name: 'Course Facilitator', role: 'Facilitator' },
{ name: 'Organization Lead', role: 'Director' }
],
idFormat: 'N° {seq}'
};