alpha
Login
or
Join now
zephyra.zone
/
grain
Star
1
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
grain.social is a photo sharing platform built on atproto.
Star
1
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
grain
/
app
/
lib
/
components
/
organisms
/
at
main
11 files
Chad Miller
feat: minimal right sidebar with place and camera dedup
3mo ago
ca49c1bf
AuthBar.svelte
feat: improve signed-out experience with prominent sign-in - Desktop sidebar: show logo, tagline, and sign-in button when signed out - Mobile bottom bar: show tagline and sign-in button instead of nav tabs - Mobile drawer: move sign-in button to top of drawer - Hide home icon and following feed tab when signed out - Widen sidebar column for signed-out text content - Simplify AuthBar to logout-only (sign-in moved to sidebar) - Update login placeholder to user.bsky.social Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4 months ago
CommentSheet.svelte
feat: add story favorites, comments, and notifications - Hydrate stories with expired, commentCount, and viewer.fav fields - Handle story favorite and comment commits with notifications - Rename getGalleryThread to getCommentThread for reuse with stories - Add story favorite/comment notification UI and deep links - Add favorite toggle, double-tap to favorite, and comment sheet to StoryViewer - Add contained mode to CommentSheet for use inside story viewer - Add engagement section to story detail page - Gate comment UI behind requireAuth for unauthenticated users Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4 months ago
FeedList.svelte
feat: story rings on avatars, improved story strip, settings atoms - Show gradient story ring on gallery card and popover avatars when author has an active story, tapping opens story viewer - Redesign "Your story" button to show viewer avatar with plus badge and create/view menu when user has existing stories - Filter own user from story author list to avoid duplication - Extract SettingsGroup and SettingsToggleRow reusable atoms - Refactor upload-defaults page to use new atoms - Remove icons from settings hub rows - Fix Avatar ring padding and hover clipping Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3 months ago
GalleryGrid.svelte
feat: bulk select and delete galleries on profile page Add select mode to gallery grid with SelectCheck atom, floating action bar with confirmation dialog, progress tracking, and partial failure handling. Refactor import page to share the same SelectCheck component. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3 months ago
LoginModal.svelte
feat: add atmosphere account link to login modal Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4 months ago
MobileDrawer.svelte
fix: make home dynamically render first pinned feed - `/` now renders whatever feed is first in the pinned list - Add dedicated `/feeds/recent` route so recent is accessible when not first - Update FeedTabs, SidebarRight, MobileDrawer to link first pin to `/` - Migrate old `path: "/"` to `/feeds/recent` for existing users - Redirect to custom feed path if non-core feed is pinned first Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4 months ago
MobileSearch.svelte
hatk rewrite Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4 months ago
Sidebar.svelte
feat: add blocks and mutes (#10) - Block/mute records with bidirectional content filtering on feeds, stories, comments, and notifications - Muted comments returned with `muted` flag for client-side collapse/expand UI - Blocked comments removed entirely from threads - Settings > Moderation > Blocked Users / Muted Users management pages - Block/mute state shown on profile pages with overflow menu actions - Self-block prevention, query invalidation on mutations - Lexicons for block record, muteActor/unmuteActor procedures, getBlocks/getMutes queries - getSuggestedFollows excludes blocked/muted users - getActorProfile uses authenticated viewer instead of params.viewer - getMutes cursor aligned with getBlocks (packCursor/unpackCursor) - Seeds with block test records Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
4 months ago
SidebarRight.svelte
feat: minimal right sidebar with place and camera dedup - Flatten sidebar cards into a single continuous minimal layout; search as bordered input, uppercase section labels, compact footer with dot separators. - Dedupe locations server-side: getLocations groups by (locality, region, country) with USA→US country alias. getFeed?feed=location accepts a name param and unions all H3 cells sharing the display label via case-insensitive address matching. - Return h3Cells on LocationItem so LocationMapBanner can render a centroid + dynamic zoom across all cells in a place (was showing only one cell). - Normalize camera names server-side in getCameras: strip manufacturer legalese, dedup adjacent tokens, title-case all-caps brands. Rows that collide after normalization merge. Camera feed matches by normalization-equivalence so old raw URLs and new cleaned URLs both work. - Add /cameras and /locations index pages with "See all →" links in the sidebar when the section has more than seven items.
3 months ago
StoryViewer.svelte
feat: server-computed locationDisplay on gallery and story views Adds a formatted locationDisplay string to galleryView and storyView so clients render one field instead of re-implementing dedup and formatting logic per platform. Handles POI names ("Blue Bottle Coffee, Oakland, California, US"), Nominatim city fallbacks ("New York, US"), county-in- name leakage from older clients ("Kansas City, Missouri, US"), and legacy hthree records without structured address (preserved as-is). - lexicons: add locationDisplay to gallery and story view defs - server/helpers/formatLocation.ts: canonical implementation - test/formatLocation.test.ts: 11 vitest cases across real-world shapes - server/hydrate: include locationDisplay in hydrated views - app/lib/utils/formatLocation.ts: re-export so $lib consumers don't reach into server/ - app/lib/utils/bsky-post.ts: use shared helper for cross-post line - UI components: render locationDisplay ?? location.name ?? fallback Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3 months ago
SuggestedFollows.svelte
fix: reduce redundant API calls and service worker noise - SuggestedFollows: stabilize query key to prevent triple-fetch during auth hydration - Profile: defer favorites query until favorites tab is active - Service worker: skip XRPC intercepting (no benefit from caching API) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4 months ago