Commit graph

642 commits

Author SHA1 Message Date
9dec6fa00e
Bump version: 1.2.3 → 1.2.4
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.4
2026-03-20 22:35:30 +01:00
4e7cd31035
docs(changelog): Bumped version 2026-03-20 22:35:12 +01:00
5ce2d67c97
fix(activitypub): Ignore draft messages
This prevents null-pointer exceptions when _build_activitypub_object
returns null because the message is a draft.
2026-03-20 22:34:12 +01:00
e195fdf553
fix(markdown): Support both 2-space and 4-space nested list indentation
- Normalize 4-space list indents to 2-space outside fenced code blocks
- Render markdown with tab_length=2 for consistent nesting
- Add regression tests for nested lists and fenced code handling
- Adjust article list padding in blog CSS
2026-03-20 22:31:59 +01:00
b6304a480f
Bump version: 1.2.2 → 1.2.3
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.3
2026-03-20 20:40:28 +01:00
0ee05f1712
docs(changelog): Updated CHANGELOG 2026-03-20 20:40:23 +01:00
116a6aa373
style(articles): Better styling for tables 2026-03-20 20:39:21 +01:00
43a8c4cecd
docs(readme): Clarify post visibility table and add URL access note
- Reformat visibility matrix for readability
- Add warning that drafts/direct posts still have public URLs
2026-03-20 20:39:08 +01:00
16d7a32ce9
Bump version: 1.2.1 → 1.2.2
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.2
2026-03-20 18:09:22 +01:00
ef5f96cce8
docs(changelog): Updated CHANGELOG 2026-03-20 18:09:15 +01:00
5bf3b3300e
fix(activitypub): Don't resend profile updates on startup sync
Federated profile updates should be federated only if there have been
changes.

This prevents glitches such as verified links going unverified until the
next verification schedule is triggered on the remote instance.
2026-03-20 18:01:28 +01:00
27d9631d8b
docs(changelog): Updated CHANGELOG 2026-03-20 17:38:23 +01:00
55c39b7c7a
fix(reactions): prevent duplicate Like activities when file mtime changes
- Skip republishing Like if target URL unchanged
- Add regression tests for both reply and article likes
2026-03-20 16:58:52 +01:00
339214ecff
Bump version: 1.2.0 → 1.2.1
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.1
2026-03-20 13:53:51 +01:00
58194ad78b
fix: Allow non-dict inbox activities to bypass actor filtering 2026-03-20 13:53:36 +01:00
714d8ddda4
Bump version: 1.1.8 → 1.2.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.2.0
2026-03-20 13:43:15 +01:00
6e4d2bd93e
docs(changelog): Updated CHANGELOG 2026-03-20 13:43:10 +01:00
d7592b93aa
docs(readme): Add guidance for changing post visibility in ActivityPub
Document delete+recreate requirements and common scenarios
2026-03-20 13:40:47 +01:00
27ba4ee06b
fix(reactions): Mark standalone likes as published during reply publish
Prevent startup sync from reprocessing like-only reply files
2026-03-20 13:24:34 +01:00
96f578eb25
docs(config): Expand example config with missing optional settings
Add debug, throttle, external feed, SMTP sender, and default visibility keys
2026-03-20 13:06:03 +01:00
71d1e9d64a
feat(activitypub): Auto-mention reply target author in AP replies
- Add _resolve_reply_target_mention() to resolve FQN from stored
  interaction's source_actor_id
- Prepend @user@domain mention to reply HTML and include in tags/CC
- Skip auto-mention if author already mentioned in content
- Extract _build_reply_content() and _build_reply_mentions() helpers
  to simplify build_reply_object()
2026-03-20 13:03:12 +01:00
87ac1b8f0d
feat(visibility): Add visibility support for articles and replies
- Add visibility metadata (public/unlisted/draft) for content filtering
- Implement default_visibility config option
- Filter drafts from feeds, indexes, and ActivityPub publishing
- Show `visibility: unlisted` content under the /unlisted page
- Map visibility to ActivityPub addressing (public/unlisted recipients)
- Add visibility module with VisibilityLevel enum and helpers
- Update replies mixin to respect visibility in filtering

Closes: #33
2026-03-20 12:56:53 +01:00
ab4e7d6732
fix: Filter out non-public AP interactions in display (defense-in-depth)
All checks were successful
continuous-integration/drone/push Build is passing
- Add _is_public_interaction helper to check raw_object visibility
- Filter private interactions in both article comments and guestbook
- Handles already-stored private mentions from before pubby fix
2026-03-20 09:02:47 +01:00
8b1c0d9d80
Bump version: 1.1.7 → 1.1.8
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.1.8
2026-03-19 21:59:26 +01:00
afa08bd45e
docs(readme): Add Mastodon verification section
All checks were successful
continuous-integration/drone/push Build is passing
Document rel="me" links and split-domain actor URL example
2026-03-18 01:49:00 +01:00
0931c070d7
Bump version: 1.1.6 → 1.1.7
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.1.7
2026-03-18 00:31:00 +01:00
876b7bc787
docs(changelog): Updated CHANGELOG
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-18 00:29:29 +01:00
a1a54706d5
fix(activitypub): Don't strip scheme from rel=me link text
All checks were successful
continuous-integration/drone/push Build is passing
This may be the root cause of the failing profile field verification on
Mastodon.
2026-03-18 00:14:49 +01:00
1a642c8acb
Revert "fix(activitypub): Attempted fix for verified URL on Mastodon"
All checks were successful
continuous-integration/drone/push Build is passing
It doesn't work - it only turned the field into plaintext on Mastodon
rather than a link.

This reverts commit af9a5983fe.
2026-03-17 23:53:57 +01:00
af9a5983fe
fix(activitypub): Attempted fix for verified URL on Mastodon
Some checks failed
continuous-integration/drone/push Build is failing
Mastodon apparently expects a verified URL to match exactly the
`rel="me"` on the remote page, without any injected `<a>` or other HTML
elements.
2026-03-17 23:51:14 +01:00
d1b5ec85ae
docs(changelog): Updated CHANGELOG
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-17 23:42:20 +01:00
6b537ace66
fix: Hide reactions heading/howto for unlisted pages
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-17 23:32:56 +01:00
4c379d42a5
feat: Add unlisted posts page
All checks were successful
continuous-integration/drone/push Build is passing
- Add get_unlisted_posts method to scan replies/ root for posts
  without reply-to or like-of metadata
- Add /unlisted route rendering posts as a timeline using reactions.html
- Add conditional nav entry showing "Unlisted (N)" when posts exist
- Register context processor to inject unlisted_count into templates
2026-03-17 22:35:29 +01:00
1532e8368f
Bump version: 1.1.5 → 1.1.6
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.1.6
2026-03-17 22:08:54 +01:00
19e8be467c
docs(changelog): Release 1.1.6 2026-03-17 22:08:43 +01:00
caf8d3f9c3 Merge pull request 'Render media attachments in replies' (#32) from feat/31/media-attachments into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #32
2026-03-17 22:08:07 +01:00
b465fa5549
feat(reactions): Render media attachments in replies
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
- Add shared Jinja macro to normalize and render AP/WM media grids
- Collapse overflow beyond 4 items; apply safe_url and security attrs
- Add tests for image/video/audio rendering and overflow behavior
- Update changelog and add implementation notes
2026-03-17 22:06:39 +01:00
cf8753b8c2
style(media): make 3-item reaction grid uniform 3-column layout 2026-03-17 22:05:32 +01:00
e7eb26e103
fix(media): Preserve single reaction aspect ratio without cropping
Left-align single items and constrain media to max size using contain
2026-03-17 22:04:28 +01:00
2dad62f22b
style(media): Add CSS for reaction media attachment grid
- Add responsive grid layouts for 1-4+ attachments
- Add item styling, placeholder shimmer, and audio player styles
- Add toggleable overflow section for 5+ attachments
2026-03-17 21:32:38 +01:00
7abb2760fa
docs(media): Add media attachments research and plan 2026-03-17 21:29:29 +01:00
b5c8eb283e
style(articles): Don't justify content on smaller screens
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-17 16:39:45 +01:00
4b06a51de2
fix(activitypub): Lock startup sync to avoid concurrent workers
All checks were successful
continuous-integration/drone/push Build is passing
- Add fcntl file lock around startup sync tasks
- Skip sync when lock is held; improve warning on sync failure
2026-03-17 00:36:30 +01:00
bea8f96733
fix(activitypub): Handle unlisted replies without reply-to
All checks were successful
continuous-integration/drone/push Build is passing
- Build reply public URLs without article slug when article_slug is None
- Treat top-level reply files as valid and skip missing reply-to warning
2026-03-17 00:29:39 +01:00
7c4ec3a910
feat: Support proper URLs and views top-level unlisted posts
All checks were successful
continuous-integration/drone/push Build is passing
- Add /reply/<slug> and /reply/<slug>.md routes
- Allow reply metadata parsing with article_slug=None and correct URI scheme
- Ensure AP reply objects for unlisted posts include a self-link for previews
- Clear stale stored AP URLs containing "None"
- Extend tests for routing, metadata, and AP content behavior
2026-03-17 00:10:32 +01:00
ebdb9c4878
fix(render): Adjust guestbook webmention URL and hide instance tips
All checks were successful
continuous-integration/drone/push Build is passing
- Pass `is_guestbook` flag to reactions include
- Use site link for guestbook webmention target and omit instance steps.
  The guestbook collects all reactions and references to the blog URL
  that don't target a specific page, so tips on how to interact with an
  article don't apply on this page.
2026-03-16 18:07:21 +01:00
4f6726a6c7
Bump version: 1.1.4 → 1.1.5
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v1.1.5
2026-03-16 17:57:27 +01:00
fe890c8329
docs(changelog): Updated CHANGELOG 2026-03-16 17:57:25 +01:00
d724c42723
style: Tweak author-liked-by badge spacing and background
Add primary background and adjust margin alignment
2026-03-16 17:54:26 +01:00
Fabio Manganiello
f1a9a5d0c0
feat(reactions): add author likes mapping to reactions
All checks were successful
continuous-integration/drone/push Build is passing
- Implement collect_author_likes_map function
- Update MarkdownMixin and RepliesMixin to use author likes
- Display author likes in reactions template
- Enhance AuthorReactionsIndex to handle external URLs and aliases
- Add tests for collecting author likes and indexing behavior
2026-03-16 12:31:49 +01:00