Skip to content

jackbuhlerr/ReminderPrint

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ReminderPrint — Self-Hosted Print Server

A lightweight print server for Raspberry Pi that works with the ReminderPrint iOS app. Send reminders and daily agendas from your iPhone and have them printed instantly on any ESC/POS thermal receipt printer.


How It Works

iPhone (ReminderPrint App) → Tailscale VPN → Raspberry Pi → USB → Thermal Printer

The Pi runs a small HTTP server that receives jobs from the iOS app and prints them as formatted receipts. Tailscale provides a secure connection from anywhere in the world — no port forwarding required.


Features

  • Print reminders instantly from your iPhone
  • Schedule daily agenda printouts from your Apple Calendar
  • Secure API key authentication
  • Works over local WiFi or remotely via Tailscale
  • Auto-starts on boot
  • Compatible with any ESC/POS thermal printer

Requirements

Hardware

  • Raspberry Pi 3 or newer
  • Any ESC/POS compatible thermal receipt printer (58mm or 80mm)
  • USB cable to connect printer to Pi
  • MicroSD card (8GB or larger)

Software


Quick Setup

1. Flash Raspberry Pi OS

Download and flash Raspberry Pi OS Lite (64-bit) using Raspberry Pi Imager or Balena Etcher.

If using Raspberry Pi Imager, use the settings cog to set a hostname (printserver), enable SSH, and configure your WiFi.

If using Balena Etcher, manually add these files to the bootfs partition after flashing:

Enable SSH:

touch /Volumes/bootfs/ssh

Configure WiFi — create /Volumes/bootfs/wpa_supplicant.conf:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=AU

network={
    ssid="YourWiFiName"
    psk="YourWiFiPassword"
    key_mgmt=WPA-PSK
}

Set username/password:

echo 'pi:'$(openssl passwd -6 'yourpassword') > /Volumes/bootfs/userconf.txt

2. Run the Setup Script

Boot the Pi, SSH in, then clone this repo and run the setup script:

ssh pi@printserver.local
git clone https://github.com/jackbuhlerr/ReminderPrint.git
cd ReminderPrint
chmod +x setup.sh
./setup.sh

The script will automatically:

  • Install all dependencies
  • Install and enable Tailscale
  • Configure USB printer permissions
  • Set up the print server as a background service that starts on boot
  • Generate a unique API key for your server

Save the API key shown at the end — you will need it in the iOS app.


3. Connect Tailscale

After the script finishes, authenticate Tailscale:

sudo tailscale up

Open the URL it shows to log in. Then get your Tailscale IP:

tailscale ip -4

4. Connect the iOS App

Open ReminderPrint, tap the printer status button, and under Connection enter:

  • Server URL: http://<your-tailscale-ip>:8000
  • API Key: (shown at the end of the setup script)

Tap Reconnect Printer — it should go green. You are ready to print.


Manual Setup

Prefer to set up manually? See MANUAL_SETUP.md for step-by-step instructions.


Printer Compatibility

Any printer that supports ESC/POS over USB should work, including most thermal receipt printers from:

  • Epson TM series
  • Star Micronics
  • Zyprinter
  • MUNBYN
  • Xprinter
  • Most generic 58mm/80mm thermal printers

API Reference

GET /status

Check if the server is online.

Headers

x-api-key: your-api-key

Response

{ "status": "online" }

POST /print

Print a reminder immediately.

Headers

x-api-key: your-api-key
Content-Type: application/json

Body

{
  "title": "Buy groceries",
  "due": "Today 5:00 PM",
  "priority": "Immediate",
  "notes": "Optional notes"
}

Response

{ "status": "printed" }

POST /jobs/calendar-day

Schedule a daily agenda print.

Body

{
  "scheduledAt": "2026-04-27T07:00:00+10:00",
  "timezone": "Australia/Sydney",
  "title": "Today's Agenda",
  "sections": [
    {
      "calendar": "Personal",
      "events": [
        {
          "title": "Dentist",
          "start": "09:00 AM",
          "end": "10:00 AM",
          "location": "Main St"
        }
      ]
    }
  ]
}

Response

{ "status": "scheduled", "fire_at": "2026-04-27T07:00:00+10:00", "seconds_until": 3600 }

GET /jobs

List all scheduled jobs.


DELETE /jobs/calendar-day

Cancel a scheduled agenda print.


Configuration

The API key is set via the PRINT_API_KEY environment variable. To change it:

sudo systemctl edit printserver

Add:

[Service]
Environment=PRINT_API_KEY=yournewkey

Then restart:

sudo systemctl restart printserver

Troubleshooting

Printer not detected

ls /dev/usb/
lsusb

Make sure the printer is powered on and connected. It should appear as lp0 or lp1.

Permission denied on /dev/usb/lp0

sudo chmod 666 /dev/usb/lp0

Server not reachable from app

  • Ensure Tailscale is running on both the Pi and iPhone
  • Use http:// not https://
  • Test from your Mac:
curl http://<tailscale-ip>:8000/status -H "x-api-key: yourkey"

Check server logs

sudo journalctl -u printserver -f

License

MIT

About

Make Your Reminders Physical!

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors