avinal
d64ffded84
Add Todoist-style task parser
...
Extract tasks from memo markdown content:
- Checkbox syntax: - [ ] / - [x] detection
- Due dates: @today, @tomorrow, @yesterday, YYYY-MM-DD format
- Priorities: p1, p2, p3 as standalone tokens
- Labels: @word (excluding date keywords)
- Lists: #word (first letter must be alpha)
- Stable task IDs via content hash (survives line reordering)
- Content-based line matching for safe toggle/edit operations
- reconstructLine() rebuilds task line after metadata edits
Co-Authored-By: Claude Opus 4.6 (1M context)
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com >
2026-05-19 17:09:20 +05:30
avinal
5759ab3738
Add dependency wiring, token storage, and app entry points
...
- AppDependencies: manual DI container with lazy singletons
- TokenStore: DataStore-backed persistence for server URL, access token,
theme preference, and accent color selection
- DataStoreFactory: multiplatform DataStore creation
- LocalAppDependencies: CompositionLocal for DI access in composables
- App.kt: root composable with theme + Coil ImageLoader (Ktor engine)
- MainActivity: creates AppDependencies, provides via CompositionLocal
- Coil configured with authenticated Ktor HttpClient for private images
Co-Authored-By: Claude Opus 4.6 (1M context)
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com >
2026-05-19 17:08:37 +05:30
avinal
e842355a6b
Add Room database with multiplatform support
...
- MemoEntity with JSON-serialized attachments and reactions columns
- MemoDao: observe all/by-id, upsert, delete operations via Flow
- Entity-domain mappers with JSON serialization for nested data
- DatabaseFactory: expect/actual pattern for platform-specific builders
- Android: Room.databaseBuilder with context
- iOS: Room.databaseBuilder with NSHomeDirectory path
- BundledSQLiteDriver for consistent cross-platform SQLite
- Destructive migration fallback for schema changes
Co-Authored-By: Claude Opus 4.6 (1M context)
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com >
2026-05-19 17:08:18 +05:30
avinal
b65673093a
Add data layer: Memos API client, domain models, repository
...
API client (Ktor):
- Auth via Bearer token HttpSend interceptor
- CRUD endpoints: listMemos, getMemo, createMemo, updateMemo, deleteMemo
- PATCH uses updateMask as query parameter (gRPC-Gateway format)
- Reaction upsert/delete endpoints
- ApiResult sealed class for error handling
Domain models:
- Memo with string IDs (Memos uses short UUIDs, not integers)
- Attachment, Reaction, User, Task, MemoVisibility
- MemoRepository: offline-first with Room cache, 5-min TTL
- AuthRepository: PAT login, token validation
DTOs match actual Memos API JSON (camelCase, no @SerialName needed).
Co-Authored-By: Claude Opus 4.6 (1M context)
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com >
2026-05-19 17:07:50 +05:30
avinal
f685856b9e
Add module build configs and platform expect/actual stubs
...
- composeApp/build.gradle.kts: KMP targets (android + iOS), all dependencies
- androidApp/build.gradle.kts: Android app with compose compiler
- Platform.kt expect/actual for Android and iOS
- Android resources: launcher icons, themes, manifest
Co-Authored-By: Claude Opus 4.6 (1M context)
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com >
2026-05-19 17:06:41 +05:30
avinal
8dd6c10320
Initialize Compose Multiplatform project with AGP 9
...
Set up two-module structure for AGP 9 compatibility:
- composeApp: KMP shared library (com.android.kotlin.multiplatform.library)
- androidApp: Thin Android app shell (com.android.application)
Configure all dependencies in version catalog: CMP 1.11.0, Kotlin 2.3.21,
Ktor 3.4.3, Room 2.8.4, Coil 3.4.0, kotlinx-serialization/datetime/coroutines,
AndroidX Navigation 2.9.2, Lifecycle 2.10.0, DataStore 1.2.1, WorkManager 2.11.1.
Co-Authored-By: Claude Opus 4.6 (1M context)
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com >
2026-05-19 17:01:51 +05:30