Version 1.2 adds automated reminders, a calendar view, and an optional daily email digest. The app works fully without email — reminders are always visible in the Reminders page and Calendar.
Reminders track important dates for each location: lease deadlines, rent payments, HVAC maintenance, insurance renewals, and more. They are separate from Tasks — reminders are time-based alerts, while Tasks are to-dos with status tracking.
| Type | Description |
|---|---|
| Lease Deadline | Lease expiration, rent commencement, etc. |
| Rent | Monthly recurring rent reminders |
| HVAC | Biannual HVAC service and contract deadlines |
| TI | Tenant improvement submission deadlines |
| Insurance | Insurance renewal dates |
| Utility | Utilities transfer deadlines |
| Signage | Pylon sign deadlines |
| Gross Sales | Annual gross sales report due dates |
| Custom | Any other reminder you create manually |
Each reminder has a due date and a reminder date (the date it first shows as active). Buffers by priority:
| Priority | Reminder Fires At |
|---|---|
| Critical | 30, 14, 7, 3, 1, 0 days before due |
| High | 14, 7, 3, 1, 0 days before due |
| Normal | 7, 3, 1, 0 days before due |
| Low | 3, 1, 0 days before due |
The fastest way to set up reminders is to use the Generate Reminders button:
This will create:
When you save dates on a location, these deadlines are auto-calculated:
| Deadline | Formula |
|---|---|
| Rent Commencement | min(Delivery + 150 days, Actual Opening Date) |
| TI Submission Deadline | Actual Opening + 180 days |
| HVAC Contract Deadline | Actual Opening + 10 days |
| Utilities Transfer | Delivery + 30 days |
| Pylon Sign Deadline | Rent Commencement + 120 days |
| Annual Gross Sales Report | Lease Signed + 1 year |
| Next HVAC Service | Actual Opening + 6 months |
You can override any auto-calculated value by editing it directly in the Lease Dates form.
The Calendar page (/calendar.html) shows all tasks and reminders in a month view or list view. Use the location filter to focus on a single location. Click any event to see details.
The Dashboard now shows an Immediate Attention section listing all reminders due within 14 days or with Critical priority. This appears automatically when there are items needing attention — it disappears when nothing is urgent.
The app sends a daily digest email each morning at 8:00 AM UTC if RESEND_API_KEY is configured. The digest includes:
RESEND_API_KEY is missing, emails are silently skipped — no errors.RESEND_API_KEY = re_xxxxxxxxxxxxxxxxxxxx (Secret) REMINDER_EMAIL_TO = your@email.com (Plain text) REMINDER_EMAIL_FROM = reminders@yourdomain.com (Plain text)
wrangler.toml. It runs at 0 8 * * * (8:00 AM UTC). This is automatically deployed with the app — no separate setup needed.Resend's free tier allows 100 emails/day and 3,000/month — more than enough for a single-team internal app sending one digest per day.
| Method | Path | Description |
|---|---|---|
| GET | /api/reminders | List reminders (filters: location_id, status, type, priority, upcoming) |
| POST | /api/reminders | Create reminder |
| GET | /api/reminders/:id | Get single reminder |
| PUT | /api/reminders/:id | Update reminder |
| DELETE | /api/reminders/:id | Delete reminder |
| POST | /api/reminders/generate-location/:id | Auto-generate all reminders for a location |
| POST | /api/reminders/test-email | Send a test email |
| GET | /api/calendar | Get events (tasks + reminders) for a month |
| GET | /api/dashboard | Dashboard stats now includes reminder_stats and attention array |
| GET | /api/settings | App settings (email config status) |
Before v1.2 features work, run the database migration in your Cloudflare Dashboard or via wrangler:
wrangler d1 execute sonan-location-launchpad --remote --file=db/migrations/003_reminders_recurring_email.sql
This adds the new columns to the locations table and creates the reminders table.