Commit Graph

165 Commits

Author SHA1 Message Date
Jason Zimdars 28a569c49b Tickets 2025-03-17 21:24:08 -05:00
Bruno Prieto 10cdb8c1a8 Improve accessibility of comments and reactions 2025-03-14 02:29:44 +01:00
Kevin McConnell 16a80ff3a6 More dynamic activity scores
This introduces a more dynamic system of activity scoring, to improve
the way bubbles "bubble up" due to their activity. There are a few
different parts we can tune here, and it's likely we'll need to make
adjustments once we get a feel for how this works in practice.

The basic idea here is:

- We assign points for certain types of event that happen on a bubble. A
  boost gets 1 point, a comment gets 10 points, and so on.
- These points decay over time, at a rate of 50% per day. So old
  activity is worth much less than new activity. Bubbles should rise up
  quickly when acted upon, bit will float back down if left idle.
- Some comments can score higher than others: the first comment from
  each person on a bubble is worth more (20) because it signals that
  more people are getting involved; and comments that follow a comment
  by a different author are also worth more (15) because that signals
  there's ongoing conversation between people, not just a series of
  notes being left by one individual.

In terms of implementation, we persist the score on the bubble
whenever it changes, but we handle the decay on the client side. That
allows us to cache the bubble representation without having to
continually change it while its activity decays.

We also keep a separate `activity_score_order` attribute on the model.
This can be used to sort the bubbles in order of "most active", without
having to think about the decay.
2025-03-05 17:16:31 +00:00
Jason Zimdars 256edbfa96 Special case self-assignment 2025-02-24 16:25:24 -06:00
Jason Zimdars 0045fb2af2 Fix overflowing notifications content 2025-02-21 17:03:58 -06:00
Jason Zimdars 28bdc531b0 Mark individual notifications as read 2025-02-21 16:39:50 -06:00
Jason Zimdars fb01444a88 "Added by…" is a more useful filter than "Assigned by…" 2025-02-20 16:07:07 -06:00
Jason Zimdars 1ad6a9adb8 Introduce quick filters on the page so the dialog becomes advanced filtering 2025-02-20 15:20:30 -06:00
Jason Zimdars 8cde1883a6 Filter activity by bucket 2025-02-19 18:05:12 -06:00
Jason Zimdars b3b881da17 Try a more Basecamp style activity event card 2025-02-19 14:02:07 -06:00
Jason Zimdars 66489f01eb Only display events visible to the current user 2025-02-19 11:55:22 -06:00
Jason Zimdars 7c3c3f6998 Don't count popped by system 2025-02-12 16:12:05 -06:00
Kevin McConnell 81197bfb49 Don't set a default title 2025-02-11 14:34:39 +00:00
Jason Zimdars 8ee1e670f9 Remove Hotwire Combobox, adjust related styles 2025-02-10 17:01:42 -06:00
Jason Zimdars d5b13a8030 Display counts for Added and Popped columns 2025-02-10 12:57:49 -06:00
Jason Zimdars f4e82d069b Truncation and alignment 2025-02-06 16:45:16 -06:00
Jason Fried 85b144bb2c Removed the extra "by" 2025-02-05 18:24:31 -08:00
Jason Zimdars 676ada4d3a Bold for names 2025-02-05 09:34:36 -06:00
Jason Zimdars affa4cae7a Track changes to the bubble's name 2025-02-04 16:14:29 -06:00
Jason Zimdars d1ddb8d299 Track events on due dates 2025-02-04 15:49:34 -06:00
Jason Zimdars f25335ba38 Try comment excerpts in notification and event chips 2025-02-04 14:04:17 -06:00
Jason Zimdars 559e978bcd Add 'unassigned' action and account for unknown action icons 2025-01-29 21:35:27 -06:00
Jason Zimdars 972927d56a Add a small icon to indicate actions in the touched column 2025-01-29 15:10:43 -06:00
Jason Zimdars 767ca083ed Add a line that describes the event action 2025-01-29 12:59:51 -06:00
Jason Zimdars b3c7f553b4 Clean up, be more BEM-like 2025-01-28 18:07:04 -06:00
Jason Zimdars c7503c2663 Actually that should be an element, not modifier class 2025-01-28 18:05:01 -06:00
Jason Zimdars 523b543244 Rename, they're all wrapped now 2025-01-28 18:04:24 -06:00
Jason Zimdars e8622ed402 Sticky column titles, tighter grid 2025-01-28 16:49:59 -06:00
Jason Zimdars 6c96995e43 Try a different approach to indicating time 2025-01-28 16:40:25 -06:00
Jason Zimdars 627da16792 Simplify grid display 2025-01-28 13:37:58 -06:00
Jason Zimdars 502e915f27 To display 12am to Midnight inclusive, we need to actually render 25 rows (+1 for column labels) 2025-01-28 12:57:54 -06:00
Kevin McConnell 09466b1984 Only highlight current hour today 2025-01-27 17:11:38 +00:00
Kevin McConnell 1184ea8cf8 Smoosh empty days together 2025-01-27 17:07:46 +00:00
Kevin McConnell bfaac4bd44 Render activity directly into requested timezone 2025-01-27 15:41:01 +00:00
Jason Zimdars 881e1d07fc Merge branch 'main' into latest-activity
* 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
  ...
2025-01-24 15:07:17 -06:00
Jason Zimdars 40f3925712 Add more context 2025-01-24 14:09:59 -06:00
Jason Zimdars 823602bcee Avoid leaving the tray open 2025-01-24 13:56:03 -06:00
Kevin McConnell 1f3bc1134f Paginate the read notifications 2025-01-24 17:42:36 +00:00
Jason Zimdars c0a2b36000 Color all cells 2025-01-23 09:53:12 -06:00
Jason Zimdars c160e3c6eb Active => Touched 2025-01-22 15:59:56 -06:00
Kevin McConnell 2320a10c74 Show "published" in the added column
Making a draft shouldn't show up here.
2025-01-22 16:46:19 +00:00
Kevin McConnell b2f72ff668 Use Stimulus to position events by timezone 2025-01-22 14:38:38 +00:00
Jason Zimdars e11b5095d5 Add grid cell styles and time markers 2025-01-21 18:29:56 -06:00
Jason Zimdars 49866a121d Merge branch 'main' into latest-activity
* main:
  Don't round up in time distance expression
  Tidy Gemfile
  Banner for draft state
  Drafts should always use the dashed outline wherever they're displayed
  Unnecessary parens
  Use distance to nearest edge
  Simplify overlap logic
  Fix divider drag jankiness
  Use cache-friendly "time ago"
  positionedClass -> installedClass
  Pull out moveDividerTo
  Before comes before After
  DividerElement -> Divider
  Clean up divider-controller
  Drag bubble divider
2025-01-21 13:50:28 -06:00
Kevin McConnell 11454a1952 Lazy-load activity pages 2025-01-17 17:28:07 +00:00
Kevin McConnell 3481d1f93e Show activity per day 2025-01-17 15:33:24 +00:00
Kevin McConnell 6f8c929898 Use cache-friendly "time ago"
Also introduces a local time helper that we can use to format dates and
times.
2025-01-16 17:47:25 +00:00
Jason Zimdars 410cc95396 Stub out basic design 2025-01-15 17:16:59 -06:00
Kevin McConnell dbb3fd3b9c Simplify 2025-01-15 12:03:56 +00:00
Kevin McConnell 056d853cc8 Don't notify while bubbles are still drafted 2025-01-15 11:42:35 +00:00