akshay oppiliappan's Avatar

akshay oppiliappan

@oppi.li

building @tangled.org — code collaboration platform built on atproto. rust · nix · 1-bit pixel art · plant-based · bangalore · oppi.li

1,367
Followers
345
Following
1,206
Posts
08.01.2025
Joined
Posts Following

Latest posts by akshay oppiliappan @oppi.li

Spindles

PSA: @tangled.org has Nixery based action workflows called spindles 🤌

docs.tangled.org/spindles.html

06.03.2026 13:09 👍 19 🔁 2 💬 0 📌 0

this should be fixed now!

06.03.2026 09:06 👍 1 🔁 0 💬 0 📌 0

tangled.org/timeline ;)

code search, repo search etc. is coming!

06.03.2026 07:30 👍 71 🔁 1 💬 0 📌 0

im currently struggling with the "fast-restart" part of the problem!

with templates, it's easy to reparse/reload on the fly

04.03.2026 09:03 👍 1 🔁 0 💬 0 📌 0

yeah presently, on dev, we are only able to live reload templates and css, but not much else.

I'm trying to move away from templates into a HTML DSL in go, and this would benefit greatly from HMR

04.03.2026 08:58 👍 0 🔁 0 💬 0 📌 0

but yeah, the FE could be htmx or alpinejs or datastar or what have you, the goal is to erase the templating bits but offer similar devex

03.03.2026 21:56 👍 3 🔁 0 💬 1 📌 0

there's a bit of a braindump of these ideas on the off-topic channel on the tangled discord!

03.03.2026 21:54 👍 4 🔁 0 💬 1 📌 0
Preview
anil.recoil.org/ocaml-tailwind Tailwind classes in OCaml

the aim is to use a HTML DSL like gomponents but also supplement that with a CSS DSL similar to @anil.recoil.org's ocaml-tailwind, but use go's AST + SSA to generate CSS! this could then be extended into a full component lib like shadcn/daisy in pure go.

tangled.org/anil.recoil....

03.03.2026 21:54 👍 10 🔁 0 💬 1 📌 0

oh dear... lemme fix this for you tomorrow, I think I've located the issue

cc @anirudh.fi and @lewis.moe if you get to this before me!

03.03.2026 21:47 👍 3 🔁 0 💬 1 📌 0
Preview
flake.nix at master · tangled.org/core Monorepo for Tangled

yup I use air! tangled.org/tangled.org/...

but HMR is what im looking for!

03.03.2026 20:20 👍 0 🔁 0 💬 0 📌 0

lovely!

03.03.2026 19:53 👍 0 🔁 0 💬 0 📌 0

bsky.app/profile/tang... does this help?

03.03.2026 19:32 👍 2 🔁 0 💬 2 📌 0

it's not fun... and unfortunately we have about 20kloc of that stuff on tangled... but im hacking away at what could be a much nicer replacement!

03.03.2026 19:16 👍 11 🔁 0 💬 1 📌 0
Preview
Announcing npmx: a fast, modern browser for the npm registry Today we're releasing the alpha of npmx.dev – a fast, modern browser for the npm registry, built in the open by a growing community.

npmx is now in alpha: this is our story, as told by our team and friends

03.03.2026 12:23 👍 359 🔁 127 💬 17 📌 34

this is something we are working on, will have more to say soon, on the discord!

03.03.2026 05:48 👍 4 🔁 0 💬 1 📌 0

perks of hosting critical infra at home:

03.03.2026 03:38 👍 34 🔁 0 💬 0 📌 0

❤️❤️❤️

02.03.2026 15:37 👍 6 🔁 0 💬 0 📌 0
Spindles

not presently no, you can use the nix package by using a custom registry perhaps? docs.tangled.org/spindles.htm...

02.03.2026 10:24 👍 1 🔁 0 💬 0 📌 0
Preview
announcing our €3,8M seed round and more on what's next

today, we're announcing our €3,8M ($4.5M) seed financing round, led by byFounders with participation from Bain Capital Crypto, Antler, Thomas Dohmke (former CEO of GitHub), Avery Pennarun (CEO of Tailscale) among other incredible angels.

read more on what's next: blog.tangled.org/seed

02.03.2026 09:51 👍 804 🔁 147 💬 54 📌 68

weird android behavior with the bsky (either app or website): the entire thing reloads when i toggle dark/light mode or color correction mode ... is this a react thing?

28.02.2026 05:56 👍 3 🔁 0 💬 1 📌 0

im trying to get vite style hot module reloading while running a webserver!

28.02.2026 05:51 👍 0 🔁 0 💬 2 📌 0

lessgooo

28.02.2026 05:27 👍 2 🔁 0 💬 0 📌 0

yoooo this is pretty cool

28.02.2026 05:25 👍 1 🔁 0 💬 0 📌 0

it's a bit tricky at the moment... perhaps @zenfyr.dev might have done this!

28.02.2026 05:24 👍 1 🔁 0 💬 0 📌 0

you are gonna love this weekend's release...

27.02.2026 10:52 👍 7 🔁 0 💬 0 📌 0

preach

26.02.2026 03:23 👍 12 🔁 0 💬 1 📌 0

im running it on my homeserver off of my home network, i haven't had much luck with hitting reddit APIs on a VPS!

25.02.2026 14:52 👍 1 🔁 0 💬 0 📌 0
Preview
oppi.li/lurker selfhostable, read-only reddit client

ive been selfhosting lurker for a year-ish now, works pretty well on residential IPs as a reddit client! tangled.org/oppi.li/lurker

25.02.2026 14:15 👍 0 🔁 0 💬 1 📌 0
// ============================================================================
// inlay render — specification tests
// ============================================================================
//
// inlay is a UI component system on the AT Protocol.
//
// Elements reference components by NSID — <com.example.PostCard uri="...">
// is an element whose type is the NSID com.example.PostCard. An NSID is
// just a name; it says nothing about where the implementation lives.
//
// A pack (at.inlay.pack) maps NSIDs to concrete implementations. Each
// entry points an NSID at a component record URI (at://did/at.inlay.component/rkey),
// so the same NSID can resolve to different implementations depending on context.
//
// A component record (at.inlay.component) defines what happens when the
// element is rendered. It has one of three body kinds:
//
//   - no body         → a primitive; the host knows how to render this
//   - bodyTemplate    → a stored element tree with Binding placeholders
//   - bodyExternal    → an XRPC endpoint that returns an element tree
//
// Resolution algorithm:
//
//   1. Start with an element like <com.example.PostCard uri="at://...">.
//   2. Scan imported packs for a component that implements com.example.PostCard.
//   3. Resolve the component record and switch based on body kind:
//      a. no body       → done, it's a primitive.
//      b. bodyTemplate  → substitute Binding placeholders with the
//         element's props (and optionally a fetched record when the
//         component declares that it's a "view" for some records).
//      c. bodyExternal  → call the XRPC service, passing props.
//         Children can be passed too, but they're opaque to the callee.
//   4. Recurse into the expanded tree until everything resolves to
//      primitives. This can be done to completion or (better) streamingly.

// ============================================================================ // inlay render — specification tests // ============================================================================ // // inlay is a UI component system on the AT Protocol. // // Elements reference components by NSID — <com.example.PostCard uri="..."> // is an element whose type is the NSID com.example.PostCard. An NSID is // just a name; it says nothing about where the implementation lives. // // A pack (at.inlay.pack) maps NSIDs to concrete implementations. Each // entry points an NSID at a component record URI (at://did/at.inlay.component/rkey), // so the same NSID can resolve to different implementations depending on context. // // A component record (at.inlay.component) defines what happens when the // element is rendered. It has one of three body kinds: // // - no body → a primitive; the host knows how to render this // - bodyTemplate → a stored element tree with Binding placeholders // - bodyExternal → an XRPC endpoint that returns an element tree // // Resolution algorithm: // // 1. Start with an element like <com.example.PostCard uri="at://...">. // 2. Scan imported packs for a component that implements com.example.PostCard. // 3. Resolve the component record and switch based on body kind: // a. no body → done, it's a primitive. // b. bodyTemplate → substitute Binding placeholders with the // element's props (and optionally a fetched record when the // component declares that it's a "view" for some records). // c. bodyExternal → call the XRPC service, passing props. // Children can be passed too, but they're opaque to the callee. // 4. Recurse into the expanded tree until everything resolves to // primitives. This can be done to completion or (better) streamingly.

first pieces of @inlay.at are now open source at tangled.org/danabra.mov/...

🔮 Inlay "browser" prototype (hono+htmx): inlay-proto.up.railway.app

📝 Inlay ProfilePage component from the above demo: pdsls.dev/at://did:plc...

📜 Tests describing the Inlay rendering model: tangled.org/danabra.mov/...

25.02.2026 05:30 👍 118 🔁 20 💬 8 📌 3

lfggg

24.02.2026 02:32 👍 1 🔁 0 💬 0 📌 0