Add My Bar, Bartender, Recommend features + drink images
- Drink Images: upload/display photos of bottles/cans on drink cards and detail pages - My Bar: inventory tracker for spirits, liqueurs, mixers, bitters, garnishes, tools - Bartender: AI-powered cocktail recipe generation, "what can I make" suggestions, saved recipes. Cross-references bar inventory for ingredient availability. - Recommend: AI flavor profile analysis, personalized drink recommendations, "find similar" drinks based on highly-rated favorites - Navigation: desktop sidebar with all 8 routes, mobile bottom nav with 4 primary items + "More" popup menu - New Prisma models: BarItem, Recipe, FlavorProfile - Backup/restore updated to include bar items Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -71,3 +71,30 @@ export type UserPreferenceInput = z.infer<typeof userPreferenceSchema>
|
||||
export type WishlistCreate = z.infer<typeof wishlistCreateSchema>
|
||||
export type SharedListCreate = z.infer<typeof sharedListCreateSchema>
|
||||
export type SharedListUpdate = z.infer<typeof sharedListUpdateSchema>
|
||||
|
||||
export const barItemCreateSchema = z.object({
|
||||
name: z.string().min(1, "Name is required").max(200),
|
||||
category: z.enum(["SPIRITS", "LIQUEURS", "MIXERS", "BITTERS", "GARNISHES", "TOOLS"]),
|
||||
quantity: z.enum(["FULL", "HALF", "LOW", "EMPTY"]).default("FULL"),
|
||||
notes: z.string().max(2000).optional(),
|
||||
})
|
||||
|
||||
export const barItemUpdateSchema = barItemCreateSchema.partial()
|
||||
|
||||
export type BarItemCreate = z.infer<typeof barItemCreateSchema>
|
||||
export type BarItemUpdate = z.infer<typeof barItemUpdateSchema>
|
||||
|
||||
export const recipeCreateSchema = z.object({
|
||||
title: z.string().min(1).max(200),
|
||||
ingredients: z.array(z.object({
|
||||
name: z.string(),
|
||||
amount: z.string(),
|
||||
available: z.boolean(),
|
||||
})),
|
||||
steps: z.array(z.string()),
|
||||
garnish: z.string().max(200).optional().nullable(),
|
||||
glassware: z.string().max(200).optional().nullable(),
|
||||
sourceDrinkId: z.string().optional().nullable(),
|
||||
notes: z.string().max(2000).optional().nullable(),
|
||||
})
|
||||
export type RecipeCreate = z.infer<typeof recipeCreateSchema>
|
||||
|
||||
Reference in New Issue
Block a user