* main:
Undo weird flash notices
Redirect to bucket after deleting
Fix layout issues in Safari
Should match text
Add production deploy config
Add Kamal deploy config
Remove old deploy config
@kevinmcconnell in order for the clusters to work, we'll need to update `timeline_conteroller.js` to set `grid-column-start` and `grid-row-start` on `.cluster` so it displays in the correct hour/action cell. Then we'll enable these styles to display them together without overlapping.
* main: (27 commits)
Leave some space for the tray
Let's not assume it's a due date
Avoid overlap
Let's try without the big drag button, extend beyond the column a touch
Tighten labels
Match notification dot
Spacing
Add more context
Avoid leaving the tray open
This shouldn't be here
Paginate the read notifications
Add a test case
Split up a big view
Allow filtering by stage
Send beacon request on disconnect as well
Wire up notifications "Mark all as read" button
Add unread dot
Set state for when there are no new notifications
Move to right side, smooth transition
Open tray on click, stub mark-as-read button
...
* notification-index:
This shouldn't be here
Paginate the read notifications
Send beacon request on disconnect as well
Wire up notifications "Mark all as read" button
Add unread dot
Set state for when there are no new notifications
Move to right side, smooth transition
Open tray on click, stub mark-as-read button
Refactor
`New for you` empty state
Add a notifications button to the tray for reaching the index when you have no unreads
Needed when truncating so the avatar isn't squished
Style notifications index; add truncation for long notifications
Add an index view for all notifications
Move notifications to tray controller
This allows us to take into account the local timezone -- any days where
all the events were outside the local 24-hour period are the ones that
are empty.