Skip to content

dzh121/Recipe_Keeper

Repository files navigation

Recipe Keeper Logo

Recipe Keeper

Your personal recipe management solution built with modern web technologies

Live Demo



Next.js Chakra UI Tailwind CSS TypeScript Express Node.js Firebase Azure Translator Google reCAPTCHA

✨ Features

  • πŸ” Secure Authentication via Firebase Auth with
  • πŸ“Š Google Analytics v4 integration for user behavior insights
  • πŸ“ Create & Manage Recipes (Homemade or External Links)
  • 🏷️ Custom Tag System for easy organization
  • 🌐 Internationalization with English & Hebrew support
  • πŸ“± Responsive Design for all devices
  • πŸš₯ Rate Limit Detection with global fetch interceptor
  • ☁️ Image Upload via Firebase Storage
  • ⭐ Favorite Recipes for quick access
  • 🎨 Light/Dark Mode with user preference persistence
  • 🧠 Smart Tag Translation using Azure Cognitive Services
  • 🌍 Dual-Language Tags with English & Hebrew fallback
  • πŸ’‘ Suggest Tags with admin approval workflow
  • πŸ›‘οΈ App Integrity protection with Firebase App Check (reCAPTCHA v3)
  • πŸ’Ύ Persistent User Preferences stored via localStorage

You can even suggest new tags for recipes, which admins can review and approve!

πŸ—οΈ Architecture

Recipe Keeper is a full-stack monorepo built with Next.js, Firebase, and Express:

recipe_keeper/
β”œβ”€β”€ client/              # Frontend (Next.js + Chakra UI)
β”‚   └── out/             # Static export for Firebase Hosting
β”œβ”€β”€ functions/           # Backend (Express + Firebase Admin)
β”‚   └──serviceAccountKey.json  # Private Firebase Admin key
β”œβ”€β”€ firebase/            # Firebase configuration
β”‚   β”œβ”€β”€ firestore.rules
β”‚   β”œβ”€β”€ firestore.indexes.json
β”‚   β”œβ”€β”€ storage.rules
β”œβ”€β”€ .firebaserc
β”œβ”€β”€ firebase.json
β”œβ”€β”€ PRIVACY.md
β”œβ”€β”€ README.md
β”œβ”€β”€ LICENSE
└── package.json         # Root scripts and shared configs

πŸš€ Getting Started

Local Development

# Install dependencies
npm install              # Root level dependencies
cd functions && npm install
cd ../client && npm install

# Start development servers
npm run dev              # Runs frontend and backend concurrently

Build & Deploy

npm run build            # Build both client and server
npm run deploy           # Deploy to Firebase (hosting + functions)

πŸ’» Tech Stack

Frontend Backend Infrastructure
  • Next.js
  • TypeScript
  • Chakra UI v3
  • Tailwind CSS
  • i18next
  • Express.js
  • Firebase Admin SDK
  • Node.js
  • Firebase Authentication
  • Firebase Firestore
  • Firebase Storage
  • Firebase Hosting
  • Firebase Functions
  • Azure Cognitive Services (Translator API)
  • Google Analytics v4
  • Firebase App Check (reCAPTCHA v3)
  • localStorage (for storing filter and UI preferences)

πŸ“‘ API Endpoints

πŸ”’ Authentication Required for most of Endpoints

Recipe Management

Method Endpoint Description
GET /recipes Get paginated list of recipes (public or private based on type param)
GET /recipes/:id Get single recipe by ID (if public or owned by user)
POST /recipes Create a new recipe (requires authentication)
PATCH /recipes/:id Update a recipe (requires authentication and ownership)
DELETE /recipes/:id Delete a recipe (requires authentication and ownership)
GET /recipes/user/:uid Get all public recipes from a specific user

/recipes Query Parameters

Parameter Type Description
type public | private Required. Determines recipe visibility scope (public or user-only)
favorites true Optional. If set, filters results to only the user's favorite recipes
page number Optional. Page number for pagination (default: 1)
pageSize number Optional. Number of results per page (default: 10)
recipeType link | homemade | all Optional. Filter by type of recipe
kosher true Optional. Only return kosher recipes
tags comma-separated list Optional. Filter recipes that include all listed tag IDs
visibility public | private Optional. Only for type=private, filters user's recipes by visibility
search string Optional. Full-text search in title

Recipe Media

Method Endpoint Description
POST /recipes/upload-photo Upload photo to a recipe
GET /recipes/get-photo-url/:recipeId Get signed image URL
DELETE /recipes/delete-photo/:recipeId Delete image from Storage

Favorites

Method Endpoint Description
GET /favorites/:id Check if recipe is favorited
POST /favorites/:id Add recipe to favorites
DELETE /favorites/:id Remove recipe from favorites

User Profile & Settings

Method Endpoint Description
POST /profile/upload-photo Upload profile photo
DELETE /profile/remove-photo Remove profile photo
GET /settings/color-mode Get stored color mode
POST /settings/color-mode Save preferred color mode
GET /settings/language Get user language setting
POST /settings/language Save language preference

Tags

Method Endpoint Description
GET /tags Get global tag list
POST /tags Add tag (admin only)
DELETE /tags/:tagName Remove tag (admin only)
POST /tags/suggest Suggest a new tag (authenticated)
GET /tags/suggestions Get all tag suggestions (admin only)
GET /tags/suggestions/user Get current user's tag suggestions
PATCH /tags/suggestions/:docId/status Update suggestion status (admin only)

πŸ“± App Pages

Page Name Description Access Key UI Features
Home Displays public recipes with filtering and sorting options. Public Search bar, tag filters, recipe type filters, pagination
My Recipes Dashboard for managing user’s own recipes (add, edit, delete). Authenticated Users Recipe list, visibility toggle, add new recipe button
Favorites Quick access to recipes the user has marked as favorite. Authenticated Users Heart icons, favorite-only filtering, recipe quick view
Recipe View Full detail view of a specific recipe. Public or Private Title, description, ingredients, instructions, rating, tags
Recipe Editor Used to create or edit a recipe (homemade or link). Authenticated Users Form with image upload, ingredients, steps, rating, tags
Tag Management Admin panel for managing global tags and their translations. Admin Only Tag list, add/delete tag, multi-language support
User Profile View a specific user's public profile and their shared recipes. Public Avatar, display name, bio, public recipe list
Settings Manage personal preferences and app behavior (language, theme, etc.). Authenticated Users Avatar upload, bio edit, email/password update, switches
Suggest Tag Allows users to suggest new tags with translation support. Authenticated Users Suggestion form, input validation, dual-language fields
Tag Suggestions Review Admin view for reviewing and approving user tag suggestions. Admin Only Status filters, approve/reject actions, metadata view
404 Page Shown when navigating to a route that doesn't exist. Public Custom error message, return to home link

πŸ“¦ Firestore & Storage Collections

users/{uid}/public/profile          # Public user info (displayName, bio, photoURL, etc.)
users/{uid}/private/settings        # Private user preferences (language, dark mode, notifications, etc.)
recipes/{recipeId}                  # All recipe metadata, including title, type, visibility, tags, rating, etc.
global/tags                         # List of all approved tags with translations
tagSuggestions/{docId}              # User-submitted tag suggestions with translation fields and status
slugs/{slug}                        # Public user slugs mapping to user UID (used for profile URLs)

πŸ“‚ Firebase Storage Buckets (Structured Uploads)

/recipes/{recipeId}/photo.jpg   # Recipe photo uploads
/users/{uid}/profile.jpg        # User profile images

πŸ”’ Privacy & Data Policy

RecipeKeeper stores only the data required to provide its core features. Recipes can be marked as public or private. Only public recipes are viewable by other users.

When sharing external recipe links, RecipeKeeper stores the link but does not host or claim ownership of third-party content. If you are the owner of linked content and want it removed, please contact us.

All data is stored securely via Firebase and protected by Firebase Authentication.
View the full Privacy Policy.


Licensed under the MIT License

Β© Recipe Keeper Project Contributors

About

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages