KolektivComputer / KolektivComputer/kalendee

Organizations follow-ups: avatars, admin moderation, directory pagination

Open
#12 0 comments 0 reactions 1 assignee Claimed by @LizAinslie View on GitHub
c/enhancement c/feature t/android t/desktop t/ios t/server t/web
Dominant language
Kotlin
Stars
0
Forks
0
Avg merge
11h 20m
Merged PRs (30d)
23

Description

## Context

Organizations landed with `V16__organizations.sql` and `OrganizationService` (memberships, invitations, roles), and the public directory renders orgs/users/calendars. Remaining follow-ups: org avatar upload/serve with object-storage quota, instance-admin moderation (list/delete orgs), and pagination/sectioning for the public directory as it grows. These are small, independent slices that make orgs usable at instance scale.

## Tasks

- [ ] Org avatar upload/serve: storage key + quota accounting, `OrganizationService` avatar fields wired end to end, `AvatarRoutes`-style serving with cache headers
- [ ] Instance-admin org list: search + detail, member counts, deletion with a clear cascade/transfer story
- [ ] Admin delete revokes pending invitations and cleans up storage keys
- [ ] Public directory: paginate users/orgs/calendars (cursor or page params), keep existing sections and search
- [ ] Keep `/directory` renders cheap (indexes/limits); no N+1 for member counts
- [ ] Tests: avatar quota enforcement, admin delete cascade, directory pagination boundaries
- [ ] Pack updates for avatar display and paged directory (`server/pack/src/pages/kalendee/directory/+page.svelte`)

## References

- `server/src/main/resources/db/migration/V16__organizations.sql`
- `server/src/main/kotlin/dev/kolektiv/kalendee/organizations/OrganizationService.kt` — avatar fields already exist in the model
- `server/src/main/kotlin/dev/kolektiv/kalendee/api/AvatarRoutes.kt` — user avatar pattern to generalize
- `server/src/main/kotlin/dev/kolektiv/kalendee/web/Pages.kt:1212` — `DirectoryOrgSummary` / `PublicDirectoryPage`
- `server/pack/src/pages/kalendee/admin/+page.svelte`, `directory/+page.svelte`, `orgSettings/+page.svelte`
- `GOALS.md` — media storage (S3-compatible, proxied through the server)

## Dependencies

- None on OAuth/LDAP; can land independently.
- Avatar storage should follow the existing abstraction in `server/src/main/kotlin/dev/kolektiv/kalendee/storage/`.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.