A web-based application for managing vape juice recipes, inventory, and mixing calculations with AI-powered recipe suggestions.
- 📦 Inventory Management - Track flavors, nicotine bases, and quantities
- 🧮 Recipe Calculator - Calculate precise measurements by weight (grams)
- 💾 Recipe Storage - Save and load your favorite recipes
- 🤖 AI Suggestions - Get recipe ideas from Gemini AI
- 📊 Mix Tracking - Track how many times you've made each recipe
⚠️ Low Stock Alerts - Visual warnings for flavors running low- 🎯 Flavor Shots - Create bulk flavor concentrates
- 📥 Import/Export - JSON import for flavors and recipes
- Docker and Docker Compose installed
- Google Gemini API key (for AI features)
- Clone the repository:
git clone https://github.com/billsbdb3/vape-mixing-manager.git
cd vape-mixing-manager- Set up environment variables:
cp .env.example .env
nano .env # Add your Google API keyOr set directly in docker-compose.yml:
environment:
- GOOGLE_API_KEY=your-api-key-here- Start the application:
docker-compose up -d- Access the app:
Open your browser to
http://localhost:5001
View logs:
docker-compose logs -fStop:
docker-compose downRestart:
docker-compose restartUpdate after changes:
git pull
docker-compose down
docker-compose build
docker-compose up -d- Install dependencies:
pip3 install -r requirements.txt- Run the app:
python3 vape_app.py- Access:
http://localhost:5001
- Navigate to "Add to Inventory"
- Add flavors with base type (PG/VG) and quantity in grams
- Add nicotine bases with strength and PG/VG ratio
- Enter batch size, nicotine strength, and PG/VG ratio
- Add flavors with percentages
- Click "Calculate Recipe" to see measurements
- Save the recipe for later use
- Enter a prompt (e.g., "berry flavor", "creamy dessert")
- Click "🤖 AI Suggest Recipe"
- Review and adjust the suggested recipe
- Calculate and save
Flavors (JSON format):
{
"Strawberry (TFA)": {"base": "pg", "amount": 30.5},
"Vanilla (CAP)": {"base": "pg", "amount": 25.0}
}Recipes (JSON format):
{
"total_ml": 60,
"target_nic": 3,
"target_pg": 30,
"steep_time": "2 weeks",
"nic_base": "100",
"flavors": {
"Strawberry (TFA)": 5,
"Vanilla (CAP)": 3
}
}All data is stored in vape_data.json which is mounted as a Docker volume, ensuring your recipes and inventory persist across container restarts.
Default port is 5001. To change, edit docker-compose.yml:
ports:
- "8080:5001" # Change 8080 to your desired port- Backend: Python Flask
- Frontend: Vanilla JavaScript
- AI: Google Gemini API
- Deployment: Docker
MIT