24 features in the considered v1.0

Every feature,
with a reason it's there.

v1.0 is the considered launch — eight tracks, eighteen to twenty-two build sessions of work — not the minimum-viable release. Nothing on this page is "coming soon." If it made it here, it earned its way on. Future-looking work lives on the roadmap.

Render-layer cleanup
Cleanup transforms `RichText` into a display `AttributedString` just before drawing pixels. The post record never changes.
Single multiplatform target
iPhone, iPad, Mac. One codebase, three real platforms — no Catalyst shortcut, no Mac-as-iPad-with-trackpad apology.
On-device AI
Vision, NaturalLanguage, Foundation Models. Apple's on-device APIs only. Not Private Cloud Compute, not third-party clouds.
No lock-in
Bluesky data lives on Bluesky. Lanai is a client; your handle, your follows, your posts all stay portable.

01 · Reading

Reading.

Three modes share the same posts, the same data layer, and the same typography ramp. The mode you pick changes the pace, not the substance.

Reading

Reading Mode

Tap a post and it expands into an editorial reading view: hanging punctuation, optical margin alignment, generous leading, proper hyphenation. The post becomes a small designed object instead of a row in a feed.

Long posts finally read like prose, not status lines.

Reading

Three feed modes, one feed.

Standard Timeline (efficient), Postcard Mode (slow), Reading Mode (single-post focus). The same posts, three ways to be with them. Switch modes with a quiet control in the top bar.

You pick the pace. The app doesn't pick it for you.

02 · Postcard Mode

Postcard Mode.

The slow-browse view. Each post is a small object on the porch table — picked up, read, sometimes flipped over, put back down. Opt-in, never the default.

Postcard Mode

Each post becomes a postcard.

Subtle keylines, slight rotation seeded by post ID, soft shadow, a postage-stamp icon for the post type, a postmark-style timestamp. Hand-placed, not arranged.

The timeline stops feeling like a list and starts feeling like a stack.

Postcard Mode

Long-press flips the card.

The back side carries the things every other client puts loudly on the front: full timestamp, engagement context phrased as ambient information, the post's full URI for users who care.

The front is for the words. The back is for everyone else.

Postcard Mode

Three card formats.

Short posts render as postcards, long posts as folded letters with a hint of paper fold, image-heavy posts as Polaroids with the white border below. Same metaphor, different stationery.

A varied stack feels like correspondence, not throughput.

Postcard Mode

Reduce Motion is respected.

Rotation disables. Springs simplify to crossfades. The card flip becomes a sheet presentation. Nothing about the metaphor breaks; the motion just steps aside.

Tactile when you want it, still when you don't.

03 · Typography

Typography.

The reading layer Bluesky has been waiting for. Render-layer cleanup, never network-layer; the original is always one tap away. Six tiers, applied where each is appropriate.

Typography

Posts rendered with care.

Em dashes display as em dashes, not as `--`. Smart quotes instead of straight ones. Mojibake from copy-paste gets quietly recovered. Whitespace at the boundaries gets normalized; nothing in the middle does.

Other people's words show up looking like they meant them.

Typography

The original is always one tap away.

Cleanup happens at the render layer. The post record never changes; we never modify the data. Long-press → 'Show original' to see the post exactly as authored. Settings let you turn cleanup off entirely.

Editorial without paternalism.

Typography

Locale-aware quote conventions.

French guillemets in French. German lower-quotes in German. Japanese brackets where they belong. The post's `langs` field tells us which conventions to apply; we follow.

Multilingual feeds stop looking like ASCII concessions.

04 · Compose

Compose.

What you type is what you post. The cleanup we apply when displaying other people's posts, we never apply to yours mid-typing. The composer is sacred.

Compose

What you type is what you post.

Compose is sacred. No surprise smart-quote substitution in the composer, no auto-em-dash, no autocorrect dressed up as 'help.' The cleanup we apply to other people's posts, we never apply to yours mid-typing.

Drafts arrive on the network exactly as you wrote them.

Compose

Alt text, treated as primary input.

The alt-text field sits next to the image, not three taps deep. A 'Suggest a description' button runs Vision on-device when you ask for it; you accept, edit, or reject. Never auto-fills.

Accessible posting becomes the default ergonomic, not the workaround.

Compose

Compose-as-Reading-Mode preview.

See your draft rendered with the same editorial typography readers will see, before you post. Catch the line break that ruins the closing thought.

Self-edit at the same fidelity your readers will read.

05 · Export

Export.

Post-as-image done deliberately. Six templates, full Tier 4+ editorial typography, a Postcard Export that produces the literal postcard you were just holding.

Export

Post-as-image export.

Six templates — Magazine, Quiet, Late, Native, Miami, Sticker — with a Postcard template that produces a literal postcard image. Your post becomes a designed artifact.

The screenshot economy gets something better than screenshots.

Export

Postcard Export.

Two-image carousel by default — front side with the post, back side with the postmark and engagement context. The metaphor extends to the share artifact.

Share an image that looks like the postcard you were just holding.

Export

Editorial typography in every export.

Every export renders at Tier 4+ — full editorial cleanup, hair-space adjustments around em dashes, proper minus signs in numbers, optical margin alignment, widow control. The export looks like print.

Your shared post lands as a designed object, not a screen capture.

06 · Accessibility

Accessibility.

AX1 is the design baseline. AX3 is the size we draw layouts at. APCA Lc≥75 for body text, no exceptions. Designed for screen readers from the first commit, not retrofitted.

Accessibility

Designed at AX3 first.

AX1 is our baseline; AX3 is the size we draw layouts in. Default is the smallest Lanai gets, not the largest. Reflow at all twelve Dynamic Type sizes; truncation is a bug, not a fallback.

The app at AX3 is still beautiful. That's a flex.

Accessibility

APCA Lc≥75 for body text.

Verified contrast on every theme, every text size. APCA, with WCAG 2.x AA as a fallback. Failing both is not acceptable; it's a build break.

Readable in the bright kitchen and the dim bedroom.

Accessibility

VoiceOver as a first-class surface.

Each post in Postcard Mode reads as a single accessibility element with custom actions. The back-of-card pattern is a *better* affordance than long-press menus — more discoverable, less hidden.

Built for screen reader users, not retrofitted around them.

07 · Intelligence

Intelligence.

On-device only. Always opt-in. Always reversible. Always in voice. Lanai uses AI to deepen your relationship with content you chose, never to choose for you.

Intelligence

Alt-text suggestions on demand.

Attach an image, tap 'Suggest a description.' Vision runs on-device. Output appears as a suggestion you accept, edit, or reject. Strictly opt-in; never auto-fills; never appears unless invoked.

Accessibility help that's actually accessible to ask for.

Intelligence

On-device. Always.

No cloud AI processing of your content. Not even Apple's Private Cloud Compute path. Apple's on-device APIs (Vision, NaturalLanguage, CoreML, Foundation Models) are the only acceptable paths.

AI without the third party in the room.

Intelligence

No algorithmic feed. Ever.

Following is chronological. AI never decides which posts you see, or in what order, based on what an engagement model thinks of you. The set of posts is your choice; AI only changes presentation when you ask.

Your feed stops being a model's prediction of you.

08 · Platform

Platform.

One codebase. iPhone, iPad, and Mac all get the real treatment. Not Catalyst. Not a phone app in a Mac window. SwiftUI, @Observable, SwiftData, ATProtoKit.

Platform

Single multiplatform target.

iOS, iPadOS, and macOS share one codebase. SwiftUI + @Observable, SwiftData for persistence, ATProtoKit for the wire. No Catalyst. No Mac-as-iPad-with-a-trackpad. Real Mac when it's running on a Mac.

Native on every platform, not a phone app in a window.

Platform

Mac multi-column.

On Mac, three columns: Following, a custom feed, and the thread you're reading. Each column can carry its own theme. The kind of layout TweetDeck refugees recognize on sight.

Mac stops feeling like a 13-inch iPad with a different keyboard.

Platform

App Password, not OAuth (yet).

v1 ships with App Password authentication, stored in Keychain keyed by DID (not handle — handles change). OAuth via ATOAuthKit is queued for v2 once the AT Protocol's OAuth story stabilizes.

We tell you exactly what's happening with your credentials. No surprises.

Want to see one in motion?

We open the beta in batches as features land. Drop a note with how you read Bluesky now and which platform you're on, and we'll get you on the list.