Initial commit: Family Planner application

Complete family planning application with:
- React frontend with TypeScript
- Node.js/Express backend with TypeScript
- Python ingestion service for document processing
- Planning ingestion service with LLM integration
- Shared UI components and type definitions
- OAuth integration for calendar synchronization
- Comprehensive documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
philippe
2025-10-14 10:43:33 +02:00
commit fdd72c1135
239 changed files with 44160 additions and 0 deletions

View File

@@ -0,0 +1 @@
export {};

92
shared/types/src/index.ts Normal file
View File

@@ -0,0 +1,92 @@
export type ChildAvatar =
| { kind: "preset"; url: string; name: string }
| { kind: "custom"; url: string; name?: string };
export type SchoolRegion =
| "zone-a"
| "zone-b"
| "zone-c"
| "corse"
| "guadeloupe"
| "guyane"
| "martinique"
| "reunion"
| "mayotte";
export type ChildProfile = {
id: string;
fullName: string;
colorHex: string;
email?: string;
birthDate?: string;
notes?: string;
avatar?: ChildAvatar;
schoolRegion?: SchoolRegion;
createdAt?: string;
deletedAt?: string;
};
export type ActivityCategory = "school" | "sport" | "medical" | "event" | "other";
export type ActivityReminder = {
id: string;
offsetMinutes: number;
channel: "push" | "email" | "sms" | "device";
};
export type ActivityItem = {
id: string;
title: string;
category: ActivityCategory;
description?: string;
location?: string;
startDateTime: string;
endDateTime: string;
reminders: ActivityReminder[];
metadata?: Record<string, string>;
};
export type ScheduleItem = {
id: string;
childId: string;
periodStart: string;
periodEnd: string;
sourceFileUrl?: string;
activities: ActivityItem[];
status: "processing" | "ready" | "failed";
};
export type AlertItem = {
id: string;
childId: string;
scheduleId: string;
activityId: string;
title: string;
triggerDateTime: string;
channel: "push" | "email" | "sms" | "device";
status: "pending" | "sent" | "dismissed";
};
export type HolidayType = "school" | "public" | "custom";
export type Holiday = {
id: string;
title: string;
startDate: string;
endDate: string;
type: HolidayType;
description?: string;
zones?: SchoolRegion[];
};
export type PersonalLeave = {
id: string;
profileId: string;
title: string;
startDate: string;
endDate: string;
isAllDay: boolean;
notes?: string;
source?: "manual" | "calendar";
createdAt?: string;
};