Skip to content

Releases: jeffpaul/daymark

0.14.0

Choose a tag to compare

@github-actions github-actions released this 09 Sep 19:22
8ea76ec

Added

  • Settings -> Daymark now has a Privacy section with a checkbox each for location, weather, and camera-metadata capture, plus whether a Mark's location is published publicly — previously these were only reachable by adding a filter in code. A filter still overrides its matching checkbox, so nothing already using one changes behavior. (#289)
  • Settings -> Daymark's Subscriptions section now has a "Check for new posts" dropdown (Hourly / Every 6 hours / Every 12 hours / Daily, the previous default) controlling how often Daymark checks your subscriptions for new content — previously only changeable via a filter in code. A filter still overrides it. (#291)
  • Settings -> Daymark's subscriptions table now has a search box that filters the list by site name, site URL, or feed URL — useful once you have more than a handful of subscriptions. (#281)
  • Settings -> Daymark has a new Connectors tab recommending IndieWeb plugins that pair well with Daymark — Webmention, ActivityPub, and ATmosphere — each with a plain-language description of what it adds, a link to its WordPress.org page, and an inline Install/Activate button reflecting whether it's already installed or active. None of these is required. (#86)
  • The Connectors tab also lists Bridgy Fed, a free hosted bridge (not a plugin) that gives your site a fediverse and Bluesky presence through the Webmention support above, with no ActivityPub or AT Protocol plugin needed — an alternative to the ActivityPub plugin above, not an addition to it, since it bridges you in under an auto-generated handle rather than your own domain's native identity. (#91)

Changed

  • Breaking (for anything targeting the old URL directly): Settings -> Daymark's page slug got shorter and the page was reorganized into tabs. It's now at /wp-admin/options-general.php?page=daymark (was options-general.php?page=daymark-subscriptions), split into Subscriptions, Connectors, Import/Export, and Privacy tabs instead of one long page. A plain visit to the old URL redirects automatically, so a browser bookmark still works — but the page's hook suffix changed too, from settings_page_daymark-subscriptions to settings_page_daymark, along with the matching settings_page_daymark-subscriptions admin body class WordPress adds automatically. Anything keyed to either of those directly (a custom admin_enqueue_scripts/admin_head hook, hand-written CSS/JS targeting the old body class) needs updating to the new slug — the redirect only covers a plain page load. (#86)

  • Settings -> Daymark's subscriptions table now defaults to A-to-Z order by site name (falling back to the site URL only when there's no name) instead of raw subscribe order — the Site, Status, and Last fetched column headers remain independently sortable as before. (#303)

  • A subscription post's Timeline card no longer shows its author's name directly under the title — for most single-author sites that read the same as, or very close to, the site name already shown on the card's bottom row, so it was dropped as redundant. (#285)

  • Search's Source filter dropdown now lists subscribed sites alphabetically by name, with "All" and "My Marks" pinned first — previously they appeared in subscribe order. (#283)

  • A "link"-format Timeline card no longer stands out with its own orange-tinted background — it now reads like a plain Note/Article card, matching the rest of the Timeline. Its full-screen post view also shows a best-effort oEmbed preview of the post's own detected outbound link (e.g. an embedded Mastodon post, a video player) when one is available. (#279)

  • A microformats2-subscribed site's reply or RSVP posts now render as Notes on the Timeline instead of plain, undifferentiated articles — matching how status/chat-format posts already do. Reposts, likes, and bookmarks are unchanged for now. (#292)

Fixed

  • A bookmark on a Mark or subscription post no longer outlives it — unsubscribing from a site, deleting a Mark, or WordPress's own trash-retention eventually purging either one now also clears any bookmark pointing at it, instead of leaving a permanently orphaned entry behind. (#301)
  • The full-screen post view lost the site title, date, and interaction icons (Like through Share) a Timeline card already shows once opened — they're now kept visible below the post's own content. (#287)
  • Explore/Search/Me's header Daymark icon and title still sat farther right than Home's own icon and wordmark, even after a prior pass matched their icon-to-title gap — the tap target's own leading overhang (44px box, 26px icon) was shifting the icon itself, not just the gap. (#276)

Full Changelog: 0.13.0...0.14.0

0.13.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 13:54
5c37a8c

Added

  • Gallery Marks can now be manually reordered in the composer — up/down buttons next to each image (both newly picked files and media already attached to a resumed draft) let you set the order the published gallery renders in. (#250)
  • A published Mark's Timeline card now has a routing icon showing exactly where it was sent — your own site plus every syndication target attempted, each with its own status (published/mocked, failed, or unsupported) and a link out where one exists. (#255)
  • Notifications now groups a Mark's replies into one conversation card instead of scattering them as separate flat cards, and adds a source filter (once you have more than one) so you can narrow the list to just one reply origin. The per-Mark routing popover also now shows when a real syndicated target's replies were last checked. (#258)
  • The composer's picker now accepts a dragged-and-dropped file on desktop, attaching it the same way picking it via the file input would. (#260)
  • A Draft's ⋯ menu now has a "Publish" action, alongside Edit and Delete, that skips straight to the Publish screen for a draft that's already ready — no need to reopen the full composer first. (#265)
  • A Mark's own card now shows your site's name on the same row as its timestamp, left-aligned — matching how a subscription post's card already shows its source site there. (#267)
  • A subscription post's own full-screen view now has a "Refresh content" action that forces a fresh live re-fetch, instead of the cached content being stuck at whatever it looked like the first time it was fetched. (#267)
  • A subscribed feed post whose content hasn't been fetched yet now rehydrates automatically as its Timeline card scrolls near the viewport, instead of waiting for you to tap it — the same background fetch a click-through already used, just triggered earlier so opening it moments later is instant. (#93)
  • /daymark now loads and the composer works even on a cold, zero-connectivity load — open it once online, then a later relaunch with no signal at all (a subway, a flight, a dead zone) still gets you a working composer that queues locally, instead of a browser error page. (#126)

Changed

  • Tapping a Timeline card (a Mark, an ordinary post, or a subscription post) now opens its full content on a dedicated full-screen post view instead of expanding it in place below the card — the same full-screen pattern Notifications already uses, with a back arrow next to the Daymark icon in the upper-left. Notifications' own back link now shares that same treatment (previously its own separate markup). (#270)

Fixed

  • A syndication target that couldn't represent a Mark's type (e.g. selecting YouTube for a note) was silently dropped instead of being recorded as failed — _daymark_syndication_status could never actually show failed in practice. Every attempted target is now recorded with its own outcome, whether it succeeded or not. (#255)
  • A syndication target whose connector plugin had been deactivated or uninstalled after it was selected was also silently dropped instead of recorded — the routing popover now shows it as "Not available" instead of it just vanishing. (#263)
  • A resumed draft with existing media but no caption could get silently bounced back to the composer instead of reaching the Publish screen — the readiness check only ever looked at newly picked files, never a draft's own already-attached media. (#265)
  • The Like/Repost toggle's own auto-published Mark (used to carry an outbound u-like-of/u-repost-of link) no longer shows up as its own card on the Timeline — it was never meant to be read as content. (#267)
  • A long Timeline card title no longer gets cut off with an ellipsis — it now wraps onto as many lines as it needs, matching how the excerpt already displays in full. (#267)
  • The Like-through-Share stat-row icons are now evenly spaced again — a read-only stat (a plain count, or the "Replied" indicator) previously had no minimum width of its own, throwing off the row's rhythm next to the interactive icons that did. (#267)
  • The Timeline's vertical rail line no longer visibly breaks at a relative-date group header ("Today", "Last Week", ...), and now connects cleanly to the sunrise/sunset flourishes that bookend it. (#267)
  • Explore/Search/Me's header icon and title no longer sit farther apart than Home's own icon and "Daymark" wordmark do. (#267)
  • Broadened the "Skip to content"/post-navigation stripping in a subscription post's expanded content to catch a few more common theme/framework conventions (additional skip-link targets, a wider set of wrapper elements for the previous/next post links). (#267)
  • A Jetpack Tiled Gallery's images could overlap each other and surrounding text in a subscription post's expanded content, since the layout CSS that positions them never loads here — they now fall back to a plain stacked layout instead. (#267)

Developer

  • Every user-facing PHP string now uses a WordPress translation function under the daymark text domain, and the app shell's script registers wp-i18n + wp_set_script_translations() — laying the groundwork for wordpress.org's own GlotPress translation system once the plugin ships there. No bundled translation files, no behavior change for an English-language site. (#252)
  • Every user-facing string in the app shell's own JavaScript (assets/app.js) now uses wp.i18n.__()/_n()/sprintf() under the daymark text domain, completing the JS half of i18n readiness started in #252 — no wording or behavior change for an English-language site. (#253)
  • The hooks reference site (https://jeffpaul.github.io/daymark/) now shows Daymark's own icon as its browser tab favicon instead of the Docusaurus generator's default.
  • The hooks reference site now includes a "Writing a Connector" guide — a complete, minimal Daymark_Syndication_Connector example (the interface, the publish() payload/result shapes, and the relevant hooks) for anyone building a real syndication destination. (#263)

Full Changelog: 0.12.0...0.13.0

0.12.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 14:30
98ac175

Added

  • A subscribed post's Timeline card now has a "Replied" indicator plus real Like and Repost toggles — Like/Repost publish a small Mark of your own, letting an already-installed federation plugin (ActivityPub/Webmention/ATmosphere) send the actual outbound like/reblog, the same way the existing Reply action already works. Full engagement counts from the origin site aren't obtainable in general, so this shows your own engagement instead. (#232)

Changed

  • An expanded Timeline card now gives the borrowed post content its own light gray background, distinct from the card's own white chrome — so a subscription post's "Reply" action reads clearly as Daymark's own UI rather than part of the quoted page. (#222)
  • A Timeline card's excerpt no longer gets clamped to a fixed 1-2 lines — it now shows in full whenever the server provides one (up to ~40 words for a subscription post), instead of cutting off real content at an arbitrary card-height cap. (#225)
  • The Settings -> Daymark subscriptions table's "Edit name" text link is now a pencil icon next to the site name — clicking it makes the name editable inline, saving on Enter, Tab, or clicking away instead of a separate Save button. (#242)
  • The Settings -> Daymark subscriptions table's Refresh action is now a circular-arrows icon next to "Last fetched" instead of a labeled button in the Actions column — clicking it spins the icon while the refresh is in flight. (#245)

Fixed

  • Reduced the empty vertical space between the header and the first Timeline item — the pull-to-refresh indicator's collapsed box and the empty refresh-status message were each still costing a full flex gap even though neither had any visible content. (#215)
  • A subscription post's expanded content could show a Jetpack "Share this:" block, a Jetpack "Related" posts block, floated images overlapping surrounding text, a "Skip to content" link the existing stripping didn't catch, a theme's own publish-date/category markup nested alongside the real post body, and a "Previous:"/"Next:" post-navigation link — none of that is part of the post content from an RSS-feed point of view. (#218)
  • A Timeline card for a post with no featured image and no cached site icon no longer shows a manufactured placeholder icon — the title/excerpt/date now use the card's full width instead. (#220)
  • The Timeline could show a raw WordPress error ("Could not load your timeline. Cookie check failed") when the app-shell page's nonce went stale — most commonly a home-screen-installed PWA session resumed after a long background suspension. It now shows "Your session has expired" with a Reload button. (#223)
  • A subscription post whose only image was lazy-loaded (a placeholder src with the real URL in data-src/data-lazy-src/srcset) previously showed no Timeline card thumbnail at all — the content sniffer now falls back through those common lazy-load attributes when src itself is empty or a placeholder. (#227)
  • The Home/Explore/Search/Me header now always shows Daymark's own icon instead of the site's configured Site Icon, tightens Explore/Search/Me's header title spacing to match Home's, and replaces the Notifications page's "Back" text with the Daymark icon (keeping the arrow). (#230)
  • Search's "Showing your bookmarks." banner text now matches the size of its "Show everything" link — they previously rendered at two different sizes. (#229)
  • The Share icon's clipboard-copy fallback (used on any browser without a native share sheet, e.g. Firefox) now shows a visible on-screen "Link copied" confirmation instead of only a subtle color change — it previously looked like nothing had happened. (#234)
  • A Timeline card's date, once shown as an actual date rather than a relative "Xd ago" reading, now formats it using the site's own Settings -> General -> Date Format instead of the browser's locale default (previously always MM/DD/YYYY-style). (#238)
  • A bookmarked post's images now render correctly when viewed offline — its cached content markup displayed fine with no connectivity, but its <img> tags still pointed at the live origin site, so images showed as broken links. Images are now cached alongside the content and swapped in from that local copy when offline. (#236)
  • The Settings -> Daymark subscriptions table's site icon now renders inline, just to the left of the site title, instead of in its own dedicated column. (#240)
  • On a screen with very little content (e.g. a near-empty Timeline), the bottom nav and the floating "+New" launcher no longer float mid-page instead of pinned to the bottom — the screen itself now always claims the full available height it's meant to. (#244)
  • A subscription post's Timeline stat row (Like, Comment, Repost, Bookmark, "open original", Share) now spaces every icon evenly instead of splitting into two unevenly-spaced clusters. (#247)

Full Changelog: 0.11.0...0.12.0

0.11.0

Choose a tag to compare

@github-actions github-actions released this 05 Sep 14:51
18a9d62

Added

  • The Settings -> Daymark subscriptions table now shows each site's cached icon in its own column, between Site and Status. (#171)
  • The Settings -> Daymark subscriptions table's Site, Status, and Last fetched column headers are now clickable to sort the table ascending or descending. (#179)
  • A subscription's Site name can now be edited directly in Settings -> Daymark, for when the auto-derived name (especially a Friends-plugin-sourced one) isn't obviously who or what it is. (#179)
  • A Timeline card's site icon now shows the site's name and URL as a native tooltip on hover. (#179)
  • A subscription that's failing to fetch new posts now shows a "Recent fetch issue" message in Settings -> Daymark well before it's flagged fully dead, and a dismissible wp-admin notice links back to the table when at least one subscription has a problem. (#182)
  • The Timeline's own vertical rail now gets a small "sunrise" flourish where it begins and a "sunset" flourish where it currently ends, in the app's own sunset-gradient palette. (#192)
  • A Timeline card (Mark or subscribed post) can now be bookmarked directly from its stat row for offline viewing — a new "Bookmarks" section on Explore shows just what you've saved, and its full content is cached for offline viewing automatically, including on a new device the moment you open Daymark. (#194)
  • A Timeline card's stat row now has a Share icon — it opens your device's native share menu when available, or copies the post's link to your clipboard otherwise. (#197)
  • The Timeline now groups cards under relative-period headers — Today, This Week, Last Week, This Month, Last Month, This Year, or a bare year for anything older — so a long scroll back through older content reads by chronological chunk instead of a wall of individual per-card timestamps. (#199)

Changed

  • A Timeline card's date now sits on its own row, right-aligned at the bottom of the card, instead of sharing the meta line with the chip/author/reading-time text above it — a quieter, corner-anchored placement that reads more like a timestamp and less like one more label in a list. (#173)
  • Clicking "Refresh" on a subscription in Settings -> Daymark now updates that row's Status and Last fetched values in place instead of reloading the whole page. (#177)
  • A subscription post's Timeline card no longer shows a "Subscribed" chip — its site icon already makes clear it isn't one of your own Marks, so the chip was just taking up space. (#179)
  • A Timeline card's comment/like/repost stat row is now ordered like, comment, reblog (was comment, like, repost). (#186)
  • The header now shows the Daymark icon in the upper left on every screen (Home, Explore, Search, Me) instead of just the Timeline icon on Home — tapping it from Explore, Search, or Me takes you back to the Timeline. Explore, Search, and Me also now show the Notifications icon in the upper right, so it's been removed as a separate link on the Me page. (#188)
  • A subscription having trouble fetching new posts (or fully dead) now shows up right in your Notifications, with a link back to Settings -> Daymark — no more separate wp-admin notice to check. (#190)
  • The Daymark icon in the header is a bit bigger now (closer to the size of the bottom nav's own icons), and on Explore/Search/Me it no longer sits inside a bordered square button. (#192)
  • Expanding a Timeline card's content now grows the card's own bordered frame instead of inserting content below it that could look like it overlapped other Timeline elements. The "View full post"/"View original" link is now a permanent icon in the stat row (between Bookmark and Share) instead of only appearing once a card is expanded, and every icon in the row now shows a hover tooltip. (#198)

Fixed

  • Importing an OPML file could leave every newly subscribed site showing zero posts on the Timeline until the next scheduled poll (up to a day away by default) — subscribing to a single site by URL already fetches its content right away, but import never did. A successful import now triggers an immediate background poll. (#175)
  • Subscribing to a second feed on an already-subscribed WordPress site (e.g. a friend publishing both a Posts archive and a separate Notes archive on one install) previously failed as a duplicate, since the site's REST API always resolves to the same site-wide feed regardless of which page you subscribed from. You can now paste a specific feed URL directly to subscribe to exactly that feed, and subscribing to a second page on the same site now falls back to that page's own RSS/Atom feed instead of failing. (#184)
  • A subscribed post's expanded content could show a stray "Skip to content" accessibility link from the source site's own theme, when that site had no <article> element for Daymark to narrow down to. (#198)

Full Changelog: 0.10.0...0.11.0

0.10.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 19:03
d56b3e2

Added

  • wp-admin now offers two quick ways into Daymark: an "Open Daymark" link next to "Visit Site" under the site name in the admin bar, and a "Daymark" item in the "+New" menu that jumps straight into the composer pre-set to an Image Mark. (#158)
  • Subscriptions can now be exported to and imported from a standard OPML file — Settings -> Daymark gets Export/Import controls (GET/POST /daymark/v1/subscriptions/export/import back them). Import reports a per-entry result (subscribed, already subscribed, or failed) rather than failing the whole file on one bad entry, and a dead-flagged subscription is included in the export since it's still a follow worth backing up. (#80)
  • A subscription's cached site icon can now be refreshed on demand from Settings -> Daymark's "Refresh icon" action, instead of only ever being resolved once at subscribe time — useful when a site rebrands its favicon, or for a subscription imported via OPML from another reader with no cached icon at all. (#94)
  • A Mark now quietly picks up capture date/time, optional location, weather, camera EXIF metadata, an estimated reading time, and AI-suggested tags — none of it requires filling anything in, and none of it can block or delay publishing. Location, weather, and camera metadata capture can each be disabled with a filter (daymark_capture_location/daymark_capture_weather/daymark_capture_camera_metadata) — see the readme.txt/README.md FAQ for what's captured and why, ahead of planned future Timeline display work. (#157)
  • A subscribed feed that advertises WebSub (PubSubHubbub) support now delivers its updates by push instead of waiting for the next scheduled poll, so new posts from a supporting site can show up on your Timeline within moments of being published. Purely additive: the existing polling schedule keeps running unchanged for every subscription regardless of WebSub support, so nothing changes for a feed that doesn't advertise a hub. (#161)
  • Expanding a subscribed post's Timeline card now offers a "Reply" action that opens the composer seeded to that post. Publishing sends a normal Mark whose permalink carries a u-in-reply-to link to the source — install the Webmention plugin and it notifies the source automatically the moment your reply goes live. (#162)
  • You can now subscribe to IndieWeb sites that publish microformats2 (h-entry/h-card) markup but have no traditional RSS/Atom feed at all — a new parser discovers and reads that markup directly, mapping richer post types (reply/like/repost/bookmark/RSVP) and author info onto your Timeline the same way a feed-based subscription would. When a site has both a feed and h-feed markup, the feed is always used. (#163)
  • Subscribing to another WordPress site now prefers its real REST API over its RSS/Atom feed when both are reachable, so Timeline cards for that subscription's posts get the site's actual post format (image/video/audio/gallery/standard) instead of a guess from feed content. Any other site — including a WordPress site with the REST API disabled — subscribes exactly as before. (#164)
  • If you already follow someone through the Friends plugin, subscribing to their site in Daymark now reads their posts straight from Friends' own already-fetched cache instead of independently re-polling their site — no extra setup, and it only ever applies to a friend you've already added there. (#165)
  • A Mark's Timeline card now shows a repost count alongside its existing comment and like counts, the same quiet, zero-hides-itself treatment as those two — reposts delivered as replies/reactions from the ActivityPub, ATmosphere, or Webmention plugins now show up on the stat row too, not just in Notifications. (#166)
  • Subscribing to a WordPress site (directly, or to a friend through the Friends plugin) now shows a "Status" or "Chat" formatted post as a Note on your Timeline, with its own icon, instead of a generic "Standard"/article card. (#167)

Changed

  • A published Mark's Timeline card no longer offers in-app Edit or Delete — the ⋯ actions menu is now a Draft-only affordance. To edit or delete a published Mark, use wp-admin directly. (#153)

Fixed

  • Subscribing to a site could fail with "This subscription could not be saved. It may already exist." on a site where Daymark was already active before updating to 0.9.0 — the daymark_subscriptions table is created on plugin activation, which WordPress doesn't re-run on a plain file update. Daymark_Subscriptions::install() now self-heals on init, matching the pattern already used for the backflow and subscription-polling cron schedules. (#149)
  • A Timeline card for your own Mark showed your WordPress user avatar/Gravatar as its leading site icon, not your site's actual Site Icon — often just a plain letter glyph, since a self-hosted site's admin rarely has a Gravatar set. It now shows the site's Site Icon (or Daymark's own bundled icon if none is set), the same source resolution Daymark_Routes::icon_url() already uses for the browser favicon and PWA icons, and consistent with how a subscribed site's posts already show that site's own icon rather than its author's. (#149)
  • Timeline's connecting line between type icons only reached a few px above and below each icon, never actually touching the next or previous item's icon — visibly broken on any row taller than a compact one, which is most of them. It's now drawn once per list rather than per item, so it runs continuously from the first icon to the last regardless of how tall an individual card is, still behind every icon rather than over it. (#149)
  • An ordinary "Standard"-format post with a featured image rendered with the same full-bleed banner treatment a real Image Mark gets, since Timeline only ever checked whether a thumbnail existed, never the post's own WordPress post format. It now reports that format to the app shell, so a Standard post reads as a smaller thumbnail beside its title and excerpt (an Article card), and only a post whose actual format is Image/Gallery/Video gets the full banner. (#149)
  • A Timeline card's image showed an empty placeholder instead of the real photo whenever that image was served from a different host than the site itself — a CDN or offload plugin (Jetpack's Photon, S3, Cloudflare, ...), or a subscribed site's own thumbnail/favicon. The app shell's Content-Security-Policy only allowed images from 'self', silently blocking every one of those; img-src/media-src now also allow https: sources. (#149)
  • The header never hid on scroll the way the footer already did, so it was always taking up space the footer's own auto-hide was reclaiming. It now hides on scroll-up and reappears on scroll-down — the opposite direction from the footer — so the two never both cost their height back at the same time. (#149)
  • An empty Timeline's "Nothing here yet. Publish a Mark or subscribe to a site to fill your timeline." only ever linked "Publish a Mark" — "subscribe to a site" was plain text with nowhere to go. It now links to the Settings -> Daymark subscribe screen, the same destination Explore's own "Following" empty state already links to. (#159)
  • Subscribing to a WordPress site with the REST API reachable (Daymark's own preferred source for it) could classify every one of its posts as a plain "Standard" card, even an image/video/audio-only one, on any site that never assigns WordPress post formats — the common case, especially with a block theme. Subscribing to that same site's RSS/Atom feed instead already detected inline media correctly; the REST connector now falls back to the same content-sniffing when the site's own format field is standard. A friend followed through the Friends plugin gets the same, richer fallback (video/audio/gallery, not just a single image as before). (#167)

Security

  • Feed and subscription fetches (feed content, site-HTML autodiscovery/favicon/title, and the click-through full-content fetch) now enforce filterable response size caps (2 MB / 1 MB / 4 MB respectively) — a response at or beyond the cap is rejected outright rather than parsed or cached as if it were complete. (#81)
  • Added Daymark_Subscription_Url_Guard, a shared SSRF defense-in-depth check applied to every subscription/feed/site URL before it's fetched — on top of the IPv4 protection WordPress core's wp_http_validate_url() already provides, it also rejects IPv6 loopback/unique-local/link-local addresses, IPv4-mapped IPv6 literals, the IPv4 CGNAT range, embedded userinfo, and non-standard ports. (#81)
  • A subscription now records a human-readable last_error reason for its most recent failed check (surfaced in the wp-admin Subscriptions screen, notifications, and the REST API), instead of only a status flag and a failure count with no explanation of why. ([#81](https://github.com/jeffpaul/daymark/iss...
Read more

0.9.0

Choose a tag to compare

@jeffpaul jeffpaul released this 02 Sep 21:39
12a3da8

Added

  • Replaced the Images/Videos/Audio/Notes links flanking +New with a persistent bottom nav: Timeline, Explore, +New, Search, Me. Explore, Search, and Me are real routes (/daymark/explore, /daymark/search, /daymark/me), so a direct link or refresh lands correctly, and the active tab shows via aria-current="page". (#123)
  • Explore: a non-chronological browsing destination — "Browse by type" (Image/Video/Audio/Note) and "Following" (your subscriptions) hand a preset off to Search rather than duplicating it. Memories, collections, and suggested content are future sections. (#123)
  • Search: promoted out of Home's collapsible header search bar into its own screen and nav destination, reusing the same keyword/type/source query — Home no longer has an inline search UI. (#123)
  • Me: a minimal personal-identity screen — avatar/display name, a link into Search scoped to your own Marks, a view-only Drafts list (tap to resume editing), and links to Notifications, the wp-admin Subscriptions screen, and WordPress's own profile/logout. (#123)
  • Composer autosave: your in-progress Mark (caption, media, alt text, destination, category) now saves automatically to a real draft as you compose — no manual save step, though it still requires a connection like the existing manual Save as Draft. (#122)
  • A typed-but-unsent Notifications reply is similarly protected against being lost when you switch to another reply or navigate back to Notifications. (#122)
  • Every Timeline item now shows its own site icon (a Mark's own avatar, or a subscribed site's icon) as its own leading element, separate from the item's thumbnail — a single click filters Timeline to that source, the same Source filter Search already offers. (#120, #125)
  • A site icon degrades gracefully to a plain letter glyph if it fails to load — a subscription's icon is sometimes an unverified guess at the site's /favicon.ico, which doesn't always resolve. (#144)
  • Timeline cards now render by content kind instead of one uniform row, inspired by (not copied from) Path's own timeline: a type-indicator icon sits beside the site icon, threaded to the item above/below by a connecting line. (#144)
  • Image, gallery, video, and mixed-media Marks get a media-dominant card (full-width photo banner, secondary caption, a play button for video, a format badge for gallery/video/mixed); audio gets a compact artwork-and-metadata row; a Note Mark stays a lightweight typography-first row and now shows its own caption text when it carries more than the title alone does. (#144)
  • A subscription post's plain-text posts split into Article (longer excerpt, optional thumbnail) and Link (compact bordered mini-card, no image) — an approximation, since the feed source doesn't yet preserve real content length to tell a genuinely short post from a truncated one. (#144)
  • Every media-dominant kind falls back to a branded placeholder panel, not a blank space, when there's no real photo to show — the common case for a video or audio Mark. (#144)
  • Timeline now includes every published post on your site, not just ones created through Daymark's own composer — a real featured image gets the same media-dominant treatment an Image Mark gets, real body text reads as an Article card, and anything else falls back to a plain row. It carries no ⋯ Edit/Delete menu, since Daymark's composer isn't the right tool for editing block-editor content — use wp-admin for that. (#144)
  • Filtering Search or Explore to one specific type (Image, Video, …) still only ever matches true Marks, since an ordinary post has no such type of its own to filter by. (#144)
  • A Timeline card's relative timestamp ("Just now", "12m ago", shifting to a plain date after a week) is now a real <time> element carrying the exact date and time as its title — hover it, or have a screen reader announce it, for precision at any age. (#144)
  • A single-image or gallery Mark's card now gets a noticeably taller photo banner (320px, up from 176px) than the other media-dominant kinds — the photo is the content for these two types, so it gets more room instead of being cropped to a modest strip. (#144)
  • Tapping a Timeline card now expands its content right in place, below the card, instead of navigating you away (a Mark or your own ordinary post) or opening an overlay (a subscription post). Tap again to collapse; only one card is expanded at a time. (#144)
  • What you see is just that post's own content — no comments, navigation, header, or footer pulled in along with it, whether it's a Mark, an outside post, or a subscribed site's post. A "View full post ↗"/"View original ↗" link is still there for the real page. (#144)
  • Offline-first creation: compose, publish, or save a draft with no connection at all — Daymark saves it on your device and shows the same success screen as if you were online, then publishes or syncs automatically the moment you're back online. A new Pending section on Home shows what's still waiting. (#127)
  • Composer autosave now falls back to the same offline saving. Covers a session already open when you go offline (or start one offline) — loading /daymark itself for the very first time still needs a connection. (#127)
  • The AI Assist sheet's "Add a tag" field now suggests matching tags already used on your site as you type — tap one instead of typing the full name. (#128)
  • Optimistic publishing: tapping Publish or Save as Draft no longer waits for the upload to finish — you're back on the confirmation screen immediately, and the Mark uploads and syndicates in the background, which matters most for a large video, a podcast episode, or a big gallery. (#130)
  • A Pending row on Home shows it in progress and clears once it's done; the confirmation screen fills in the permalink and syndication status once the background upload confirms. (#130)
  • Camera-first capture: tapping Image, Video, or Audio now opens your device's camera or microphone directly, ready to capture — "Choose from library instead" is still right there, just not the default. (#132)
  • A new home-screen shortcut (long-press the installed icon) jumps straight into the composer, skipping Home and the +New tap. (#132)
  • Share sheet integration: share a photo, link, or text to Daymark from any app on your phone — it creates a draft and opens straight into the composer with it already loaded, ready for a caption. Requires having added Daymark to your home screen. (#133)
  • AI Assist can now generate a transcript for an audio or video Mark — tap "Generate transcript" in the composer. Once a Mark has a transcript, its AI-suggested caption and title are grounded in what's actually said, so "summarize podcast" falls out of the existing suggestions rather than being a separate feature. (#135)
  • AI Assist can also improve, not just regenerate, an image's alt text via a new "Improve with AI"/"Suggest with AI" button. Both are exactly as optional and non-blocking as the rest of AI Assist: no configured provider means no button, and a failed request just leaves the field for manual entry. (#135)

Changed

  • For developers: the four wordpress.org screenshots (.wordpress-org/screenshot-*.png) still showed the plugin's previous identity, Moment. Regenerated against a live 0.9.0 build with current Daymark branding and content. (#117)

Removed

  • Daymark_Migration, the one-time storage conversion from the plugin's previous identity, Moment (≤ 0.5.0), to Daymark, deprecated since 0.7.0. If your site still runs Moment (≤ 0.5.0), you must upgrade through an intermediate 0.6.x–0.8.x release first — jumping straight to this version will not convert your old Moment data. (#36, #117)
  • The Images, Videos, Audio, and Notes section pages, their daymark/* blocks, [daymark_*] shortcodes, Daymark_Renderer, and the @wordpress/scripts block-editor build that existed only to power them — superseded by Explore's "Browse by type" section. Existing pages move to Trash (not hard-deleted) on upgrade, and old URLs 301 to /daymark/explore instead of a bare 404. (#123)

Fixed

  • For developers: uninstall.php now cleans up everything the Subscriptions feature and the POSSE microformats2 work added — the daymark_subscriptions table, cached content, the poller's cron event, related options/user meta, and rate-limiter transients. ([#116](https://gith...
Read more

0.8.0

Choose a tag to compare

@github-actions github-actions released this 31 Aug 18:55
80855f6

Added

  • Home is now the merged Timeline feed: the user's own Marks interleaved with cached posts from subscribed sites, replacing what was a Recent Marks list of only their own Marks. Opening a subscribed post fetches and shows its full content in place; pulling down from the top of the list refreshes every active subscription. (#102, part of #78)
  • Search now covers the whole Timeline (Marks and subscription posts) instead of only the user's own Marks, with a new Source filter next to the existing type chips to narrow it back down to "My Marks" or one specific subscribed site. (#103, part of #78)
  • A Settings → Daymark screen for managing subscriptions: subscribe to a site by URL, see its status and when it was last fetched, refresh it on demand, and unsubscribe. Also reachable via a new "Subscriptions" action link on the Plugins list screen. The Subscribe button shows a loading state while the request is in flight. (#104, part of #78)
  • Home's Recent Marks list now shows the same comment/like stat row as the public Timeline card — a zero count stays a dimmed icon-only, a real count shows next to a bolder icon. Resolves the compactness side of #42 in favor of the shared visual language. (#72)
  • A Mark's own permalink page now carries outbound POSSE-quality microformats2 markup: h-entry (with e-content, p-name/p-summary, dt-published, u-url, and u-photo/u-video/u-audio for attached media) and an author h-card (p-author, p-name, u-photo). A new rel=me field on the native Users → Your Profile screen renders as a rel="me" link next to the h-card when set. Deliberately leaves out u-email — a WordPress account email isn't meant to be public, and it's optional in the h-card spec. (part of #78)

Removed

  • The public /timeline page, the daymark/timeline block, and the [daymark_timeline] shortcode. Timeline is now an interleaved, multi-source view (your own Marks plus subscribed sites' posts, via Home) that only makes sense inside the authenticated app — a public page under the same name showing something narrower was confusing and redundant. An existing install's /timeline page is hard-deleted on upgrade (real 404, no redirect); individual Mark permalinks, your site's RSS/Atom feed, and the other four section pages (/images, /videos, /audio, /notes) are unaffected. (part of #78)

Changed

  • For developers: Requires PHP is now 8.2 (was 8.1) — PHP 8.1 stopped receiving security fixes. phpunit/phpunit stays on ^9.6 rather than moving to 11.x: WordPress core's own PHPUnit test scaffold still calls a method PHPUnit 10 removed, so every test run under PHPUnit 10+ fails regardless of anything in this plugin. Tracked in #106 for whenever core fixes it.
  • For developers: CONTRIBUTING.md's crediting-contributors section now says explicitly that Claude Code gets a Co-Authored-By: trailer too, alongside human contributors, when it wrote or materially helped write a change. (#108)
  • For developers: CONTRIBUTING.md's release checklist now opens with a dependency update check (npm/composer outdated and audit, patch/minor routinely, majors held for a deliberate compatibility review) and a bundle size/tree-shaking check, before opening the release PR. (#105)
  • For developers: this release's dependency check found nothing to update — npm outdated and composer outdated --direct are clean apart from the already-tracked phpunit/phpunit hold-back (see above). npm audit reports 32 advisories, all in webpack-dev-server's transitive chain under the @wordpress/scripts devDependency (local build/watch tooling only — the plugin ships no npm dependencies and none of this reaches the distribution zip); composer audit is clean. Bundle size unchanged at 778 bytes.

Fixed

  • A subscribed post's fetched full content no longer leaks the raw page's <script>/<style> source as visible text in the click-through detail view. wp_kses_post() only strips those tags, not their enclosed text, so a fetched page's tracking scripts and print styles were showing up as plain text; the fetch now narrows to the page's <body> and drops script/style elements entirely (tag and content) before sanitizing. (#102)
  • The app now only ever lives at /daymark even on an install that migrated from Moment before the 0.7.0 fix shipped. That fix only stopped a future migration from carrying the old base forward — a site that had already migrated kept it stuck at e.g. /moment forever, since that setting is deliberately never re-checked once resolved. It's now self-corrected on first use: the old value moves to the redirect (same as a fresh migration), and the "Open Daymark" link on the Installed Plugins screen and every other app URL correctly point at /daymark. (#71)
  • A Mark migrated from Moment (which never set a featured image) now shows its thumbnail in Home's Recent Marks list, the same way it already did on the public Timeline: the list reads the featured image first, then falls back to the Mark's own first image attachment, instead of only ever checking the featured image. (#72)
  • A generated title for a long caption with no spaces (e.g. Japanese, which wp_trim_words() only shortens on a CJK-translated locale) is now trimmed to a character-count backstop instead of used in full. The limit is filterable via daymark_title_max_chars. (#75, fixes #74)
  • The "+ New Mark" launcher's Image/Video/Audio/Note bubbles now genuinely burst outward from the button and settle back into it, instead of mostly fading in near their own final position with a slight scale. A scroll that happens while a bubble is still mid fan-out (including one an automated click's own scroll-into-view step can trigger) no longer closes the launcher out from under itself before it's had a chance to become tappable. (#72)

Security

  • A cached subscription post could previously be edited or deleted through WordPress's own generic REST API (wp/v2/subscription-posts), auto-registered because the post type was show_in_rest => true and gated only by ordinary edit/delete-post capabilities — entirely separate from, and bypassing, Daymark's own read-only routes. Nothing in the app ever used that generic endpoint; it's now disabled, so a cached copy of someone else's content can only ever be written by the subscription poller itself. (#103)
  • For developers: bumped nanoid, a transitive devDependency of @wordpress/scripts' bundled Lighthouse tooling, to resolve a high-severity advisory. Dev-tooling only — never invoked by this project's own build/test scripts and never shipped in the plugin zip. (#105)

Deprecated

  • Daymark_Migration (the one-time Moment → Daymark storage conversion) is soft-deprecated ahead of removal in 0.9.0. No behavior change for anyone still upgrading from Moment (≤ 0.5.0) — sites with real legacy data to convert now also get a logged _deprecated_function() notice (visible under WP_DEBUG) at the moment the conversion runs, as a heads-up before it's removed. (#69)

Full Changelog: 0.7.0...0.8.0

0.7.0

Choose a tag to compare

@github-actions github-actions released this 07 Aug 18:54

Added

  • The five daymark/* blocks (Timeline, Images, Videos, Audio, Notes) now expose how many recent Marks they show as a setting in the block editor, instead of requiring a hand-edit of the block markup. The count control appears under Block tab → "Number of Marks" (1–50) and the editor preview updates as you drag it. (#56)

Fixed

  • The app now only ever lives at /daymark (or /daymark-app when that slug is already taken by real site content), even on an install migrated from Moment. Since 0.6.1, a migrated install kept serving the app at its old /moment URL, with /daymark merely redirecting there — now it's the other way around: /daymark is the real app, and /moment (and any home-screen icon already pointing at it) 301s to it instead. (#62)
  • Search and a notification's reply box now dismiss the same way the per-item menu and the "+ New Mark" launcher already do: tapping outside them, or pressing Escape, closes them and returns keyboard focus to their own toggle. Escape now works no matter which control inside search has focus, not only the text field itself. (#63)
  • The composer's title-field "ⓘ" hint follows suit too: an outside tap or Escape closes it and returns focus to the ⓘ button. (#65)

Security

  • Editing a Mark's alt text is now scoped to that Mark's own media — an ID-mapped alt edit can no longer be aimed at an image that belongs to a different post.
  • Expensive actions are now rate limited per user: AI Assist requests, publishing, and manual response syncs. Over the limit, Daymark asks you to wait a moment instead of processing (limits are configurable via the daymark_rate_limits filter).
  • Uploads are now capped per request as well as per file, so many files can't be combined to bypass the 50 MB per-file cap (itself now filterable via daymark_upload_max_bytes). The combined upload limit is 200 MB, filterable via daymark_upload_total_max_bytes.
  • Manual response syncs for real connector references now honor the same per-post cooldown as automatic backflow (with an atomic lock so overlapping syncs can't double-poll), while mocked demo syncs stay instant and repeat-safe.
  • The app shell now sends a conservative Content-Security-Policy header, filterable via daymark_app_content_security_policy. Its inline bootstrap script is nonce-scoped rather than relying on 'unsafe-inline', so an injected <script> tag has no way to execute even if something else on the page were compromised. (#60)
  • Imported social replies can be routed through moderation: the daymark_comment_import_approved filter decides whether an imported reply is approved.
  • AI Assist now treats your draft text strictly as data — instructions hidden inside a caption or filename can't redirect the model. Draft text and filenames are wrapped in an explicit data boundary in the prompt itself, and AI-generated captions, titles, and alt text are now hard-capped server-side rather than only requested via the prompt. (#60)

Changed

  • Tapping "+ New Mark" now fans out into Image/Video/Audio/Note bubbles, Path-app style, instead of always landing on a generic composer — pick a type and the composer opens pre-set to it. The button itself shrank to a plain "+" circle, and Timeline moved from the bottom nav up into the header as a combined icon + "Daymark" home-link, freeing a slot for the new launcher among the remaining Images/Video/Audio/Notes icons. Every public view now also carries a small "← Daymark" link back into the app, since section pages render inside your theme with no app chrome of their own. The animation respects prefers-reduced-motion, and every icon — the launcher and its four bubbles — has a real accessible name. (#53)
  • For developers: the coding-standards suite now covers the test files (composer phpcs-tests) and checks PHP 8.1+ compatibility with the PHPCompatibility standard (composer phpcompat); CI runs both.

Full Changelog: 0.6.1...0.7.0

0.6.1

Choose a tag to compare

@github-actions github-actions released this 05 Aug 03:21
ab98e95

Fixed

  • /daymark no longer 404s on an install migrated from Moment. The app deliberately keeps its persisted URL (e.g. /moment) so a home-screen icon never breaks, but the new brand's own URL had nothing registered at all — it now redirects to wherever the app actually lives. (#49)

Changed

  • The five daymark/* blocks (Timeline, Images, Videos, Audio, Notes) now support color, typography, and spacing from your theme's Global Styles, and sit under their own "Daymark" category in the block inserter instead of the generic "Widgets" bucket. The inserter's hover preview now shows the block rendered against your actual content. (#39)
  • Each Mark on the public views now shows a comment count and a like count (from replies and reactions the ActivityPub, ATmosphere, or Webmention plugins deliver, plus your own on-site comments). A count of zero stays quiet — just a dimmed icon, no "0" — and steps up in weight and color as soon as there's something to report. (#43)
  • Audio and video Marks on the public views now play inline, right in the card, instead of showing only a badge and caption; note Marks get a larger, pull-quoted caption since the text is the whole Mark. (#44)
  • The Home footer (New Mark button + site nav) slides out of the way while you scroll down the recent list, reclaiming its height for content, and slides back on scroll-up or when keyboard focus reaches it. The top bar is a touch more compact too. (#50)

Full Changelog: 0.6.0...0.6.1

Daymark 0.6.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 00:20
025159f

Changed

  • Moment is now Daymark, and your posts are now called Marks — the wordpress.org plugin review team did not approve the name "Moment" and approved "Daymark". The app lives at /daymark on new installs; existing installs keep their current app URL, so a home-screen icon keeps working. (#35)
  • Existing installs are converted automatically: a one-time migration renames the stored options, per-user preferences, post and comment meta, and the section pages' blocks/shortcodes in place. Nothing is lost and nothing needs to be done by hand. (The migration will be retired in a later release.) (#35)
  • For developers: every public identifier is renamed with no back-compat bridges — REST is daymark/v1 with a marks resource, blocks are daymark/*, shortcodes [daymark_*], hooks and meta use the daymark_/_daymark_* prefixes (the post marker is _daymark_is_mark), and PHP classes are Daymark_*. (#35)

Full Changelog: 0.5.0...0.6.0