# Changelog All notable changes to Daymark are documented here. The format follows Keep a Changelog, and releases use semantic versioning. ## [Unreleased] ## [1.18.1] - 2026-08-29 ### Added - Automatically prepares a reusable share link when the Share panel opens. - Encrypts recoverable share tokens at rest while retaining one-way hashes for public-link validation. ### Changed - Reuses an active automatic link instead of creating a new link on every visit. - Automatically replaces expired or revoked links while preserving manual password-protected link creation. ## [1.18.0] - 2026-08-29 ### Added - Expanded entry sharing with native device sharing, copy-link feedback, email, WhatsApp, Facebook, X, and Reddit actions. - Added clear link-ready guidance and an active-link count to the sharing panel. ### Changed - Clarified that creating a public link is the privacy boundary before external sharing options become available. ## [1.17.1] - 2026-08-29 ### Changed - Moved archive discovery beneath Journals in the main navigation sidebar. - Replaced the oversized archive banner with a compact day count, random-entry action, and "On this day" list. ## [1.17.0] - 2026-08-29 ### Changed - Moved the diary name, description, entry count, recording year, and latest-entry date into the main top header. - Removed the separate oversized diary masthead to reduce vertical space before the entry list. - Preserved custom diary cover images as a subtle background on the new identity header. - Kept account and administration routes on the smaller standard header. ## [1.16.1] - 2026-08-28 ### Added - Added a paperclip indicator beside Timeline titles when an entry contains attachments. - Added an accessible hover label showing the number of attached files. ## [1.16.0] - 2026-08-27 ### Added - Added a themed photo-information overlay when hovering or focusing images inside diary entries. - Added safe EXIF preservation for camera make and model, lens, aperture, shutter speed, ISO, focal length, dimensions, and capture time. - Added file name and size information for existing images that do not contain preserved EXIF data. ### Security - Excluded GPS coordinates from stored photo hover metadata so the overlay cannot bypass entry location-privacy settings. ## [1.15.3] - 2026-08-26 ### Added - Added the amber pin icon and `PINNED` label beside pinned entry titles in Timeline view. ## [1.15.2] - 2026-08-26 ### Fixed - Enforced pinned-first ordering after client-side edits, searches, journal filters, and view changes. - Kept unpinned entries ordered by date, time, and entry ID after pinned entries. ## [1.15.1] - 2026-08-26 ### Changed - Removed the duplicate uppercase label from deleted-comment tombstones while retaining the message and timestamp. ## [1.15.0] - 2026-08-26 ### Added - Added tombstone deletion for comments with replies so the discussion tree remains intact. - Added automatic pruning when a deleted parent no longer has any replies beneath it. ### Changed - Deleted parent comments now hide their text, author identity, reactions, and controls while preserving their replies. - Leaf comments continue to be removed completely, and deleted comments are excluded from active counts and moderation queues. - Updated the deletion modal to explain whether a comment will become a tombstone or be permanently removed. ## [1.14.12] - 2026-08-26 ### Added - Added a designed confirmation modal before permanently deleting a comment. - Added a comment preview and an explicit warning that nested replies are deleted with their parent. - Added Escape, outside-click, loading, and deletion-error handling to comment confirmation. ## [1.14.11] - 2026-08-26 ### Changed - Moved Reply and Delete into a compact row directly beneath each comment timestamp. - Simplified comment footers so they are dedicated exclusively to reaction controls and summaries. ## [1.14.10] - 2026-08-26 ### Changed - Separated comment footer controls into Like on the left, Reply and Delete on the right, and chosen reactions at the far edge. - Added a subtle divider between comment actions and the chosen-reaction stack when reactions exist. ## [1.14.9] - 2026-08-26 ### Fixed - Kept comment and reply reaction triggers as thumbs-up icons after choosing another reaction. - Removed the duplicate inline selected emoji and count; chosen reactions now appear only in the right-side stack. ## [1.14.8] - 2026-08-26 ### Changed - Reorganized comment footers with reaction, Reply, and Delete controls grouped on the left. - Added Facebook-style chosen-reaction stacks on the right of every comment and nested reply. - Added participant-name tooltips to comment and reply reaction summaries. ## [1.14.7] - 2026-08-26 ### Changed - Simplified the discussion header by removing the repeated diary entry title. ## [1.14.6] - 2026-08-26 ### Fixed - Rendered discussions as real parent-child trees so replies appear directly beneath the comment they answer. - Added progressive indentation for replies of replies, capped at six levels with tighter spacing on mobile. ## [1.14.5] - 2026-08-26 ### Changed - Removed the Like and Reacted text labels from reaction controls on nested replies. - Kept reply reaction hover, touch, selection, count, and participant behavior consistent with top-level comments. ## [1.14.4] - 2026-08-26 ### Changed - Changed reaction-summary badges to use the standard hand pointer instead of the help cursor. ## [1.14.3] - 2026-08-26 ### Changed - Simplified the entry reaction tray to show only available emoji choices without selected borders or counts. - Kept reaction selections and participant details exclusively in the summary stack on the right. ## [1.14.2] - 2026-08-26 ### Added - Added a compact overlapping stack of the reactions chosen for an entry on the right side of its social bar. - Added per-reaction hover labels listing the people who selected each emoji. ## [1.14.1] - 2026-08-26 ### Changed - Made the left thumbs-up reaction count open the emoji tray on hover or tap. - Removed the separate blue reaction button from the right side of the discussion bar. ## [1.14.0] - 2026-08-26 ### Added - Added OLED Black, Nord, Dracula, Gruvbox, Solarized Dark, Forest, Rose Pine, and Monochrome themes. ### Changed - Rebuilt theme support around shared semantic colour tokens so backgrounds, panels, borders, text, controls, and status colours change together. - Replaced filter-based light themes with native palettes so images, videos, maps, and charts retain their original colours. ## [1.13.3] - 2026-08-26 ### Changed - Reworked entry reactions into a Facebook-style social bar with reaction and comment totals. - Replaced the labeled entry reaction control with a single circular Like button aligned to the right. - Made reaction trays open on hover for pointer devices while retaining click support for touch screens. ## [1.13.2] - 2026-08-26 ### Changed - Replaced permanently visible emoji rows with a compact Facebook-style React control. - Added an on-demand reaction picker, existing-reaction summary, selected state, and outside-click dismissal. ## [1.13.1] - 2026-08-25 ### Changed - Repositioned comment reactions into a compact footer directly beneath each comment. - Kept emoji reactions left-aligned and grouped Reply and Delete actions on the right. - Removed the oversized global footer spacing from comment controls. ## [1.13.0] - 2026-08-25 ### Changed - Reorganized User Settings from nineteen fragmented destinations into ten task-focused sections. - Grouped diary and editor controls, journals and tags, notification tools, privacy tools, and data management into cohesive pages. - Preserved old settings links by redirecting their hashes to the appropriate new section. - Tightened the settings sidebar and added consistent spacing between grouped panels. ## [1.12.4] - 2026-08-25 ### Added - Added a visible pin icon and label beside the title of every pinned diary entry. - Added a designed, accessible confirmation modal when moving an entry to Trash. ## [1.12.3] - 2026-08-25 ### Changed - Shortened the shared entry visibility option label to "Shared". ## [1.12.2] - 2026-08-25 ### Changed - Combined Encrypt Text and Pin Entry into one compact, equally sized composer options row. - Removed the oversized encryption container while retaining a focused passphrase area only when encryption is enabled. ## [1.12.1] - 2026-08-25 ### Removed - Removed Knowledge Graph from the diary view selector and application view routing. ### Fixed - Legacy Knowledge Graph URLs and saved default values now fall back safely to Diary instead of rendering an empty view. ## [1.12.0] - 2026-08-25 ### Fixed - Corrected personal Statistics totals by normalizing account and entry owner identifiers before comparison. ### Added - Redesigned Statistics with interactive summary cards, weekly and monthly goal progress, a 12-month activity chart, weekday writing distribution, a visibility donut, and ranked topic bars. - Included zero-activity months in the annual chart so trends remain continuous instead of disappearing. ## [1.11.2] - 2026-08-25 ### Added - Gallery images now open their original full-size file in an in-page lightbox with background-click, close-button, and Escape-key dismissal. ## [1.11.1] - 2026-08-25 ### Fixed - Fixed a strict-mode variable declaration error that caused a blank page when opening the date-grouped Gallery. ## [1.11.0] - 2026-08-25 ### Added - Grouped Gallery photos and videos under localized date headings, similar to the Windows Photos timeline. - Added per-day media counts and entry-page links to Gallery captions. ## [1.10.3] - 2026-08-25 ### Added - Timeline rows now open their corresponding entry pages by mouse click or keyboard activation, with clear hover and focus feedback. ## [1.10.2] - 2026-08-25 ### Changed - Replaced wrapping ISO dates in Timeline with compact day and month/year blocks. - Added each entry’s time to Timeline using the account’s configured 12- or 24-hour format. ## [1.10.1] - 2026-08-25 ### Fixed - Scoped calendar day filtering to Timeline so switching to another diary view automatically restores all dates. - Added a visible “Show all dates” action and selected-date heading to filtered Timeline views. ## [1.10.0] - 2026-08-25 ### Added - Populated calendar days now open the Timeline filtered to every entry recorded on that exact date. - Calendar-to-timeline navigation stores the selected date in the URL so the filtered day can be bookmarked or reloaded. ## [1.9.13] - 2026-08-25 ### Fixed - Moved the private-entry lock indicator to immediately after the Delete action. ## [1.9.12] - 2026-08-25 ### Changed - Replaced the “PRIVATE” entry metadata text with a compact lock indicator beside the Delete action. ## [1.9.11] - 2026-08-25 ### Fixed - Added matching hover and pressed feedback to Take Photo so it behaves consistently with Record Voice. ## [1.9.10] - 2026-08-25 ### Fixed - Stopped the Bold toolbar button from appearing selected while hovering the entry editor by separating the editor controls from an invalid shared label relationship. ## [1.9.9] - 2026-08-25 ### Changed - Removed collaboration-role suffixes such as “owner” from journal names in the entry composer. ## [1.9.8] - 2026-08-25 ### Changed - Removed the Mood field, visible coordinate inputs, and manual weather-loading control from the entry composer. - Kept map coordinates internal so location search and mapped entries continue to work without exposing technical fields. ## [1.9.7] - 2026-08-25 ### Fixed - Matched the Take Photo and Record Voice composer controls to the same width and height in normal, disabled, and recording states. ## [1.9.6] - 2026-08-25 ### Changed - Removed the template-button and rotating-prompt writing aids from the entry composer for a cleaner editing surface. ## [1.9.5] - 2026-08-25 ### Changed - Shortened the User Settings sidebar labels by removing “preferences” from Diary, Editor, Notifications, and Privacy. ## [1.9.4] - 2026-08-25 ### Changed - Redesigned journal cards with a balanced details-and-controls layout, clearer action hierarchy, larger controls, and compact entry metadata. - Tightened the Create Journal area and aligned it with the journal cards across desktop and mobile layouts. ## [1.9.3] - 2026-08-25 ### Fixed - Prevented the Journals settings page from rendering blank on its first visit by replacing its legacy modal lifecycle with a stable page panel and defensively handling incomplete journal records. ## [1.9.2] - 2026-08-25 ### Changed - Reworked Journal settings into clean full-width rows with separated metadata and actions, plus a labelled full-width creation area. - Improved Journal settings alignment and responsive behaviour on narrow screens. ## [1.9.1] - 2026-08-25 ### Changed - Removed category headings from the User Settings sidebar for a cleaner uninterrupted navigation list. ## [1.9.0] - 2026-08-25 ### Changed - Replaced nested User Settings tabs with direct, grouped sidebar destinations for every profile, diary, writing, interface, notification, privacy, security, and data panel. - Each settings subsection now has its own stable URL fragment for direct links and bookmarks. ## [1.8.1] - 2026-08-25 ### Changed - Simplified Profile settings by removing the Pronouns and Home Location fields. ## [1.8.0] - 2026-08-25 ### Added - Self-service temporary account deactivation and credential-based reactivation from the sign-in page. - Journal ownership transfer to another active user while retaining editor access. - Recoverable account deletion with a 30-day cancellation window and automatic removal of database records, media, and personal backup files. - Downloadable CSV account-security activity alongside existing device-session controls. ## [1.7.0] - 2026-08-25 ### Added - Personal storage analytics with category graphs, quota progress, a largest-file browser, and exact duplicate detection. - Safe attachment cleanup that removes selected originals and thumbnails from included object storage and every referencing entry. - On-demand personal backup history with complete account data, readable Markdown entries, original media, and download or deletion controls. ## [1.6.0] - 2026-08-25 ### Added - Independent in-app, native browser, and verified-email notification channels with quiet hours and instant, daily, or weekly email delivery. - Shared-entry creation/update notifications and security alerts for failed sign-ins and new devices. - Background email delivery with retry tracking and grouped digest messages through the included SMTP service. ### Changed - Notification event preferences now govern comments, replies, mentions, shared journal activity, and account security across enabled delivery channels. ## [1.5.0] - 2026-08-25 ### Added - Direct profile-image and diary-cover uploads to included object storage, with controlled public avatar delivery for public author pages. - Personal tag inventory with account-wide rename, merge, and removal actions. - Custom composer templates and prompts, scheduled browser writing prompts, and configurable weekly-entry and monthly-word goals. - Live writing-goal progress within personal diary statistics. ### Changed - Composer templates and random prompts now include each user's saved writing tools, and statistics isolate personal authorship within collaborative journals. ## [1.4.0] - 2026-08-25 ### Added - Optional public author pages with profile image, pronouns, biography, personal website, join date, and public entries. - Account-wide public-link management, held-comment review and approval, and blocked-user management inside Privacy settings. - Database-backed comment approval and mutual interaction blocking for comments, reactions, and mentions. ### Changed - Privacy settings now control public-profile availability and whether new comments require owner approval. ## [1.3.0] - 2026-08-25 ### Added - Functional date, time, timezone, temperature, distance, week-start, map-zoom, image-quality, remembered-entry, accent-colour, diary-cover, and expanded identity preferences. - Client-side image resizing and JPEG quality selection for new uploads while retaining an original-file option. ### Changed - Calendar alignment, entry timestamps, weather units, single-location map zoom, composer defaults, remembered entry choices, interface accents, and masthead covers now follow each account's saved preferences. ## [1.2.0] - 2026-08-25 ### Added - Profile editing and a dedicated Privacy page for location precision, comment access, and default public-link expiry. - Comment and reply inbox notifications that respect each recipient's saved notification preferences. ### Changed - Consolidated User Settings into exactly seven full-page sections: Profile, Diary, Editor, Appearance, Notifications, Privacy, and Security & Data. - Moved journals, inbox activity, sessions, exports, account lifecycle, and trash into focused sub-navigation within their related settings pages. - Applied saved preferences to the opening diary view, entry-list size, composer journal and visibility defaults, autosave, spellcheck, interface theme/scale/density/motion, location precision, comments, and public-link expiry. ## [1.1.0] - 2026-08-25 ### Added - Account-synchronized user preferences backed by PostgreSQL and authenticated preference APIs. - New full-page Diary, Editor, Appearance, and Notification preference sections with responsive controls and saved-state feedback. ## [1.0.6] - 2026-08-25 ### Changed - Flattened the Maintenance page into a full-width layout without the nested modal container, with tighter status, schedule, message, behavior, and action sections. ## [1.0.5] - 2026-08-25 ### Changed - Administrator account creation now uses the same focused modal as user editing for a consistent Users workflow. ## [1.0.4] - 2026-08-25 ### Changed - User editing now opens the existing administrator editor in a focused modal while preserving its established appearance and controls. ## [1.0.3] - 2026-08-25 ### Changed - Simplified Operational Alerts with a compact health strip, full-width threshold layout, evenly aligned setting cards, and a cleaner action row. ## [1.0.2] - 2026-08-25 ### Changed - Compacted the seven Admin Overview headline metrics into one complete desktop row, with balanced full-width wrapping on small screens. ## [1.0.1] - 2026-08-25 ### Changed - Reflowed Admin Overview metrics so incomplete rows expand to the available width without leaving empty colored grid cells. ## [1.0.0] - 2026-08-25 ### Added - Scheduled maintenance mode with optional immediate start/open-ended duration, visitor messaging, HTTP 503 API enforcement, automatic expiry, administrator bypass, and audit events. - Date-ranged administrator analytics exports in spreadsheet-ready CSV and formatted PDF, with report generation audit events. - Configurable operational alerts for memory, PostgreSQL connections, failed sign-ins, backup age/completeness, and per-user storage utilization. - Configurable per-user storage quotas with live usage in account administration and enforcement during uploads. - Unified administrator moderation for recent comments and public links with search, context links, removal/revocation actions, and audit events. - Admin backup history with matched database/media status, total sizes, one-click creation, authenticated downloads, deletion, and audit events. - Persistent administrator audit logging with actor, action, target, details, IP address, and a dedicated Admin Audit page. - Live Admin Overview charts for 30-day content and sign-in activity, entry visibility, and top contributors using lightweight native SVG and CSS. - Administrator Website settings for the live site name, masthead description, top notice, browser title, and footer signature. - Full administrator account creation and editing, password resets, verification controls, guarded account deletion, and detailed host/container and PostgreSQL resource statistics. - Expanded administration with overview metrics, searchable account management, session revocation, registration-code history and revocation, sign-in auditing, and system/storage status. - Repository README with feature, setup, Portainer, migration, backup, configuration, and security guidance. - Permission-checked standalone entry pages at `/entries/:id` for durable diary permalinks. - Editable entry times, displayed alongside each diary date and backfilled from original creation timestamps for existing entries. - Dedicated `/settings` and `/admin` pages with section navigation, replacing account and administration popups. ### Changed - Removed the manually maintained revision label from System status to prevent stale deployment information. - Removed the inherited modal form container from Website settings so its fields use the full page content area. - Removed the redundant nested Identity card from the single-section Website settings page. - Rebuilt registration administration as two clearly labeled cards for access policy and invitation-code creation. - Added consistent pointer, hover, pressed, and keyboard-focus feedback to interactive controls and popup close buttons across the site. - Reorganized administrator user rows into aligned account details, status controls, and grouped actions with a responsive stacked layout. - Limited Admin Dashboard status messages to their current section and made them dismiss automatically. - Rebuilt the Admin Dashboard as a full-page, sectioned interface matching the User Settings navigation pattern. - Increased the complete interface scale by 10%, including typography, controls, icons, spacing, and panels. - Flattened form panels by removing their offset 3D shadows while retaining clear borders. - Hid the redundant Discuss link when viewing an entry's already-open discussion page. - Renamed the user-facing application from Daymark to Daymark while preserving its existing Docker and storage identifiers. - Replaced the oversized static hero with a compact masthead showing the live entry count, earliest recorded year, and latest entry date. - Renamed Permalink to an icon-labeled Discuss link and embedded reactions, comments, replies, and comment creation directly beneath standalone entries. - Removed the Latest badge and moved entry discussions from the heading actions to a dedicated control beneath each entry. - Made diary entry titles link directly to their standalone entry pages. - Made entry tags navigable filters that reopen the diary at the matching tag and year. - Removed automatic tag-based Related Entry links from diary cards to reduce visual clutter; manual links and the Knowledge Graph remain available. - Expanded entry headings into a two-column date/content layout with title and actions on top and metadata/location spanning the full row below. - Reordered entry headings with the title first, metadata beneath it, and location aligned across the metadata row. - Replaced the crowded seven-button view switcher with a compact View selector and separated Search, Filters, and entry count controls. - Positioned New Entry beside User Settings in the simplified diary header. - Opt-in live voice transcription through supported browser speech services and on-demand in-browser Tesseract OCR that inserts extracted image text into drafts. - SSRF-protected web link metadata previews with bounded fetches, redirect validation, image cards, and privacy-enhanced YouTube/Vimeo embeds. - OpenStreetMap/Nominatim place search, client-side photo EXIF date/GPS extraction, and date/location-specific historical or forecast weather from Open-Meteo. - Mobile rear-camera capture, browser microphone voice-note recording, stored entry reminder times, and PWA/browser reminder notifications. - Installable Daymark PWA with an offline application shell, locally persistent drafts, an auto-retrying offline entry outbox, app shortcuts, and operating-system text/link sharing into the composer. - Optional browser-side AES-256-GCM entry encryption using a 310,000-round PBKDF2 passphrase key, opaque server storage, locked entry placeholders, and explicit unlock controls. - Complete account JSON/ZIP exports spanning profile, journals, entries, revisions, collaboration, activity, security metadata, and original media, plus verified permanent account deletion. - WebP image thumbnails with original-file links, attachment captions and removal, live upload progress, and an enforced 5 GB per-user storage quota. - Multiple journals per account with automatic migration, entry assignment, colors, descriptions, defaults, visibility, sorting, filtering, and management. - Expiring journal invitation links, email targeting, member management, and server-enforced owner, editor, contributor, and viewer roles. - Entry comments and replies, emoji reactions, member mentions with an inbox, and per-journal activity history. - Revocable public entry links with expiration, optional password protection, isolated media access grants, and view counts. - Structured entry links and backlinks, reusable people, journal collections, and an interactive relationship graph. - Email verification and expiring password-reset links delivered through an included persistent Mailpit SMTP inbox. - Encrypted TOTP two-factor authentication with QR setup, login challenges, and single-use recovery codes. - WebAuthn passkey registration, device management, and phishing-resistant passwordless login. - Active-device management with individual/global session revocation, last-seen metadata, and successful/failed login history. - Double-submit CSRF protection for authenticated mutations and layered rate limits for authentication, recovery, public access, uploads, and API writes. - Administrator dashboard with site totals, open/invitation/closed registration modes, expiring multi-use codes, admin promotion, and account disabling. - Markdown authoring and safe rendering with a formatting toolbar, checklists, and live preview. - Locally autosaved and recovered entry drafts, word and character counts, full-screen writing, and keyboard shortcuts. - Reusable reflection, gratitude, travel, and project templates with rotating writing prompts. - Calendar, compact timeline, mixed-media gallery, and interactive global OpenStreetMap discovery views. - Indexed PostgreSQL full-text search with date, mood, visibility, media, location, ownership, and tag filters. - Tag-ranked related entries, random archive discovery, and date-matched “On this day” memories. - Writing statistics with word, entry, attachment, and topic totals, monthly activity, and current/longest streaks. - MinIO object storage for new media attachments, with authenticated media delivery and 50 MB per-file uploads. - Recoverable entry deletion with an owner-only trash, restore, and permanent-delete workflow. - Automatic revision snapshots before entry edits. - Owner-only revision history browser with one-click restoration and preservation of the replaced version. - Included daily PostgreSQL and MinIO media backups with 14-day retention and persistent backup storage. - Whole-journal JSON, printable PDF, and Markdown/media ZIP exports plus validated JSON import. - Initial multi-user chronological diary application. - PostgreSQL persistence with automatic migrations. - Secure cookie sessions and password hashing. - Private and shared entries. - Mixed-media attachments, maps, moods, tags, pinning, search, and archives. - Owner-only entry editing. ### Fixed - Prevented shared-network database DNS collisions. - Normalized PostgreSQL dates to ISO format. - Replaced placeholder archive navigation with working year and month navigation.