Commit graph

5 commits

Author SHA1 Message Date
Paweł Orzech
0265a1159d
feat: add multi-image gallery with grid layout, picker, and pinch-to-zoom 2026-03-19 10:37:13 +01:00
Paweł Orzech
74f42fd2f1
docs: add open-source project files (README, license, contributing)
Add professional open-source scaffolding:
- README.md with badges, features, architecture, and setup guide
- LICENSE (PolyForm Noncommercial 1.0.0)
- CONTRIBUTING.md with guidelines
- CHANGELOG.md for v1.0.0
- GitHub issue and PR templates
- Updated .gitignore
2026-03-19 10:17:46 +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