A wine image recognition application that helps users identify wines from images of bottles or wine lists. Simply upload an image and let AI-powered image recognition find matching wines from our database. Perfect for wine enthusiasts, restaurants, and anyone curious about discovering new wines.
- Image recognition for wine bottles and wine lists
- Search for wines by name, producer, type, or region
- View detailed information about matched wines
- Simple and intuitive user interface
- Pre-loaded examples to demonstrate functionality
Live demo: http://51.21.196.109:5173/
Note: This is an HTTP page (not HTTPS), some browsers may block access. Please allow for this, and expect a slight load time.
The application is deployed on an AWS EC2 instance. This deployment choice offers:
- Full control over the server environment
- Customizable security and permission settings
- Cost-effective hosting for demonstration purposes
- Ability to scale resources as needed
Note: This is an HTTP page (not HTTPS), some browsers may block access. Please allow for this, and expect a slight load time.
To allow for potential separate front end and back end deployment, I containerised my application in two Docker images that can be pulled and run using the following commands:
docker pull ghcr.io/samannetts8/pour_decisions_frontend:latest
docker run -p 5173:5173 samannetts8/pour-decisions-frontend:latest
docker pull ghcr.io/samannetts8/pour_decisions_backend:latest
docker run -p 5000:5000 samannetts8/pour-decisions-backend:latest
- Node.js (v14 or higher)
- Python (v3.8 or higher)
- npm or yarn
- pip
# Activate virtual environment
.\vivino_env\Scripts\activate# Clone the repository
git clone https://github.com/samannetts8/Pour_Decisions.git
# Install dependencies
npm install
# Start the development server
npm run dev# Navigate to the backend directory
cd vivino_flask
# Install required packages
pip install -r requirements.txt
# Start the Flask server
python server.py{
"dependencies": {
"@chakra-ui/react": "^3.8.1",
"@coreui/coreui": "^5.2.0",
"@coreui/icons": "^3.0.1",
"@coreui/react": "^5.5.0",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@mui/material": "^6.4.5",
"bootstrap": "^5.3.3",
"esbuild": "^0.25.0",
"framer-motion": "^11.18.2",
"lucide-react": "^0.344.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router-dom": "^7.1.5"
},
"devDependencies": {
"@eslint/js": "^9.9.1",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^1.3.2",
"autoprefixer": "^10.4.18",
"concurrently": "^9.1.2",
"eslint": "^9.9.1",
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
"eslint-plugin-react-refresh": "^0.4.11",
"globals": "^15.9.0",
"postcss": "^8.4.35",
"tailwindcss": "^3.4.1",
"typescript": "^5.5.3",
"typescript-eslint": "^8.3.0",
"vite": "^6.1.0"
}
}Flask
flask-cors
python-dotenv
supabase
pytesseract
pillow
opencv-python
numpy
Pour Decisions began as an project idea that I had long before I started my journey into programming and my eventual career change. Waiting for a friend at a restaurant, I wanted the ability to choose the best critically reviewed wines simply by scanning the list in front of me. However, most wine-focused apps at the time either didn't offer this, or hid the functionality behind a paywall. As such, I wanted to create my own version that gave me this ability, whilst simulataneously challenging myself to onboard many new skills, technologies and languages. The development process included:
-
Research Phase: Investigating OCR technologies and image recognition algorithms best suited for recognizing wine labels and menu text
-
Data Collection: Using HTML-scraping technologies to build a sample database of 800 wines with comprehensive information.
-
Backend Development: Creating a Flask API with endpoints for image processing and wine matching
-
Frontend Design: Designing a user-friendly React interface with Tailwind CSS for styling
-
Integration: Connecting the frontend and backend services
-
Deployment: Setting up Docker containers and deploying to AWS EC2
The project continues to evolve, with plans to expand the wine database and improve recognition accuracy.
I am an aspiring full-stack developer with half a decade of experience in finance. After being headhunted to join a 5-man team managing >$10bn, I discovered my passion for programming while automating analysis suites and collaborating with quantitative traders on algorithmic trading scripts. My work ethic can be seen in my attainment of the CFA® chartership and co-founding a 400+ member corporate diversity and inclusion network, all whilst coordinating >$1bn mandate pitches. Through the School of Code, I have now developed expertise in full-stack development using React, JavaScript, Python, Flask, and SQL, alongside industry best practices like TDD, Agile methodologies, and hosting on AWS.


