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

move tooltip from hero to login form as superscript

- Removed tooltip from HeroSection (ATmosphere now plain text)
- Added superscript info icon next to 'ATmosphere' in login form text
- Tooltip content left-aligned for better readability
- Maintains platform-agnostic design

byarielm.fyi 6a2bfa02 0e44908b

verified
Changed files
+164 -21
docs
src
components
pages
+13 -5
docs/git-history.json
··· 1 [ 2 { 3 "hash": "9bdca934948a284e1315961b4430bae0b6617cbe", 4 "short_hash": "9bdca93", 5 "author": "Ariel M. Lighty", ··· 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 { 19 "hash": "6cd4d622930e2a43531f2df40d930ceb5d2b4dbc",
··· 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", ··· 16 "files_changed": 1 17 }, 18 { 19 + "hash": "6f618f32c42d1e2cfa13c480b2d396c82496eb6c", 20 + "short_hash": "6f618f3", 21 "author": "Ariel M. Lighty", 22 + "date": "2025-12-24T16:38:37-05:00", 23 + "message": "add @ symbol and profile pic to login input\n\nCreated HandleInput component:\n- Shows @ symbol by default\n- Replaces @ with profile pic when handle selected from typeahead\n- Extracts avatar from typeahead data-avatar or actor-select event\n- Clears avatar when input is cleared", 24 + "files_changed": 2 25 }, 26 { 27 "hash": "6cd4d622930e2a43531f2df40d930ceb5d2b4dbc",
+121
docs/graph-data.json
··· 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}" 1927 } 1928 ], 1929 "edges": [ ··· 3807 "weight": 1.0, 3808 "rationale": "Committed to repository", 3809 "created_at": "2025-12-24T18:35:12.609336500-05:00" 3810 } 3811 ] 3812 }
··· 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}" 1927 + }, 1928 + { 1929 + "id": 176, 1930 + "change_id": "85d33a42-5cbc-44b8-8e97-afd3edb1eeda", 1931 + "node_type": "goal", 1932 + "title": "Refactor ATmosphere tooltip: make HeroSection clickable instead of hover, add tooltip to login input, left-align text", 1933 + "description": null, 1934 + "status": "completed", 1935 + "created_at": "2025-12-24T18:50:43.883772100-05:00", 1936 + "updated_at": "2025-12-24T19:39:08.057232200-05:00", 1937 + "metadata_json": "{\"branch\":\"master\",\"confidence\":90}" 1938 + }, 1939 + { 1940 + "id": 177, 1941 + "change_id": "dbe4421e-0496-4e3d-8548-e1c9156ce023", 1942 + "node_type": "action", 1943 + "title": "Reading HeroSection to understand current tooltip implementation", 1944 + "description": null, 1945 + "status": "pending", 1946 + "created_at": "2025-12-24T18:50:46.648351400-05:00", 1947 + "updated_at": "2025-12-24T18:50:46.648351400-05:00", 1948 + "metadata_json": "{\"branch\":\"master\",\"confidence\":90}" 1949 + }, 1950 + { 1951 + "id": 178, 1952 + "change_id": "96b417f2-4236-48bb-8ad3-3104f9f9c3b7", 1953 + "node_type": "action", 1954 + "title": "Implementing clickable tooltip for HeroSection and adding tooltip to HandleInput", 1955 + "description": null, 1956 + "status": "pending", 1957 + "created_at": "2025-12-24T18:51:19.077525300-05:00", 1958 + "updated_at": "2025-12-24T18:51:19.077525300-05:00", 1959 + "metadata_json": "{\"branch\":\"master\",\"confidence\":85}" 1960 + }, 1961 + { 1962 + "id": 179, 1963 + "change_id": "21ac5b6e-575e-46fb-8695-1a7b44fd0f68", 1964 + "node_type": "outcome", 1965 + "title": "Successfully refactored tooltips: HeroSection ATmosphere tooltip now clickable (trigger='click') with click-outside-to-close, added 'Your Bluesky Handle' label with left-aligned tooltip on login form, enhanced Tooltip component with trigger and align props. Build passes.", 1966 + "description": null, 1967 + "status": "pending", 1968 + "created_at": "2025-12-24T18:54:08.099877300-05:00", 1969 + "updated_at": "2025-12-24T18:54:08.099877300-05:00", 1970 + "metadata_json": "{\"branch\":\"master\",\"confidence\":95}" 1971 + }, 1972 + { 1973 + "id": 180, 1974 + "change_id": "28e2400d-a153-4c27-a75b-e6b249355649", 1975 + "node_type": "outcome", 1976 + "title": "Successfully moved tooltip from HeroSection to Login form. Removed tooltip from HeroSection 'ATmosphere' text. Added superscript info icon next to 'ATmosphere' in login form with left-aligned tooltip content. Platform-agnostic design maintained.", 1977 + "description": null, 1978 + "status": "pending", 1979 + "created_at": "2025-12-24T19:06:33.954975-05:00", 1980 + "updated_at": "2025-12-24T19:06:33.954975-05:00", 1981 + "metadata_json": "{\"branch\":\"master\",\"confidence\":95}" 1982 + }, 1983 + { 1984 + "id": 181, 1985 + "change_id": "acba6854-0d74-4547-91ba-391149cc5e57", 1986 + "node_type": "action", 1987 + "title": "Committed tooltip refactor to git", 1988 + "description": null, 1989 + "status": "pending", 1990 + "created_at": "2025-12-24T19:39:04.481280600-05:00", 1991 + "updated_at": "2025-12-24T19:39:04.481280600-05:00", 1992 + "metadata_json": "{\"branch\":\"master\",\"commit\":\"f79a669\",\"confidence\":100}" 1993 } 1994 ], 1995 "edges": [ ··· 3873 "weight": 1.0, 3874 "rationale": "Committed to repository", 3875 "created_at": "2025-12-24T18:35:12.609336500-05:00" 3876 + }, 3877 + { 3878 + "id": 172, 3879 + "from_node_id": 176, 3880 + "to_node_id": 177, 3881 + "from_change_id": "85d33a42-5cbc-44b8-8e97-afd3edb1eeda", 3882 + "to_change_id": "dbe4421e-0496-4e3d-8548-e1c9156ce023", 3883 + "edge_type": "leads_to", 3884 + "weight": 1.0, 3885 + "rationale": "Investigation action", 3886 + "created_at": "2025-12-24T18:50:49.358413200-05:00" 3887 + }, 3888 + { 3889 + "id": 173, 3890 + "from_node_id": 177, 3891 + "to_node_id": 178, 3892 + "from_change_id": "dbe4421e-0496-4e3d-8548-e1c9156ce023", 3893 + "to_change_id": "96b417f2-4236-48bb-8ad3-3104f9f9c3b7", 3894 + "edge_type": "leads_to", 3895 + "weight": 1.0, 3896 + "rationale": "Implementation based on analysis", 3897 + "created_at": "2025-12-24T18:51:21.616689800-05:00" 3898 + }, 3899 + { 3900 + "id": 174, 3901 + "from_node_id": 178, 3902 + "to_node_id": 179, 3903 + "from_change_id": "96b417f2-4236-48bb-8ad3-3104f9f9c3b7", 3904 + "to_change_id": "21ac5b6e-575e-46fb-8695-1a7b44fd0f68", 3905 + "edge_type": "leads_to", 3906 + "weight": 1.0, 3907 + "rationale": "Implementation complete", 3908 + "created_at": "2025-12-24T18:54:10.755729900-05:00" 3909 + }, 3910 + { 3911 + "id": 175, 3912 + "from_node_id": 178, 3913 + "to_node_id": 180, 3914 + "from_change_id": "96b417f2-4236-48bb-8ad3-3104f9f9c3b7", 3915 + "to_change_id": "28e2400d-a153-4c27-a75b-e6b249355649", 3916 + "edge_type": "leads_to", 3917 + "weight": 1.0, 3918 + "rationale": "Implementation complete", 3919 + "created_at": "2025-12-24T19:06:36.936132900-05:00" 3920 + }, 3921 + { 3922 + "id": 176, 3923 + "from_node_id": 180, 3924 + "to_node_id": 181, 3925 + "from_change_id": "28e2400d-a153-4c27-a75b-e6b249355649", 3926 + "to_change_id": "acba6854-0d74-4547-91ba-391149cc5e57", 3927 + "edge_type": "leads_to", 3928 + "weight": 1.0, 3929 + "rationale": "Committed to repository", 3930 + "created_at": "2025-12-24T19:39:06.240788400-05:00" 3931 } 3932 ] 3933 }
+5 -14
src/components/login/HeroSection.tsx
··· 1 import FireflyLogo from "../../assets/at-firefly-logo.svg?react"; 2 - import Tooltip from "../common/Tooltip"; 3 4 interface HeroSectionProps { 5 reducedMotion?: boolean; 6 } 7 8 - export default function HeroSection({ reducedMotion = false }: HeroSectionProps) { 9 return ( 10 <div className="text-center md:text-left"> 11 <div className="justify-center md:justify-start mb-4"> ··· 17 <h1 className="text-5xl md:text-6xl font-bold bg-gradient-to-r from-purple-600 via-cyan-500 to-pink-500 dark:from-cyan-300 dark:via-purple-300 dark:to-pink-300 bg-clip-text text-transparent mb-3 md:mb-4"> 18 ATlast 19 </h1> 20 - <p className="text-xl md:text-2xl lg:text-2xl text-purple-900 dark:text-cyan-100 mb-2 font-medium inline-flex items-center gap-2 justify-center md:justify-start w-full"> 21 - <span>Find Your Light in the ATmosphere</span> 22 - <Tooltip 23 - content={ 24 - <div> 25 - <p className="font-semibold mb-1">What's the ATmosphere?</p> 26 - <p className="text-xs leading-relaxed"> 27 - The <strong>ATmosphere</strong> is an open network of social apps that use one login, including Bluesky, Blacksky, Tangled, Flashes, Leaflet, and more. Once you login, you can explore the social apps that let you follow different people! 28 - </p> 29 - </div> 30 - } 31 - /> 32 </p> 33 <p className="text-purple-750 dark:text-cyan-250 mb-2"> 34 Reconnect with your internet, one firefly at a time
··· 1 import FireflyLogo from "../../assets/at-firefly-logo.svg?react"; 2 3 interface HeroSectionProps { 4 reducedMotion?: boolean; 5 } 6 7 + export default function HeroSection({ 8 + reducedMotion = false, 9 + }: HeroSectionProps) { 10 return ( 11 <div className="text-center md:text-left"> 12 <div className="justify-center md:justify-start mb-4"> ··· 18 <h1 className="text-5xl md:text-6xl font-bold bg-gradient-to-r from-purple-600 via-cyan-500 to-pink-500 dark:from-cyan-300 dark:via-purple-300 dark:to-pink-300 bg-clip-text text-transparent mb-3 md:mb-4"> 19 ATlast 20 </h1> 21 + <p className="text-xl md:text-2xl lg:text-2xl text-purple-900 dark:text-cyan-100 mb-2 font-medium"> 22 + Find Your Light in the ATmosphere 23 </p> 24 <p className="text-purple-750 dark:text-cyan-250 mb-2"> 25 Reconnect with your internet, one firefly at a time
+25 -2
src/pages/Login.tsx
··· 8 import ValuePropsSection from "../components/login/ValuePropsSection"; 9 import HowItWorksSection from "../components/login/HowItWorksSection"; 10 import HandleInput from "../components/login/HandleInput"; 11 12 interface LoginPageProps { 13 onSubmit: (handle: string) => void; ··· 48 try { 49 const url = new URL( 50 "xrpc/app.bsky.actor.searchActorsTypeahead", 51 - "https://public.api.bsky.app" 52 ); 53 url.searchParams.set("q", handle); 54 url.searchParams.set("limit", "1"); ··· 168 Light Up Your Network 169 </h2> 170 <p className="text-purple-750 dark:text-cyan-250 text-center mb-6"> 171 - Reconnect in the ATmosphere as: 172 </p> 173 174 <form ··· 177 method="post" 178 > 179 <div> 180 <actor-typeahead rows={5}> 181 <HandleInput 182 ref={inputRef}
··· 8 import ValuePropsSection from "../components/login/ValuePropsSection"; 9 import HowItWorksSection from "../components/login/HowItWorksSection"; 10 import HandleInput from "../components/login/HandleInput"; 11 + import Tooltip from "../components/common/Tooltip"; 12 13 interface LoginPageProps { 14 onSubmit: (handle: string) => void; ··· 49 try { 50 const url = new URL( 51 "xrpc/app.bsky.actor.searchActorsTypeahead", 52 + "https://public.api.bsky.app", 53 ); 54 url.searchParams.set("q", handle); 55 url.searchParams.set("limit", "1"); ··· 169 Light Up Your Network 170 </h2> 171 <p className="text-purple-750 dark:text-cyan-250 text-center mb-6"> 172 + Reconnect in the ATmosphere 173 + <sup className="ml-0.5"> 174 + <Tooltip 175 + content={ 176 + <div className="text-left"> 177 + <p className="font-semibold mb-1"> 178 + What's the ATmosphere? 179 + </p> 180 + <p className="text-xs leading-relaxed"> 181 + The <strong>ATmosphere</strong> is a shared home for 182 + social apps using one login. Your follows stay with 183 + you, even if you change apps. 184 + </p> 185 + </div> 186 + } 187 + /> 188 + </sup>{" "} 189 </p> 190 191 <form ··· 194 method="post" 195 > 196 <div> 197 + <label 198 + htmlFor="atproto-handle" 199 + className="block text-sm font-semibold text-purple-900 dark:text-cyan-100 mb-2" 200 + > 201 + Your ATmosphere Handle 202 + </label> 203 <actor-typeahead rows={5}> 204 <HandleInput 205 ref={inputRef}