Coding
PromptBeginner5 minmarkdown
Markdown Converter
Agent skill for markdown-converter
21
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Sign in to like and favorite skills
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
./gradlew assembleDebug # Build debug APK ./gradlew installDebug # Install on connected device/emulator ./gradlew test # Run unit tests ./gradlew test --tests "ClassName.methodName" # Run single test ./gradlew connectedAndroidTest # Run instrumented tests
app/src/main/java/com/example/scheduler/ ├── MainActivity.kt # Entry point, hosts root SchedulerViewModel ├── SchedulerApplication.kt # Hilt application class ├── viewmodel/ │ └── SchedulerViewModel.kt # Root state: users, currentUserId, use24HourFormat ├── features/ # Feature modules with screen + ViewModel pairs │ ├── calendar/ # CalendarScreen, CalendarViewModel, views │ ├── availability/ # AvailabilityScreen, AvailabilityViewModel │ ├── schedule/ # ScheduleScreen, ScheduleViewModel, wizard steps │ └── settings/ # SettingsScreen, SettingsViewModel, sections ├── core/ │ ├── navigation/AppNavigation.kt # Bottom nav, screen routing │ └── designsystem/theme/ # Color, Theme, Type ├── shared/components/ # Header, UserAvatar ├── data/ │ ├── models/ # User, Meeting, TimeSlot, Availability, etc. │ ├── networking/ApiService.kt # SchedulerApi interface (Retrofit) │ └── repositories/SchedulerRepository.kt ├── di/ # Hilt modules │ ├── NetworkModule.kt # Provides Retrofit, Moshi, OkHttpClient │ └── DataStoreModule.kt # Provides DataStore<Preferences> └── utils/Utils.kt # Time formatting, slot logic
Each screen has its own
@HiltViewModel that:
SchedulerRepository for API callsStateFlowThe root
SchedulerViewModel provides shared state (users, currentUserId, use24HourFormat) that screens access.
MainActivity └── SchedulerViewModel (root: users, currentUserId, use24HourFormat, isLoading) └── MainScreen ├── CalendarScreen + CalendarViewModel ├── AvailabilityScreen + AvailabilityViewModel ├── ScheduleScreen + ScheduleViewModel └── SettingsScreen + SettingsViewModel
The API URL is configured via BuildConfig in
app/build.gradle.kts:
buildConfigField("String", "API_URL", "\"https://your-api.ngrok.io/\"")
The URL is consumed in
di/NetworkModule.kt. For emulator connecting to host localhost, change to http://10.0.2.2:6969/.
Note:
ApiService.kt contains a legacy ApiClient object with hardcoded URL - this is not used when DI is enabled. Use NetworkModule for configuration.
Time is represented in decimal hours (9.5 = 9:30 AM). Availability uses 30-minute blocks.
data class TimeSlot( val date: String, // ISO date (YYYY-MM-DD) val startHour: Double, // 0-24, supports 0.5 increments val endHour: Double ) data class Meeting( val id: String, val organizerId: String, val participantId: String, val date: String, val startHour: Double, val endHour: Double, val title: String )
All ViewModels use optimistic updates:
DataStore persists
currentUserId and use24HourFormat across app restarts (handled in root SchedulerViewModel).