Tasty Tales

Build and manage rich, interactive recipes with features for searching, filtering, and discovering culinary content. Includes dynamic serving size calculators and interactive timers for a customized cooking experience.

Author

Tasty Tales logo

jmarcher

MIT License

Quick Info

GitHub GitHub Stars 0
NPM Weekly Downloads 0
Tools 1
Last Updated 6/2/2025

Tags

jmarcher recipes culinary jmarcher tasty creation jmarcher interactive recipes

๐Ÿฝ๏ธ TastyTales

Nuxt 3 Vue 3 TailwindCSS TypeScript License

A modern, feature-rich recipe platform built with Nuxt 3, Vue 3, and TailwindCSS. Perfect for culinary enthusiasts, food bloggers, and recipe creators.

Demo ยท Report Bug ยท Request Feature

๐Ÿ’ Support My Work

๐ŸŒŸ Get Exclusive Access to Premium Content! ๐ŸŒŸ
Sponsor me on Patreon and get exclusive access to full Nuxt Apps with stunning designs,
components, and exclusive content!

โœจ Features

Core Features

  • ๐Ÿ“ Rich Recipe Management
    • Step-by-step instructions
    • Interactive timers with notifications
    • Dynamic serving size calculator
    • Ingredient management
  • ๐ŸŽจ Modern UI/UX
    • Clean, minimalist design
    • Smooth animations and transitions
    • Responsive layout for all devices
    • Dark mode support
  • ๐Ÿ” Search & Discovery
    • Full-text search
    • Category and tag filtering
    • Recipe recommendations

๐Ÿงฉ Modules

TastyTales uses several Nuxt modules to enhance functionality:

๐Ÿ“ Creating Content

Adding a New Recipe

  1. Create a new JSON file in content/recipes/ with the following structure:
{
  "title": "Classic Margherita Pizza",
  "description": "Traditional Neapolitan pizza with fresh ingredients",
  "image": "/images/recipes/margherita-pizza.jpg",
  "prepTime": "15 minutes",
  "cookTime": "12 minutes",
  "servings": 4,
  "difficulty": "medium",
  "tags": ["italian", "pizza", "vegetarian"],
  "ingredients": [
    "Pizza dough",
    "San Marzano tomatoes",
    "Fresh mozzarella",
    "Fresh basil",
    "Olive oil",
    "Salt"
  ],
  "instructions": [
    { "instruction": "Preheat oven to 500ยฐF (260ยฐC)", "timer": 1 },
    { "instruction": "Roll out the pizza dough", "timer": 5 },
    "Spread tomato sauce",
    "Add fresh mozzarella",
    "Bake for 12-15 minutes",
    "Garnish with fresh basil"
  ]
}

Adding a Blog Post

  1. Create a new Markdown file in content/blog/ with the following frontmatter:
---
title: 'The Art of Pizza Making'
description: 'Learn the secrets of making authentic Neapolitan pizza at home'
date: '2025-02-03'
image: '/images/blog/pizza-making.jpg'
author:
  name: 'John Doe'
  avatar: '/images/authors/john.jpg'
tags: ['tips', 'techniques', 'italian']
---

# The Art of Pizza Making

Your blog content goes here in Markdown format...

## Tips for Perfect Pizza

1. Use high-quality ingredients
2. Let the dough rest properly
3. Preheat your oven thoroughly

## Common Mistakes to Avoid

- Don't overload toppings
- Avoid using cold ingredients
- Don't skip the resting time

Working with Nuxt Content

Query your content in components/pages:

<script setup>
// Fetch all recipes
const { data: recipes } = await useAsyncData('recipes', () =>
  queryCollection('recipes').all()
);

// Fetch a single recipe
const { data: recipe } = await useAsyncData('pizza', () =>
  queryCollection('recipes')
    .where('title', '=', 'Classic Margherita Pizza')
    .first()
);

// Search recipes by tag
const { data: italianRecipes } = await useAsyncData('italian', () =>
  queryContent('recipes').where('tags', 'LIKE', 'italian').all()
);
</script>

๐Ÿš€ Quick Start

Prerequisites

  • Node.js 16.x or later
  • pnpm 7.x or later

Installation

  1. Clone the repository
git clone https://github.com/florianjs/tasty-tales.git
cd tastytales
  1. Install dependencies
pnpm install
  1. Start development server
pnpm dev
  1. Build for production
pnpm build

๐Ÿ“ Project Structure

tastytales/
โ”œโ”€โ”€ components/           # Reusable Vue components
โ”‚   โ”œโ”€โ”€ recipe/          # Recipe-specific components
โ”‚   โ””โ”€โ”€ ui/              # UI components
โ”œโ”€โ”€ composables/         # Composable functions
โ”œโ”€โ”€ content/            # Recipe content (JSON/Markdown)
โ”œโ”€โ”€ layouts/            # Page layouts
โ”œโ”€โ”€ pages/              # Application routes
โ”œโ”€โ”€ public/             # Static assets
โ”œโ”€โ”€ stores/             # Pinia stores
โ”œโ”€โ”€ types/              # TypeScript types
โ”œโ”€โ”€ app.vue             # Application entry
โ”œโ”€โ”€ nuxt.config.ts      # Nuxt configuration
โ””โ”€โ”€ tailwind.config.ts  # TailwindCSS configuration

๐ŸŽจ Customization

Theme

The default theme uses a warm, inviting color scheme:

colors: {
  primary: colors.orange,
  accent: colors.amber,
  // Customize in tailwind.config.ts
}

Typography

  • Headings: Playfair Display (elegant serif)
  • Body: Inter (modern sans-serif)

Customize fonts in nuxt.config.ts:

googleFonts: {
  families: {
    'Playfair+Display': [500, 600, 700],
    'Inter': [400, 500, 600]
  }
}

โ˜๏ธ Deployment

Recommended: Cloudflare Pages

This project is optimized for deployment on Cloudflare Pages, which provides:

  • Global CDN distribution
  • Automatic HTTPS
  • Zero cold starts
  • Easy deployment process

Deployment Steps

Basic deployment steps:

  1. Connect your repository to Cloudflare Pages
  2. Set build command: pnpm run build
  3. Set build output directory: .output/public
  4. Add a D1 SQL Database from Cloudflare
  5. Bind your database to your Cloudflare Page

For detailed deployment instructions, follow the Nuxt Content deployment guide for Cloudflare.

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

  • Nuxt.js - The Intuitive Vue Framework
  • TailwindCSS - A utility-first CSS framework
  • Pinia - The Vue Store that you will enjoy using

Made with โค๏ธ by 0xExile