Shoulder Tap — Press Release and FAQ
Press Release
Shoulder Tap Keeps Life’s Must-Do Tasks From Quietly Slipping Through the Cracks
A self-hosted personal reminder system that sends a daily email digest for everything that needs your attention — tasks, deadlines, recurring charges, and upcoming events — with near-zero infrastructure cost.
THE KNOTTY MAPLE, May 31, 2026 — The Knotty Maple today announces Shoulder Tap, a personal life-maintenance reminder system for technically capable individuals who are tired of forgetting oil changes, tax deadlines, vet appointments, and quarterly insurance payments. Unlike general-purpose to-do apps, Shoulder Tap is purpose-built for recurring obligations: it knows when something is coming, when it’s due, and when it’s overdue — and it tells you every morning in a single email that requires no app to open and no subscription to pay.
Adults accumulate dozens of recurring responsibilities across their home, vehicles, pets, finances, and rental properties. Each one has a different cadence: some repeat every thirty days, some every April 15th, some on the third Thursday of every month. Task managers and calendars require constant manual upkeep and still do not surface the right item at the right time. People either miss the obligation entirely or spend cognitive energy trying to remember it. The result is late fees, missed appointments, deferred maintenance, and the low-level anxiety of knowing something important is probably overdue but not knowing what.
Shoulder Tap solves this by treating recurring obligations as first-class objects with due dates, lead time windows, and completion histories. It sends a daily email digest organized into four sections — Upcoming, Due, Past Due, and Upcoming Events — so a user can see at a glance what needs attention today and what is approaching. Individual advance-notice emails fire automatically when a task enters its ready window, giving enough lead time to actually act. Recurring charges — both automatic (informational) and manual (action required) — appear in a dedicated section so upcoming financial obligations are always visible. Google Calendar events are pulled into the same digest, eliminating the need to check multiple sources. The system runs on a home server or VPS via a cron job, requires only a verified AWS SES sender address (approximately $0/month at personal email volumes), and stores all data in an embedded DuckDB file with no separate database server.
“I built Shoulder Tap because I was maintaining a spreadsheet of recurring tasks and still missing things,” said Phillip Givens, creator of Shoulder Tap. “A spreadsheet doesn’t tap you on the shoulder. Shoulder Tap does — once when something is coming, again if it’s a hard deadline, and every day until you mark it done. It costs nothing to run and you never have to open another app to know what needs your attention.”
A typical morning begins with a single email in the inbox. The digest shows that the car’s oil change is due in five days, the dog’s annual vet appointment is three weeks out, a property manager payment is overdue by two days, and two Google Calendar events are coming up this week. The user opens the terminal, runs shtap interactive, and marks the payment done with a keypress — no need to remember exact task names. No app to open. No account to log in to. No notifications to configure. The next morning, a section at the bottom of the digest will show everything completed in the past seven days — a lightweight record that builds confidence the system is working.
“Before Shoulder Tap, my home maintenance spreadsheet had forty rows and I checked it maybe once a month,” said a beta user. “Now it checks me. I marked my generator test done this morning at 7:02 AM before I finished my coffee. I haven’t thought about it since — and that’s the whole point.”
Shoulder Tap is available now as an open-source Python package. Installation takes under fifteen minutes for anyone comfortable with a terminal and an AWS account. Full documentation, a Docker image, and a CSV import template for bulk task setup are included.
Frequently Asked Questions
Customer FAQs
Who is Shoulder Tap for?
Shoulder Tap is for technically capable individuals — developers, sysadmins, and home-lab enthusiasts — who have a home server or VPS and want a personal life-management tool they control entirely. It is not a SaaS product and it has no web UI. If you are comfortable with a terminal, a crontab, and an AWS free-tier account, Shoulder Tap will cost you almost nothing and do exactly what it says.
What kinds of tasks should I put in Shoulder Tap?
Anything recurring that you cannot afford to forget. Good candidates include:
- Home maintenance: HVAC filter replacement, gutter cleaning, smoke detector batteries
- Vehicle maintenance: oil changes, tire rotation, registration renewal
- Pet care: vet appointments, flea/tick prevention, nail trims
- Financial obligations: quarterly tax estimates, insurance renewals, manual bill payments
- Rental property tasks: inspections, lease renewals, vendor payments
- Hard deadlines: tax filing, passport renewal, annual licenses
One-off tasks with a due date (schedule a dentist appointment, renew a specific permit) are also supported.
How is this different from Google Calendar, Reminders, or a to-do app?
Those tools are designed for appointments and projects. Shoulder Tap is designed specifically for recurring life-maintenance obligations. The key differences:
- It tracks completion history and advances the due date automatically when you mark something done. A calendar event does not know that you actually changed the oil.
- It knows how far in advance to warn you and adjusts per task. Some tasks need a week of lead time; others need a month.
- It survives server downtime. If your server is off for three days, Shoulder Tap catches up the moment it comes back on — no items are silently dropped.
- It consolidates everything in one email. Tasks, events, and upcoming charges are in a single morning digest. You do not need to open an app.
- It costs approximately $0/month at personal email volumes.
What does the daily email look like?
The daily email is a single HTML message organized into sections:
- Upcoming — Items entering your attention window, not yet urgent
- Due — Items at or past their due date
- Past Due — Items overdue, with days overdue and last-completed date
- Completed This Week — Everything you marked done in the last seven days
- Upcoming Events — Awareness-only items (birthdays, museum nights) that don’t require action
- Upcoming Charges — Recurring financial obligations, split into “Action Required” (manual) and “Automatic — FYI”
- Google Calendar — Events from your primary Google Calendar in the next N days
Focus items are marked with a ★ to highlight high-priority obligations.
What recurrence patterns are supported?
Three types:
- Fixed interval: every N days, months, or years from the last completion date (
30d,6mo,1y). Use this for tasks like oil changes where the clock resets when you finish. - Calendar-anchored: a specific date every year (
YEARLY:04-15for April 15) or an Nth weekday of a month (MONTHLY:3:THUfor the third Thursday). Use this for tax deadlines, recurring payments, and quarterly obligations. - One-off: a task with a fixed due date that does not repeat. Shoulder Tap tracks and reminds; when done, it closes.
What happens if my server is off and a task becomes overdue?
Nothing is lost. When Shoulder Tap runs again, it compares today’s date against every stored due date. Any task that became overdue while the server was offline is included in the next aggregate email under “Past Due” with the correct number of days overdue. The daily run is idempotent: running it multiple times in a day only sends one digest.
How much does it cost to run?
At personal email volumes (roughly 20–60 emails per month), AWS SES costs effectively $0. The AWS SES free tier covers 62,000 outbound emails per month when sent from an EC2 instance; even outside the free tier, the per-email cost is $0.10 per 1,000 messages. Storage is an embedded DuckDB file; no database server is required. The only other cost is the compute you are already paying for (your server or VPS).
Does Shoulder Tap store my data anywhere externally?
No. All data lives in a DuckDB file on your own machine. Emails are sent through your own AWS SES account to your own email address. Shoulder Tap does not phone home, does not have user accounts, and does not sync to any external service. Google Calendar integration uses a local OAuth token you generate yourself; no token or calendar data is shared with anyone.
How do I get started?
- Verify a sender email address in AWS SES.
- Install Shoulder Tap:
pip install -e . - Run
shtap init-configand edit/etc/shtap/config.tomlwith your email addresses and AWS region. - Import your tasks from a CSV (
shtap tasks init-importgenerates the template) or add them interactively (shtap tasks add). - Add the cron entry (
shtap init-cronprints it) to run at 8 AM daily.
A Docker image is provided if you prefer container-based deployment.
Internal and Stakeholder FAQs
Why email instead of push notifications or a web UI?
Email was chosen deliberately. It arrives in a channel the user already checks every morning, requires no app to install, no account to log in to, and no notification permissions to configure. An email is persistent: it sits in the inbox until acted upon. Push notifications are ephemeral and often dismissed. A web UI requires the user to remember to visit it. Email requires no behavior change.
Why AWS SES instead of SMTP or another provider?
SES has essentially zero cost at personal volumes, has excellent deliverability, and requires only IAM credentials — no SMTP password rotation, no third-party service dependency. The IAM credential can be scoped to ses:SendEmail only, which limits the blast radius of a compromised key. SendGrid, Mailgun, and similar services add a paid tier and a third-party account. A self-hosted SMTP server adds deliverability complexity (SPF, DKIM, PTR records). SES is the right default for this use case.
Why DuckDB instead of SQLite or PostgreSQL?
DuckDB is an embedded analytical database with a familiar SQL interface, zero server process, and a single-file storage model identical to SQLite. For a personal tool running one query per day on a few hundred rows, the choice of embedded database is mostly irrelevant to performance. DuckDB was chosen because it is under active development, has first-class Python support, and its column-oriented nature will be advantageous if the audit log grows large and aggregation queries are added. SQLite would have been equally appropriate; PostgreSQL would be overkill.
Why not support multiple users?
Multi-user support would require authentication, authorization, per-user data isolation, and either a persistent web server or a hosted service. These all add complexity that is out of proportion to the problem being solved. Shoulder Tap is a personal tool. Each user runs their own instance. If two people in a household want to share it, they share a config file and a single email address — the existing design already supports that naturally.
How does the “completed this week” section interact with skipped items?
Only done actions are included in the “Completed This Week” section of the aggregate email. skipped, suspended, and imported actions are visible in the TUI audit log but are intentionally omitted from the digest — the section is meant to convey accomplishment and serve as a lightweight accountability record, not a full activity log. This is a deliberate product choice: skipping a task is an administrative decision, not a completion.
What is the upgrade and migration strategy for the database schema?
Shoulder Tap uses a numbered SQL migration system. Each migration is a .sql file in migrations/ prefixed with a version number. On startup, db.open_connection() checks the current schema version and applies any pending migrations in order. Before applying migrations, it creates a timestamped backup of the existing database file. This means schema changes are safe to ship: users who have existing data will have it automatically migrated with a backup preserved.
What would it take to add a mobile notification channel?
The notification layer is isolated in mailer.py. Adding a second channel (SMS via SNS, Pushover, ntfy.sh) would require implementing a parallel send function and wiring it into runner.py’s run_daily. The data model and scheduler are channel-agnostic. The current design does not block this; it is simply out of scope for the personal-email use case.