Commit graph

4 commits

Author SHA1 Message Date
Paweł Orzech
beef4c4e1b
fix: prevent "Ghost URL not configured" error after setup
FeedViewModel was created at NavGraph scope, so its init block called
refresh() before credentials existed when starting on the setup screen.
Guard the init refresh with an isConfigured check and explicitly trigger
refresh after setup completes.
2026-03-19 10:27:31 +01:00
Paweł Orzech
7da55c4b35
feat: redesign setup screen with pulsing animated background and API key helper
- Move inputs/button to bottom of screen for easier thumb access
- Add full-screen animated radial pulse background (3 circles with independent animations)
- Add contextual hint linking to Ghost integrations page when URL is entered
- Add pull-to-refresh and connection error handling to feed screen
- Add CLAUDE.md and restore gradle wrapper
2026-03-19 10:11:00 +01:00
Claude
edb1752cd8
test: add comprehensive TDD unit tests for all business logic (116 tests)
Extracted private functions into testable utilities:
- MobiledocBuilder: shared mobiledoc JSON generation (from ComposerViewModel & PostUploadWorker)
- UrlNormalizer: Ghost URL normalization (from ApiClient)

Test suites (all passing):
- GhostJwtGeneratorTest (9): JWT generation, key parsing, hex decoding, claims validation
- GhostAuthInterceptorTest (4): auth header injection, null key handling, request preservation
- ConvertersTest (18): Room type converter round-trips for PostStatus & QueueStatus enums
- FormatRelativeTimeTest (19): relative time formatting (now/minutes/hours/days/dates)
- MobiledocBuilderTest (27): JSON generation, text escaping, link preview cards, edge cases
- UrlNormalizerTest (15): protocol prefixing, trailing slashes, whitespace, ports
- GhostModelsTest (24): data class defaults, GSON serialization, enum values, pagination

Also fixes compilation issues: HorizontalDivider→Divider, PullToRefreshBox→LinearProgressIndicator,
continue-in-inline-lambda, duplicate XML attribute.

https://claude.ai/code/session_01CpMtDAEfMd14A8MQubMppS
2026-03-18 23:24:49 +00:00
Claude
c76174ff5e
feat: implement Ghost CMS microblogging Android app (Swoosh)
Full Kotlin/Jetpack Compose app for personal microblogging against a Ghost instance.

- Setup screen with Ghost URL + Admin API key (EncryptedSharedPreferences)
- Twitter/Mastodon-style feed with pull-to-refresh and infinite scroll
- Composer with image attach, link preview (OpenGraph), publish/draft/schedule
- Post detail view with edit and delete actions
- Ghost Admin API JWT auth (HS256, key splitting, 5-min expiry)
- Offline queue with Room DB and WorkManager for connectivity-aware uploads
- Material 3 theming with dynamic color support
- Settings screen for reconfiguring instance credentials

https://claude.ai/code/session_01CpMtDAEfMd14A8MQubMppS
2026-03-18 22:43:53 +00:00