commits
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Will Andrews <will7989@hotmail.com>
pull page can be rendered fine without reaction map
Signed-off-by: Seongmin Lee <git@boltless.me>
Signed-off-by: Seongmin Lee <git@boltless.me>
the file-diff icon was incorrectly linked.
Signed-off-by: oppiliappan <me@oppi.li>
we should really upgrade to tailwind 4.x at some point!
Signed-off-by: oppiliappan <me@oppi.li>
- transparent blue caused text ovelaps
- mobile view hide the split/unified buttons
- transparent topbar caused text overlaps
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
also fixes a subtle bug: when timeline commits are populated from the
punchcard, only the current year's commits are available, however the
timeline can span across two years (as it does today: Jan 2026, Dec
2025, Nov 2025 ...).
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
the lockable http tarball protocol is meant to serve tarball flakes, by
emitting a stable `Link` header:
Link: <flakeref>; rel="immutable"
this patch now supports the new header in two places, on the appview, at
the `/archive/<ref>.tar.gz` endpoint:
λ nix flake metadata -v --refresh --no-write-lock-file 'http://127.0.0.1:3000/oppi.li/repo-19-01-26-08-04-14/archive/main.tar.gz'
unpacking 'http://127.0.0.1:3000/oppi.li/repo-19-01-26-08-04-14/archive/main.tar.gz' into the Git cache...
warning: not writing modified lock file of flake 'http://127.0.0.1:3000/oppi.li/repo-19-01-26-08-04-14/archive/main.tar.gz':
• Added input 'nixpkgs':
'github:nixos/nixpkgs/bde09022887110deb780067364a0818e89258968?narHash=sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo%2Bw8KsY4%3D' (2026-01-19)
Resolved URL: http://127.0.0.1:3000/oppi.li/repo-19-01-26-08-04-14/archive/main.tar.gz
Locked URL: http://127.0.0.1:3000/did:plc:qfpnj4og54vl56wngdriaxug/repo-19-01-26-08-04-14/archive/a63d945ae97b84812e394207f3cc80f6525c2082.tar.gz?narHash=sha256-IdKT88RIWvWrgQFx6c%2BX3cC7JFene%2BQI9yo2rKSGoA4%3D
Path: /nix/store/0k9pv83f0qn5cm0qy82j51plryk7szx7-source
Fingerprint: 9512ee4857b31a76c1112f05161bda5280d8596b866c4f78986c6c01c1d2f419
Inputs:
└───nixpkgs: github:nixos/nixpkgs/bde09022887110deb780067364a0818e89258968?narHash=sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo%2Bw8KsY4%3D (2026-01-19 00:39:23)
and on the knotserver, when using the `/xrpc/sh.tangled.repo.archive`
endpoint:
λ nix flake metadata -v --refresh --no-write-lock-file "http://localhost:5555/xrpc/sh.tangled.repo.archive?format=tar.gz&prefix=&ref=main&repo=did%3Aplc%3Aqfpnj4og54vl56wngdriaxug%2Frepo-19-01-26-08-04-14"
unpacking 'http://localhost:5555/xrpc/sh.tangled.repo.archive?format=tar.gz&prefix=&ref=main&repo=did:plc:qfpnj4og54vl56wngdriaxug/repo-19-01-26-08-04-14' into the Git cache...
warning: not writing modified lock file of flake 'http://localhost:5555/xrpc/sh.tangled.repo.archive?format=tar.gz&prefix=&ref=main&repo=did:plc:qfpnj4og54vl56wngdriaxug/repo-19-01-26-08-04-14':
• Added input 'nixpkgs':
'github:nixos/nixpkgs/bde09022887110deb780067364a0818e89258968?narHash=sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo%2Bw8KsY4%3D' (2026-01-19)
Resolved URL: http://localhost:5555/xrpc/sh.tangled.repo.archive?format=tar.gz&prefix=&ref=main&repo=did:plc:qfpnj4og54vl56wngdriaxug/repo-19-01-26-08-04-14
Locked URL: http://localhost:5555/xrpc/sh.tangled.repo.archive?format=tar.gz&narHash=sha256-IdKT88RIWvWrgQFx6c%2BX3cC7JFene%2BQI9yo2rKSGoA4%3D&prefix=&ref=a63d945ae97b84812e394207f3cc80f6525c2082&repo=did:plc:qfpnj4og54vl56wngdriaxug/repo-19-01-26-08-04-14
Path: /nix/store/0k9pv83f0qn5cm0qy82j51plryk7szx7-source
Fingerprint: 9512ee4857b31a76c1112f05161bda5280d8596b866c4f78986c6c01c1d2f419
Inputs:
└───nixpkgs: github:nixos/nixpkgs/bde09022887110deb780067364a0818e89258968?narHash=sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo%2Bw8KsY4%3D (2026-01-19 00:39:23)
note that the "Resolved URL" includes a hash of the commit.
Co-authored-by: Seongmin Lee <git@boltless.me>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Some more conditional styling for rounding. Makes it look more cohesive.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
this greatly improves build speed of derivations that depend on the
dolly derivation, because it no longer rebuilds everytime there is a
change to appview.
Signed-off-by: oppiliappan <me@oppi.li>
adding text-inherit overrides the `<a>` styling.
Signed-off-by: oppiliappan <me@oppi.li>
Tiny avatar, description and paddings are now uniform across repo and
string pages.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
the new 3-panel layout puts the diff upfront, and the review panel off
to the right. on mobile devices, the review panel is a collapsible
bottom-sheet, and on desktop, it is a collapsible side-panel. it is now
possible to comment on a PR while viewing its diff.
all the JS on the page is entirely optional and simply added for
quality-of-life (such as auto-collapsing the bottomsheet on mobile
etc.).
in the review panel, submissions are listed with a top-level entry, and
comments on each submission are "reply" entries. the top-level
submission header includes the following information:
- commit messages and bodies (if available, on patch PRs this is
omitted)
- pipeline status (if avaiable, only for PRs that have triggered CI)
- mergability (if available, this is calculated only for the
latest submission)
the actual merge status (merged/closed/deleted) of the PR is listed
above the pull-action bar. previous designs combined the mergability
check and the merge-status into one component.
Signed-off-by: oppiliappan <me@oppi.li>
all 3 pages are presented in one page now.
Signed-off-by: oppiliappan <me@oppi.li>
the component is almost identical to the new-comment component on issues
now.
the loader icon now replaces the existing button icon when a request is
inflight. this is much cleverer because it avoids the increase in button
width when a request is inflight.
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
also removes unused functions such as filetree.
any object that adheres to the DiffRenderer interface can now be
presented as html using the repo/fragments/diff template.
types.NiceDiff and patchutil.Interdiff now implement the new interface.
this allows us to remove the differing rendering logic necessary to
present each kind of diff.
any {split,unified} {diff,interdiff} can be rendered by adhering to this
interface.
move most of the logic from the html template into golang. this is just
much more predictable. also add a short and long form summary.
reduces the left margin by placing profile pictures halfway over the
vertical line. this mimics gh discussions design.
the layered button is too heavy to use on already layered elements such
as cards. this is also against the material design principles.
we should ideally templatize this a bit more
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Add offset-based pagination to the pulls page, matching the issues behavior
Signed-off-by: moshyfawn <email@moshyfawn.dev>
Signed-off-by: Seongmin Lee <git@boltless.me>
Extract pagination UI into a shared template for reuse across pages. Refactored issues listing to use it with no behavior change
Signed-off-by: moshyfawn <email@moshyfawn.dev>
Signed-off-by: Seongmin Lee <git@boltless.me>
prepare for PR page pagination
Signed-off-by: Seongmin Lee <git@boltless.me>
Wrap participant avatars with profile links. Make DID-type labels fully clickable chips linking to user profiles, matching the commit hash chip pattern
Signed-off-by: moshyfawn <email@moshyfawn.dev>
Signed-off-by: Seongmin Lee <git@boltless.me>
avoid using `.Knot` and `.Rkey` directly
Signed-off-by: Seongmin Lee <git@boltless.me>
Signed-off-by: Seongmin Lee <git@boltless.me>
rkey itself isn't unique across the network because multiple different
knots can emit same rkey. We should use full at-uri here instead.
Signed-off-by: Seongmin Lee <git@boltless.me>
there is a very strange bug in the bluesky-pds implementation that
prevents blobs with the text `<svg` from being uploaded. it triggers a
500 because the underlying MIME type detection library assumes XML but
the provided MIME type does not match.
ref: https://github.com/bluesky-social/atproto/issues/3151
gzipping the content lets us upload this without any issues.
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: pompydev <pompydev@proton.me>
`hx-swap-oob` on breaks on `hx-boost` swaps (star button vainishing repo
tab changes), so that was why I made `starBtn-oob` fragment. But
`hx-swap-oob="outerHTML:..."` doesn't strip the wrapper element, adding
`div` wrappers to star button on every star/unstar interactions.
To fix this, dynamically put `hx-swap-oob` attribute to star button
itself by using `.HxSwapOob` param.
Signed-off-by: Seongmin Lee <git@boltless.me>
thanks @nel.pet!
Signed-off-by: oppiliappan <me@oppi.li>
The follow button now returns the updated followers count alongside the button state, keeping them in sync
Signed-off-by: moshyfawn <email@moshyfawn.dev>
Prevents horizontal scrollbar overflow in Safari when markdown content
contains long unbreakable strings like URLs
Signed-off-by: moshyfawn <email@moshyfawn.dev>
Signed-off-by: oppiliappan <me@oppi.li>
the lockable http tarball protocol is meant to serve tarball flakes, by
emitting a stable `Link` header:
Link: <flakeref>; rel="immutable"
this patch now supports the new header in two places, on the appview, at
the `/archive/<ref>.tar.gz` endpoint:
λ nix flake metadata -v --refresh --no-write-lock-file 'http://127.0.0.1:3000/oppi.li/repo-19-01-26-08-04-14/archive/main.tar.gz'
unpacking 'http://127.0.0.1:3000/oppi.li/repo-19-01-26-08-04-14/archive/main.tar.gz' into the Git cache...
warning: not writing modified lock file of flake 'http://127.0.0.1:3000/oppi.li/repo-19-01-26-08-04-14/archive/main.tar.gz':
• Added input 'nixpkgs':
'github:nixos/nixpkgs/bde09022887110deb780067364a0818e89258968?narHash=sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo%2Bw8KsY4%3D' (2026-01-19)
Resolved URL: http://127.0.0.1:3000/oppi.li/repo-19-01-26-08-04-14/archive/main.tar.gz
Locked URL: http://127.0.0.1:3000/did:plc:qfpnj4og54vl56wngdriaxug/repo-19-01-26-08-04-14/archive/a63d945ae97b84812e394207f3cc80f6525c2082.tar.gz?narHash=sha256-IdKT88RIWvWrgQFx6c%2BX3cC7JFene%2BQI9yo2rKSGoA4%3D
Path: /nix/store/0k9pv83f0qn5cm0qy82j51plryk7szx7-source
Fingerprint: 9512ee4857b31a76c1112f05161bda5280d8596b866c4f78986c6c01c1d2f419
Inputs:
└───nixpkgs: github:nixos/nixpkgs/bde09022887110deb780067364a0818e89258968?narHash=sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo%2Bw8KsY4%3D (2026-01-19 00:39:23)
and on the knotserver, when using the `/xrpc/sh.tangled.repo.archive`
endpoint:
λ nix flake metadata -v --refresh --no-write-lock-file "http://localhost:5555/xrpc/sh.tangled.repo.archive?format=tar.gz&prefix=&ref=main&repo=did%3Aplc%3Aqfpnj4og54vl56wngdriaxug%2Frepo-19-01-26-08-04-14"
unpacking 'http://localhost:5555/xrpc/sh.tangled.repo.archive?format=tar.gz&prefix=&ref=main&repo=did:plc:qfpnj4og54vl56wngdriaxug/repo-19-01-26-08-04-14' into the Git cache...
warning: not writing modified lock file of flake 'http://localhost:5555/xrpc/sh.tangled.repo.archive?format=tar.gz&prefix=&ref=main&repo=did:plc:qfpnj4og54vl56wngdriaxug/repo-19-01-26-08-04-14':
• Added input 'nixpkgs':
'github:nixos/nixpkgs/bde09022887110deb780067364a0818e89258968?narHash=sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo%2Bw8KsY4%3D' (2026-01-19)
Resolved URL: http://localhost:5555/xrpc/sh.tangled.repo.archive?format=tar.gz&prefix=&ref=main&repo=did:plc:qfpnj4og54vl56wngdriaxug/repo-19-01-26-08-04-14
Locked URL: http://localhost:5555/xrpc/sh.tangled.repo.archive?format=tar.gz&narHash=sha256-IdKT88RIWvWrgQFx6c%2BX3cC7JFene%2BQI9yo2rKSGoA4%3D&prefix=&ref=a63d945ae97b84812e394207f3cc80f6525c2082&repo=did:plc:qfpnj4og54vl56wngdriaxug/repo-19-01-26-08-04-14
Path: /nix/store/0k9pv83f0qn5cm0qy82j51plryk7szx7-source
Fingerprint: 9512ee4857b31a76c1112f05161bda5280d8596b866c4f78986c6c01c1d2f419
Inputs:
└───nixpkgs: github:nixos/nixpkgs/bde09022887110deb780067364a0818e89258968?narHash=sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo%2Bw8KsY4%3D (2026-01-19 00:39:23)
note that the "Resolved URL" includes a hash of the commit.
Co-authored-by: Seongmin Lee <git@boltless.me>
Signed-off-by: oppiliappan <me@oppi.li>
the new 3-panel layout puts the diff upfront, and the review panel off
to the right. on mobile devices, the review panel is a collapsible
bottom-sheet, and on desktop, it is a collapsible side-panel. it is now
possible to comment on a PR while viewing its diff.
all the JS on the page is entirely optional and simply added for
quality-of-life (such as auto-collapsing the bottomsheet on mobile
etc.).
in the review panel, submissions are listed with a top-level entry, and
comments on each submission are "reply" entries. the top-level
submission header includes the following information:
- commit messages and bodies (if available, on patch PRs this is
omitted)
- pipeline status (if avaiable, only for PRs that have triggered CI)
- mergability (if available, this is calculated only for the
latest submission)
the actual merge status (merged/closed/deleted) of the PR is listed
above the pull-action bar. previous designs combined the mergability
check and the merge-status into one component.
Signed-off-by: oppiliappan <me@oppi.li>
there is a very strange bug in the bluesky-pds implementation that
prevents blobs with the text `<svg` from being uploaded. it triggers a
500 because the underlying MIME type detection library assumes XML but
the provided MIME type does not match.
ref: https://github.com/bluesky-social/atproto/issues/3151
gzipping the content lets us upload this without any issues.
Signed-off-by: oppiliappan <me@oppi.li>
`hx-swap-oob` on breaks on `hx-boost` swaps (star button vainishing repo
tab changes), so that was why I made `starBtn-oob` fragment. But
`hx-swap-oob="outerHTML:..."` doesn't strip the wrapper element, adding
`div` wrappers to star button on every star/unstar interactions.
To fix this, dynamically put `hx-swap-oob` attribute to star button
itself by using `.HxSwapOob` param.
Signed-off-by: Seongmin Lee <git@boltless.me>