Skip to content

v0.3.0 — polls, previews, checklists and drafts

Pre-release
Pre-release

Choose a tag to compare

@Faultless Faultless released this 23 Aug 14:37
· 44 commits to main since this release

textlog put four things on the API at once, and every one of them was on this app's
"waiting on the server" list. They are all in.

Polls you can vote in

The options, the tally and whether you voted now come from the server instead of being
guessed at from the post body, and there is an endpoint to vote through — so a tap casts
a real vote rather than opening a browser.

The tally is withheld by the server until the poll closes or you have voted, so a
running count cannot sway your choice. Voting shows the result immediately and corrects
itself against the server's answer.

Link previews

A thumbnail beside the title and description, or a compact text-only line when there is
no image. The images are textlog's own — it fetches and stores them itself — so showing
one reveals nothing to the linked site. That is exactly why this waited for the API
rather than being unfurled client side.

Two things worth knowing:

  • The card is a thumbnail, not a banner. One preview on textlog is 1191×1684, which
    at its own aspect is 475 pixels of a phone screen — it buried the post that linked it.
  • No thumbnails on the web build. textlog serves preview images from a host that sends
    no CORS header at all, and Flutter's web renderer cannot draw an image it is not allowed
    to fetch. Web gets the compact form, which is the honest rendering there.

#todo checklists

A #todo line and [ ] / [x] items, rendered as a list with a count of what is done.

There is deliberately no endpoint for ticking one off, and that is not a gap: a checklist
is the post body, so a tick is an edit — which means only its author can tick their own
list. The same rule the site has.

Drafts, kept on the server

save draft in the compose box, and a drafts screen behind your handle. Server-side, so a
draft started on the website is here and one started here is there. Posting a draft
publishes it rather than leaving a copy beside the post it became.

Explore, and hashtags you can follow

A screen of people and hashtags worth following, and follow / block on any hashtag
page.

Smaller, but wrong before

  • The character limit is 500, up from 280.
  • The bio limit was wrong the other way: the app allowed 280 where the server caps at
    160, so it accepted bios the server then refused.
  • *x* is bold and _x_ is underline, rendered unconditionally. The app had them as
    italics and behind the markdown setting — wrong on both counts, which meant showing
    the reader something the author had not written.
  • bot is a report reason.

Faster, and two crashes that only a phone would show

  • A body is parsed once now. Rendering one asks a dozen questions of the same string,
    and build runs on every frame a tile scrolls through — about 300µs per body per build,
    which on a debug build on a phone was enough to hang the app. It is a lookup now.
  • A link card could not lay out at all. CrossAxisAlignment.stretch resolves against
    the incoming maximum height, which inside a scrollable is unbounded — so it threw
    "BoxConstraints forces an infinite height" and took the whole list with it. It only
    happened on the branch with a thumbnail, which the web build never takes.
  • Notifications now take their baseline when you switch them on, instead of waiting up
    to fifteen minutes and then announcing a backlog of things you had already read on the
    website.

Still waiting on the server

Instant notifications. They need an endpoint under /api/v1/ that takes an FCM or APNs
device token; textlog's push is Web Push under /account/, cookie-authenticated and
expecting a browser endpoint, which an app cannot use. Until then the app polls, and
Android will not run periodic work more often than every fifteen minutes — batching it
further while the phone is idle. The setting says so rather than implying a schedule
Android does not keep.