feat: Initial release of LOADOUT - Travel Manifest & Bag Allocation System
This commit is contained in:
commit
805f3fe97a
26 files changed
+7618
No files matched your search
@@ -0,0 +1,102 @@
|
||||
export type BagType = 'personal_item' | 'carry_on' | 'checked' | 'worn';
|
||||
|
||||
export type Category = 'clothing' | 'toiletries' | 'tech' | 'documents' | 'gear' | 'wellness';
|
||||
|
||||
export type TripType =
|
||||
| 'weekend_getaway'
|
||||
| 'business'
|
||||
| 'beach'
|
||||
| 'alpine_cold'
|
||||
| 'hiking_camping'
|
||||
| 'international_urban'
|
||||
| 'road_trip';
|
||||
|
||||
export type Climate = 'hot' | 'mild' | 'cold' | 'rainy';
|
||||
|
||||
export type LuggageConfig = 'carry_on_only' | 'checked_bag' | 'backpack_only';
|
||||
|
||||
export type ItemSource = 'generated' | 'user' | 'learned' | 'ai';
|
||||
|
||||
export interface PackingItem {
|
||||
id: string;
|
||||
name: string;
|
||||
category: Category;
|
||||
quantity: number;
|
||||
bag: BagType;
|
||||
packed: boolean;
|
||||
essential?: boolean;
|
||||
notes?: string;
|
||||
source?: ItemSource;
|
||||
learnedReason?: string;
|
||||
debriefStatus?: 'used' | 'deadweight' | 'wishlist';
|
||||
}
|
||||
|
||||
export interface TripDebrief {
|
||||
notes: string;
|
||||
rating: number; // 1 to 5
|
||||
completedAt: string;
|
||||
excludedItemNames: string[]; // Packed but never used ("Deadweight")
|
||||
includedItemNames: string[]; // Missing items ("Wish I brought")
|
||||
}
|
||||
|
||||
export interface Trip {
|
||||
id: string;
|
||||
title: string;
|
||||
destination: string;
|
||||
routeCode: string; // e.g. "SFO ➔ NRT"
|
||||
tripType: TripType;
|
||||
durationDays: number;
|
||||
durationNights: number;
|
||||
climate: Climate;
|
||||
luggageConfig: LuggageConfig;
|
||||
hasLaundry: boolean;
|
||||
activities: string[]; // 'formal', 'swimming', 'hiking', 'gym', 'remote_work', 'photography'
|
||||
items: PackingItem[];
|
||||
createdAt: string;
|
||||
debrief?: TripDebrief;
|
||||
}
|
||||
|
||||
export interface MemoryExclusion {
|
||||
itemName: string;
|
||||
tripType: TripType;
|
||||
count: number;
|
||||
lastDate: string;
|
||||
}
|
||||
|
||||
export interface MemoryInclusion {
|
||||
itemName: string;
|
||||
category: Category;
|
||||
defaultBag: BagType;
|
||||
tripType: TripType;
|
||||
count: number;
|
||||
lastDate: string;
|
||||
reason?: string;
|
||||
}
|
||||
|
||||
export interface PackMemory {
|
||||
exclusions: MemoryExclusion[];
|
||||
inclusions: MemoryInclusion[];
|
||||
totalTripsDebriefed: number;
|
||||
}
|
||||
|
||||
export interface AppSettings {
|
||||
soundEnabled: boolean;
|
||||
aiEnabled: boolean;
|
||||
aiProvider: 'ollama' | 'gemini' | 'openai';
|
||||
ollamaUrl: string;
|
||||
ollamaModel: string;
|
||||
apiKey: string;
|
||||
}
|
||||
|
||||
export interface BagMeta {
|
||||
type: BagType;
|
||||
label: string;
|
||||
code: string;
|
||||
icon: string;
|
||||
description: string;
|
||||
tsaRule?: string;
|
||||
color: string;
|
||||
borderClass: string;
|
||||
bgClass: string;
|
||||
badgeBg: string;
|
||||
}
|
||||
Reference in new issue
Block a user