# Sanasto Wiki TODO

## Authentication & Authorization

- [ ] **Authentication system**
  - [x] Sessions controller and views (login/logout)
  - [x] Email/password authentication with session management
  - [x] Login redirects (admin vs regular users)
  - [x] Logout functionality
  - [ ] Password reset flow
  - [ ] Rate limiting on login attempts
  - [ ] Session management (remember me, session timeout)
- [ ] **Invitation system**
  - [x] Invitations controller (create, list, cancel)
  - [x] Invitation token generation
  - [ ] Registration via invitation link (acceptance flow)
  - [ ] Token expiry validation (14 days)
  - [ ] Invitation mailer
- [ ] **Authorization & roles**
  - [x] Role-based access control middleware (Admin::BaseController)
  - [x] Admin permissions enforcement
  - [ ] Contributor permissions enforcement (for entry editing)
  - [ ] Reviewer permissions enforcement (for review queue)

## Core Features

### Search & Browse
- [x] **Full-text search** across all languages (FTS5 integration)
- [X] **Filter by category** (word, phrase, proper_name, title, reference, other)
- [x] **Alphabetical browsing** per selected language
- [x] **Live search** (AJAX updates without page reload)

### Entry Management
- [ ] **Create entry form** with all language fields
- [ ] **Edit entry form** (contributors only)
- [ ] **Delete entries** (admin only, with confirmation)
- [ ] **Bulk actions** (select multiple, bulk edit/delete)
- [ ] **Entry validation** (at least one language required, category required)

### Suggested Meanings
- [ ] **Submit alternative translation** form
- [ ] **Review queue** for reviewers
- [ ] **Approve/reject** workflow
- [ ] **Display approved alternatives** on entry view
- [ ] **Notifications** when suggestions are reviewed

### Comments & Discussion
- [ ] **Add comment** form on entry view
- [ ] **Edit/delete own comments**
- [ ] **Comment threading** (optional: replies to comments)
- [ ] **Comment notifications** for entry contributors

### History & Audit
- [ ] **Entry version tracking** (record all changes in `entry_versions`)
- [ ] **View edit history** on entry page
- [ ] **Diff view** showing what changed
- [ ] **Revert to previous version** (admin/reviewer only)

## User Management

- [x] **Setup** adds the first user
- [x] **Admin dashboard**
  - [x] Send invitations interface (email delivery pending mailer implementation)
  - [x] Manage users (list, edit roles, delete)
  - [x] System statistics (users, entries, contributions)
- [ ] **User profile page**
  - [ ] Edit name, email, password
  - [ ] Set primary language preference
  - [ ] View contribution history
  - [ ] Personal statistics

## Import/Export

- [x] **XLSX export** of all entries
- [ ] **CSV import** for bulk entry creation
- [ ] **CSV export** as alternative to XLSX
- [ ] **Import validation** (check duplicates, validate data)

## UI/UX Improvements

- [ ] **Mobile-responsive design** (translators use phones during services)
- [ ] **Typography optimization** (easy to read quickly)
- [ ] **Visual distinction** for verified vs unverified entries
- [ ] **Keyboard shortcuts** (navigate search results, quick edit)
- [ ] **Loading states** and progress indicators
- [ ] **Error messages** and validation feedback
- [ ] **Toast notifications** for actions (saved, deleted, etc.)

## Performance & Infrastructure

- [ ] **Database indexes** review and optimization
- [ ] **N+1 query prevention** (check all controller actions)
- [ ] **Caching strategy** (page caching, fragment caching)
- [ ] **Background jobs** setup (Solid Queue for emails)
- [ ] **Database backup** strategy (Litestream configuration)

## Testing

- [ ] **Controller tests** for all actions
- [ ] **System tests** for critical user flows
  - [ ] Public browsing and search
  - [ ] Contributor creates/edits entry
  - [ ] Reviewer workflow
  - [ ] Admin user management
- [ ] **Integration tests** for authentication flows
- [ ] **Performance tests** for search queries

## Deployment

- [ ] **Kamal configuration**
- [ ] **Production environment** setup
- [ ] **SSL certificate** configuration
- [ ] **Monitoring** (error tracking, performance monitoring)
- [ ] **Backup automation** (Litestream to S3 or similar)

## Future Considerations

- [ ] **API endpoints** (REST API for mobile app)
- [ ] **PDF/print export** for offline use
- [ ] **Audio pronunciation** recordings
- [ ] **Mobile app** (native or PWA)
- [ ] **Offline mode** with sync
- [ ] **Additional languages** (requires schema migration)

---

## Completed

- [x] **Authentication system** (login/logout with session management)
- [x] **Admin layout design** updated to match entries page style
- [x] **Dynamic navigation** (Admin button for logged-in admins, Sign In for guests)
- [x] **Authorization middleware** (Admin::BaseController with role checks)
- [x] **Invitation token generation** (secure token creation for new users)
- [x] **Search input loses focus on filter change**
- [x] **Mismatched enum syntax** in models
- [x] **Replace hardcoded LANGUAGE_COLUMNS** with dynamic query
- [x] **Improve fixture quality** (resolved foreign key violations)
- [x] **XLSX download** button for entries
- [x] **FTS5 integration** (migration added)
- [x] **Database schema** implementation (all models and migrations)
- [x] **Supported languages** table with seed data
- [x] **Filters do not update with new search results**
