Summary #
- Type & atmosphere polish: introduce Newsreader serif (drop Caveat), thinner scrollbars, deeper atmosphere blue
- Rebuild
/consumeas a newspaper-style digest with favicons, content-type icons, and inline microblogs - Replace client-side digest-status polling with an Inertia deferred-prop wait — the skeleton stays up until pending feed fetches resolve, then entries drop in
- Server-side favicon discovery via
php-feed-io/favicon-io - Drop the manual
SourceTypeflag; let each entry'sContentTypedrive its UI - Consolidate migrations to one file per table
Bug fixes along the way #
- Atom feeds: prefer
<published>over<updated>for the entry date dispatchFetches: stamplast_dispatched_atper iteration (was stamped once outside the loop, so wait predicates missed mid-batch dispatches)
Architecture #
FeedEntryRepository→EntriesQuery(app/Queries/Digest)- Extract
FeedJobDispatcherfromFeedRefreshScheduler; addFeedRefreshScheduler::waitForPendingFetches(18s deadline) - Extract
FaviconDiscovererInterfacefor cleaner test doubles - Add
MicroblogBodyNormalizerfor Mastodon-style feeds