ATlast — you'll never need to find your favorites on another platform again. Find your favs in the ATmosphere.
atproto
1[ 2 { 3 "hash": "d0bcf337b6d223a86443f6f67767e87b74e4dd7d", 4 "short_hash": "d0bcf33", 5 "author": "Ariel M. Lighty", 6 "date": "2025-12-26T00:26:09-05:00", 7 "message": "refactor extension to require authentication and use proper upload flow\n\nRemoved temporary storage approach and implemented proper authentication flow:\n\nExtension changes:\n- Added session check to popup init flow (checkSession in api-client)\n- Added \"not logged in\" state with login prompts\n- Updated uploadToATlast to include credentials for cookie-based auth\n- Extension now requires user to be logged in BEFORE scanning\n\nBackend changes:\n- Converted extension-import to AuthenticatedHandler (requires auth)\n- Now creates upload records immediately (no temporary storage)\n- Removed extension_imports table from database schema\n- Deleted get-extension-import function (no longer needed)\n- Deleted import-store utility (temporary approach removed)\n\nFrontend changes:\n- Removed ExtensionImport page and /import/:id route\n- Extension uploads now use same flow as file uploads\n\nThis matches the correct user flow: user logs in to ATlast first, then\nextension creates permanent upload records directly (same as file uploads).\n\nBuilt extension successfully for dev environment.", 8 "files_changed": 12 9 }, 10 { 11 "hash": "69db377f7f6dd4e38677f2507ad660cdf1a66465", 12 "short_hash": "69db377", 13 "author": "Ariel M. Lighty", 14 "date": "2025-12-25T22:00:53-05:00", 15 "message": "update decision graph", 16 "files_changed": 2 17 }, 18 { 19 "hash": "917687b455a241413e60086b751902156352e098", 20 "short_hash": "917687b", 21 "author": "Ariel M. Lighty", 22 "date": "2025-12-25T20:59:22-05:00", 23 "message": "update decision graph", 24 "files_changed": 2 25 }, 26 { 27 "hash": "c35fb0d83202607facc203dfe10325e8672ea67e", 28 "short_hash": "c35fb0d", 29 "author": "Ariel M. Lighty", 30 "date": "2025-12-25T19:16:38-05:00", 31 "message": "add validation to prevent uploading empty results\n\nCheck if usernames array has items before attempting upload.\nShows clear error message instead of hanging.", 32 "files_changed": 1 33 }, 34 { 35 "hash": "0718100fbf6342cb21e8877e32b6f590b0b8cc57", 36 "short_hash": "0718100", 37 "author": "Ariel M. Lighty", 38 "date": "2025-12-25T18:52:32-05:00", 39 "message": "fix critical messaging bug: onMessage was discarding return values\n\nThe onMessage wrapper in messaging.ts was only sending {success: true}\ninstead of the actual handler return value. This caused the popup to\nreceive undefined state even though the background worker was correctly\nstoring it.\n\nChanges:\n- messaging.ts: Changed onMessage to forward handler return values\n- background service-worker.ts: Added comprehensive logging\n- popup.ts: Added state change listener and detailed logging\n\nThis fixes the issue where popup showed 'Go to...' even when on the\nfollowing page.", 40 "files_changed": 3 41 }, 42 { 43 "hash": "ba29fd68872913ba0a587aa7f29f97b3d373a732", 44 "short_hash": "ba29fd6", 45 "author": "Ariel M. Lighty", 46 "date": "2025-12-25T13:22:32-05:00", 47 "message": "configure Netlify dev for monorepo with --filter flag\n\nFixed Netlify CLI monorepo detection issue by using --filter flag:\n- Updated root package.json scripts to use 'npx netlify-cli dev --filter @atlast/web'\n- Updated netlify.toml [dev] section to use npm with --prefix for framework command\n- Added monorepo development instructions to CLAUDE.md\n- Documented Windows Git Bash compatibility issue with netlify command\n\nSolution: Use 'npx netlify-cli dev --filter @atlast/web' to bypass monorepo\nproject selection prompt and specify which workspace package to run.\n\nDev server now runs successfully at http://localhost:8888 with all backend\nfunctions loaded.", 48 "files_changed": 5 49 }, 50 { 51 "hash": "32cdee3aeac7ef986df47e0fff786b5f7471e55b", 52 "short_hash": "32cdee3", 53 "author": "Ariel M. Lighty", 54 "date": "2025-12-25T13:22:32-05:00", 55 "message": "configure Netlify dev for monorepo with --filter flag\n\nFixed Netlify CLI monorepo detection issue by using --filter flag:\n- Updated root package.json scripts to use 'npx netlify-cli dev --filter @atlast/web'\n- Updated netlify.toml [dev] section to use npm with --prefix for framework command\n- Added monorepo development instructions to CLAUDE.md\n- Documented Windows Git Bash compatibility issue with netlify command\n\nSolution: Use 'npx netlify-cli dev --filter @atlast/web' to bypass monorepo\nproject selection prompt and specify which workspace package to run.\n\nDev server now runs successfully at http://localhost:8888 with all backend\nfunctions loaded.", 56 "files_changed": 4 57 }, 58 { 59 "hash": "c3e7afad396d130791d801a85cbfc9643bcd6309", 60 "short_hash": "c3e7afa", 61 "author": "Ariel M. Lighty", 62 "date": "2025-12-25T12:47:38-05:00", 63 "message": "migrate to pnpm monorepo structure\n\nRestructured codebase into pnpm workspace with three packages:\n- packages/web: React frontend (from src/)\n- packages/functions: Netlify serverless functions (from netlify/functions/)\n- packages/shared: Shared TypeScript types for Platform and Import APIs\n\nChanges:\n- Created pnpm-workspace.yaml for workspace configuration\n- Moved all web app files to packages/web/\n- Moved all Netlify functions to packages/functions/src/\n- Created packages/shared with Platform enum and ExtensionImportRequest/Response types\n- Updated netlify.toml to point to new paths\n- Updated root package.json scripts to use pnpm workspace commands\n- All dependencies split appropriately between packages\n\nPhase 0 (Monorepo Migration) from PLAN.md completed successfully.\nBuilds and dev server tested and working.", 64 "files_changed": 317 65 }, 66 { 67 "hash": "e2d6a7e940ea402570c9397a722a4050c735cb6d", 68 "short_hash": "e2d6a7e", 69 "author": "Ariel M. Lighty", 70 "date": "2025-12-24T21:09:33-05:00", 71 "message": "remove .claude/ and dist/ from repository\n\nThese directories are already in .gitignore but were committed\nbefore the ignore rules were added. Removed from tracking while\nkeeping local files intact.", 72 "files_changed": 6 73 }, 74 { 75 "hash": "f79a669dd6528340d453cb28e9fed2bd5232d46c", 76 "short_hash": "f79a669", 77 "author": "Ariel M. Lighty", 78 "date": "2025-12-24T19:38:51-05:00", 79 "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", 80 "files_changed": 2 81 }, 82 { 83 "hash": "9bdca934948a284e1315961b4430bae0b6617cbe", 84 "short_hash": "9bdca93", 85 "author": "Ariel M. Lighty", 86 "date": "2025-12-24T18:35:00-05:00", 87 "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.", 88 "files_changed": 1 89 }, 90 { 91 "hash": "6cd4d622930e2a43531f2df40d930ceb5d2b4dbc", 92 "short_hash": "6cd4d62", 93 "author": "Ariel M. Lighty", 94 "date": "2025-12-24T00:27:50-05:00", 95 "message": "use shared card component for history and results", 96 "files_changed": 4 97 }, 98 { 99 "hash": "cc586d28ea8d4544467392be1083fdec11731814", 100 "short_hash": "cc586d2", 101 "author": "Ariel M. Lighty", 102 "date": "2025-12-23T21:11:19-05:00", 103 "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.", 104 "files_changed": 2 105 }, 106 { 107 "hash": "ebb1e05cac477f02e1901aab6f3a8005016472f9", 108 "short_hash": "ebb1e05", 109 "author": "Ariel M. Lighty", 110 "date": "2025-12-23T21:10:58-05:00", 111 "message": "fix mobile alignment: badges and descriptions align with avatar", 112 "files_changed": 1 113 }, 114 { 115 "hash": "4c3ae0dbca215d10b499fc646ae7f53c43c658ac", 116 "short_hash": "4c3ae0d", 117 "author": "Ariel M. Lighty", 118 "date": "2025-12-23T20:58:15-05:00", 119 "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", 120 "files_changed": 1 121 }, 122 { 123 "hash": "8e9efd2577b82cb61b0162a28b4ab072bbccf00b", 124 "short_hash": "8e9efd2", 125 "author": "Ariel M. Lighty", 126 "date": "2025-12-23T20:57:21-05:00", 127 "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.", 128 "files_changed": 1 129 }, 130 { 131 "hash": "587a9b0314546b91e00c94bf87d28d29f6527456", 132 "short_hash": "587a9b0", 133 "author": "Ariel M. Lighty", 134 "date": "2025-12-23T19:34:34-05:00", 135 "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.", 136 "files_changed": 3 137 }, 138 { 139 "hash": "35061ae467e17724d85493c94827c361dc84e6d1", 140 "short_hash": "35061ae", 141 "author": "Ariel M. Lighty", 142 "date": "2025-12-23T19:12:00-05:00", 143 "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", 144 "files_changed": 2 145 }, 146 { 147 "hash": "6b5cf20f95ea43d18c5d05fa80ff7e94d7aa26d2", 148 "short_hash": "6b5cf20", 149 "author": "Ariel M. Lighty", 150 "date": "2025-12-23T19:05:42-05:00", 151 "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", 152 "files_changed": 6 153 }, 154 { 155 "hash": "43710263eec21891c899f57e4d0434322612d353", 156 "short_hash": "4371026", 157 "author": "Ariel M. Lighty", 158 "date": "2025-12-23T18:11:36-05:00", 159 "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", 160 "files_changed": 3 161 }, 162 { 163 "hash": "65ac856188d644baed837eea7775aed307ca0a56", 164 "short_hash": "65ac856", 165 "author": "Ariel M. Lighty", 166 "date": "2025-12-23T16:07:44-05:00", 167 "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", 168 "files_changed": 1 169 }, 170 { 171 "hash": "093b47d63a6324c2e4bc231d45c5d9d6792383ed", 172 "short_hash": "093b47d", 173 "author": "Ariel M. Lighty", 174 "date": "2025-12-23T15:58:35-05:00", 175 "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", 176 "files_changed": 5 177 } 178]