WIP PWA for Grain
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: sort gallery items by position field

Ensures the first image (position 0) displays as thumbnail in profile
grid and images appear in correct order in carousel.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

+3 -3
.DS_Store

This is a binary file and will not be displayed.

.playwright-mcp/bottom-nav-smaller.png

This is a binary file and will not be displayed.

.playwright-mcp/bottom-nav.png

This is a binary file and will not be displayed.

.playwright-mcp/gallery-detail.png

This is a binary file and will not be displayed.

.playwright-mcp/gallery-detail2.png

This is a binary file and will not be displayed.

.playwright-mcp/icons-16px.png

This is a binary file and will not be displayed.

.playwright-mcp/icons-check.png

This is a binary file and will not be displayed.

.playwright-mcp/layout-fixed.png

This is a binary file and will not be displayed.

.playwright-mcp/layout-verification.png

This is a binary file and will not be displayed.

.playwright-mcp/profile-grid-fixed.png

This is a binary file and will not be displayed.

.playwright-mcp/profile-grid-fixed2.png

This is a binary file and will not be displayed.

.playwright-mcp/profile-grid-fixed3.png

This is a binary file and will not be displayed.

.playwright-mcp/profile-grid-portrait.png

This is a binary file and will not be displayed.

.playwright-mcp/profile-grid.png

This is a binary file and will not be displayed.

.playwright-mcp/profile-padding.png

This is a binary file and will not be displayed.

.playwright-mcp/spinner-check.png

This is a binary file and will not be displayed.

.playwright-mcp/spinner-loading.png

This is a binary file and will not be displayed.

.playwright-mcp/timeline-padding.png

This is a binary file and will not be displayed.

+3 -3
src/services/grain-api.js
··· 22 22 avatar { url } 23 23 displayName 24 24 } 25 - socialGrainGalleryItemViaGallery(first: 10) { 25 + socialGrainGalleryItemViaGallery(first: 10, sortBy: [{ field: position, direction: ASC }]) { 26 26 edges { 27 27 node { 28 28 itemResolved { ··· 137 137 uri 138 138 title 139 139 createdAt 140 - socialGrainGalleryItemViaGallery(first: 1) { 140 + socialGrainGalleryItemViaGallery(first: 1, sortBy: [{ field: position, direction: ASC }]) { 141 141 edges { 142 142 node { 143 143 itemResolved { ··· 207 207 displayName 208 208 avatar { url(preset: "avatar") } 209 209 } 210 - socialGrainGalleryItemViaGallery(first: 50) { 210 + socialGrainGalleryItemViaGallery(first: 50, sortBy: [{ field: position, direction: ASC }]) { 211 211 edges { 212 212 node { 213 213 itemResolved {