Skyline: Programming Your Own Social Vibe

How LLM embeddings and the AT Protocol are turning the engagement trap into a user-controlled mood regulator.

• View on GitHub • More from louislva

A person holding a glowing prism that filters a chaotic waterfall of black ink into organized, crystalline geometric shapes.
Filtering the firehose: Skyline shifts social media from passive consumption to active curation.

The way custom algorithms work in Skyline is via LLM embeddings. You can write a positive prompt "I want to see more of...", and posts matching will be brought to the top, and a negative prompt "I want to see less of..." which decides which posts to push to the bottom.

louislva, Author/Maintainer · Repository: louislva/skyline

Key Takeaways

The Vibe-Shift Button

Most social platforms optimize for time on site. They feed anger, outrage, and engagement. Skyline, an alternative client for the Bluesky network, takes a fundamentally different approach. It treats the social feed as a programmable mood regulator.

Built with Next.js and TypeScript, Skyline leverages the decentralized nature of the AT Protocol. It bypasses server-side engagement algorithms entirely. Instead, it allows users to filter the global firehose through a semantic lens using natural language.

My goal with this project was to create a social media that makes you happy, not just optimizes engagement.

louislva, Author/Maintainer · Repository: louislva/skyline

Beyond the Boolean

Traditional content filtering relies on keyword muting. If you mute a specific political term, the system blindly hides posts containing that exact string. This boolean approach is brittle. Users easily bypass it with misspellings or related context.

Skyline introduces semantic muting. It understands intent. If a user asks for a "Wholesome" feed, the client calculates the mathematical distance between a post and the user's prompt. It understands that a post about a local political bill is political, even if the user never explicitly blacklisted the bill's name.

FeatureOfficial ClientsSkyline
Control PlaneServer-side, fixedClient-side, programmable
Filtering LogicRegex and Keywords (Brittle)LLM Embeddings (Semantic)
Core IncentiveTime on Site (Engagement)User Intent (Vibe)

How cosine similarity scores posts against user-defined prompts.

The Vector Engine Under the Hood

The architecture relies heavily on client-side processing combined with lightweight API proxying. When a user loads a feed, the Next.js application fetches raw records from the AT Protocol. It then sends this data to a local API route.

The API route passes the text to OpenAI to generate vector embeddings. The client then calculates the cosine similarity between the post's vector and the user's configured prompts. This produces a score that dictates the post's final rank in the UI.

Data flow from the AT Protocol firehose to local semantic re-ranking.

Sovereignty by Design

Skyline works because the AT Protocol decoupled the data layer from the application layer. Skyline does not need permission to re-rank the feed. The data lives on decentralized Personal Data Servers.

A person at a workbench assembling a complex lens from small gears and a lightbulb, bypassing a giant monolithic eye in the background.
Decentralized protocols allow developers to build custom lenses over the global data firehose.

The Transhumanist Feed

Portrait of Louis LVA, creator of Skyline.

The project is explicitly philosophical. It explores memetic engineering and the idea that software should actively prioritize user well-being over metrics. It is an experiment in principled software design.

Everyone knows "social media makes you angry" - but maybe the tech is finally here for "social media makes you kinder"?

louislva, Author/Maintainer · Repository: louislva/skyline

By placing the algorithm directly in the hands of the user, Skyline offers a glimpse into a future where we program our digital environments rather than letting them program us.