Commits
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: oppiliappan <me@oppi.li>
caused funky behavior with popups
Signed-off-by: oppiliappan <me@oppi.li>
also removes the gray shield indicator for profiles that are not vouched
for.
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
drop-shadow seems to create a new stacking context and that messes with
z-index
Signed-off-by: oppiliappan <me@oppi.li>
stopgap to deter bots
Signed-off-by: oppiliappan <me@oppi.li>
Default to 6GB.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
The nix module var and go struct env tag don't match. This updates
the config struct since it seems to have been the inconsistent one.
Signed-off-by: Kevin <tangled-jj@paeth.xyz>
Signed-off-by: Seongmin Lee <git@boltless.me>
Signed-off-by: atixnotfound.tngl.sh <atsharma623@gmail.com>
Adds `RemoveSource` to stop streaming from a previously registered
source. Removing a source cancels its connection loop and closes any
in-flight websocket so the loop exits promptly instead of waiting for
the next reconnect tick.
Per-source runtime state (the loop's cancel func and the active
websocket conn) was previously split across two sync.Maps and a
separate map of registered sources, each with its own locking. That
left several races, e.g. the conn was stored in connMap only after a successful
dial, so a remove during the dial would miss it.
The new design collapses everything into a single
`sources map[Source]*sourceState` guarded by `sourcesMu`. The lock is only
held for short, non-blocking map mutations and is always released before
any side effect possibly-blocking calls.
`runConnection` now re-checks under the lock that the source is still
registered (and the ctx not cancelled) before installing a freshly
dialed conn, and its deferred cleanup only clears the conn slot if the
entry still points at the conn it installed. This makes 'remove
during dial' and 'remove during read' both deterministic: the cancel
cuts the loop, the close breaks ReadMessage, and a concurrent
runConnection cannot resurrect state for a removed source.
Signed-off-by: Seongmin Lee <git@boltless.me>
also use octet-stream for blobs larger than 1MB to avoid OOM
Signed-off-by: Seongmin Lee <git@boltless.me>
Signed-off-by: Seongmin Lee <git@boltless.me>
Signed-off-by: Seongmin Lee <git@boltless.me>
not the biggest driver of mem issues, but better to close than wait for
gc pressure i guess.
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Hard to read on mobile.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Like actual jobs. Describe job postings as markdown under postings/.
Creates new application submissions as issues in Linear. Available at
jobs.tangled.org.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: Seongmin Lee <git@boltless.me>
will just create an empty commit with title/body if a mailbox is
supplied with an empty patch.
Signed-off-by: oppiliappan <me@oppi.li>
set `alignItems: "center"` to footer elements.
reduce `paddingBottom` to `36` for issue & prs cards.
Signed-off-by: eti <eti@eti.tf>
Standalone tailwindcss embeds frozen caniuse-lite, triggers Browserslist warning on startup. Set BROWSERSLIST_IGNORE_OLD_DATA to silence it.
Signed-off-by: eti <eti@eti.tf>
Signed-off-by: eti <eti@eti.tf>
Signed-off-by: Matías Insaurralde <matias@insaurral.de>
Signed-off-by: Patrick Dewey <p@pdewey.com>
larger hitslop for thumbs
Signed-off-by: oppiliappan <me@oppi.li>
This is API call is idempotent. If the contact doesn't previously exist
on Resend, adding to Segment will fail.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
the newsletter widget used only localStorage to remember whether a user
had signed up or dismissed it, so the cta kept reappearing whenever a
user opened tangled on another device or browser. for logged-in users,
store the state in a newsletter_preferences table keyed on did with an
enum status ('subscribed' | 'dismissed') and the email they gave us.
the home and timeline handlers read this row to decide whether to
render the widget, and the server-rendered gfi banner widens when the
widget is gone so the grid doesn't leave an empty column.
resend stays the source of truth for the mailing list itself (sending,
bounces, one-click unsubscribes) — the new table only answers the
render-time question 'should this did see the widget right now?',
which resend cannot cheaply answer because it's keyed on email rather
than did and would add a network hop to every timeline render.
anonymous visitors keep the localStorage fallback. the client-side
'already dismissed in a past session' path deliberately only calls
hide() (not dismiss()) so that a stale localStorage flag can't clobber
a subscribed row set from another device.
Signed-off-by: eti <eti@eti.tf>
Adds `RemoveSource` to stop streaming from a previously registered
source. Removing a source cancels its connection loop and closes any
in-flight websocket so the loop exits promptly instead of waiting for
the next reconnect tick.
Per-source runtime state (the loop's cancel func and the active
websocket conn) was previously split across two sync.Maps and a
separate map of registered sources, each with its own locking. That
left several races, e.g. the conn was stored in connMap only after a successful
dial, so a remove during the dial would miss it.
The new design collapses everything into a single
`sources map[Source]*sourceState` guarded by `sourcesMu`. The lock is only
held for short, non-blocking map mutations and is always released before
any side effect possibly-blocking calls.
`runConnection` now re-checks under the lock that the source is still
registered (and the ctx not cancelled) before installing a freshly
dialed conn, and its deferred cleanup only clears the conn slot if the
entry still points at the conn it installed. This makes 'remove
during dial' and 'remove during read' both deterministic: the cancel
cuts the loop, the close breaks ReadMessage, and a concurrent
runConnection cannot resurrect state for a removed source.
the newsletter widget used only localStorage to remember whether a user
had signed up or dismissed it, so the cta kept reappearing whenever a
user opened tangled on another device or browser. for logged-in users,
store the state in a newsletter_preferences table keyed on did with an
enum status ('subscribed' | 'dismissed') and the email they gave us.
the home and timeline handlers read this row to decide whether to
render the widget, and the server-rendered gfi banner widens when the
widget is gone so the grid doesn't leave an empty column.
resend stays the source of truth for the mailing list itself (sending,
bounces, one-click unsubscribes) — the new table only answers the
render-time question 'should this did see the widget right now?',
which resend cannot cheaply answer because it's keyed on email rather
than did and would add a network hop to every timeline render.
anonymous visitors keep the localStorage fallback. the client-side
'already dismissed in a past session' path deliberately only calls
hide() (not dismiss()) so that a stale localStorage flag can't clobber
a subscribed row set from another device.
Signed-off-by: eti <eti@eti.tf>