Dashboard and Insights become one page, arranged from built-in widgets #44

Closed
opened 2026-09-06 15:46:43 +00:00 by tiagoagueda · 0 comments
Owner

Observation

i want to unify insigth and dashboard into a single identity, customiable by buil-in widgets

What exists today

  • The dashboard (core/views.py::home) is a fixed page: six counters, gone quiet,
    upcoming interviews, due reminders, recent activity, and since #34 a line about
    suggestions waiting. Everything on it is computed in one function and laid out in one
    template.
  • Insights (applications/analytics.py, applications/insights.html) is a second
    fixed page: the response funnel, response rates, where applications come from, how long
    things take, and the tables underneath.

They answer the same question — how is this going? — at two distances, and a person has
to remember which page holds which number.

Shape

  1. A widget is a small named thing that knows how to compute itself and render itself:
    a key, a label, a sentence for the picker, a width hint (a quarter, a half, the whole
    row), and a context() that produces what its own template needs. Registered the way
    capture sources and settings sections already are, so the mechanism is one somebody has
    seen before.
  2. The built-in set is what the two pages already show: the counters, gone quiet,
    upcoming interviews, due reminders, recent activity, suggestions waiting, listings to
    decide, closing soon, the response funnel, the response rate, where applications come
    from, time to first reply, time to a decision.
  3. A person's own arrangement — which widgets, in which order — stored on the profile
    as a list of keys, the way hidden_nav_items is (#23). Storing what is chosen rather
    than what is left out is the wrong way round here: a widget added in a later release
    should appear for somebody who has never arranged anything, and be absent for somebody
    who has built a page deliberately.
  4. One page, one address. Insights stops being a destination of its own; its widgets
    are on the same page, the navigation loses an item, and /applications/insights/
    redirects rather than breaking a bookmark.
  5. Arranging is a settings screen, or an Arrange mode on the page itself. The first
    is less code and works from a keyboard without any of the work #35 needed.

Classification

Enhancement, and a large one: it is the two busiest pages. Not breaking — the same
numbers, differently arranged, with one nullable field on the profile.

Depends on

Nothing. It must carry the fix from #45 forward rather than reintroducing the stretched
bars.

Open questions

  1. Can a plugin add a widget? The registry has the same shape as the ones already there,
    so building it as one costs nothing. Proposal: build it as a registry, do not advertise
    it until a plugin asks.
  2. Drag to arrange, or a list with move up and down? The board can drag now (#35), but a
    list is keyboard-workable for free.
  3. What does a brand-new account see? Proposal: exactly what the dashboard shows today, in
    today's order, so nothing changes for anybody who never opens the setting.
## Observation > i want to unify insigth and dashboard into a single identity, customiable by buil-in widgets ## What exists today - The **dashboard** (`core/views.py::home`) is a fixed page: six counters, gone quiet, upcoming interviews, due reminders, recent activity, and since #34 a line about suggestions waiting. Everything on it is computed in one function and laid out in one template. - **Insights** (`applications/analytics.py`, `applications/insights.html`) is a second fixed page: the response funnel, response rates, where applications come from, how long things take, and the tables underneath. They answer the same question — *how is this going?* — at two distances, and a person has to remember which page holds which number. ## Shape 1. **A widget is a small named thing** that knows how to compute itself and render itself: a key, a label, a sentence for the picker, a width hint (a quarter, a half, the whole row), and a `context()` that produces what its own template needs. Registered the way capture sources and settings sections already are, so the mechanism is one somebody has seen before. 2. **The built-in set is what the two pages already show**: the counters, gone quiet, upcoming interviews, due reminders, recent activity, suggestions waiting, listings to decide, closing soon, the response funnel, the response rate, where applications come from, time to first reply, time to a decision. 3. **A person's own arrangement** — which widgets, in which order — stored on the profile as a list of keys, the way `hidden_nav_items` is (#23). Storing what is *chosen* rather than what is left out is the wrong way round here: a widget added in a later release should appear for somebody who has never arranged anything, and be absent for somebody who has built a page deliberately. 4. **One page, one address.** Insights stops being a destination of its own; its widgets are on the same page, the navigation loses an item, and `/applications/insights/` redirects rather than breaking a bookmark. 5. **Arranging** is a settings screen, or an *Arrange* mode on the page itself. The first is less code and works from a keyboard without any of the work #35 needed. ## Classification Enhancement, and a large one: it is the two busiest pages. Not breaking — the same numbers, differently arranged, with one nullable field on the profile. ## Depends on Nothing. It must carry the fix from #45 forward rather than reintroducing the stretched bars. ## Open questions 1. Can a plugin add a widget? The registry has the same shape as the ones already there, so building it as one costs nothing. Proposal: build it as a registry, do not advertise it until a plugin asks. 2. Drag to arrange, or a list with move up and down? The board can drag now (#35), but a list is keyboard-workable for free. 3. What does a brand-new account see? Proposal: exactly what the dashboard shows today, in today's order, so nothing changes for anybody who never opens the setting.
tiagoagueda added this to the 0.2.0 milestone 2026-09-06 15:46:43 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Postulo/postulo#44
No description provided.