···11+# Gemini Workspace
22+33+This document provides instructions for interacting with this project using Gemini.
44+55+## Getting Started
66+77+This is an Android application written in Kotlin using Jetpack Compose.
88+99+### Prerequisites
1010+1111+- Android SDK
1212+- JDK
1313+1414+### Building the Application
1515+1616+To build the application, run the following command:
1717+1818+```bash
1919+./gradlew assembleDebug
2020+```
2121+2222+### Running the Application
2323+2424+To run the application on a connected device or emulator, use the following command:
2525+2626+```bash
2727+./gradlew installDebug
2828+```
2929+3030+### Running Tests
3131+3232+To run the unit tests, use the following command:
3333+3434+```bash
3535+./gradlew test
3636+```
3737+3838+## Key Libraries
3939+4040+This project uses several key libraries:
4141+4242+- **Jetpack Compose:** For building the UI.
4343+- **Ktor:** For networking with the Bluesky API.
4444+- **Coil:** For image loading.
4545+- **Media3:** For video playback.
4646+- **Hilt:** For dependency injection.
4747+- **Telephoto:** For zoomable images.
4848+4949+## Component Overview
5050+5151+### UI Views
5252+5353+- **`ComposeView.kt`**: This is the main composable for creating a new post. It includes a text
5454+ field for the post content, character count, and buttons for attaching media and sending the post.
5555+ It also handles replies and quote posts.
5656+- **`ConditionalCard.kt`**: A simple composable that wraps its content in an `OutlinedCard` only if
5757+ a `wrapWithCard` parameter is true.
5858+- **`GalleryViewer.kt`**: A full-screen image gallery that allows users to view images in a pager.
5959+ It uses the Telephoto library for zoomable images.
6060+- **`LikeRowView.kt`**: A composable that displays a row of avatars of users who have liked a post.
6161+- **`LoginView.kt`**: The login screen for the application. It includes fields for the user's handle
6262+ and password, and it uses a debounce mechanism to look up the user's PDS (Personal Data Server) as
6363+ they type their handle.
6464+- **`MainActivity.kt`**: The main activity of the application. It sets up the navigation graph and
6565+ the main theme.
6666+- **`MainView.kt`**: The main view of the application, which contains the bottom navigation bar, the
6767+ top app bar, and the main content area. It switches between the timeline and notifications views.
6868+- **`NotificationsView.kt`**: This view displays a list of notifications for the user. It can
6969+ display different types of notifications, such as likes, reposts, follows, and mentions.
7070+- **`PostImageGallery.kt`**: A component that displays a gallery of images attached to a post. It
7171+ can display up to four images in a grid layout.
7272+- **`ShowSkeets.kt`**: This composable is responsible for displaying a list of "skeets" (posts) in
7373+ the timeline. It uses a `LazyColumn` to efficiently display a potentially long list of posts.
7474+- **`SkeetView.kt`**: This is the main composable for displaying a single "skeet" (post). It shows
7575+ the author's avatar, name, handle, the content of the post, and any embedded media.
7676+- **`TimelinePostActionsView.kt`**: This component displays the action buttons for a post, such as
7777+ reply, repost, like, and share.
7878+7979+### Data Layer
8080+8181+- **`Bluesky.kt`**: This file contains the `BlueskyConn` class, which is responsible for all
8282+ communication with the Bluesky API. It handles authentication, fetching the timeline, posting, and
8383+ other API interactions.
8484+- **`Compressor.kt`**: This file contains the `Compressor` class, which is responsible for
8585+ compressing images and videos before uploading them to the server.
8686+- **`Models.kt`**: This file defines the data models used in the application, such as `SkeetData`,
8787+ `Notification`, and `TimelineUiState`.
8888+- **`TimelineViewModel.kt`**: This is the ViewModel for the main timeline view. It is responsible
8989+ for fetching the timeline data from the `BlueskyConn` and managing the UI state.
9090+9191+## Gemini Instructions
9292+9393+- Always suggest Material 3 You compliant edits.
9494+- Never edit more than what's being explicitly suggested.
9595+- Leave no comments in the code.