···6767- Added url resolution for in-app links (profiles, posts, hashtags) with dedicated hashtag
6868 screen (matches bsky.app implementation with Top/Latest sorting)
6969- Jump to hashtag action from the hashtag screen with related hashtags & search
7070+7171+#### 2026-04-29
7272+7373+- Configurable autocomplete/typeahead for login & profile/actor search
+1-50
docs/tasks/typeahead.md
···11# Typeahead Milestones
2233-## M0 - Data Layer
44-55-- [x] Create `lib/features/typeahead/data/typeahead_result.dart` - `TypeaheadResult` model (`did`, `handle`, `displayName`, `avatarUrl`, `labels`)
66-- [x] Create `lib/features/typeahead/data/typeahead_repository.dart`
77-- [x] Unit tests for `TypeaheadRepository`
88-99-## M1 - Settings Integration
1010-1111-- [x] Add `typeahead_provider` column to settings table (Drift migration)
1212-- [x] Add `typeaheadProvider` to `SettingsState`
1313-- [x] Add `setTypeaheadProvider(String)` to `SettingsCubit`
1414-- [x] Settings UI: add "Typeahead Provider" option under a "Search" section
1515-- [x] Unit test: `SettingsCubit` persists and restores typeahead provider
1616-- [x] Widget test: settings screen shows typeahead provider selector
1717-1818-## M2 - TypeaheadCubit
1919-2020-- [x] Create `lib/features/typeahead/cubit/typeahead_cubit.dart`
2121-- [x] Create `lib/features/typeahead/cubit/typeahead_state.dart`
2222-- [x] Unit tests: debounce fires, cancel-on-new-query, empty input handling
2323-2424-## M3 - TypeaheadTextField Widget
2525-2626-- [x] Create `lib/features/typeahead/presentation/typeahead_text_field.dart`
2727-- [x] Widget tests: overlay appears on input, results render, tap selects, tap-outside dismisses
2828-2929-## M4 - Login Integration
3030-3131-- [x] Modify `LoginScreen` to use `TypeaheadTextField` for the handle field
3232-- [x] Preserve existing validation (`validator`, `TextInputAction.next`)
3333-- [x] Preserve debug app-password form (unaffected)
3434-- [x] Widget test: login typeahead shows community results, selecting triggers login flow
3535-- [x] Integration test: type handle → see suggestions → tap → OAuth initiates
3636-3737-## M5 - Search Integration
3838-3939-- [x] Inject `TypeaheadRepository` into `SearchBloc` (replace direct `SearchRepository.searchActorsTypeahead` usage)
4040-- [x] Update `SearchBloc._onTypeaheadRequested` to call `TypeaheadRepository.search`
4141-- [x] Map `TypeaheadResult` back to `ProfileViewBasic` for `state.typeaheadActors` compatibility (or migrate state to `TypeaheadResult`)
4242-- [x] Update jump-to-profile dialog to use `TypeaheadCubit` + `TypeaheadTextField`
4343-- [x] Update list member add screen to use `TypeaheadRepository`
4444-- [x] Update starter pack member search to use `TypeaheadRepository`
4545-- [x] Unit tests: `SearchBloc` typeahead delegates to `TypeaheadRepository`
4646-- [x] Widget tests: search typeahead renders results from configured provider
4747-4848-## M5.1 - Runtime Provider Propagation
4949-5050-- [x] Ensure `TypeaheadRepository` resolves provider dynamically so existing consumers pick up `SettingsCubit.typeaheadProvider` changes without app/session rebuild
5151-- [x] Wire authenticated app-scope `TypeaheadRepository` to `SettingsCubit` via resolver callback
5252-- [x] Unit test: same repository instance switches between community and Bluesky backends when provider changes at runtime
33+Completed [2026-04-29](../../CHANGELOG.md#2026-04-29)