Skip to content

Rc/v5.13.0 - #737

Merged
evilguy4000 merged 18 commits into
mainfrom
rc/v5.13.0
Aug 23, 2026
Merged

evilguy4000 merged 18 commits into
mainfrom
rc/v5.13.0

Conversation

@evilguy4000

@evilguy4000 evilguy4000 commented Aug 23, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Brief description of the change and why it's needed.

Type of change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would change existing behavior)
  • Documentation update
  • Refactor (no functional change)

Checklist

  • My code follows the project's style guidelines (Black, flake8).
  • I have added/updated tests for my changes.
  • All tests pass locally (e.g. pytest).
  • I have updated the documentation if needed.
  • For user-facing changes, I have added an entry to the Unreleased section of CHANGELOG.md.

Related issues

Fixes # (issue number, if applicable)


See CONTRIBUTING.md and CHANGELOG.md for guidelines.

Send periodic heartbeats from the idle tick loop so open tabs keep timers
alive without requiring mouse/keyboard activity, and backdate idle auto-stops
to the idle-timeout boundary instead of start_time when no heartbeat exists.

Fixes #736
Reframe licensing as becoming a Supporter rather than removing prompts, add visible badges, more personal donate messaging, and contextual nudges for first invoice, usage milestones, and 30-day anniversaries.
Recurring tasks were broken because create/view templates and edit/delete
routes were missing while the list page linked to them. Add the full template
set, wire up edit and delete handlers, and expose the feature in the sidebar.
The customization route rendered a template that did not exist, causing a
500 on load. Add the admin form for branding, colors, sections, and advanced
portal settings.
These assets are referenced in the app head and social meta tags but were
missing from the static bundle, causing broken icons and share previews.
Mobile users could only reach invoices, clients, reports, and settings from
More. Add module-gated links for tasks, expenses, CRM, and admin users.
Surface today-vs-target progress with color cues, show recent project/task
combos for one-click timer starts, and add weekly billable hours context.
Nudge users when a timer exceeds eight hours and add a daily-target progress
bar to the floating timer so elapsed time has clearer workday context.
Replace silent except-pass handlers in payments, mileage API, expenses,
mentions, and invoicing with proper warning logs and user-visible feedback
when the failure affects something the user should know about.
Show elapsed time with pause/stop controls in the topbar, start timers globally via dashboard modal, and refresh timer state softly after idle detection instead of reloading the page.
Let users log past hours without starting a timer and surface overdue or due tasks with inline completion, using existing API endpoints.
Add status and project filters, active/inactive switches, last-run column, and a run-now endpoint for immediate task generation.
Rename Time Tracking to Projects & Work, dedupe Reports from Finance, and add productivity, calendar, and recurring tasks to mobile navigation.
Replace hardcoded EUR and zero tax with TaxRule and custom-field fallbacks, and honor include_expenses when creating invoices from time entries.
Split multi-class strings before classList.add in the heatmap renderer and use the correct empty_state macro arguments in list templates.
…ity breakdown.

Surface upcoming task/milestone deadlines and overdue invoice totals on the
dashboard, expose notes autocomplete and in-place project switching for active
timers, and add daily-by-project data for the productivity chart API.
Add deadline and invoice alert widgets, relative due-date badges, workflow
execution status, project budget bars, floating timer project switch, stacked
daily project chart, notes autocomplete, and a clearer idle prompt with trim-to-idle.
Syncs setup.py, desktop/package.json, mobile/pubspec.yaml, and
browser-extension manifests to 5.13.0. Adds the corresponding
CHANGELOG entry and README highlights for the release.

getDailyTargetSeconds() {
const raw = this.bar && this.bar.dataset.dailyTargetHours;
const hours = raw ? parseFloat(raw, 10) : 8;
Comment thread app/static/idle.js

function getLongEntryThresholdMs(){
const meta = document.querySelector('meta[name="long-entry-threshold-hours"]');
const hours = meta ? parseFloat(meta.getAttribute('content'), 10) : 8;
Comment thread app/routes/main.py
from flask_login import current_user, login_required
from sqlalchemy import text
from sqlalchemy import or_, text
from sqlalchemy.orm import joinedload
Comment thread app/routes/main.py

from app import csrf, db, limiter, track_event, track_page_view
from app.models import Activity, Client, Project, Settings, TimeEntry, TimeEntryTemplate, User, WeeklyTimeGoal
from app.models import Activity, Client, Invoice, Milestone, Project, Settings, Task, TimeEntry, TimeEntryTemplate, User, WeeklyTimeGoal
Comment thread app/utils/email.py
from app.utils.support_invoice_sent import queue_first_invoice_support_prompt

queue_first_invoice_support_prompt(sender_id, first_send=sent_count == 1)
except Exception:
@evilguy4000
evilguy4000 merged commit 504fab8 into main Aug 23, 2026
15 of 17 checks passed
@github-actions

Copy link
Copy Markdown

❌ CI Test Results

Overall Status: 2 test suite(s) failed

Test Results: 3/9 passed

Test Suites:

  • ✅ Smoke Tests: success
  • ✅ Unit Tests: success
  • ⏸️ Integration Tests: cancelled
  • ✅ Security Tests: success
  • ❌ Code Quality: failure
  • ❌ Frontend Assets: failure
  • ⏭️ E2E, CSP & Accessibility: skipped
  • ⏭️ Docker Build: skipped
  • ⏭️ Full Test Suite: skipped

Commit: 25b6fd0
Workflow: 32654295576

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant