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:
13
shared/types/.eslintrc.cjs
Normal file
13
shared/types/.eslintrc.cjs
Normal file
@@ -0,0 +1,13 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
parser: "@typescript-eslint/parser",
|
||||
parserOptions: {
|
||||
ecmaVersion: 2020,
|
||||
sourceType: "module"
|
||||
},
|
||||
env: {
|
||||
es2021: true
|
||||
},
|
||||
plugins: ["@typescript-eslint"],
|
||||
extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"]
|
||||
};
|
||||
6
shared/types/.prettierrc
Normal file
6
shared/types/.prettierrc
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"singleQuote": true,
|
||||
"trailingComma": "all",
|
||||
"tabWidth": 2,
|
||||
"printWidth": 90
|
||||
}
|
||||
22
shared/types/package.json
Normal file
22
shared/types/package.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "@family-planner/types",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"scripts": {
|
||||
"build": "tsc -p tsconfig.json",
|
||||
"lint": "eslint \"src/**/*.ts\" --max-warnings=0",
|
||||
"format": "prettier --write \"src/**/*.ts\""
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.6.0",
|
||||
"@types/node": "^20.11.0",
|
||||
"eslint": "^9.0.0",
|
||||
"@typescript-eslint/parser": "^7.0.0",
|
||||
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
||||
"eslint-config-prettier": "^9.0.0",
|
||||
"prettier": "^3.3.0"
|
||||
}
|
||||
}
|
||||
1
shared/types/src/index.js
Normal file
1
shared/types/src/index.js
Normal file
@@ -0,0 +1 @@
|
||||
export {};
|
||||
92
shared/types/src/index.ts
Normal file
92
shared/types/src/index.ts
Normal 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;
|
||||
};
|
||||
15
shared/types/tsconfig.json
Normal file
15
shared/types/tsconfig.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"declaration": true,
|
||||
"declarationMap": true,
|
||||
"emitDeclarationOnly": false,
|
||||
"module": "ESNext",
|
||||
"target": "ES2020",
|
||||
"moduleResolution": "Node",
|
||||
"outDir": "dist",
|
||||
"rootDir": "src",
|
||||
"strict": true,
|
||||
"esModuleInterop": true
|
||||
},
|
||||
"include": ["src"]
|
||||
}
|
||||
Reference in New Issue
Block a user