Calculator Tools Calculator Tools
Create

Wine Cellar Manager

Jun 22, 2025

About this app

Manage your wine collection efficiently with our interactive Wine Cellar Manager. Keep track of your wines, organize by year, type, rating, and more!

Wine Cellar Manager 🍷 Wine Cellar Manager Today’s Entry Add Entry 📊 Summary 📦 Inventory Update Inventory

Related apps

Put this on your site

Source

                    <html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Wine Cellar Manager</title>
<meta name="description" content="Track your daily wine sales, expenses, inventory, and profit easily.">
<meta name="keywords" content="wine, inventory, sales, profit, business, tracker">

<link href="https://fonts.googleapis.com/css2?family=Playfair+Display&display=swap" rel="stylesheet" />

<style>
body {
font-family: 'Playfair Display', serif;
background: linear-gradient(to bottom, #2e0c24, #630e2d);
color: #fff;
padding: 20px;
margin: 0;
}

.app {
max-width: 600px;
margin: auto;
background: rgba(255, 255, 255, 0.05);
padding: 20px;
border-radius: 10px;
}

h1 {
text-align: center;
font-size: 2.2em;
color: #f3d9dc;
}

.inputs, .summary, .inventory {
margin-top: 20px;
}

input, textarea {
width: 100%;
margin: 5px 0;
padding: 10px;
border-radius: 5px;
border: none;
outline: none;
}

button {
background: #8b1c3f;
color: #fff;
border: none;
padding: 10px;
margin-top: 10px;
border-radius: 5px;
font-weight: bold;
cursor: pointer;
transition: background 0.3s;
}

button:hover {
background: #a2264d;
}

h2 {
border-bottom: 1px solid #ccc;
padding-bottom: 5px;
margin-top: 20px;
}

#report {
background: rgba(255, 255, 255, 0.1);
padding: 10px;
border-radius: 5px;
white-space: pre-wrap;
font-size: 1em;
}
</style>

<script type="text/javascript">
let summaryEntries = [];
let inventory = [];

const tracker = {
addEntry: function() {
const item = document.getElementById('item').value;
const qty = parseInt(document.getElementById('qty').value);
const price = parseFloat(document.getElementById('price').value);
const cost = parseFloat(document.getElementById('cost').value);
const expenses = parseFloat(document.getElementById('expenses').value);

if (item && !isNaN(qty) && !isNaN(price) && !isNaN(cost) && !isNaN(expenses)) {
const revenue = qty * price;
const totalExpenses = qty * cost + expenses;
const profit = revenue - totalExpenses;

summaryEntries.push({ item, qty, price, cost, profit });
this.updateReport();
this.clearInputs();
} else {
alert("Please fill in all fields correctly.");
}
},

updateReport: function() {
const reportDiv = document.getElementById('report');
reportDiv.innerHTML = 'Item\tQty\tPrice\tCost\tProfit\n';
summaryEntries.forEach(entry => {
reportDiv.innerHTML += `${entry.item}\t${entry.qty}\t$${entry.price.toFixed(2)}\t$${entry.cost.toFixed(2)}\t$${entry.profit.toFixed(2)}\n`;
});
},

clearInputs: function() {
document.getElementById('item').value = '';
document.getElementById('qty').value = '';
document.getElementById('price').value = '';
document.getElementById('cost').value = '';
document.getElementById('expenses').value = '';
},

updateInventory: function() {
const inventoryList = document.getElementById('inventoryList').value.split('\n');
inventory = inventoryList.map(item => {
const parts = item.split(',');
return {
wine: parts[0],
qty: parseInt(parts[1] || 0),
cost: parseFloat(parts[2] || 0),
price: parseFloat(parts[3] || 0)
}
}).filter(item => item.wine);
alert("Inventory updated successfully!");
}
};
</script>
</head>
<body>
<div class="app">
<h1>🍷 Wine Cellar Manager</h1>
<section class="inputs">
<h2>Today’s Entry</h2>
<input id="item" placeholder="Wine Name" />
<input id="qty" type="number" placeholder="Quantity Sold" />
<input id="price" type="number" placeholder="Sale Price per Bottle" />
<input id="cost" type="number" placeholder="Cost per Bottle" />
<input id="expenses" type="number" placeholder="Other Expenses" />
<button onclick="tracker.addEntry()">Add Entry</button>
</section>

<section class="summary">
<h2>📊 Summary</h2>
<div id="report"></div>
</section>

<section class="inventory">
<h2>📦 Inventory</h2>
<textarea id="inventoryList" placeholder="Format: Wine,Qty,Cost,Price" rows="6"></textarea>
<button onclick="tracker.updateInventory()">Update Inventory</button>
</section>
</div>
</body>
</html>