- Add health_check method to Submissions::UploadToPaperless (GET /api/ with 3s timeout)
- Add Rails initializer that logs connection status at boot
- Add INFO logging to UploadToPaperlessJob (start, success with doc count/task IDs)
- Add paperless-ngx status section to Settings → Notifications page
(live connection check with 60s cache, DaisyUI badges: Connected/Unreachable/Not Configured)
- Add specs for health_check method (5 scenarios) and system specs (3 scenarios)
Upstream changes:
- Template revision history (save/view/revert template versions)
- HMAC webhook signature validation
- i18n fixes and updates
- Gem updates (hexapdf, nokogiri, net-imap)
- PDF rotation via pdfium
- Allow permanent delete of submissions in archived templates
- Retry webhooks in test mode
- Various bug fixes and style adjustments
Fork features preserved:
- Teams & Editor Role
- Email reminders
- Company logo / white-label
- Custom email templates
- Template creation API
- Navigation customization
* feat: add customizable reminder email templates
- Add SubmitterMailer#reminder_email with separate subject/body resolution
- Support per-template and per-account reminder email customization
- Add GUI forms for reminder email templates (account + template level)
- Add i18n keys for reminder emails and reminder visibility UI
- Update SendSubmitterReminderEmailJob to use reminder_email instead of invitation_email
- Add race condition guard (1-minute dedup) in send job
* fix: prevent reminder job duplication on container restart
- Add deduplication in scheduled_jobs.rb initializer (clear existing before scheduling)
- Add reschedule! method in ProcessSubmitterRemindersJob that clears stale copies
- Prevents exponential job accumulation across container restarts
* feat: add reminder visibility and queue management
- Add SubmitterReminders module (lib/) for next-reminder-at calculation
- Show next reminder time per submitter on submission page (with timezone tooltip)
- Add pending reminders queue table on notifications settings page
- Add Skip button to advance past current pending reminder (Turbo Stream)
- Add skip_reminder_email event type to SubmissionEvent
- Update ProcessSubmitterRemindersJob to count skip events in reminder_count
- Add SubmitterRemindersController with destroy action for skip
* docs: document reminder email templates feature in README
---------
Co-authored-by: Sebastian Noe <sebastian.schneider@boxine.de>
* feat(teams): add Team model and migrations
Create teams table with name, account_id, uuid, archived_at.
Add team_id foreign key to users, templates, submissions,
submitters, and template_folders. Backfill migration creates
a Default team per account and assigns all existing records.
* feat(teams): add team associations to models
User belongs_to team (required). Template, Submission, Submitter,
and TemplateFolder belong_to team (optional for backwards compat).
Account has_many teams with default_team helper. Add EDITOR_ROLE
to User::ROLES and editors scope.
* feat(auth): rewrite abilities with role + team scoping
Admin retains full account-wide access. Editor gets team-scoped
access to templates, submissions, submitters, folders, plus
account-wide access to AccountConfig and WebhookUrl.
ProfileController uses authorize!(:update) instead of :manage
so editors can access their own profile page.
* feat(teams): add team CRUD controller and views
Admin-only team management at /settings/teams. Create, edit,
and archive teams. Index view uses eager-loaded user counts
to avoid N+1 queries. Routes added in settings scope.
* feat(teams): add role and team selection to user management
Enable editor role in role select (remove Pro upsell gate).
Add team dropdown to user form visible to admins only.
Validate team_id belongs to current account on create.
* feat(teams): assign team_id on resource creation
Set team_id from current_user.team_id when creating templates,
submissions, submitters, and folders. Setup controller creates
Default team alongside first account for greenfield installs.
* feat(teams): add move-folder-to-team and editor settings access
Admins can move folders between teams via the folder edit modal.
Moving cascades team_id to all templates, submissions, and
submitters in a transaction. Editors can now access
personalization, API, and webhook settings.
* docs: document teams and roles feature in README
---------
Co-authored-by: Sebastian Noe <sebastian.schneider@boxine.de>
- Expose sender.name, sender.first_name, sender.email in all email type variable dropdowns
- Expose submitter.name, submitter.first_name, submitter.email in all email type variable dropdowns
- Add i18n translations for new variables across all 7 locales (EN, ES, IT, FR, PT, DE, NL)
- Fix logo form Save button: change f.submit to f.button to render HTML correctly
- Add POST /api/templates/pdf for creating templates from PDF files
- Supports base64 content and URL file sources
- Supports external_id upsert, folder assignment, explicit field coords
- Supports embedded {{field;type=x;role=y}} text tag extraction
- Add PUT /api/templates/:id/documents for add/replace/remove operations
- Add Api::DecodeDocumentFile utility for shared base64/URL handling
- Add comprehensive API documentation in docs/API.md
- Add routes for new API endpoints