<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shivam Sharma</title>
    <description>The latest articles on DEV Community by Shivam Sharma (@shivamsharma1).</description>
    <link>https://dev.to/shivamsharma1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1082621%2F838ecd65-2ef7-4fd4-bfe2-a3bec89ae773.png</url>
      <title>DEV Community: Shivam Sharma</title>
      <link>https://dev.to/shivamsharma1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shivamsharma1"/>
    <language>en</language>
    <item>
      <title>CuisineChef: Your Pantry Sous‑Chef👨‍🍳</title>
      <dc:creator>Shivam Sharma</dc:creator>
      <pubDate>Sat, 05 Jul 2025 17:03:38 +0000</pubDate>
      <link>https://dev.to/shivamsharma1/cuisinechef-your-pantry-sous-chef-32a5</link>
      <guid>https://dev.to/shivamsharma1/cuisinechef-your-pantry-sous-chef-32a5</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/runnerh"&gt;Runner H "AI Agent Prompting" Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚠️ Problem Statement
&lt;/h2&gt;

&lt;p&gt;Home cooks frequently struggle with three key &lt;strong&gt;challenges&lt;/strong&gt;: identifying what dishes they can make with the ingredients on hand, piecing together a reliable cooking plan that fits their dietary preferences and culinary skills, and receiving real-time guidance during the cooking process. These issues can lead to &lt;strong&gt;wasted ingredients, frustrating cooking experiences&lt;/strong&gt;, and a &lt;strong&gt;lack of confidence&lt;/strong&gt; in the kitchen. An &lt;strong&gt;AI-powered&lt;/strong&gt; assistant—like the Runner H–powered &lt;strong&gt;CuisineChef&lt;/strong&gt; Agent—addresses these pain points by automatically logging pantry contents, offering &lt;strong&gt;personalized&lt;/strong&gt; recipe suggestions, guiding users step-by-step with adaptive feedback, and delivering the full cooking plan and inventory via email, thereby transforming a disjointed workflow into a seamless, interactive cooking experience&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;CuisineChef&lt;/strong&gt;, an AI-powered cooking assistant using Runner H that offers a full-stack, interactive cooking experience:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Smart Inventory Logging&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users input ingredients with quantities. Runner H automatically categorizes each item (fruits, proteins, spices, etc.) and logs them into a Google Sheet named &lt;strong&gt;CuisineChef Inventory&lt;/strong&gt; with columns like &lt;code&gt;Category | Item&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;Confirms back to the user with a link to the sheet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Personalized Recipe Suggestions&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyzes inventory alongside cuisine preference, dietary restrictions, and serving size.
&lt;/li&gt;
&lt;li&gt;Proposes 2–3 tailored dish options, highlighting any missing staples.
&lt;/li&gt;
&lt;li&gt;Awaits user selection before proceeding.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dynamic Recipe Document Generation&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On dish selection, Runner H creates a Google Doc titled &lt;code&gt;Recipe – [Dish Name]&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;The document includes:

&lt;ul&gt;
&lt;li&gt;Full ingredient list (from the sheet)
&lt;/li&gt;
&lt;li&gt;Step-by-step cooking directions with sensory cues, technique explanations, and substitution tips&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interactive Cooking Walkthrough&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Presents one instruction at a time with prompts like “Ready to proceed?”.
&lt;/li&gt;
&lt;li&gt;Adapts in real-time based on user feedback, enabling a guided in-kitchen experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Finalization &amp;amp; Email Delivery&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logs cooking metadata (&lt;code&gt;Dish | Date | Servings | Total Time | Notes&lt;/code&gt;) back into the sheet.
&lt;/li&gt;
&lt;li&gt;Sends an email via Gmail with subject &lt;code&gt;Your Recipe &amp;amp; Inventory: [Dish Name]&lt;/code&gt;, body text, and links to the Google Doc and Sheet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Robust Workflow &amp;amp; Error Handling&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enforces rules such as confirmation prompts, strict dietary compliance, and step order.
&lt;/li&gt;
&lt;li&gt;Verifies document accessibility before emailing and retries failed operations, notifying if needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This workflow builds on Runner H’s proven orchestration capabilities—like automating generating Google Docs, and emailing them after execution demonstrating how Runner H can cohesively orchestrate Sheets, Docs, Gmail, and interactive logic to deliver a dynamic, end-to-end cooking assistant.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://runner.hcompany.ai/chat/9fe0fe2e-e136-4266-95fb-ebf7b281c347/share" rel="noopener noreferrer"&gt;View the Demo here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mail Screenshot&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbdyu7e988danxet1ffu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbdyu7e988danxet1ffu.png" alt="Mail Screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ingredients Google Sheet Screenshot&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy4rbie7m7chku5phkbz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy4rbie7m7chku5phkbz.png" alt="Ingredients Google Sheet Screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cooking Procedure Google Doc Screenshot&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkaojvg1v1z8wpp4l0epo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkaojvg1v1z8wpp4l0epo.png" alt="Cooking Procedure Google Doc Screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example visual flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User enters categorized ingredients&lt;/li&gt;
&lt;li&gt;Sheet auto-populates with data&lt;/li&gt;
&lt;li&gt;Agent proposes 2–3 dishes; user selects one&lt;/li&gt;
&lt;li&gt;Recipe Doc populated with detailed steps&lt;/li&gt;
&lt;li&gt;Interactive cooking walkthrough with confirmation prompts&lt;/li&gt;
&lt;li&gt;Final email delivered with doc and sheet links&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  🔃 Workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;User Input &amp;amp; Inventory Logging&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prompt&lt;/strong&gt;: User lists ingredients with quantities and selects cuisine, dietary restrictions, servings, and difficulty level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action&lt;/strong&gt;: Runner H uses Google Sheets integration to:&lt;/li&gt;
&lt;li&gt;Create/open a sheet named &lt;code&gt;CuisineChef Inventory&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Auto-categorize each ingredient (fruits, proteins, spices, etc.)&lt;/li&gt;
&lt;li&gt;Insert a row per item: &lt;code&gt;Category | Item | Quantity | Unit&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Feedback&lt;/strong&gt;: “Your inventory has been saved here: [Sheet Link]”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recipe Suggestion&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Process&lt;/strong&gt;: Runner H analyzes available ingredients, chosen cuisine, and dietary restrictions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outcome&lt;/strong&gt;: It recommends 2–3 recipes, noting any missing staples.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Input Required&lt;/strong&gt;: Pauses until the user selects one option.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Creating the Recipe Document&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Action&lt;/strong&gt;: Using Docs integration, Runner H generates a Google Doc titled &lt;code&gt;Recipe – [Dish Name]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contents&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;Ingredient list (sourced from the sheet)&lt;/li&gt;
&lt;li&gt;Step-by-step instructions&lt;/li&gt;
&lt;li&gt;Sensory cues, techniques, substitution tips&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Interactive Cooking Guide&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Delivery&lt;/strong&gt;: Instructions delivered one at a time in-chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Confirmation&lt;/strong&gt;: After each step, Runner H asks: “Ready to proceed?”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptation&lt;/strong&gt;: Adapts based on feedback (“Too spicy?”, “Sauce too thin?”).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Final Logging &amp;amp; Metadata Capture&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reliability&lt;/strong&gt;: Ensures sheet updates before proceeding, in line with Sheets + Gmail automation methods.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Email Delivery&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Email Composition&lt;/strong&gt;: Using Gmail integration:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subject&lt;/strong&gt;: “Your Recipe &amp;amp; Inventory: [Dish Name]”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Body&lt;/strong&gt;: Friendly message with links to both Sheet and Doc&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recipients&lt;/strong&gt;: User's email&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation&lt;/strong&gt;: Follows mail‐merge style automation patterns for sending emails from sheets.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Error Handling &amp;amp; Rules&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validates document accessibility before sending&lt;/li&gt;
&lt;li&gt;Retries up to two times on failures&lt;/li&gt;
&lt;li&gt;Notifies user via email or Slack about any errors, per your rules&lt;/li&gt;
&lt;li&gt;Confirms each stage sequentially, respecting dietary restrictions and step order&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This workflow demonstrates how Runner H orchestrates a &lt;strong&gt;multi-step, user-interactive, integrated cooking experience&lt;/strong&gt;, leveraging structured Sheets for inventory, Docs for recipe creation, and Gmail for final delivery—following best practices in Google Workspace.&lt;/p&gt;
&lt;h2&gt;
  
  
  ️⌨️ Prompt
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are **CuisineChef Agent** powered by Runner H.
You have access to the following tools (with my permissions):  
- **Gmail** (send access)   @tool:Gmail 
- **Google Sheets** @tool:Google sheets 
- **Google Docs** @tool:Google Docs 

**Objective:** Based on available ingredients and cuisine choice, guide the user through an interactive cooking experience.

---
STEP 1: Ask for user inputs:
1. List the ingredients you have.
2. Choose your desired cuisine style (e.g., Italian, Indian, Thai).
3. Any dietary restrictions (e.g., vegetarian, gluten-free).
4. Number of servings.
5. Preferred cooking time or difficulty level.
---
STEP 2: Categorize ingredients:
- Group items into these categories:
  - **Fruits** (e.g., apples, tomatoes) :contentReference[oaicite:1]{index=1}
  - **Vegetables** (roots, leafy, stem, seed, fruit-vegetables) :contentReference[oaicite:2]{index=2}
  - **Proteins** (meat, fish, tofu, legumes) :contentReference[oaicite:3]{index=3}
  - **Grains/Starches** (rice, pasta, bread, cereals) :contentReference[oaicite:4]{index=4}
  - **Dairy / Alternatives** (milk, cheese, plant-based milks) :contentReference[oaicite:5]{index=5}
  - **Condiments &amp;amp; Sauces** (oil, vinegar, ketchup, soy sauce) :contentReference[oaicite:6]{index=6}
  - **Herbs &amp;amp; Spices** (salt, pepper, cumin, basil) :contentReference[oaicite:7]{index=7}
  - **Oils &amp;amp; Fats** (olive oil, butter, coconut oil) :contentReference[oaicite:8]{index=8}
  - **Sweeteners &amp;amp; Preserves** (honey, jam, syrups) :contentReference[oaicite:9]{index=9}
  - **Misc/Staples** (flour, baking powder, stock) :contentReference[oaicite:10]{index=10}

- Prompt user:
   Please confirm which of these categories you have items from, and optionally list specifics for each:
- Fruits:
- Vegetables:
- Proteins:
- Grains:
- Dairy/Alternatives:
- Condiments/Sauces:
- Herbs &amp;amp; Spices:
- Oils/Fats:
- Sweeteners/Preserves:
- Misc staples:
---
STEP 3: Organize Inventory in Google Sheet:
**Action:**  Create or open a Sheet named `CuisineChef Inventory`
- For each provided ingredient, add a row with columns: `Category | Item 
  - Auto-categorize into Fruits, Vegetables, Proteins, etc., based on a lookup list
- Confirm back to user: “Your inventory has been saved to Sheet: [Sheet Link]”.
---
STEP 4: Analyze &amp;amp; Suggest Dishes:
**Action:** Match available categories + cuisine to suitable dishes.
**Ask User**
- Propose 2–3 options including what additional staples (if any) are needed.
Make sure that the user selects an option before proceeding
---
STEP 5: Once dish selected:
Once the user has selected a dish then do the following:
**Action:** Create a new Google Doc titled `"Recipe – [Dish Name]"`
- Populate it with:
  - Ingredients list along with the quantity/amount (pulling from the sheet)
  - Step-by-step cooking instructions with sensory cues and tips
  - Key techniques, substitutions, and plating suggestions
---
STEP 6: Interactive walkthrough:
**Action:** After each step, ask “Ready to proceed?”
- Allow feedback (“Too spicy?”, “Sauce too thin?”) and adapt steps.
---
STEP 7: Adaptation:
**Action:**  If a user reports an issue (“sauce too thin,” “rice undercooked”), offer real‑time solutions.
- Suggest alternate cooking methods (oven vs stovetop vs slow cooker).
---
STEP 8: Final step:
- Use Gmail integration:
  - **Email to User:**  
        - **Subject**: Your Recipe &amp;amp; Inventory: [Dish Name]
        - **Body**: Hi! Here are your cooking documents. Let me know if you need tweaks.
  - Attach links to both the Google Doc and the Google Sheet.
**Actions**: Send the email to the user
---
Rules:
1. **Always ask** for user confirmation before proceeding to the next cooking step.
2. **Auto-categorization** must correctly map ingredients to one of the 10 categories.
3. **Do not proceed** to recipe generation until the user has selected a dish option.
4. **Make sure** to complete each step as specified in the same order
5. **Respect dietary restrictions** strictly—no banned ingredients may appear.
6. **Ensure Sheet and Doc links** are valid and accessible before emailing.
7. **Handle errors gracefully**—if a document fails to generate or email fails, notify via Slack/Gmail summary and retry up to two times.
---
Output Format:
Your final output (after cooking) should include
Email sent: ✔
• Sheet: [Sheet Link]  
• Recipe Doc: [Doc Link]  
Cooking Summary:  
• Dish: [Name]  
• Servings: [Number]  
• Total Time: [Minutes] 
• Notes: [e.g., “Adjusted for spice level”] 

---
## Example input flow
Hi there! Let’s cook something special today. Please tell me:

1. What ingredients do you have, grouped by category:  
    Fruits:  Mango, apple
    Vegetables:  Potato, Onion
    Proteins:  Chicken, egg
    Grains:  Rice
    Dairy/Alternatives:  Paneer, Milk
    Condiments/Sauces:  Soy sauce
    Herbs &amp;amp; Spices:  Chilli, salt, pepper
    Oils/Fats:  vegetable oil
    Sweeteners/Preserves:  sugar 
    Misc staples: none
2. Your preferred cuisine type: Indian
3. Any dietary restrictions: None
4. Number of servings: 2
5. Desired cooking time or difficulty level: Beginner
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  ️⁉️ How I Used Runner H
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prompt design:&lt;/strong&gt; Piped user inputs through integrated Sheets and Docs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sheets integration:&lt;/strong&gt; Created/opened a sheet (CuisineChef Inventory), auto-categorized each ingredient, and logged rows under Category | Item.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recipe generation:&lt;/strong&gt; Once a dish was chosen, Runner H generated a Google Doc titled Recipe – [Dish Name], pulling ingredient data from the sheet and embedding detailed sensory instructions, substitutions, and plating tips.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive mode:&lt;/strong&gt; After each cooking step, Runner H paused, asked for confirmation (“Ready to proceed?”), and responded to feedback (“Too spicy?”, “Sauce too thin?”) with adaptive guidance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracking:&lt;/strong&gt; Logged cooking metadata into the doc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gmail integration:&lt;/strong&gt; Automatically sent an email with subject Your Recipe &amp;amp; Inventory: [Dish Name], body text, and links to both the sheet and recipe doc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error handling:&lt;/strong&gt; Incorporated rules to ensure process flow integrity, including retries for failed writes or email sends and validation of links prior to dispatch.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  👁️‍🗨️ Use Case &amp;amp; Impact
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Everyday cooks &amp;amp; busy households:&lt;/strong&gt; Can maximize pantry use, reduce waste, and cook confidently with live guidance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dietary-specific users:&lt;/strong&gt; Ensures respect for restrictions (vegan, gluten-free, etc.) through automated filtering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Culinary learners:&lt;/strong&gt; Offers educational cooking with science-based sensory cues and substitutions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable solution:&lt;/strong&gt; Could be extended to meal planning, nutritional analytics, shopping lists—especially useful in meal-kit services or food-waste reduction initiatives.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By automating the entire recipe writing and cooking guide process, users get structured, reliable, and interactive cooking aid delivered straight to their inbox—no manual recipe-searching required.&lt;/p&gt;
&lt;h3&gt;
  
  
  📱 Social Love
&lt;/h3&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1941539799443308902-709" src="https://platform.twitter.com/embed/Tweet.html?id=1941539799443308902"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1941539799443308902-709');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1941539799443308902&amp;amp;theme=dark"
  }



&lt;/p&gt;




&lt;h2&gt;
  
  
  🙏 Thank You for Reading!
&lt;/h2&gt;

&lt;p&gt;I hope you enjoyed exploring &lt;strong&gt;CuisineChef Agent&lt;/strong&gt; — my AI-powered, fully automated cooking assistant built with &lt;strong&gt;Runner H&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
If this inspired you or helped you think of ways to build your own workflow, I’d love to hear about it!&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Drop a comment below&lt;/strong&gt; — I read and reply to every one!&lt;/p&gt;

&lt;h3&gt;
  
  
  ❤️ If you found this helpful:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Leave a like&lt;/strong&gt; to support the post
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share&lt;/strong&gt; it with others who love cooking, automation, or AI agents
&lt;/li&gt;
&lt;li&gt;And &lt;strong&gt;follow me&lt;/strong&gt; for more Runner H and web automation builds!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy building (and cooking)! 🍳✨&lt;br&gt;&lt;br&gt;
&lt;strong&gt;– Shivam Sharma&lt;/strong&gt;&lt;/p&gt;




</description>
      <category>devchallenge</category>
      <category>runnerhchallenge</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>StashIt: Your Game Assets Storage Hub | Powered by Pinata 🪅 IPFS SDK</title>
      <dc:creator>Shivam Sharma</dc:creator>
      <pubDate>Mon, 14 Oct 2024 06:45:44 +0000</pubDate>
      <link>https://dev.to/shivamsharma1/stashit-your-game-asset-hub-3c6d</link>
      <guid>https://dev.to/shivamsharma1/stashit-your-game-asset-hub-3c6d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/pinata"&gt;The Pinata Challenge &lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What we Built
&lt;/h2&gt;

&lt;p&gt;We created &lt;strong&gt;StashIt&lt;/strong&gt;, a game assets storage web app that leverages the power of Next.js, TailwindCSS, and Pinata. It securely stores various game assets, such as images, audio, video, and 3D models, over the IPFS network. Each file is uniquely identified by its CID, provided by Pinata, ensuring no duplicate assets. The platform also includes AI-powered features to generate character lore using OpenRouter API. Additionally, users can add metadata to their files for enhanced asset management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Access the live deployment of the project &lt;a href="https://stash-it.vercel.app" rel="noopener noreferrer"&gt;here!&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Landing Page
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2ro0zej5rpeq61xex42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2ro0zej5rpeq61xex42.png" alt="Landing Page" width="800" height="966"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  My Projects Dashboard
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mkl9ld1y5ktwj632xri.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mkl9ld1y5ktwj632xri.jpg" alt="My Projects Dashboard" width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Explore Assets
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdn8ke62u2obrcxlmg4px.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdn8ke62u2obrcxlmg4px.jpg" alt="Explore Assets" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  File Preview
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fds1mov1z7yezgq28abz9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fds1mov1z7yezgq28abz9.jpg" alt="File Preview" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Character Lore Generator
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisxem9vas7l169cbqm30.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisxem9vas7l169cbqm30.jpg" alt="AI Character Lore Generator" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Auth Page
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e5sfsb4y32jfxjkmnst.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e5sfsb4y32jfxjkmnst.jpg" alt="Auth Page" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Single File Upload
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuy5r4cuiv04xvhjiqliq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuy5r4cuiv04xvhjiqliq.jpg" alt="Single File Upload" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Pinata Features
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IPFS Storage&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We utilized Pinata's IPFS service to securely store and retrieve game assets. The files uploaded to Pinata are decentralized, providing durability and reliability in asset storage.
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;file&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;File&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;upload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pinata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;upload&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addMetadata&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;keyValues&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nx"&gt;successCount&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Error uploading file &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Failed to upload &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unique CID Management&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each uploaded asset is assigned a unique Content Identifier (CID) by Pinata, which allows for efficient tracking and prevents duplicate uploads. This feature is crucial for maintaining an organized library of game assets.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Metadata Management&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users can attach metadata to their assets through Pinata, allowing for better categorization and searchability of game files. This feature enables users to manage their assets more effectively by providing additional context and information about each asset.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Group Management&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users can create and manage groups, allowing them to collaborate on projects with team members. This feature fosters teamwork by enabling users to share and organize assets collectively within a group.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pinning and Unpinning Files&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users have the ability to pin and unpin files in their asset library. Pinning files ensures that they remain available on the IPFS network, while unpinning allows users to remove files they no longer need, optimizing storage and management.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pinning AI-Generated Content&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-generated text will be pinned in the form of a text file associated with the selected project or group.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pinata Pagination&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Pinata pagination feature allows users to easily manage large collections of files by organizing them into pages, improving the user experience when browsing and retrieving assets.
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pinata&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listFiles&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pageLimit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;itemsPerPage&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Request 11 items&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pageOffset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;itemsPerPage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Correct offset when page starts at 0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seamless Integration&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The integration of Pinata with our Next.js application was straightforward. The Pinata API allowed us to implement functionalities such as file uploads, retrieval, and metadata attachment with minimal overhead.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;User Authentication&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using &lt;strong&gt;Auth.js&lt;/strong&gt; for OAuth, we ensured that users can securely log in and manage their assets, providing a personalized experience while interacting with the Pinata features.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Source Code
&lt;/h2&gt;

&lt;p&gt;View the project code in the repository&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Shivam-Sharma-1" rel="noopener noreferrer"&gt;
        Shivam-Sharma-1
      &lt;/a&gt; / &lt;a href="https://github.com/Shivam-Sharma-1/Stash-It" rel="noopener noreferrer"&gt;
        Stash-It
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      StashIt is a game assets storage web app that leverages the power of Next.js, TailwindCSS, and Pinata. It securely stores various game assets, such as images, audio, video, and 3D models, over the IPFS network. Each file is uniquely identified by its CID, provided by Pinata, ensuring no duplicate assets.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/111264028/376122604-fa4a37ff-30c0-4750-9d0f-1ee594faf120.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTIyNjA0LWZhNGEzN2ZmLTMwYzAtNDc1MC05ZDBmLTFlZTU5NGZhZjEyMC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kYTNjNTdmNTEwMDE1YzBjNzM3YzA5YmIzYjg0ZDM0Yzk5YjkyYTQzMjQ4MmFiYjRkZDFjYTRlYjlmMjkzOGZjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.P-qgCchp0HcqQ7Xz7OjNl_oh9hyzlNVmTEZouZHzfIs"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F111264028%2F376122604-fa4a37ff-30c0-4750-9d0f-1ee594faf120.png%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTIyNjA0LWZhNGEzN2ZmLTMwYzAtNDc1MC05ZDBmLTFlZTU5NGZhZjEyMC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kYTNjNTdmNTEwMDE1YzBjNzM3YzA5YmIzYjg0ZDM0Yzk5YjkyYTQzMjQ4MmFiYjRkZDFjYTRlYjlmMjkzOGZjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.P-qgCchp0HcqQ7Xz7OjNl_oh9hyzlNVmTEZouZHzfIs" alt="dev to banner"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;StashIt: Your Game Asset Hub!&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;StashIt is a game assets storage web app that leverages the power of Next.js, TailwindCSS, and Pinata. It securely stores various game assets, such as images, audio, video, and 3D models, over the IPFS network. Each file is uniquely identified by its CID, provided by Pinata, ensuring no duplicate assets. The platform also includes AI-powered features to generate character lore using OpenRouter API. Additionally, users can add metadata to their files for enhanced asset management.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Table of Contents&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Shivam-Sharma-1/Stash-It#demo" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shivam-Sharma-1/Stash-It#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shivam-Sharma-1/Stash-It#technologies-used" rel="noopener noreferrer"&gt;Technologies Used&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shivam-Sharma-1/Stash-It#packages-used" rel="noopener noreferrer"&gt;Packages Used&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shivam-Sharma-1/Stash-It#environment-variables" rel="noopener noreferrer"&gt;Environment Variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shivam-Sharma-1/Stash-It#getting-started" rel="noopener noreferrer"&gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shivam-Sharma-1/Stash-It#folder-structure" rel="noopener noreferrer"&gt;Folder Structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shivam-Sharma-1/Stash-It#running-the-application" rel="noopener noreferrer"&gt;Running the Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shivam-Sharma-1/Stash-It#author" rel="noopener noreferrer"&gt;Author&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Shivam-Sharma-1/Stash-It#documentation" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Demo&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://stash-it.vercel.app" rel="nofollow noopener noreferrer"&gt;Click here!&lt;/a&gt; to view the live deployment.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Landing Page&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/111264028/376122957-7f8ce162-1b52-49c3-87c2-9a5310cce561.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTIyOTU3LTdmOGNlMTYyLTFiNTItNDljMy04N2MyLTlhNTMxMGNjZTU2MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04ZmJkMWNmNjAwMDliZWU0ZWJiYzAzMWE5OWQ1N2U5ZjJiMmIxYTZjMDg3NjYxMmI4MmQ3ZTVkMzkyOGM2NjE1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.FYZb2pC4KWggF8xpUnwO8304dKgUrEoRY3DQkqdwj6s"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F111264028%2F376122957-7f8ce162-1b52-49c3-87c2-9a5310cce561.png%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTIyOTU3LTdmOGNlMTYyLTFiNTItNDljMy04N2MyLTlhNTMxMGNjZTU2MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04ZmJkMWNmNjAwMDliZWU0ZWJiYzAzMWE5OWQ1N2U5ZjJiMmIxYTZjMDg3NjYxMmI4MmQ3ZTVkMzkyOGM2NjE1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.FYZb2pC4KWggF8xpUnwO8304dKgUrEoRY3DQkqdwj6s" alt="landing-pagee"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;My Projects Dashboard&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/111264028/376123262-684f2bf7-0ffd-4ee2-8ec0-8fd469a5232e.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTIzMjYyLTY4NGYyYmY3LTBmZmQtNGVlMi04ZWMwLThmZDQ2OWE1MjMyZS5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00OWJjYjBjYWY1MDIyODNkYWVjNTRjN2YyZDhhMWJiNGI5ZTFjMDEwNGQ5NjJmNmJiN2U2NjY0MDU4NmMzMDRjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.o1-oMFNvJD78aJBJmDjzmmIuXucFjyMGBCIYbxSIdwY"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F111264028%2F376123262-684f2bf7-0ffd-4ee2-8ec0-8fd469a5232e.jpg%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTIzMjYyLTY4NGYyYmY3LTBmZmQtNGVlMi04ZWMwLThmZDQ2OWE1MjMyZS5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00OWJjYjBjYWY1MDIyODNkYWVjNTRjN2YyZDhhMWJiNGI5ZTFjMDEwNGQ5NjJmNmJiN2U2NjY0MDU4NmMzMDRjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.o1-oMFNvJD78aJBJmDjzmmIuXucFjyMGBCIYbxSIdwY" alt="my projects dashboard"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Explore Assets&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/111264028/376123503-161e606c-2f3f-44f7-beee-5bd079f26cb1.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTIzNTAzLTE2MWU2MDZjLTJmM2YtNDRmNy1iZWVlLTViZDA3OWYyNmNiMS5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jMmQzZTE1MDdhMDc2NmE5NGMwY2E4MWYxMjYwNDkyOGRhYjc1MmRlZTFkYWYzNzczYjFmNzJiMzM1ZDg0Y2Q1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.8lMc5Gsxdwhun4H6a3fYzCp6KRsJDvFFAaMwI1GG_PE"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F111264028%2F376123503-161e606c-2f3f-44f7-beee-5bd079f26cb1.jpg%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTIzNTAzLTE2MWU2MDZjLTJmM2YtNDRmNy1iZWVlLTViZDA3OWYyNmNiMS5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jMmQzZTE1MDdhMDc2NmE5NGMwY2E4MWYxMjYwNDkyOGRhYjc1MmRlZTFkYWYzNzczYjFmNzJiMzM1ZDg0Y2Q1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.8lMc5Gsxdwhun4H6a3fYzCp6KRsJDvFFAaMwI1GG_PE" alt="explore assets"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Fire Preview&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/111264028/376124004-8403fb84-ec31-41fc-ab75-ec9125173a54.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTI0MDA0LTg0MDNmYjg0LWVjMzEtNDFmYy1hYjc1LWVjOTEyNTE3M2E1NC5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zYmVhMWRjNmZlMWExNzYwNTJlYTA5ZjMyNzg2MmM5NmEyMTQ1MTA5Y2M1MGQ5MDcyOWViNTQ5ODBlMzAwYjcyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.5VxbXO87gZpqEovWifmxQz4qu_tqMGYkoK7FageYQjc"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F111264028%2F376124004-8403fb84-ec31-41fc-ab75-ec9125173a54.jpg%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTI0MDA0LTg0MDNmYjg0LWVjMzEtNDFmYy1hYjc1LWVjOTEyNTE3M2E1NC5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zYmVhMWRjNmZlMWExNzYwNTJlYTA5ZjMyNzg2MmM5NmEyMTQ1MTA5Y2M1MGQ5MDcyOWViNTQ5ODBlMzAwYjcyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.5VxbXO87gZpqEovWifmxQz4qu_tqMGYkoK7FageYQjc" alt="file preview"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;AI Character Lore Generator&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/111264028/376124550-bbfbe676-a8d6-4f00-ba4e-fc10388f7668.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTI0NTUwLWJiZmJlNjc2LWE4ZDYtNGYwMC1iYTRlLWZjMTAzODhmNzY2OC5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jZTEwMmEyY2EzYTlhYzk5ODU0NWZlM2U2Y2I3MGNlOWFhMTBhYzg3MjA2ODljMzQ4MDFiOWI5NzEyNDBmMzVmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.dnwG73KOeCIJBM_cXXNXeXKgy12FkHmAWdbqX1-Z7kU"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F111264028%2F376124550-bbfbe676-a8d6-4f00-ba4e-fc10388f7668.jpg%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTI0NTUwLWJiZmJlNjc2LWE4ZDYtNGYwMC1iYTRlLWZjMTAzODhmNzY2OC5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jZTEwMmEyY2EzYTlhYzk5ODU0NWZlM2U2Y2I3MGNlOWFhMTBhYzg3MjA2ODljMzQ4MDFiOWI5NzEyNDBmMzVmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.dnwG73KOeCIJBM_cXXNXeXKgy12FkHmAWdbqX1-Z7kU" alt="Ai character lore generator"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Auth Page&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/111264028/376124966-8c0a28da-7ddd-4403-8ffa-dffa43bd2e41.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTI0OTY2LThjMGEyOGRhLTdkZGQtNDQwMy04ZmZhLWRmZmE0M2JkMmU0MS5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yZjBjZTYyN2EwZmM3MmVhOWMwMzZjNzU1ZDQ1YWE4NDEyYTYxNjIxZmUxMzg2MWUyY2Y5MDY4NDU4ZWNjZmMzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.QTkLELC5nTJDYPzcTHkbIG4qtdDoxYLqHjAYixc0BG4"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F111264028%2F376124966-8c0a28da-7ddd-4403-8ffa-dffa43bd2e41.jpg%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTI0OTY2LThjMGEyOGRhLTdkZGQtNDQwMy04ZmZhLWRmZmE0M2JkMmU0MS5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yZjBjZTYyN2EwZmM3MmVhOWMwMzZjNzU1ZDQ1YWE4NDEyYTYxNjIxZmUxMzg2MWUyY2Y5MDY4NDU4ZWNjZmMzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.QTkLELC5nTJDYPzcTHkbIG4qtdDoxYLqHjAYixc0BG4" alt="auth"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Single File Upload&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/111264028/376125154-ab02355e-aae5-4334-a87b-b365380ccb6a.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTI1MTU0LWFiMDIzNTVlLWFhZTUtNDMzNC1hODdiLWIzNjUzODBjY2I2YS5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wODk0MDJmYmI0MjRlNzJjYzEzZTc4MDEyM2RmYzI5ODIwMzE2Nzk2ZjE1YTNkODRlZTllN2RlMTc4OGJiYjM1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.IljmF0EWjdHVBZEh-aHL3zeMIduN07yXv4r48zstRgQ"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F111264028%2F376125154-ab02355e-aae5-4334-a87b-b365380ccb6a.jpg%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg4ODkxODksIm5iZiI6MTcyODg4ODg4OSwicGF0aCI6Ii8xMTEyNjQwMjgvMzc2MTI1MTU0LWFiMDIzNTVlLWFhZTUtNDMzNC1hODdiLWIzNjUzODBjY2I2YS5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQxMDE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MTAxNFQwNjU0NDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wODk0MDJmYmI0MjRlNzJjYzEzZTc4MDEyM2RmYzI5ODIwMzE2Nzk2ZjE1YTNkODRlZTllN2RlMTc4OGJiYjM1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.IljmF0EWjdHVBZEh-aHL3zeMIduN07yXv4r48zstRgQ" alt="single upload"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;IPFS-based storage for game assets (images, audio, video, and 3D models)&lt;/li&gt;
&lt;li&gt;Unique CID for each asset to avoid duplicates&lt;/li&gt;
&lt;li&gt;Pinata metadata feature: Add…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Shivam-Sharma-1/Stash-It" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  More Details
&lt;/h2&gt;

&lt;p&gt;StashIt showcases the potential of using Pinata in web applications aimed at managing digital assets. By leveraging Pinata's robust IPFS capabilities, we ensured that our users could securely upload, manage, and share their game assets without the worry of loss or duplication. The use of metadata allows for a more organized approach to asset management, making it easier for users to find and utilize their stored assets effectively.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI Character Lore Generation&lt;/strong&gt;: Users can create unique character lore and storylines using the OpenRouter API, enhancing their game development experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OAuth with Auth.js&lt;/strong&gt;: We implemented OAuth functionality using &lt;strong&gt;Auth.js&lt;/strong&gt;, allowing users to log in via third-party services such as Google or GitHub, adding an extra layer of security and ease of use in managing their assets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pinning AI-generated Content&lt;/strong&gt;: Users can pin AI-generated images to selected projects or groups, while AI-generated text will be pinned in the form of a text file associated with the selected project or group.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Team Submissions:
&lt;/h2&gt;

&lt;p&gt;This is a submission by a team of 2 members.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a class="mentioned-user" href="https://dev.to/shivamsharma1"&gt;@shivamsharma1&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a class="mentioned-user" href="https://dev.to/sidjs"&gt;@sidjs&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>pinatachallenge</category>
      <category>webdev</category>
      <category>api</category>
    </item>
  </channel>
</rss>
