A view somebody rebuilds every week should be one they can keep #259

Closed
opened 2026-09-17 15:07:07 +00:00 by tiagoagueda · 0 comments
Owner

"Everything I have not heard back on in three weeks." "Companies I have applied to more
than once." Those are the questions a job search asks over and over, and #173 made every
one of them answerable — every column of both tables filters, and a filtered table pushes
its state into the URL. What it did not do is let anybody keep the answer. Each week the
same boxes are filled in again from memory.

The state is already serialisable: hx-push-url means the filtered, sorted, paged view
is a query string. Saving one is storing that string under a name.

And there is already a place to put it. Profile.table_settings holds per-user, per-table
preferences — that is where a column's width lives — it is a JSON field, and it is already
listed in core/export.py, so anything kept there leaves with the person's data and comes
back with it. A saved view is the same kind of thing as a saved column width, for the same
table, belonging to the same person.

Shape

  • Name the current view; it appears beside the table.
  • Choosing one restores filters, sort and column state together.
  • One view per table can be the default, which is what a table opens as.

Two tables have this today, applications and companies (Table.register), and #160
would make listings a third — so whatever is built belongs in core/tables.py beside the
registry rather than in either app.

Worth deciding

  • A saved view must survive its own table changing. A filter on a column that no longer
    exists, a sort on a field that was renamed, a stored width for a column that went away —
    the view has to degrade to what it can still honour and say so, never fail. That is the
    whole of the risk in this feature and it is where the tests belong.
  • Whether a view is shared or private. Private is the obvious default and probably the
    end of it: Postulo is one person's record.
  • Whether the URL stays the durable form. It should. A saved view is a name for a URL,
    not a replacement for one — a bookmark must keep working, and somebody must be able to
    send themselves a link.
"Everything I have not heard back on in three weeks." "Companies I have applied to more than once." Those are the questions a job search asks over and over, and #173 made every one of them answerable — every column of both tables filters, and a filtered table pushes its state into the URL. What it did not do is let anybody keep the answer. Each week the same boxes are filled in again from memory. The state is **already serialisable**: `hx-push-url` means the filtered, sorted, paged view *is* a query string. Saving one is storing that string under a name. And there is already a place to put it. `Profile.table_settings` holds per-user, per-table preferences — that is where a column's width lives — it is a JSON field, and it is already listed in `core/export.py`, so anything kept there leaves with the person's data and comes back with it. A saved view is the same kind of thing as a saved column width, for the same table, belonging to the same person. ## Shape - Name the current view; it appears beside the table. - Choosing one restores filters, sort and column state together. - One view per table can be the default, which is what a table opens as. Two tables have this today, `applications` and `companies` (`Table.register`), and #160 would make listings a third — so whatever is built belongs in `core/tables.py` beside the registry rather than in either app. ## Worth deciding - **A saved view must survive its own table changing.** A filter on a column that no longer exists, a sort on a field that was renamed, a stored width for a column that went away — the view has to degrade to what it can still honour and say so, never fail. That is the whole of the risk in this feature and it is where the tests belong. - **Whether a view is shared or private.** Private is the obvious default and probably the end of it: Postulo is one person's record. - **Whether the URL stays the durable form.** It should. A saved view is a name for a URL, not a replacement for one — a bookmark must keep working, and somebody must be able to send themselves a link.
tiagoagueda added this to the 0.5.0 milestone 2026-09-17 15:07:07 +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#259
No description provided.