Top

Freeparty

Changelog

A running log of major updates and improvements to Freeparty.

2026-10-08 — Optional Ad-Campaign Attribution (Off by Default)

  • An operator can now enable a privacy-preserving way to see which advertising brought in new members. When it is enabled, arriving through a tracked link stores only the campaign number in a first-party cookie for 30 days, and creating an account then reports that number to the operator's own server as one signup. No user, device or IP identifier is stored or sent, and no third-party tracking pixels are involved.
  • Nothing happens unless both ADS_REPORT_URL and ADS_REPORT_TOKEN are configured, so self-hosted copies do nothing by default. The hosted freeparty.dev has it enabled.

2026-10-03 — Invalid Pagination Input Handling

  • Malformed page query parameters now safely show the first page instead of producing a server error; numeric page requests beyond the available results continue to show the last page.
  • Added a WSL-safe production deployment script that transfers patches as files, checks and backs up server worktrees, and verifies refreshed services.

2026-05-15 — Link Embed Fixes: YouTube/Vimeo/Giphy Restoration, CSP Hardening for Cloudflare

  • Fixed web embed rendering by adding frame-src 'self' https: to Content-Security-Policy, allowing third-party video iframes (YouTube, Vimeo) to load correctly.
  • Implemented Giphy embed support with direct iframe generation, bypassing Giphy's broken oEmbed endpoint: GIF slugs are now parsed correctly and embedded as interactive players.
  • Extended oEmbed type support to include animatedgif and file types in addition to video and rich, enabling embeds from more providers.
  • Whitelisted Cloudflare Insights analytics in CSP: added script-src https://static.cloudflareinsights.com and connect-src https://cloudflareinsights.com to allow Web Analytics beacon to function.
  • Updated CSP defaults in settings and .env.example to include frame-src and Cloudflare Insights allowances.

2026-05-06 — Security Re-audit Closures: SSRF Pinning, Verification Repairs, and Health/Analytics Hardening

  • Upgraded federation remote fetch handling to use the hardened safe_fetch flow with a custom pinned-IP transport, preserving host verification while preventing redirect and private-network SSRF bypasses.
  • Repaired account and federation security test slices after networking refactors: account auth verification tests compile and pass, and federation inbound tests now patch safe_fetch with httpx.Response-based fixtures.
  • Fixed account verification route resolution by ordering /accounts/verify/resend/ ahead of tokenized verification routes to prevent accidental shadowing.
  • Reduced public operational detail exposure on /health/: the public page now presents generic overall service status while detailed readiness information remains protected.
  • Removed legacy ORM .extra(...) usage from staff security dashboard day aggregation and migrated to TruncDate-based query annotations.
  • Added explicit staff-role permissions and a sync_staff_groups management command so Support, Moderator, Trust & Safety Admin, and Administrator groups can be assigned with narrower access than the old broad is_staff gates.
  • Support staff can now use limited Django admin actions to resend verification emails and reissue account lifecycle recovery/cancellation links without broader moderation or configuration access.
  • Expanded staff group roster to 11 roles covering the full operational surface: Content Reviewer (read-only dashboard), Community Manager (moderation without security access), Minor Safety Specialist (CSAM/NCII-focused with account lifecycle), Security Analyst (read-only security posture and audit events), Federation Manager (instance allowlist/blocklist and actor oversight), DevOps/SRE (operational health without user data), and Read-Only Auditor (compliance read access across all subsystems).
  • Added custom permissions to federation.Instance (manage_federation_allowlist, view_federation_health) and actors.Actor (manage_actor_verification, suspend_actor) to support fine-grained federation and actor management roles.
  • Implemented an inbound federation inbox endpoint at /federation/inbox/ with allowlist checks, HMAC signature verification, replay-window validation, and structured storage of received activities.
  • Implemented automatic outbound federation queueing for new local posts marked as federated: allowlisted partner instances now receive signed Create activity deliveries via Celery.
  • Added a dedicated federation inbound feature flag (FEATURE_FEDERATION_INBOUND_ENABLED) to allow controlled rollout independent from outbound federation.

2026-04-23 — Security Hardening: oEmbed XSS, SSRF Guards, DM Dedup, Safer Defaults

  • Hardened link preview embeds: provider oEmbed HTML is now sanitized with a strict iframe allowlist before it is stored/rendered.
  • Improved SSRF protections for remote fetches: URLs are validated for allowed schemes, DNS A/AAAA resolution, and private/reserved IP ranges.
  • Federation inbound/outbound fetch now validates the final URL after redirects and enforces the expected instance domain.
  • Direct message threads are now de-duplicated at the database layer using a canonical participant key to prevent race-created duplicate conversations.
  • Encrypted DM send rate-limit check is now enforced inside a transaction lock to prevent concurrent bypass.
  • Production bootstrap defaults tightened: setup script now writes HTTPS-only trusted origins and preserves existing DB credentials; local compose uses env-driven Postgres credentials.
  • Removed deprecated Django setting SECURE_BROWSER_XSS_FILTER in production configuration.
  • Performance improvements: bookmarks visibility avoids per-item permission queries, and unread DM conversation count is computed via DB-side EXISTS checks.
  • Email reliability update: permanent SMTP recipient rejects (for example unknown mailbox) are now treated as terminal non-retriable task failures, reducing noisy retries during signup/password email flows.
  • Account UX fix: /accounts/verify/resend/ now handles GET requests gracefully with a redirect and helpful message instead of showing a method error/blank page.
  • Private profile UX update: actor detail now renders the same restricted profile page used for block scenarios instead of returning a hard 404 for private-account access denial.
  • Private profile restricted page now includes a Request to follow action (plus pending/cancel states) so follow-request flows can be initiated directly when profile content is hidden.
  • Notifications now show better post context when a post body is empty: they fall back to attachment caption first, then to the post ID label.
  • Fixed reopening legacy direct-message threads on PostgreSQL by removing an invalid SELECT FOR UPDATE + DISTINCT query combination from the blank-key compatibility lookup.
  • Reduced actor/detail and search feed query load by annotating post engagement counts (likes, dislikes, comments, reposts) so templates avoid per-post count queries.
  • Added per-user Hide post controls: hidden posts are removed from timeline/explore views, bookmarks, and post-linked notifications (including the likes filter), and can be reviewed/restored from /social/hidden/.

2026-04-22 — Security Hardening, Icon Controls & Further UI Polish

  • Added server-side CSS injection sanitization for custom theme color inputs — hex fields are validated against a strict pattern and the gradient field now uses a character allowlist, blocking any attempt to inject </style>, <script>, or other hostile markup.
  • Added client-side sanitization pass on custom theme tokens before they are written to CSS custom properties, as an additional defense-in-depth layer.
  • Added Icons toggle in the accessibility bar to cycle between Auto (follows theme), Light (always inverted, ideal for AMOLED/dark themes), and Dark (always original) SVG icon styles.
  • Added JetBrains Mono as a fourth font option in the font cycle, joining Dyslexic, Atkinson, and IBM Plex.
  • Fixed Show follower list and Show following list privacy toggles not rendering as styled switch controls on the profile edit page — they now match all other toggle inputs.
  • Fixed custom theme colors entered without a leading # or with a trailing ; not applying correctly — both are now auto-corrected on save and at page paint time.
  • Improved post action button row: all buttons now share a consistent height regardless of whether they contain an icon, a count, or both, and clicking no longer causes a layout shift.
  • Added inline tip on the profile edit page reminding users to omit the trailing semicolon from hex color values.
  • Styled file picker buttons, unfollow button on the Following page, and account management buttons (Regenerate recovery codes, Disable 2FA) to match the rest of the UI.
  • Added compact linked color pickers next to custom theme hex inputs on profile edit, keeping the control visually small while syncing with text values for copy/paste workflows.
  • Added custom theme import/export tools on profile edit with YAML-style sharing text, including copy/download export and tolerant import parsing for keys like accent-alt and bare gradient lines.
  • Promoted the compact floating Top button into a global control in the base layout, shown on long/scrollable pages after scrolling down.
  • Made post reactions mutually exclusive: setting Like now clears Dislike and vice versa, including immediate async counter/state updates.
  • Fixed toggle-switch rendering regressions by unifying post creation toggles with the shared global toggle markup/CSS and hardening selector logic in the base stylesheet.

2026-04-22 — Accessibility and UI Polish Pass

  • Added new accessibility density controls: Spacing Dense (opposite of relaxed) and compact message threading support.
  • Expanded text-size presets with Xtra Small and Small, while keeping normal/large/larger options.
  • Expanded font options with additional open-source choices (Atkinson Hyperlegible and IBM Plex Sans).
  • Improved the theme chooser interaction so clicking the Theme label/chip also opens the dropdown in supported browsers.
  • Replaced post action emojis with custom SVG icons for comment, like, dislike, repost, bookmark, share, and report actions.

2026-04-22 — New Dislike Reaction

  • Added post-level dislike reaction toggles and dislike counters.
  • Added async JSON support for dislike updates in post action controls.
  • Integrated dislike state across timeline/profile/post list rendering contexts.
  • This was literally only added because my coworker uploaded an image that i didn't like...

2026-04-21 — Themes and Custom Profile Palette

  • Added new built-in themes: AMOLED, Pride Pan, Pride Rainbow, Pride Trans, and Pride Bi.
  • Added Custom / User Defined theme mode backed by profile-stored palette values.
  • Added profile settings fields for custom colors and gradient background tokens.
  • Added viewport-safe media sizing for post images/videos to prevent oversized rendering on smaller laptop screens.

2026-04-19 — Direct Messages: Encrypted File Attachments

  • Added encrypted DM attachment support for arbitrary file types, including archives like .zip, .7z, and custom binary files.
  • Files are encrypted in the browser before upload and stored server-side only as encrypted blobs.
  • Added participant-only encrypted attachment download endpoint and in-browser decrypt-and-download action in conversation view.
  • DM composer now supports message-plus-files or file-only encrypted sends.

2026-04-19 — Minor Safety: Guardian Age Settings and Under-18 Signup

  • Signup now supports under-18 account setup with required guardian email capture.
  • Guardian verification now leads to a dedicated controls page for age precision settings: age range, age, MM/YYYY, or DD/MM/YYYY.
  • Guardians can explicitly allow NSFW and 16+ content for a minor account without ever allowing 18+ content.
  • Minor accounts now enforce guardian-managed visibility rules for NSFW and 16+ posts.

2026-04-19 — Minor Safety: Parental Controls and Guardian Consent

  • Added minor-account and parental-control settings to profile preferences.
  • Added secondary guardian email verification flow for parental control activation.
  • Protected privacy/content setting changes now require guardian email approval when parental lock is active.
  • Added one-click guardian approval and verification links with expiring tokens.
  • Updated Terms page minors section to reference guardian-verified parental controls.

2026-04-19 — Signup Legal Consent Audit Trail

  • Signup now requires explicit acceptance checkboxes for Terms of Service and Community Guidelines.
  • User records now store legal acceptance timestamps and accepted policy versions for auditability.
  • Privacy Policy and FAQ now describe guardian-gated controls for minor accounts.

2026-04-19 — Account Deactivation/Deletion Retention Flows

  • Added account management flow for deactivation and deletion requests.
  • Deactivation now supports a 12-month retention recovery window.
  • Deletion now uses a 30-day scheduled retention window with cancellation link support.
  • Added privacy/FAQ wording clarifying unrecoverable encrypted DM content if local key material is cleared.

2026-04-19 — Automated Retention Purge and Verification Mark

  • Added scheduled retention purge automation for expired deactivation/deletion windows (Celery beat + management command).
  • Added env-configurable purge schedule and retention controls in .env/.env.example.
  • Bumped policy/help page metadata to version 1.1.
  • Added verified account mark and handle-lock metadata for actor profiles and posts.
  • Added support intake category for verification and handle migration claims.

2026-04-19 — Policy & Support Expansion

  • Expanded Terms of Service with age/jurisdiction table (US COPPA, EU GDPR, UK, Canada, Australia).
  • Expanded Privacy Policy with cookies, data retention categories, user rights, and cross-border processing notes.
  • Expanded Community Guidelines with explicit moderation enforcement flow (warnings → restrictions → suspension → ban).
  • Expanded FAQ with practical answers: password reset, account deletion, block vs mute, DM keys.
  • Added About page trust & safety section.
  • Added Support page with intake form that generates a pre-filled mailto: link to [email protected].
  • Added effective date (2026-04-19) and version metadata to all policy pages.

2026-04-19 — Footer & Public Pages

  • Added global site footer with navigation links: About, Terms, Privacy, Guidelines, FAQ, Support, Status, Changelog.
  • Added Copyleft notice and GitHub repository link to footer.
  • Created six public pages: About, Terms of Service, Privacy Policy, Community Guidelines, FAQ, Support.

2026-04-19 — Direct Messages: Security & Keys Menu

  • Added collapsible Security & Keys panel (☰) to the DM conversation view.
  • Fingerprint display, device/key inventory, and Browser E2E Mode controls are all grouped inside the collapsible menu.
  • Sticky compose area is now clean — textarea and send only, no key management clutter.

2026-04-19 — Profile Settings: Toggle Switch UI

  • Replaced raw checkbox inputs on profile edit page with accessible CSS toggle switches.
  • Toggles cover: show follower count, show following count, private account, auto-reveal spoilers.
  • Global toggle and checkbox/radio styles applied across all forms.

2026-04-19 — Profile Links (Linktree-style)

  • Added ProfileLink model: title, URL, display order, active toggle, profile association.
  • Users can manage custom links at My Links.
  • Public links page available at /profiles/<handle>/links/.