Skip to content

tippr v0.21.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 18:25

✨ Features and improvements

  • A browser test in the release workflow: after the smoke test, four ordinary members (not admins) use the site
    in Chrome: one posts through the submit form, the others reply to each other down a thread, and they all vote on
    the post and the comments, changing and undoing votes, with the arrows and scores checked. A fifth account,
    moderator of the test vault only, handles a member's report from the queue, removes and approves a comment,
    distinguishes its own, locks and unlocks the thread, and bans and unbans a member, each checked as the moderator,
    the members and logged-out visitors see it, and in the moderation log. And support requests: two members write to
    the admins from the contact page; an admin turns on admin mode with a two-factor code, takes one, notes and replies,
    and gives an employee one category, who sees only that; the member gets the answer from the admin team, without the
    admin's name or the staff note, and their reply reaches the ticket. Every page is checked
    for JavaScript errors, failed requests, sideways scrolling on a phone and unreadable text, and saved as a
    screenshot at desktop and phone width in both themes (the run's screenshots-VERSION artifact). See
    docs/RELEASING.md.
  • NSFW posts stay off the front page and /v/all unless a member asks for them: being over 18 used to put
    every NSFW post in those listings, which also took the ads off those pages. A new preference, "show NSFW posts on
    the front page and /v/all" (off by default, and only for members who said they're over 18), brings them back;
    NSFW vaults and their posts are shown in the vault itself as before.
  • Markdown follows CommonMark now, in place of reddit's snudown: posts, comments, messages, sidebars and the
    wiki use markdown-it-py, the standard most sites follow, with GitHub's tables, strikethrough and bare links,
    and tippr's own super^script, ^(several words), >!spoilers!< and :emoji:. New: task lists (- [ ] / - [x]
    show as ☐ / ☑), [words](example.com) links without https://, and /v/vault links, which snudown never made
    (it linked reddit's /r/ instead). A picture's address, ![words](address), is a link to it outside the wiki,
    not leftover syntax. Differences: a heading needs a space after its #s (#1 stays as typed), and the wiki no
    longer takes raw HTML tables (markdown tables do the same). Output is still checked against the same list of
    safe tags, raw HTML is still never used, and long or odd text renders quickly. Installs no longer build snudown
    or need gperf; linkify-it-py is new.
  • Formatting buttons and help for the new markdown: the toolbar over text boxes adds heading, code block,
    numbered list, task list and table buttons (code on several lines now becomes a ``` block). The "formatting help"
    table under the box shows every option, including strikethrough, superscript, headings, task lists, code blocks
    and tables, and reads properly in night mode; /help/formatting is rewritten to match.
  • Scales: tip a post toward what it's like. Up and down votes rank posts; a post's new "scales" link (beside
    "share") opens scales to tip instead: helpful ↔ unhelpful, human-made ↔ probably AI and beginner-friendly ↔
    in-depth, and behind "more scales", practical ↔ just for fun, well-sourced ↔ opinion and calm ↔ heated (open
    already when you've tipped one of those). Each member tips each scale once, and can change sides or take the tip
    back. A scale's tally (how many tipped
    each way, and a bar of the split) shows once you've tipped it, so the first tips don't steer everyone else, and
    the poster sees all of theirs. Scales are opinions, not reports: they don't rank posts, don't go to moderators,
    and "probably AI" sits beside the poster's own AI label without changing it; the panel points to "report" for
    posts that break a rule. Posters, logged-out visitors (asked to log in), members in a timeout, and removed,
    archived or sponsored posts can't be tipped. Tips are kept in PostgreSQL (scale_tips) and are in a member's
    data export.
  • Updating from /admin/servers shows its progress: while an update runs, the page keeps itself up to date every
    few seconds instead of needing reloads. Each server's card says what it's doing and for how long, with its log's
    latest lines open, and the updater now refreshes those every 10 seconds while the backup and the installer run
    (before, the page heard nothing from it until a step finished). While the site is down for the install, the page
    says so and keeps checking, then catches up when it's back; it stops once every server has finished. Servers
    that haven't started yet say they're waiting. (The updater that runs an update is the one already installed, so
    the progress reports start with the update after this one.)
  • /traffic/adverts counts ads: it read tables reddit filled from its ad servers' logs, which nothing filled
    here. The site counts them itself now: a sponsored post when it's shown in a listing (by post, and by campaign
    and vault for its traffic page) and when it's clicked, and each AdSense unit it puts on a page (sidebar, in-feed,
    or Auto ads pages). What Google filled the units with, and their clicks and earnings, stay in the AdSense
    account. Bots aren't counted.

🐞 Bug fixes

  • /admin/servers ran words together, and an update's log was one long paragraph: the page's space compression
    joined lines without a space ("The newest release is0.20.2", a server's name and id, "3.54(1, 5 and 15 minutes")
    and took the line breaks out of the log; both read properly now.
  • /traffic/languages and the "top vaults" table were empty: they listed last month, the newest reddit's batch
    traffic pipeline had finished; tippr counts as pages are viewed, so they list this month, and say so.
  • The sitemap left out the front page: it listed vaults from the most subscribed down, so the first page it
    gave search engines was the default /v/tippr ("Tippr Meta"), which Google then showed for a search for the site's
    name. The front page is the sitemap's first entry now, followed by the vault directory (/vaults) and the help
    pages and policies.
  • Clicking a sponsored post failed: its link goes through /click, served by reddit's separate click tracker,
    which was never ported to Python 3 (every click was an error) and which Docker installs didn't have at all. /click
    is part of the site now: it checks the link's signature, counts the click and sends the browser on. Updating
    removes the old click server (gunicorn-click).
  • Updating could leave the queues and jobs stopped: the installer installs the pinned Python packages, but pip
    kept a package already installed under the same name and version even when it came from elsewhere, and an older
    formenergy-observability from PyPI then conflicted with the pinned packaging: the pages worked, but paster refused
    to start the consumers and jobs. The packages pinned to a URL (the baseplate and formenergy-observability forks) are
    now always reinstalled, and the installer checks that the packages fit together, as paster does, failing the install
    (so an update rolls back) if they don't.
  • Clicking "reply" on a comment threw a JavaScript error ("e is not defined", from reddit's code): the reply
    box still opened, but the comment's hidden replies weren't shown with it, and the error was reported on every
    reply.
  • Search showed NSFW posts to everyone, and pages with NSFW posts had ads: search results included them for
    people who hadn't said they're over 18, logged out too (hiding them was reddit's safe_search experiment, never
    on); they're shown only to people who have now, as listings already did. And a page that shows any NSFW post
    (the front page, /v/all, other listings, profiles, search) has no AdSense ads, which Google doesn't allow next to
    adult content: before, only an NSFW vault's own pages and NSFW posts' pages dropped them.
  • Every page loaded a tracking pixel nothing used, and on Docker it was missing: reddit counted pageviews from
    the pixel's log, which nothing reads now that tippr counts them as it serves them, and Caddy had no route for it,
    so every page had a 404. Pages no longer load it (tracker_url is blank), and Caddy answers the remaining pixels
    (sponsored links, embeds) as the installer's nginx does.
  • A vault's NSFW setting was hard to find: it's labelled "NSFW: viewers must be 18 or older" on the vault form
    now, instead of "viewers must be over eighteen years old" (and the /v/all option gains its missing "in").
  • The support pages said "254 milliseconds ago": they say "just now" for the last minute, as the rest of the
    site does.
  • Search results showed the wrong descriptions: a vault's page described the whole site (its link previews
    already used the vault's own description), and a post's showed its markdown (* item, [link](https://...)).
    A vault's page now has its own description, and a post's or comment's reads as plain text.
  • A comment a moderator removed stayed in front of logged-out visitors for up to 2 minutes: they get a thread's
    comments from a short cache, which removing, approving, distinguishing or editing a comment didn't clear (it
    follows the comment count). Those now change the thread's cache key, so the next view is built afresh.
  • Removed posts and comments were hard to read for moderators: their salmon background left the grey tagline and
    buttons at 1.4:1. They're a pale red with a red edge now.
  • The unread message count was unreadable in night mode: night mode's link colour turned it teal on its orange
    badge; it's white again.

Downloads

  • Docker: docker pull techidiotsllc/tippr:0.21.0, or unpack tippr-0.21.0-compose.tar.gz, copy
    .env.example to .env, fill it in and run docker compose up -d (docker/README.md).
  • Proxmox: tippr-0.21.0-proxmox-amd64.tar.zst is an LXC template with the whole site installed;
    create a container with the site's domain as its hostname and start it (docs/PROXMOX.md).
  • Installer (Ubuntu 24.04): unpack tippr-0.21.0-installer.tar.gz into /home/tippr/src and
    run sudo TIPPR_USER=tippr TIPPR_DOMAIN=example.com ./install-tippr.sh in tippr/; it doesn't need
    to clone anything (docs/INSTALL_tippr.md).

SHA256SUMS lists the files' checksums.