ATlast — you'll never need to find your favorites on another platform again. Find your favs in the ATmosphere.
atproto
1[ 2 { 3 "hash": "f79a669dd6528340d453cb28e9fed2bd5232d46c", 4 "short_hash": "f79a669", 5 "author": "Ariel M. Lighty", 6 "date": "2025-12-24T19:38:51-05:00", 7 "message": "move tooltip from hero to login form as superscript\n\n- Removed tooltip from HeroSection (ATmosphere now plain text)\n- Added superscript info icon next to 'ATmosphere' in login form text\n- Tooltip content left-aligned for better readability\n- Maintains platform-agnostic design", 8 "files_changed": 2 9 }, 10 { 11 "hash": "9bdca934948a284e1315961b4430bae0b6617cbe", 12 "short_hash": "9bdca93", 13 "author": "Ariel M. Lighty", 14 "date": "2025-12-24T18:35:00-05:00", 15 "message": "fix login avatar display by fetching from Bluesky API\n\nactor-typeahead component doesn't expose avatar data via events or attributes.\nAdded debounced API fetch (300ms) to searchActorsTypeahead endpoint when\nhandle is entered. Avatar now displays for both typeahead selections and\nmanually entered handles.", 16 "files_changed": 1 17 }, 18 { 19 "hash": "0411d34fc6418f1b887bbec2470cee9fe7e2d98b", 20 "short_hash": "0411d34", 21 "author": "Ariel M. Lighty", 22 "date": "2025-12-24T16:53:27-05:00", 23 "message": "add rotating platform-agnostic placeholder examples\n\nCreated useRotatingPlaceholder hook:\n- Rotates through 4 platform examples every 3 seconds\n- .bsky.social, .blacksky.app, .tgnl.sh, .com\n- Demonstrates platform flexibility without overwhelming users", 24 "files_changed": 2 25 }, 26 { 27 "hash": "6cd4d622930e2a43531f2df40d930ceb5d2b4dbc", 28 "short_hash": "6cd4d62", 29 "author": "Ariel M. Lighty", 30 "date": "2025-12-24T00:27:50-05:00", 31 "message": "use shared card component for history and results", 32 "files_changed": 4 33 }, 34 { 35 "hash": "cc586d28ea8d4544467392be1083fdec11731814", 36 "short_hash": "cc586d2", 37 "author": "Ariel M. Lighty", 38 "date": "2025-12-23T21:11:19-05:00", 39 "message": "replace excessive toasts with aria-live announcer\n\nRemove redundant success/info toasts (logout, upload loaded, no results).\nKeep only error toasts for critical feedback.\nAdd AriaLiveAnnouncer component for screen reader accessibility.", 40 "files_changed": 2 41 }, 42 { 43 "hash": "ebb1e05cac477f02e1901aab6f3a8005016472f9", 44 "short_hash": "ebb1e05", 45 "author": "Ariel M. Lighty", 46 "date": "2025-12-23T21:10:58-05:00", 47 "message": "fix mobile alignment: badges and descriptions align with avatar", 48 "files_changed": 1 49 }, 50 { 51 "hash": "4c3ae0dbca215d10b499fc646ae7f53c43c658ac", 52 "short_hash": "4c3ae0d", 53 "author": "Ariel M. Lighty", 54 "date": "2025-12-23T20:58:15-05:00", 55 "message": "fix login typeahead autofill and auto-strip @ symbol\n\nTypeahead fix:\n- Add event listeners for input/change/blur to sync actor-typeahead selections with form state\n- Ensures Enter/Tab selections from typeahead dropdown properly update form\n- Allows Enter key to submit form after selection\n\n@ stripping:\n- Automatically remove leading @ from handle input\n- Show helpful inline message when @ is stripped\n- Inform users the @ symbol isn't needed", 56 "files_changed": 1 57 }, 58 { 59 "hash": "8e9efd2577b82cb61b0162a28b4ab072bbccf00b", 60 "short_hash": "8e9efd2", 61 "author": "Ariel M. Lighty", 62 "date": "2025-12-23T20:57:21-05:00", 63 "message": "update CLAUDE.md with separate commit guidance\n\nAdd critical note that each commit should address ONE specific fix or feature.\nMultiple unrelated changes should be committed separately for clearer history.", 64 "files_changed": 1 65 }, 66 { 67 "hash": "587a9b0314546b91e00c94bf87d28d29f6527456", 68 "short_hash": "587a9b0", 69 "author": "Ariel M. Lighty", 70 "date": "2025-12-23T19:34:34-05:00", 71 "message": "add rate limiting to batch endpoints\n\nOptimization #12:\n- created rateLimit.middleware with in-memory rate limiting\n- batch-search-actors: 5 requests/min (conservative)\n- batch-follow-users: 8 requests/hr (conservative)\n- calculated based on AT Protocol limits with 50% buffer\n- DRY implementation with applyRateLimit helper function\n- prevents users from exhausting AT Protocol API limits\n- leaves buffer for likes, replies, posts\n\nNote: In-memory (resets on cold starts). Upgrade to Upstash Redis for production-grade shared state.", 72 "files_changed": 3 73 }, 74 { 75 "hash": "35061ae467e17724d85493c94827c361dc84e6d1", 76 "short_hash": "35061ae", 77 "author": "Ariel M. Lighty", 78 "date": "2025-12-23T19:12:00-05:00", 79 "message": "move inline animations to Tailwind config\n\nOptimization #11:\n- added float-1, float-2, float-3 animation variants to tailwind.config.js\n- replaced inline animation and animationDelay styles with Tailwind classes\n- use modulo pattern to cycle through 3 animation variants\n- maintains visual variety without Math.random() for animation timing\n- consistent with Tailwind conventions, easier to maintain", 80 "files_changed": 2 81 }, 82 { 83 "hash": "6b5cf20f95ea43d18c5d05fa80ff7e94d7aa26d2", 84 "short_hash": "6b5cf20", 85 "author": "Ariel M. Lighty", 86 "date": "2025-12-23T19:05:42-05:00", 87 "message": "replace localStorage context with zustand persist store\n\nOptimization #10:\n- created useSettingsStore with zustand persist middleware\n- removed SettingsContext.tsx (88 lines) and provider wrapper\n- added SSR-safe storage with cross-tab synchronization\n- automatic JSON serialization, no manual parse/stringify\n- maintained backward-compatible API (useSettings hook)\n- bundle size: +2.3KB for zustand library", 88 "files_changed": 6 89 }, 90 { 91 "hash": "43710263eec21891c899f57e4d0434322612d353", 92 "short_hash": "4371026", 93 "author": "Ariel M. Lighty", 94 "date": "2025-12-23T18:11:36-05:00", 95 "message": "replace any types with AT Protocol interfaces\n\nOptimization #9:\n- created atproto.types.ts with proper AT Protocol interfaces\n- replaced 7 any types in batch-search-actors.ts\n- added ATProtoActor, ATProtoProfile, RankedActor, EnrichedActor types\n- improves type safety, compile-time error catching, IDE support", 96 "files_changed": 3 97 }, 98 { 99 "hash": "65ac856188d644baed837eea7775aed307ca0a56", 100 "short_hash": "65ac856", 101 "author": "Ariel M. Lighty", 102 "date": "2025-12-23T16:07:44-05:00", 103 "message": "remove duplicate type definitions from Results.tsx\n\nOptimization #8:\n- removed 3 duplicate type definitions (atprotoSession, SourceUser, SearchResult)\n- import AtprotoSession and SearchResult from central types\n- prevents type drift, establishes single source of truth", 104 "files_changed": 1 105 }, 106 { 107 "hash": "093b47d63a6324c2e4bc231d45c5d9d6792383ed", 108 "short_hash": "093b47d", 109 "author": "Ariel M. Lighty", 110 "date": "2025-12-23T15:58:35-05:00", 111 "message": "replace duplicate validation with Zod schemas\n\nOptimizations #6 & #7:\n- #6: verified early exit optimization already implemented in FollowService\n- #7: created validation.utils.ts with Zod schemas for array validation\n- replaced 3 duplicate validation blocks with reusable Zod schemas\n- updated batch-follow-users, check-follow-status, batch-search-actors", 112 "files_changed": 5 113 } 114]