ATlast — you'll never need to find your favorites on another platform again. Find your favs in the ATmosphere.
atproto

update decision graph after avatar fix

byarielm.fyi 0e44908b 9bdca934

verified
Changed files
+227 -2
dist
docs
+2 -2
dist/index.html
··· 26 26 content="black-translucent" 27 27 /> 28 28 <title>ATLast: Find Your People in the ATmosphere</title> 29 - <script type="module" crossorigin src="/assets/index-CdDButDP.js"></script> 30 - <link rel="stylesheet" crossorigin href="/assets/index-F6FWqyRt.css"> 29 + <script type="module" crossorigin src="/assets/index-B6s4IGol.js"></script> 30 + <link rel="stylesheet" crossorigin href="/assets/index-Bs5F61QC.css"> 31 31 </head> 32 32 <body> 33 33 <div id="root"></div>
+16
docs/git-history.json
··· 1 1 [ 2 2 { 3 + "hash": "9bdca934948a284e1315961b4430bae0b6617cbe", 4 + "short_hash": "9bdca93", 5 + "author": "Ariel M. Lighty", 6 + "date": "2025-12-24T18:35:00-05:00", 7 + "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.", 8 + "files_changed": 1 9 + }, 10 + { 11 + "hash": "0f47c41f1a383ff99387254e56d31210a133bee7", 12 + "short_hash": "0f47c41", 13 + "author": "Ariel M. Lighty", 14 + "date": "2025-12-24T16:33:31-05:00", 15 + "message": "extract login page components for DRY\n\nCreated reusable components:\n- ValuePropCard: icon + title + description card\n- StepCard: numbered step with color variant\n- HeroSection: logo, title, firefly animation\n- ValuePropsSection: 3 value prop cards\n- HowItWorksSection: 4 step cards", 16 + "files_changed": 5 17 + }, 18 + { 3 19 "hash": "6cd4d622930e2a43531f2df40d930ceb5d2b4dbc", 4 20 "short_hash": "6cd4d62", 5 21 "author": "Ariel M. Lighty",
+209
docs/graph-data.json
··· 1814 1814 "created_at": "2025-12-24T01:07:44.847703900-05:00", 1815 1815 "updated_at": "2025-12-24T16:16:11.630543-05:00", 1816 1816 "metadata_json": "{\"branch\":\"master\",\"commit\":\"6cd4d62\",\"confidence\":95}" 1817 + }, 1818 + { 1819 + "id": 166, 1820 + "change_id": "19750fc5-2408-41a7-bc14-453458d4c32f", 1821 + "node_type": "goal", 1822 + "title": "Refactor Login page: DRY principles, add @ symbol/avatar, ATmosphere explanations, rotating placeholders", 1823 + "description": null, 1824 + "status": "completed", 1825 + "created_at": "2025-12-24T17:31:12.960079400-05:00", 1826 + "updated_at": "2025-12-24T18:22:36.883909400-05:00", 1827 + "metadata_json": "{\"branch\":\"master\",\"confidence\":95,\"prompt\":\"Update the login page to use DRY principles. Is it reasonable for the file to be 389 lines? If not, address that following Typescript+React+Tailwind best practices. Add a visual @ symbol in front of the username in the input field. Replace it with the user profile pic when a handle is selected from the typeahead. Suggest text and UI ways to add information on what \\\"ATmosphere\\\" to a lay audience. Suggest ways we might modify the \\\"username.bsky.social\\\" to be platform-agnostic, e.g., rotating the provider platform btwn options like \\\".blacksky.app\\\", \\\"tngl.sh\\\", \\\".com\\\" - but this shouldn't feel cluttering or overwhelming to users. Stage and commit as you go, separate concerns.\"}" 1828 + }, 1829 + { 1830 + "id": 167, 1831 + "change_id": "9f3909fd-b51d-4a00-8425-e03426bc230f", 1832 + "node_type": "outcome", 1833 + "title": "Login page refactored: 389→258 lines (33% reduction), 5 new components, @ symbol with avatar replacement, rotating placeholders, ATmosphere tooltips", 1834 + "description": null, 1835 + "status": "completed", 1836 + "created_at": "2025-12-24T17:31:24.903737600-05:00", 1837 + "updated_at": "2025-12-24T18:22:39.123902500-05:00", 1838 + "metadata_json": "{\"branch\":\"master\",\"commit\":\"HEAD~5\",\"confidence\":95}" 1839 + }, 1840 + { 1841 + "id": 168, 1842 + "change_id": "3caaaa83-caa9-4695-b043-37e5367ffb4a", 1843 + "node_type": "goal", 1844 + "title": "Fix avatar not displaying when handle selected/entered in login", 1845 + "description": null, 1846 + "status": "completed", 1847 + "created_at": "2025-12-24T18:22:48.900518500-05:00", 1848 + "updated_at": "2025-12-24T18:35:14.800218900-05:00", 1849 + "metadata_json": "{\"branch\":\"master\",\"confidence\":90}" 1850 + }, 1851 + { 1852 + "id": 169, 1853 + "change_id": "5c0cdde6-1079-4390-aab2-7e8ef8bd94b7", 1854 + "node_type": "action", 1855 + "title": "Reading HandleInput component to understand avatar display logic", 1856 + "description": null, 1857 + "status": "pending", 1858 + "created_at": "2025-12-24T18:23:05.987261100-05:00", 1859 + "updated_at": "2025-12-24T18:23:05.987261100-05:00", 1860 + "metadata_json": "{\"branch\":\"master\",\"confidence\":90}" 1861 + }, 1862 + { 1863 + "id": 170, 1864 + "change_id": "9269b746-5275-484c-9314-b436847bf835", 1865 + "node_type": "observation", 1866 + "title": "actor-typeahead stores avatar in private #actors array but doesn't expose it via events or attributes. When user selects a suggestion, it only sets input.value - no avatar data accessible. Need alternative approach to get avatar.", 1867 + "description": null, 1868 + "status": "pending", 1869 + "created_at": "2025-12-24T18:24:33.075823300-05:00", 1870 + "updated_at": "2025-12-24T18:24:33.075823300-05:00", 1871 + "metadata_json": "{\"branch\":\"master\",\"confidence\":95}" 1872 + }, 1873 + { 1874 + "id": 171, 1875 + "change_id": "182aab31-aa57-42bb-8d63-cf15a7e80105", 1876 + "node_type": "decision", 1877 + "title": "Choose approach for avatar display: 1) Fetch avatar via Bluesky API when handle entered, 2) Fork actor-typeahead to emit events, 3) Use MutationObserver to watch dropdown DOM", 1878 + "description": null, 1879 + "status": "pending", 1880 + "created_at": "2025-12-24T18:24:37.875781600-05:00", 1881 + "updated_at": "2025-12-24T18:24:37.875781600-05:00", 1882 + "metadata_json": "{\"branch\":\"master\",\"confidence\":85}" 1883 + }, 1884 + { 1885 + "id": 172, 1886 + "change_id": "a0764baa-c522-495b-ae4c-a51b22b786bc", 1887 + "node_type": "outcome", 1888 + "title": "Chose approach 1: Fetch avatar via Bluesky API. Reasons: Works for both typeahead + manual entry, no need to fork component, simple implementation, validates handle exists.", 1889 + "description": null, 1890 + "status": "pending", 1891 + "created_at": "2025-12-24T18:24:51.231785800-05:00", 1892 + "updated_at": "2025-12-24T18:24:51.231785800-05:00", 1893 + "metadata_json": "{\"branch\":\"master\",\"confidence\":90}" 1894 + }, 1895 + { 1896 + "id": 173, 1897 + "change_id": "328ea1bd-379a-4133-8dc8-300b03943ec8", 1898 + "node_type": "action", 1899 + "title": "Implementing avatar fetch from Bluesky API on handle input change", 1900 + "description": null, 1901 + "status": "pending", 1902 + "created_at": "2025-12-24T18:24:56.020367200-05:00", 1903 + "updated_at": "2025-12-24T18:24:56.020367200-05:00", 1904 + "metadata_json": "{\"branch\":\"master\",\"confidence\":85}" 1905 + }, 1906 + { 1907 + "id": 174, 1908 + "change_id": "d9a4f78c-d1e0-4fa6-bd0b-296eba8064e5", 1909 + "node_type": "outcome", 1910 + "title": "Successfully implemented avatar fetch from Bluesky API. Added debounced fetch (300ms) that calls searchActorsTypeahead API when handle entered. Works for both typeahead selections and manual entry. Avatar displays when valid handle found. Build passes.", 1911 + "description": null, 1912 + "status": "pending", 1913 + "created_at": "2025-12-24T18:27:32.316881600-05:00", 1914 + "updated_at": "2025-12-24T18:27:32.316881600-05:00", 1915 + "metadata_json": "{\"branch\":\"master\",\"confidence\":95}" 1916 + }, 1917 + { 1918 + "id": 175, 1919 + "change_id": "dde6eb8d-4d35-414e-9d2e-8a577c4338df", 1920 + "node_type": "action", 1921 + "title": "Committed avatar fix to git", 1922 + "description": null, 1923 + "status": "pending", 1924 + "created_at": "2025-12-24T18:35:10.368162900-05:00", 1925 + "updated_at": "2025-12-24T18:35:10.368162900-05:00", 1926 + "metadata_json": "{\"branch\":\"master\",\"commit\":\"9bdca93\",\"confidence\":100}" 1817 1927 } 1818 1928 ], 1819 1929 "edges": [ ··· 3598 3708 "weight": 1.0, 3599 3709 "rationale": "Commit action", 3600 3710 "created_at": "2025-12-24T01:07:46.216122700-05:00" 3711 + }, 3712 + { 3713 + "id": 163, 3714 + "from_node_id": 166, 3715 + "to_node_id": 167, 3716 + "from_change_id": "19750fc5-2408-41a7-bc14-453458d4c32f", 3717 + "to_change_id": "9f3909fd-b51d-4a00-8425-e03426bc230f", 3718 + "edge_type": "leads_to", 3719 + "weight": 1.0, 3720 + "rationale": "Refactoring complete", 3721 + "created_at": "2025-12-24T17:31:25.070485100-05:00" 3722 + }, 3723 + { 3724 + "id": 164, 3725 + "from_node_id": 166, 3726 + "to_node_id": 168, 3727 + "from_change_id": "19750fc5-2408-41a7-bc14-453458d4c32f", 3728 + "to_change_id": "3caaaa83-caa9-4695-b043-37e5367ffb4a", 3729 + "edge_type": "leads_to", 3730 + "weight": 1.0, 3731 + "rationale": "Follow-up bug discovered during testing", 3732 + "created_at": "2025-12-24T18:22:51.047366300-05:00" 3733 + }, 3734 + { 3735 + "id": 165, 3736 + "from_node_id": 168, 3737 + "to_node_id": 169, 3738 + "from_change_id": "3caaaa83-caa9-4695-b043-37e5367ffb4a", 3739 + "to_change_id": "5c0cdde6-1079-4390-aab2-7e8ef8bd94b7", 3740 + "edge_type": "leads_to", 3741 + "weight": 1.0, 3742 + "rationale": "Investigation action", 3743 + "created_at": "2025-12-24T18:23:19.896584600-05:00" 3744 + }, 3745 + { 3746 + "id": 166, 3747 + "from_node_id": 169, 3748 + "to_node_id": 170, 3749 + "from_change_id": "5c0cdde6-1079-4390-aab2-7e8ef8bd94b7", 3750 + "to_change_id": "9269b746-5275-484c-9314-b436847bf835", 3751 + "edge_type": "leads_to", 3752 + "weight": 1.0, 3753 + "rationale": "Finding from code analysis", 3754 + "created_at": "2025-12-24T18:24:35.392542800-05:00" 3755 + }, 3756 + { 3757 + "id": 167, 3758 + "from_node_id": 170, 3759 + "to_node_id": 171, 3760 + "from_change_id": "9269b746-5275-484c-9314-b436847bf835", 3761 + "to_change_id": "182aab31-aa57-42bb-8d63-cf15a7e80105", 3762 + "edge_type": "leads_to", 3763 + "weight": 1.0, 3764 + "rationale": "Decision based on finding", 3765 + "created_at": "2025-12-24T18:24:40.260592400-05:00" 3766 + }, 3767 + { 3768 + "id": 168, 3769 + "from_node_id": 171, 3770 + "to_node_id": 172, 3771 + "from_change_id": "182aab31-aa57-42bb-8d63-cf15a7e80105", 3772 + "to_change_id": "a0764baa-c522-495b-ae4c-a51b22b786bc", 3773 + "edge_type": "leads_to", 3774 + "weight": 1.0, 3775 + "rationale": "Decision made", 3776 + "created_at": "2025-12-24T18:24:53.563493800-05:00" 3777 + }, 3778 + { 3779 + "id": 169, 3780 + "from_node_id": 172, 3781 + "to_node_id": 173, 3782 + "from_change_id": "a0764baa-c522-495b-ae4c-a51b22b786bc", 3783 + "to_change_id": "328ea1bd-379a-4133-8dc8-300b03943ec8", 3784 + "edge_type": "leads_to", 3785 + "weight": 1.0, 3786 + "rationale": "Implementation based on decision", 3787 + "created_at": "2025-12-24T18:24:58.977763900-05:00" 3788 + }, 3789 + { 3790 + "id": 170, 3791 + "from_node_id": 173, 3792 + "to_node_id": 174, 3793 + "from_change_id": "328ea1bd-379a-4133-8dc8-300b03943ec8", 3794 + "to_change_id": "d9a4f78c-d1e0-4fa6-bd0b-296eba8064e5", 3795 + "edge_type": "leads_to", 3796 + "weight": 1.0, 3797 + "rationale": "Implementation complete", 3798 + "created_at": "2025-12-24T18:27:34.433837500-05:00" 3799 + }, 3800 + { 3801 + "id": 171, 3802 + "from_node_id": 174, 3803 + "to_node_id": 175, 3804 + "from_change_id": "d9a4f78c-d1e0-4fa6-bd0b-296eba8064e5", 3805 + "to_change_id": "dde6eb8d-4d35-414e-9d2e-8a577c4338df", 3806 + "edge_type": "leads_to", 3807 + "weight": 1.0, 3808 + "rationale": "Committed to repository", 3809 + "created_at": "2025-12-24T18:35:12.609336500-05:00" 3601 3810 } 3602 3811 ] 3603 3812 }