<?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: quantum</title>
    <description>The latest articles on DEV Community by quantum (@_quant).</description>
    <link>https://dev.to/_quant</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%2F3379400%2F26c688f9-6151-40ac-9c12-1c7087af7dc5.png</url>
      <title>DEV Community: quantum</title>
      <link>https://dev.to/_quant</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_quant"/>
    <language>en</language>
    <item>
      <title>SOMMIA: How Bolt Helped Me Build an AI Sommelier in 48 Hours</title>
      <dc:creator>quantum</dc:creator>
      <pubDate>Tue, 22 Jul 2025 17:14:13 +0000</pubDate>
      <link>https://dev.to/_quant/sommia-how-bolt-helped-me-build-an-ai-sommelier-in-48-hours-58j8</link>
      <guid>https://dev.to/_quant/sommia-how-bolt-helped-me-build-an-ai-sommelier-in-48-hours-58j8</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Idea: Democratizing Wine Expertise with AI&lt;/strong&gt;&lt;br&gt;
After analyzing the French wine market, I identified a major problem: 73% of French people struggle to choose wine, and Millennials find this world "too complicated" and "intimidating." No French app truly combined advanced AI, simplicity, and personalized recommendations based on dishes.&lt;br&gt;
The idea for SOMMIA was born: transform your smartphone into a personal sommelier that recommends the perfect wine based on your dish, budget, and preferences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Bolt.new Changed Everything&lt;/strong&gt;&lt;br&gt;
The Initial Challenge&lt;br&gt;
Developing a mobile app with AI as a solo founder, without a technical team, on a tight budget and a 2-week deadline. Mission impossible? Not with Bolt.new.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Convinced Me&lt;/strong&gt;&lt;br&gt;
When I discovered that Bolt.new supported Expo and React Native, I knew this was the tool I needed. The promise was compelling: "Skip the coding bootcamp! With Bolt and Expo you can create mobile applications simply by describing the app you want to build."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Magic Workflow&lt;/strong&gt;&lt;br&gt;
No-code to low-code: Start with natural language description then refine the code&lt;br&gt;
Instant preview: Real-time testing with Expo Go&lt;br&gt;
Direct App Store path: Straight to production via EAS Build&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Architecture with Bolt&lt;/strong&gt;&lt;br&gt;
My Initial Prompt&lt;br&gt;
Create a mobile app SOMMIA with Expo and Supabase:&lt;/p&gt;

&lt;p&gt;Wine recommendation AI app for French Millennials. &lt;br&gt;
Simple interface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Onboarding screen (7-day free trial)&lt;/li&gt;
&lt;li&gt;Camera for dish photos OR text input&lt;/li&gt;
&lt;li&gt;Results screen with 3 wine recommendations + reasoning&lt;/li&gt;
&lt;li&gt;5-star rating system&lt;/li&gt;
&lt;li&gt;Premium paywall €4.99/month after 7 days&lt;/li&gt;
&lt;li&gt;Supabase auth + Stripe subscriptions&lt;/li&gt;
&lt;li&gt;Modern UI, premium colors (burgundy/gold)&lt;/li&gt;
&lt;li&gt;Expo Router navigation&lt;/li&gt;
&lt;li&gt;AsyncStorage for caching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stack: React Native + Expo + Supabase + Stripe&lt;br&gt;
Design: Elegant, simple, confidence-building&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Complete structure generated by Bolt.new
src/
├── components/
│   ├── Camera.jsx           // Dish photo capture
│   ├── WineCard.jsx         // Recommendation display
│   ├── PaywallModal.jsx     // Subscription modal
│   └── LoadingSpinner.jsx   // Loading states
├── screens/
│   ├── OnboardingScreen.jsx // 7-day trial introduction
│   ├── HomeScreen.jsx       // Main interface
│   ├── ResultsScreen.jsx    // AI recommendations
│   └── ProfileScreen.jsx    // Account management
├── services/
│   ├── supabase.js         // Database config
│   ├── openai.js           // AI integration
│   └── stripe.js           // Payments
├── hooks/
│   ├── useAuth.js          // Authentication state
│   ├── useCamera.js        // Camera permissions
│   └── useSubscription.js  // Premium status
└── App.jsx                 // Main navigation

// Automatic Expo configuration
{
  "expo": {
    "name": "SOMMIA",
    "slug": "sommia",
    "version": "1.0.0",
    "platforms": ["ios", "android"],
    "icon": "./assets/icon.png",
    "splash": {
      "image": "./assets/splash.png",
      "backgroundColor": "#8B1538"
    },
    "plugins": [
      "expo-camera",
      "expo-image-picker",
      ["expo-stripe-checkout", {
        "merchantId": "merchant.com.sommia"
      }]
    ]
  }
}

// Supabase authentication hook
import { useEffect, useState } from 'react';
import { supabase } from '../services/supabase';

export function useAuth() {
  const [session, setSession] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() =&amp;gt; {
    supabase.auth.getSession().then(({ data: { session } }) =&amp;gt; {
      setSession(session);
      setLoading(false);
    });

    const { data: { subscription } } = supabase.auth.onAuthStateChange(
      (_event, session) =&amp;gt; {
        setSession(session);
      }
    );

    return () =&amp;gt; subscription.unsubscribe();
  }, []);

  return { session, loading };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The "Wow" Moments with Bolt&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sophisticated AI Integration
The most impressive part was watching Bolt generate the AI recommendation system. 
My prompt:
"Add an AI system that analyzes dish photos, determines optimal wine pairings based on budget and user preferences"&lt;/li&gt;
&lt;li&gt;Instant Native UI/UX
Asking for "modern and premium design with smooth animations" produced an interface that looked like it came from a professional design studio.&lt;/li&gt;
&lt;li&gt;Complex State Management Simplified
Subscription logic with Stripe, cache management, authentication... all generated in a few prompts.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// AI Service generated by Bolt.new
import { openai } from './openai';
import { supabase } from './supabase';
import AsyncStorage from '@react-native-async-storage/async-storage';

export class WineRecommendationService {
  static async analyzeImage(imageUri, userPreferences, budget) {
    try {
      // Cache check
      const cacheKey = `analysis_${imageUri}_${budget}`;
      const cached = await AsyncStorage.getItem(cacheKey);
      if (cached) return JSON.parse(cached);

      // Image analysis
      const base64Image = await this.convertToBase64(imageUri);

      const prompt = `
        Analyze this dish image and recommend 3 perfect French wines.

        Budget: €${budget} maximum per bottle
        Preferences: ${JSON.stringify(userPreferences)}

        Respond in JSON with:
        {
          "dish_detected": "dish name",
          "confidence": 95,
          "recommendations": [
            {
              "wine_name": "Sancerre Les Monts Damnés",
              "producer": "Henri Bourgeois",
              "region": "Loire Valley",
              "vintage": 2022,
              "price_estimate": 18,
              "match_score": 95,
              "reasoning": "This Sancerre brings perfect minerality...",
              "color": "white",
              "characteristics": ["mineral", "crisp", "elegant"]
            }
          ]
        }
      `;

      const response = await openai.chat.completions.create({
        model: "gpt-4-vision-preview",
        messages: [
          {
            role: "user",
            content: [
              { type: "text", text: prompt },
              { type: "image_url", image_url: { url: base64Image } }
            ]
          }
        ],
        max_tokens: 1500,
        temperature: 0.7
      });

      const analysis = JSON.parse(response.choices[0].message.content);

      // Cache result
      await AsyncStorage.setItem(cacheKey, JSON.stringify(analysis));

      // Store in Supabase
      await this.storeRecommendation(analysis, userPreferences);

      return analysis;

    } catch (error) {
      console.error('Wine analysis failed:', error);
      return this.getFallbackRecommendations(budget);
    }
  }

  static async getFallbackRecommendations(budget) {
    const { data: wines } = await supabase
      .from('wines')
      .select('*')
      .lte('price_estimate', budget)
      .order('rating', { ascending: false })
      .limit(3);

    return {
      dish_detected: "Detected dish",
      confidence: 75,
      recommendations: wines.map(wine =&amp;gt; ({
        ...wine,
        match_score: 85,
        reasoning: `Excellent choice within your €${budget} budget`
      }))
    };
  }

  static async convertToBase64(imageUri) {
    const response = await fetch(imageUri);
    const blob = await response.blob();
    return new Promise((resolve) =&amp;gt; {
      const reader = new FileReader();
      reader.onloadend = () =&amp;gt; resolve(reader.result);
      reader.readAsDataURL(blob);
    });
  }

  static async storeRecommendation(analysis, userPreferences) {
    const { data: { user } } = await supabase.auth.getUser();

    await supabase.from('recommendations').insert({
      user_id: user?.id,
      dish_description: analysis.dish_detected,
      ai_analysis: analysis,
      user_preferences: userPreferences,
      created_at: new Date().toISOString()
    });
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;From Bolt.new to App Store&lt;/strong&gt;&lt;br&gt;
Export and Deployment&lt;br&gt;
The workflow was surprisingly simple:&lt;/p&gt;

&lt;p&gt;Code download from Bolt.new&lt;br&gt;
EAS CLI setup: npm install -g @expo/eas-cli&lt;br&gt;
Configuration: eas build:configure&lt;br&gt;
iOS build: eas build --platform ios&lt;br&gt;
Submission: eas submit --platform ios&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Challenges Solved by Bolt&lt;/strong&gt;&lt;br&gt;
Problem: Cross-platform camera permissions management&lt;br&gt;
Bolt Solution: Automatic code with elegant fallbacks&lt;br&gt;
Problem: Complex Stripe integration&lt;br&gt;
Bolt Solution: Ready-to-use React hooks&lt;br&gt;
Problem: Performance with 10k+ wine database&lt;br&gt;
Bolt Solution: Optimized caching and pagination systems&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concrete Results&lt;/strong&gt;&lt;br&gt;
Timeline Met&lt;/p&gt;

&lt;p&gt;Day 1: Complete architecture generated&lt;br&gt;
Day 2: AI + Supabase + Stripe integrations&lt;br&gt;
Day 3: UI polish + testing&lt;br&gt;
Day 4: Build + App Store submission&lt;/p&gt;

&lt;p&gt;Technical Metrics&lt;/p&gt;

&lt;p&gt;Bundle size: 15MB (automatically optimized)&lt;br&gt;
Time to Interactive: &amp;lt;2 seconds&lt;br&gt;
Crash rate: 0% (Expo Go testing)&lt;br&gt;
Performance: Consistent 60 FPS&lt;/p&gt;

&lt;p&gt;Business Impact&lt;/p&gt;

&lt;p&gt;Concept validation: Functional app proves viability&lt;br&gt;
Investor pitch: Live demo vs mockups&lt;br&gt;
User feedback: Real user insights from week 1&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;br&gt;
Bolt.new's Superpowers&lt;/p&gt;

&lt;p&gt;Speed to MVP: 48h vs 2 months traditional&lt;br&gt;
Best practices: Professional code out-of-the-box&lt;br&gt;
Rapid iteration: Real-time changes&lt;br&gt;
Modern stack: Latest versions automatically&lt;br&gt;
Clean export: Maintainable and extensible code&lt;/p&gt;

&lt;p&gt;Honest Limitations&lt;/p&gt;

&lt;p&gt;AI complexity: Sophisticated prompts required&lt;br&gt;
Deep customization: Sometimes faster to code directly&lt;br&gt;
Advanced debugging: Stack traces less obvious&lt;br&gt;
Dependencies: Sometimes conservative choices&lt;/p&gt;

&lt;p&gt;Tips to Maximize Bolt&lt;/p&gt;

&lt;p&gt;Start simple then add complexity&lt;br&gt;
Specific prompts with examples&lt;br&gt;
Iterate in small steps&lt;br&gt;
Download regularly to save code&lt;br&gt;
Test on device with Expo Go&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Advice to Builders&lt;/strong&gt;&lt;br&gt;
If you have an app idea that excites you:&lt;/p&gt;

&lt;p&gt;Write a detailed prompt with your vision&lt;br&gt;
Let Bolt.new generate the architecture&lt;br&gt;
Iterate quickly with real users&lt;br&gt;
Export and deploy as soon as possible&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>wlhchallenge</category>
      <category>bolt</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
