If you're a brewery owner who loves tinkering with technology, building a Raspberry Pi-powered digital beer menu is the perfect weekend project. For under $100, you can create a professional digital display that updates your taplist in real-time.
This comprehensive technical guide walks you through the entire process—from purchasing hardware to configuring software and customizing your display for your brewery's unique brand.
What you'll build:
- Digital beer menu that displays on any TV or monitor
- Auto-refreshing display (updates every 60 seconds)
- Web-based admin panel for easy menu updates
- Mobile-responsive design
- Custom branding with your brewery's logo and colors
Skill level required: Intermediate (basic Linux knowledge helpful but not required)
Time to complete: 2-4 hours
Total cost: $75-150 depending on what hardware you already own
Why Use a Raspberry Pi for Your Brewery Display?
Before diving into the how-to, let's address why you might choose a Raspberry Pi over simpler solutions like a Fire TV Stick or just using a smart TV.
Advantages of Raspberry Pi
Ultimate flexibility:
- Full Linux computer you control completely
- Install any software or custom scripts
- No vendor lock-in
- Modify anything you want
Cost-effective long-term:
- One-time hardware cost ($75-100)
- No monthly subscription required (if self-hosting)
- Or use with cloud services for best of both worlds
Learning opportunity:
- Great way to learn Linux and web development
- Transferable skills for other brewery automation
- Community support from millions of Pi users
Reliability:
- Designed for 24/7 operation
- No moving parts (solid-state storage)
- Low power consumption (costs ~$2/month to run)
- Automatic crash recovery
When NOT to Use Raspberry Pi
You want "set and forget": Cloud-based solutions like RaspberryPints (no relation, just similar name!) are easier if you don't enjoy tinkering.
You're not comfortable with command line: While this guide simplifies everything, some terminal usage is required.
You need immediate support: Community support is great but not instant. Commercial solutions offer phone/email support.
You run multiple locations: Managing multiple Pi devices manually becomes tedious. Centralized cloud solutions scale better.
What You'll Need
Required Hardware
1. Raspberry Pi 4 Model B (4GB RAM recommended)
- Cost: $55-75
- Why not older models? Pi 4 has better graphics performance for smooth display
- 2GB model works but 4GB ensures smooth operation
- Where to buy: Adafruit, CanaKit, Amazon
2. MicroSD Card (32GB minimum, Class 10 or better)
- Cost: $8-15
- This stores the operating system and your beer database
- Recommend SanDisk or Samsung for reliability
- Get 64GB if you plan to log data long-term
3. Power Supply (Official Raspberry Pi 5V/3A USB-C)
- Cost: $8-12
- Don't use cheap phone chargers—they cause stability issues
- Official power supply prevents undervoltage warnings
4. MicroHDMI to HDMI Cable
- Cost: $6-10
- Pi 4 uses micro HDMI (not standard HDMI)
- Get 6-10 foot length for installation flexibility
5. Raspberry Pi Case (optional but recommended)
- Cost: $5-15
- Protects from dust and accidental damage
- Passive cooling cases work fine (no fan needed)
6. TV or Monitor
- You probably already have this
- Any TV with HDMI input works
- 40-55" recommended for taproom visibility
Optional Hardware
Wireless keyboard/mouse ($15-25): Makes initial setup easier, but not required if you use SSH
Ethernet cable: More reliable than WiFi, recommended for permanent installation
VESA mount bracket ($10-15): Mount Pi directly to back of TV for clean installation
Surge protector ($15-25): Protect your investment from power fluctuations
Software (All Free)
- Raspberry Pi OS Lite (Debian-based Linux)
- Chromium web browser (for kiosk mode display)
- Web server (Apache or Nginx)
- Optional: Cloud-based taplist software for easy management
Step 1: Prepare Your Raspberry Pi
1.1 Download Raspberry Pi Imager
On your computer (Mac, Windows, or Linux):
- Go to raspberrypi.com/software
- Download Raspberry Pi Imager for your operating system
- Install and open the application
1.2 Write OS to SD Card
- Insert your microSD card into your computer (use adapter if needed)
- Open Raspberry Pi Imager
- Click "Choose OS" → "Raspberry Pi OS (Other)" → "Raspberry Pi OS Lite (64-bit)"
- We use Lite (no desktop) because we only need a browser in kiosk mode
- Click "Choose Storage" → Select your microSD card
- Click the ⚙️ gear icon to configure advanced options:
- Enable SSH
- Set hostname:
brewery-display - Set username:
piand password: [your strong password] - Configure WiFi (SSID and password)
- Set locale settings (timezone, keyboard layout)
- Click "Save" then "Write"
- Wait for writing and verification to complete (~5 minutes)
Pro tip: Configuring advanced options now saves time—you won't need a keyboard/mouse for initial setup.
1.3 First Boot
- Remove microSD card from computer
- Insert into Raspberry Pi (slot on bottom)
- Connect HDMI cable to TV
- Connect power supply
- Pi will boot in 30-60 seconds (green LED flashes)
You'll see boot messages on the TV. Eventually it settles at a login prompt.
Step 2: Initial Configuration
You can configure via keyboard/mouse directly, or via SSH from another computer. SSH is easier.
2.1 Find Your Pi's IP Address
Method 1: Check your router's admin page
- Look for device named "brewery-display"
Method 2: Use network scanning
# On Mac/Linux
arp -a | grep -i "b8:27:eb\|dc:a6:32\|e4:5f:01"
# On Windows (PowerShell)
arp -a | findstr "b8-27-eb dc-a6-32 e4-5f-01"
Method 3: Use Angry IP Scanner (works on any OS)
- Download from angryip.org
- Scan your local network
- Look for "raspberry-display" or Raspberry Pi manufacturer
2.2 Connect via SSH
On Mac/Linux:
ssh pi@[IP-ADDRESS]
# Example: ssh pi@192.168.1.100
On Windows:
- Use PowerShell or download PuTTY
- Connect to the IP address on port 22
Enter the password you set during imaging.
2.3 Update System
Always start with system updates:
sudo apt update
sudo apt upgrade -y
This takes 5-10 minutes. Grab a beer while you wait.
2.4 Configure Raspberry Pi Settings
Run the configuration tool:
sudo raspi-config
Navigate with arrow keys, Enter to select:
System Options → Boot / Auto Login:
- Select "Console Autologin" (boots to command line without login)
Display Options → Screen Blanking:
- Select "No" (prevents screen from turning off)
Performance Options → GPU Memory:
- Set to 256 MB (improves browser performance)
Localization Options:
- Set timezone to your location
- Set WiFi country
Select "Finish" and reboot when prompted:
sudo reboot
Wait 30 seconds, then reconnect via SSH.
Step 3: Install Kiosk Mode Browser
We'll configure Chromium to run in full-screen kiosk mode, displaying your beer menu.
3.1 Install Required Packages
# Install Xorg (minimal display server) and Chromium
sudo apt install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox chromium-browser -y
# Install unclutter (hides mouse cursor)
sudo apt install unclutter -y
3.2 Configure Openbox
Openbox is a minimal window manager that will run Chromium full-screen.
Create the Openbox autostart file:
mkdir -p /home/pi/.config/openbox
nano /home/pi/.config/openbox/autostart
Add this content:
# Disable screen blanking
xset s off
xset s noblank
xset -dpms
# Hide mouse cursor after 0.5 seconds
unclutter -idle 0.5 -root &
# Start Chromium in kiosk mode
chromium-browser --noerrdialogs \
--disable-infobars \
--kiosk \
--incognito \
--check-for-update-interval=31536000 \
'http://localhost/taplist'
What these flags do:
--kiosk: Full-screen mode, no browser UI--noerrdialogs: Suppress error popups--disable-infobars: Remove "Chrome is being controlled" message--incognito: Don't save cache/cookies--check-for-update-interval: Disable update checks (set to 1 year)
Save file: Ctrl+O, Enter, Ctrl+X
3.3 Auto-Start X Server on Boot
Edit the bash profile:
nano /home/pi/.bash_profile
Add this line at the end:
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && startx -- -nocursor
Save and exit.
This starts the X server automatically when the Pi boots.
Step 4: Choose Your Menu Management Approach
You have two main options:
Option A: Self-Hosted (Full Control)
Build your own web application to manage the beer menu. Best for developers who want complete customization.
Pros:
- Free (no monthly cost)
- Unlimited customization
- Own your data completely
- Learn web development skills
Cons:
- Requires web development knowledge (HTML, CSS, JavaScript)
- You handle all maintenance and updates
- More time investment
- No professional support
Option B: Cloud-Based (Recommended for Most)
Use a commercial taplist management platform like RaspberryPints (yes, it's named after the Pi!), Untappd for Business, or similar.
Pros:
- Update menu from any device (phone, laptop, etc.)
- Professional design out of the box
- Auto-sync across multiple displays
- Customer support included
- No server maintenance
Cons:
- Monthly subscription (typically $0-20/month)
- Less customization than self-hosted
- Dependent on service provider
For this guide, we'll show Option B because it's faster to set up. If you want to build your own, see the "Advanced: Self-Hosted Setup" section at the end.
Step 5: Set Up Cloud-Based Display (Option B)
5.1 Sign Up for Taplist Software
For this example, we'll use RaspberryPints (disclaimer: we make this software, but you can use any web-based taplist service).
- On your regular computer, go to raspberrypints.com
- Sign up for free account (covers up to 3 taps)
- Complete brewery profile and add your beers
- Get your display URL (looks like:
https://yourbrewery.taplists.raspberrypints.com)
5.2 Update Chromium URL
On your Pi, edit the Openbox autostart file:
nano /home/pi/.config/openbox/autostart
Change the last line to your display URL:
chromium-browser --noerrdialogs \
--disable-infobars \
--kiosk \
--incognito \
'https://yourbrewery.taplists.raspberrypints.com'
Save and exit.
5.3 Test the Display
Reboot your Pi:
sudo reboot
After 30-60 seconds, your TV should display your beer menu in full-screen mode.
Troubleshooting:
- Black screen: Check HDMI cable, ensure TV is on correct input
- Error messages: Check your display URL is correct
- Old content showing: Clear browser cache (delete
/home/pi/.cache/chromium/and reboot)
Step 6: Auto-Refresh Configuration
To ensure your display updates when you change the menu, configure auto-refresh.
Method 1: Server-Side Refresh (Recommended)
Most cloud-based taplist platforms handle this automatically. The web page refreshes itself every 30-60 seconds.
Verify it's working:
- Load your display URL in a regular browser
- Open browser developer tools (F12)
- Watch the network tab for refresh requests
Method 2: Manual Refresh Script (Backup)
If your software doesn't auto-refresh, create a cron job to reload the browser:
# Create refresh script
nano /home/pi/refresh-browser.sh
Add this content:
#!/bin/bash
export DISPLAY=:0
xdotool search --class chromium key F5
Save and make executable:
chmod +x /home/pi/refresh-browser.sh
Install xdotool:
sudo apt install xdotool -y
Add to crontab to run every 60 seconds:
crontab -e
Add this line:
* * * * * /home/pi/refresh-browser.sh
Save and exit.
Step 7: Mount and Position Your Display
7.1 Physical Mounting
TV wall mounting:
- Use standard VESA mount (check TV specs)
- Mount at eye level (5-6 feet high)
- Ensure viewing angle covers bar and seating
Tablet/smaller display:
- Use adjustable tablet stand or wall mount
- Position at bar level for close viewing
- Ensure power outlet access
7.2 Pi Placement Options
Behind the TV (cleanest):
- Use VESA mount bracket designed for Pi
- Velcro or double-sided tape works too
- Keep ventilated (don't cover vents)
Nearby shelf:
- Simple and accessible for troubleshooting
- Use cable management for clean look
In back room (with long HDMI):
- Requires HDMI cable up to 25 feet
- Use signal booster for longer runs
- Easier to access for updates
7.3 Cable Management
Hide cables for professional look:
- Use cable raceways along wall
- In-wall installation if permitted
- Cable sleeves to bundle HDMI + power
Power surge protection:
- Plug Pi and TV into surge protector
- Consider UPS (uninterruptible power supply) for power outage protection
Step 8: Optimize Display Settings
8.1 TV Settings
Picture mode: Set to "Standard" or "Movie" (not vivid/dynamic - too bright)
Brightness: 70-80% (100% causes eye strain)
Contrast: Adjust based on ambient lighting
Orientation: Portrait mode works great for tall beer lists
- Most modern TVs support portrait in settings
- VESA mount allows 90-degree rotation
Sleep/power settings:
- Disable "auto power-off"
- Disable "screen saver"
- Set to stay on 24/7
8.2 Display Resolution
Most cloud services auto-detect resolution, but you can force a specific resolution on the Pi:
sudo nano /boot/config.txt
Add these lines:
# Force 1080p HDMI output
hdmi_group=1
hdmi_mode=16
hdmi_drive=2
Common modes:
- Mode 4: 720p (1280×720)
- Mode 16: 1080p (1920×1080)
- Mode 97: 4K (3840×2160)
Reboot after changes:
sudo reboot
Step 9: Maintenance and Monitoring
9.1 Automatic Updates
Create a weekly update script:
nano /home/pi/update-system.sh
Add:
#!/bin/bash
sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y
sudo reboot
Make executable:
chmod +x /home/pi/update-system.sh
Schedule weekly (Sundays at 3am):
sudo crontab -e
Add:
0 3 * * 0 /home/pi/update-system.sh
9.2 Remote Access
Set up dynamic DNS (if your home IP changes):
- Use No-IP or DuckDNS (free services)
- Update your DNS when IP changes
- Access Pi from anywhere
SSH from anywhere:
- Set up port forwarding on your router (port 22)
- Use strong passwords or SSH keys only
- Consider changing SSH to non-standard port (security)
VPN option (more secure):
- Use Tailscale or ZeroTier for secure remote access
- No port forwarding needed
- Access Pi as if on local network
9.3 Monitoring
Check Pi is running:
# From another computer on same network
ping brewery-display.local
Check disk space:
df -h
Check memory usage:
free -h
Check temperature:
vcgencmd measure_temp
Pi 4 throttles at 80°C. If you're seeing 75°C+, add a heatsink or fan.
Troubleshooting Common Issues
Display Not Showing
Check list:
- Is Pi powered on? (green LED should flash on boot)
- Is HDMI cable connected properly?
- Is TV on correct input?
- Try different HDMI cable
- Check HDMI config in
/boot/config.txt
Fix: Force HDMI output:
sudo nano /boot/config.txt
Uncomment or add:
hdmi_force_hotplug=1
Menu Not Updating
Possible causes:
- No internet connection
- Display URL changed
- Chromium cache issues
Fix:
# Clear Chromium cache
rm -rf /home/pi/.cache/chromium/
sudo reboot
Pi Keeps Rebooting
Likely cause: Undervoltage (insufficient power supply)
Fix:
- Use official Raspberry Pi power supply
- Don't use phone chargers
- Check power cable isn't damaged
Check for undervoltage warnings:
vcgencmd get_throttled
0x0 = no issues
0x50000 or 0x50005 = undervoltage detected
Screen Blanks or Sleeps
Check these settings:
# Verify screen blanking is disabled
cat /home/pi/.config/openbox/autostart | grep dpms
Should show xset -dpms and xset s off
Also disable TV's auto-sleep:
- Check TV settings menu
- Disable "Eco mode" or "Auto power off"
Advanced: Self-Hosted Setup
For developers who want full control, here's how to build your own taplist web app.
Architecture Overview
Components:
- Web server (Nginx)
- Backend (Node.js or Python Flask)
- Database (SQLite or PostgreSQL)
- Frontend (HTML, CSS, JavaScript)
Quick Start with Node.js
Install Node.js:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
Create project directory:
mkdir /home/pi/taplist
cd /home/pi/taplist
npm init -y
Install dependencies:
npm install express ejs sqlite3 body-parser
Create basic server (server.js):
const express = require('express');
const sqlite3 = require('sqlite3').verbose();
const app = express();
// Database setup
const db = new sqlite3.Database('./taplist.db');
db.run(`CREATE TABLE IF NOT EXISTS beers (
id INTEGER PRIMARY KEY,
name TEXT,
brewery TEXT,
style TEXT,
abv REAL,
ibu INTEGER,
description TEXT,
tap_number INTEGER
)`);
// Serve display page
app.get('/display', (req, res) => {
db.all('SELECT * FROM beers ORDER BY tap_number', (err, beers) => {
res.send(`
<!DOCTYPE html>
<html>
<head>
<title>On Tap</title>
<meta http-equiv="refresh" content="60">
<style>
body { font-family: Arial; background: #1f1f2e; color: white; }
.beer { padding: 20px; border-bottom: 1px solid #444; }
.beer-name { font-size: 24px; color: #e4095e; }
.beer-info { font-size: 18px; color: #999; }
</style>
</head>
<body>
<h1 style="text-align:center">On Tap Now</h1>
${beers.map(beer => `
<div class="beer">
<div class="beer-name">${beer.tap_number}. ${beer.name}</div>
<div class="beer-info">${beer.brewery} | ${beer.style} | ${beer.abv}% ABV</div>
<div>${beer.description}</div>
</div>
`).join('')}
</body>
</html>
`);
});
});
// Start server
app.listen(80, () => console.log('Server running on port 80'));
Run server:
sudo node server.js
Update Chromium URL:
nano /home/pi/.config/openbox/autostart
Change to:
chromium-browser --kiosk 'http://localhost/display'
Add sample beers via SQLite:
sqlite3 /home/pi/taplist/taplist.db
INSERT INTO beers VALUES (1, 'Hazy IPA', 'Your Brewery', 'IPA', 6.5, 45, 'Juicy and tropical', 1);
INSERT INTO beers VALUES (2, 'Porter', 'Your Brewery', 'Porter', 5.8, 30, 'Rich chocolate notes', 2);
.quit
This is a basic example. Build out an admin panel, add authentication, improve the design, etc.
Security Considerations
Network Security
Change default password:
passwd
Disable password login, use SSH keys only:
ssh-keygen -t rsa -b 4096 # On your computer
ssh-copy-id pi@brewery-display.local # Copy key to Pi
Then disable password auth:
sudo nano /etc/ssh/sshd_config
Change:
PasswordAuthentication no
Restart SSH:
sudo systemctl restart ssh
Enable firewall:
sudo apt install ufw -y
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP (if self-hosting)
sudo ufw enable
Physical Security
Lock down the Pi:
- Place in locked cabinet or secure mount
- Disable USB ports in BIOS if not needed
- Use locking HDMI cables (prevents unplugging)
Prevent unauthorized access:
- Don't leave Pi accessible to customers
- Consider disabling WiFi, use ethernet only
- Monitor logs for suspicious access
Cost Breakdown
Hardware (one-time):
- Raspberry Pi 4 (4GB): $75
- MicroSD card 32GB: $10
- Power supply: $10
- HDMI cable: $8
- Case: $10
- Total: $113
Software (monthly):
- Self-hosted: $0
- Cloud-based (RaspberryPints): $0-20/month
- Total: $0-20/month
Ongoing costs:
- Electricity: ~$2/month (Pi uses 5-8W)
ROI: Compared to printed menus ($300-500/month), your Pi setup pays for itself in less than 2 weeks.
Conclusion: Your Pi Display is Ready
You now have a professional digital beer menu powered by a Raspberry Pi that cost less than $150 and takes about 2-4 hours to set up.
What you've accomplished: ✅ Built a dedicated digital display device ✅ Configured auto-refresh and kiosk mode ✅ Integrated with cloud-based menu management ✅ Set up automated maintenance and monitoring ✅ Created a scalable solution for your brewery
Next steps:
- Test updating your menu from your phone/computer
- Gather customer feedback on the display
- Consider adding a second display in another location
- Experiment with customization (colors, layout, fonts)
The Raspberry Pi approach gives you ultimate flexibility and control. As your needs evolve, you can add features like:
- Touch-screen interactive menus
- Social media integration
- Live customer check-ins from Untappd
- Analytics dashboard
- Multiple synchronized displays
Most importantly: You'll save hundreds of hours annually and thousands of dollars compared to manual menu updates.
Want an even easier setup? RaspberryPints cloud service works with any device (Raspberry Pi, Fire Stick, smart TV, tablet) and updates your menu in 30 seconds from any device. Try it free →

