
Portal Saved Views: Separate Shared Filters from Permission to See Records
Build saved portal views with explicit ownership, visible filter rules, current authorization, and predictable behavior when fields or teams change.
Custom Portals
Make portal dashboard freshness understandable with source timestamps, consistent snapshots, honest refresh outcomes, and clear handling of partial or stale data.

LET’S BUILD SOMETHING USEFUL
Talk to Ataraxy Developers about your website, app, or custom software.
A portal dashboard says updated just now, but one chart still reflects yesterday’s import. The page may have re-rendered successfully while its source data remained unchanged. To a customer deciding whether to approve a shipment or follow up on a payment, that distinction matters more than the animation on the refresh button.
Freshness is a property of the evidence behind a number, not simply the time the screen was painted. A useful dashboard explains what period its values describe, when the relevant source was observed, and whether the latest refresh actually produced newer information. Those details can be concise, but they need a consistent model underneath them.
Start with the action a user will take from the panel. An inventory availability view may need a much shorter acceptable delay than a monthly trend report. Define a freshness expectation for each source and workflow, including when the user should wait, check another system, or proceed with a visible limitation. Avoid one universal green status for panels with very different purposes.
Use these expectations to decide which timestamps belong on the page. A historical report may primarily need its reporting period and finalization status. A current operations list needs an observation time and a warning when the source exceeds the agreed age. Keep technical details in a drill-down unless they help the user make that decision directly.
Distinguish the period covered by the data, the time it was last observed at the source, the time it was imported or computed, and the time the browser received it. These can all differ legitimately. Store them with clear field names and time-zone semantics so later presentation does not collapse them into a single ambiguous updated field.
For example, a hypothetical dashboard could show orders through 10:00, imported at 10:07, and opened at 10:12. Reopening the page at 10:15 should not imply that the order data now covers 10:15. If the source does not provide a trustworthy observation timestamp, label the available fact, such as last successful import, rather than inventing a stronger measure of freshness.
The MDN Cache-Control reference explains directives governing how HTTP responses are cached and reused. Those response-cache rules do not by themselves establish when the underlying business records were collected. A newly generated response can still contain an old warehouse snapshot, and a cached response can contain the correct finalized historical report.
Choose cache behavior according to sensitivity, authorization, and the page’s requirements. Also send explicit data provenance with the result. When investigating a stale number, inspect both the delivery path and the upstream pipeline. Repeatedly bypassing the browser cache will not repair a failed source import, and labeling every cache hit stale can create unnecessary alarm.
Totals, breakdowns, and percentages should use compatible inputs. If a dashboard compares completed jobs against all jobs, fetching the numerator before an import and the denominator afterward can create an inconsistent result. Where the decision needs consistency, produce a shared snapshot or version that the related panels can identify and use together.
Attach the relevant filters, tenant, reporting boundaries, and snapshot identifier to the result. When a user downloads a report, make it clear whether it represents the displayed snapshot or a new computation. If it is new, label that change. A screenshot and an export should not appear contradictory simply because one silently used a later set of records.
Not every dashboard needs a single global snapshot. Independent panels may legitimately update at different times. In that case, label their freshness individually and avoid presenting them as a synchronized total. Explain partial availability in the places where a user would otherwise assume comparability, especially when one source is delayed but another continues updating normally.
A refresh can retrieve newer data, confirm that no newer source version exists, fail to reach a service, or update only some panels. These are different outcomes. Keep the last successful data visible when that is useful, but accompany it with a truthful status after a failed attempt. Do not replace a usable result with zeroes that look like a real business measurement.
Separate last attempted refresh from last successful data update. A status might say that the refresh failed at a particular time while showing the last successful import time beside the values. Provide an appropriate retry action and a path for persistent problems. A spinner that disappears without any result leaves the user unable to distinguish success from abandonment.
Users can change filters or press refresh while an earlier request is still running. Associate each result with the query and request generation that produced it. Apply it only if it still belongs to the active view. Cancel unnecessary requests where supported, but do not rely solely on cancellation to prevent an already completed response from overwriting newer data.
Test a slow request for one date range followed by a fast request for another. The final chart, labels, totals, and freshness timestamp must all describe the same selected range. The same principle applies to tenant switching and permission changes. Never let an old response repopulate a dashboard after the user moves into a different authorized context.
Automatic refresh should respect the task being performed. Reordering a table while someone is reading a row or changing values during an approval review can create confusion. Consider showing that a new snapshot is available and allowing the user to apply it deliberately when the workflow needs a stable view. Make the behavior consistent between manual and automatic refresh.
Communicate status changes accessibly without repeatedly interrupting reading. Keep focus on the control the user activated, provide concise text alongside visual indicators, and avoid using color alone for stale or failed states. Test a narrow screen, increased text size, and keyboard navigation. Freshness information is useful only if it remains readable near the values it explains.
An AI-generated dashboard summary should identify the snapshot and filters it used. If the source is delayed, the summary must retain that limitation rather than describing the numbers as current. Regenerate or invalidate the summary when its evidence changes. Do not allow a fresh prose timestamp to disguise old underlying data.
Operational monitoring should track source age, failed imports, partial coverage, and overdue refreshes separately from page availability. Test these conditions with controlled fixtures and verify the visible explanation. Assign ownership for each upstream dependency so a support agent can tell whether the issue is a browser request, an application calculation, or a delayed external source.
A trustworthy dashboard makes the age and scope of its evidence understandable. Separate source observation from import and render times, keep comparisons consistent, and report refresh outcomes honestly. Protect against response races and tie exports and AI summaries to the same snapshot. Users can then act on the information with a clear understanding of what it covers and what may still be missing.
LET’S BUILD SOMETHING USEFUL
Talk to Ataraxy Developers about your website, app, or custom software.