feat: Initialize Craze Analytix project structure

Sets up the project with Vite, React, Tailwind CSS, Gemini AI integration, and necessary dependencies for data analysis. Includes initial configuration for TypeScript, Tailwind, and project metadata.
This commit is contained in:
Christian
2025-12-11 11:25:26 +01:00
parent 563e6110ce
commit 9ba63ab8f8
23 changed files with 4481 additions and 8 deletions
+127
View File
@@ -0,0 +1,127 @@
export interface SalesRecord {
id: string;
customer: string;
year: number;
month: string; // "Apr-23"
week?: number;
asin: string;
sku: string;
title: string; // Added Product Title
articleName: string; // Kept for backward compatibility if mixed files used
units: number;
sellOut: number; // Parsed numeric value
line: string;
}
export interface FilterState {
customer: string[];
year: string[];
month: string[];
line: string[];
asin: string[];
sku: string[];
title: string[]; // Added Title filter
}
export interface LineGrowthMetric { // Renamed from GrowthMetric
line: string;
currentYearSellOut: number;
previousYearSellOut: number;
sellOutGrowthValue: number;
sellOutGrowthPercentage: number;
currentYearUnits: number;
previousYearUnits: number;
unitsGrowthValue: number;
unitsGrowthPercentage: number;
}
export interface ItemGrowthMetric {
sku: string;
asin: string;
title: string;
line: string; // Keep line for context
currentYearSellOut: number;
previousYearSellOut: number;
sellOutGrowthValue: number;
sellOutGrowthPercentage: number;
currentYearUnits: number;
previousYearUnits: number;
unitsGrowthValue: number;
unitsGrowthPercentage: number;
}
export interface SeasonalityPoint {
name: string; // "Jan", "Feb", etc.
[year: string]: number | string; // Dynamic keys for years: "2023": 500, "2024": 600
}
export interface YearlySplitData {
name: string;
// Dynamic keys like "2023", "2024" or "2023_value", "2023_units"
[key: string]: number | string;
}
export interface AggregatedData {
totalSellOut: number;
totalUnits: number;
totalsByYear: Record<string, { sellOut: number; units: number }>;
byLine: { name: string; value: number; units: number }[];
byCustomer: { name: string; value: number }[];
seasonality: SeasonalityPoint[];
seasonalityUnits: SeasonalityPoint[];
availableYears: string[];
topMovers: LineGrowthMetric[]; // Now uses LineGrowthMetric
bottomMovers: LineGrowthMetric[]; // Now uses LineGrowthMetric
comparisonPeriods: { current: string; previous: string };
topLinesSplit: YearlySplitData[];
byCustomerSplit: YearlySplitData[];
byLineOverviewSplit: YearlySplitData[];
}
export interface ChatMessage {
role: 'user' | 'model';
text: string;
timestamp: Date;
}
// New Interfaces for Dynamic Pivot Grid
export interface YearlyData {
sellOut: number;
units: number;
}
export interface MonthlyPivot {
monthIndex: number;
byYear: Record<string, YearlyData>;
}
export interface PivotRow {
id: string;
customer: string;
line: string;
title: string; // Added Title
articleName: string;
sku: string;
asin: string;
// Dynamic buckets
totalsByYear: Record<string, YearlyData>;
months: MonthlyPivot[]; // Always 12 elements
}
export interface TimeSeriesData {
name: string; // e.g., "Apr '23" or "W21 '23"
sellOut: number;
units: number;
}
export interface ComparisonTimeSeriesPoint {
week: number;
name: string; // "W1", "W2", etc.
[key: string]: number | string; // Dynamic keys like "2023_sellOut", "2024_units"
}