Nice Rack is a custom-built inventory and racking management system designed for use in a signage workshop environment. It tracks sheet materials, sizes, thicknesses, quantities, and physical rack locations in real time.
I built this tool for my day-to-day signage work to replace whiteboards, spreadsheets, and unreliable manual stock tracking.
Materials are stored as structured entries with live search, filtering, and quantity updates. Firestore keeps everything in sync across devices instantly.
Sheets, sizes & quantities
Physical rack & row mapping
Real-time Firestore updates
No duplicate stock entries
// Live Firestore sync — updates inventory in real time
onSnapshot(query(materialsRef), snapshot => {
allMaterials = [];
typesSet.clear();
snapshot.forEach(doc => {
const data = doc.data();
allMaterials.push({ id: doc.id, data });
if (data.type) typesSet.add(data.type);
});
render(); // Rebuild UI instantly on change
});
// Merge incoming stock instead of duplicating entries
async function mergeIntoStock(items) {
for (const item of items) {
const q = query(
collection(db, "materials"),
where("name", "==", item.name),
where("type", "==", item.type),
where("thickness", "==", item.thickness),
where("size", "==", item.size)
);
const snap = await getDocs(q);
if (!snap.empty) {
const ref = snap.docs[0].ref;
const currentQty = snap.docs[0].data().quantity || 0;
await updateDoc(ref, {
quantity: currentQty + item.quantity
});
} else {
await addDoc(collection(db, "materials"), item);
}
}
}
Nice Rack is designed for real production use — fast, simple, and usable on phones, tablets, and shared workshop computers without training.
This project reinforced the value of building tools around real workflows. Reliability, clarity, and speed matter more than visual polish in production environments.