Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
76885f0
Add categories support to tasks and events, update schema to version 5
albert-gee Jun 11, 2026
08899e2
Simplify date-only check in ScheduleRepository and add date range val…
albert-gee Jun 11, 2026
6a07332
Refactor event editor to streamline date and time handling, enforce r…
albert-gee Jun 11, 2026
3c4ed86
Allow midnight as a valid task time and ensure midnight tasks remain …
albert-gee Jun 11, 2026
8a6a016
Add desktop_multi_window and window_manager dependencies to pubspec
albert-gee Jun 11, 2026
d61e22d
Register desktop_multi_window plugin and update plugin registration l…
albert-gee Jun 11, 2026
ac8e8e2
Implement compact agenda window service and enhance main window comma…
albert-gee Jun 11, 2026
3d7bb69
Integrate compact agenda window service and update tray agenda handling
albert-gee Jun 11, 2026
25703d1
Add compact agenda formatting functions for date and time display
albert-gee Jun 11, 2026
361f7e9
Add compact agenda controller and data provider for task management
albert-gee Jun 11, 2026
81c0633
Add unit tests for BusyMaxWindowArgs parsing logic
albert-gee Jun 11, 2026
3759ba4
Add compact agenda localization strings for multiple languages
albert-gee Jun 11, 2026
7778e82
Add compact agenda application and panel implementation
albert-gee Jun 11, 2026
12ea638
Add support for compact agenda window in main application
albert-gee Jun 11, 2026
1e0c138
Add unit tests for compact agenda functionality and panel behavior
albert-gee Jun 11, 2026
1919b0d
Refactor method calls for improved readability in compact agenda serv…
albert-gee Jun 11, 2026
eba0d4f
Refactor code for improved readability and consistency in compact age…
albert-gee Jun 11, 2026
af275a8
Remove unused GTK font and theme color references from compact agenda…
albert-gee Jun 11, 2026
0532d8b
Update French localization for compact agenda due dates
albert-gee Jun 11, 2026
13126fe
Refactor compact agenda window management and enhance item detail han…
albert-gee Jun 11, 2026
449fb39
Enhance compact agenda layout handling and improve window size manage…
albert-gee Jun 11, 2026
bcde94a
Refactor code for improved formatting and consistency in compact agen…
albert-gee Jun 11, 2026
2d8cc7b
Enhance compact agenda window management with position handling and i…
albert-gee Jun 11, 2026
576fac0
Update compact agenda shadow margins and enhance window shadow effects
albert-gee Jun 11, 2026
1bf5e4b
Enhance compact agenda with scroll shadows and dynamic background han…
albert-gee Jun 11, 2026
ff2b13d
Enhance compact agenda styling with box-shadow and outline adjustments
albert-gee Jun 11, 2026
36b9172
Refactor compact agenda components to use BusyMax grouped action row …
albert-gee Jun 11, 2026
9ca166b
Refactor compact agenda icon rendering for improved simplicity and pe…
albert-gee Jun 11, 2026
0456a92
Add tooltip support to compact agenda items with position tracking
albert-gee Jun 11, 2026
247152d
Add schedule settings for configurable day start and end times in agenda
albert-gee Jun 11, 2026
b6d118d
Refactor compact agenda item icons to use task list icons and improve…
albert-gee Jun 11, 2026
a797ecd
Add support for no-date tasks in compact agenda sections and improve …
albert-gee Jun 11, 2026
a9abf5f
Implement load more functionality in agenda view and enhance navigati…
albert-gee Jun 11, 2026
b541287
Add load more functionality for overdue and no-date tasks in compact …
albert-gee Jun 11, 2026
7760527
Refactor task creation to utilize extended input fields and streamlin…
albert-gee Jun 11, 2026
2b006f9
Add secondary label support for account selection in task editor
albert-gee Jun 11, 2026
79be8bf
Enhance notification scheduling and reminder handling across the appl…
albert-gee Jun 11, 2026
2e2ace6
Refactor notification scheduling to use a dedicated service method an…
albert-gee Jun 11, 2026
671ca35
Add time zone support for event scheduling and enhance reminder logic
albert-gee Jun 11, 2026
9f90f34
Enhance notification detail settings synchronization and update remin…
albert-gee Jun 11, 2026
92f1983
Enhance notification handling by adding support for notification acti…
albert-gee Jun 11, 2026
68b1c64
Add local time zone support for calendar events and enhance date/time…
albert-gee Jun 11, 2026
63a14af
Add task creation functionality to compact agenda panel and refactor …
albert-gee Jun 11, 2026
d25ac30
Add native date picker support and enhance date handling in task dialogs
albert-gee Jun 11, 2026
34e0dd6
Add event management functionality to compact agenda panel
albert-gee Jun 11, 2026
91c2976
Add dialog barrier color support to task and event dialogs in compact…
albert-gee Jun 11, 2026
8eab244
Replace PNG logo with SVG version for improved scalability and quality
albert-gee Jun 11, 2026
5709b7b
Refactor application desktop entry and update CMake configuration for…
albert-gee Jun 11, 2026
b4105f6
Add screenshots
albert-gee Jun 12, 2026
d1b11ad
Add support for multiple account API clients in task repository tests
albert-gee Jun 12, 2026
180391d
Update README.md to enhance project description and add detailed scre…
albert-gee Jun 12, 2026
e46241d
Update README.md to improve screenshot presentation and layout
albert-gee Jun 12, 2026
f10332a
Refactor icon installation paths and update test cases for logo file …
albert-gee Jun 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 70 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,75 @@
# BusyMax

BusyMax is a Linux desktop calendar and task manager built with Flutter.
It supports `Google Calendar`, `Google Tasks`, `Microsoft Calendar`, and `Microsoft To Do`.

It brings calendar events and tasks into a native-feeling Linux desktop interface, with support for `Google Calendar`, `Google Tasks`, `Microsoft Calendar`, and `Microsoft To Do`.

<p align="center">
<img src="docs/screenshots/main_window_month.png" alt="BusyMax month view" width="900">
</p>

<p align="center">
<sub>Month view with calendars, tasks, and event details.</sub>
</p>

## Highlights

- Linux desktop app built with Flutter.
- Calendar views for day, week, month, year, and agenda planning.
- Task creation with lists, due dates, reminders, and repeat options.
- Event editing with calendar selection, time controls, repeat rules, and reminders.
- Compact agenda window for quick access to upcoming work.
- Integrations with Google Calendar, Google Tasks, Microsoft Calendar, and Microsoft To Do.

## Screenshots

<table>
<tr>
<td width="50%">
<img src="docs/screenshots/main_window_week.png" alt="BusyMax week view">
<br>
<sub><b>Week view</b> with color-coded calendars and scheduled tasks.</sub>
</td>
<td width="50%">
<img src="docs/screenshots/main_window_day.png" alt="BusyMax day view">
<br>
<sub><b>Day view</b> for focused daily planning.</sub>
</td>
</tr>
<tr>
<td width="50%">
<img src="docs/screenshots/main_window_agenda.png" alt="BusyMax agenda view">
<br>
<sub><b>Agenda view</b> with upcoming events, tasks, and details.</sub>
</td>
<td width="50%">
<img src="docs/screenshots/main_window_new_task.png" alt="BusyMax new task editor">
<br>
<sub><b>Task creation</b> with lists, due dates, reminders, and repeat options.</sub>
</td>
</tr>
</table>

<details>
<summary>More screenshots</summary>

<br>

<p>
<img src="docs/screenshots/main_window_year.png" alt="BusyMax year view" width="700">
</p>

<p>
<img src="docs/screenshots/main_window_edit_event.png" alt="BusyMax event editor" width="700">
</p>

<p>
<img src="docs/screenshots/agenda_window_agenda.png" alt="BusyMax compact agenda window" width="300">
<img src="docs/screenshots/agenda_window_agenda_event_details.png" alt="BusyMax compact agenda event details" width="300">
<img src="docs/screenshots/agenda_window_edit_event.png" alt="BusyMax compact agenda event editor" width="300">
</p>

</details>

## Prerequisites

Expand All @@ -16,4 +84,4 @@ flutter run -d linux \
--dart-define=GOOGLE_OAUTH_CLIENT_ID=<google-client-id> \
--dart-define=GOOGLE_OAUTH_CLIENT_SECRET=<google-secret-if-needed> \
--dart-define=MICROSOFT_OAUTH_CLIENT_ID=<microsoft-client-id>
```
```
Binary file removed assets/branding/busymax-logo.png
Binary file not shown.
67 changes: 67 additions & 0 deletions assets/branding/busymax-logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/agenda_window_agenda.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/agenda_window_edit_event.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/main_window_agenda.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/main_window_day.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/main_window_edit_event.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/main_window_month.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/main_window_new_task.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/main_window_week.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/main_window_year.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 21 additions & 0 deletions lib/l10n/app_de.arb
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,32 @@
"trayAgendaOpenBusyMax": "App öffnen",
"trayAgendaRefresh": "Aktualisieren",
"trayAgendaError": "Agenda nicht verfügbar",
"compactAgendaTitle": "Agenda",
"compactAgendaSubtitle": "Anstehend",
"compactAgendaOverdue": "Überfällig",
"compactAgendaClear": "Im Moment frei",
"compactAgendaOpenBusyMax": "BusyMax öffnen",
"compactAgendaHide": "Ausblenden",
"compactAgendaNewTask": "Neue Aufgabe",
"compactAgendaRetry": "Erneut versuchen",
"compactAgendaRefresh": "Aktualisieren",
"compactAgendaAllDay": "Ganztägig",
"compactAgendaDueToday": "Heute fällig",
"compactAgendaDueTomorrow": "Morgen fällig",
"compactAgendaDueOn": "Fällig {date}",
"compactAgendaMoreOverdue": "Weitere überfällige Aufgaben laden",
"agendaLoadMoreOverdue": "Weitere überfällige Aufgaben laden",
"agendaLoadMoreNoDate": "Weitere Aufgaben ohne Datum laden",
"viewDay": "Tag",
"viewWeek": "Woche",
"viewMonth": "Monat",
"viewYear": "Jahr",
"viewAgenda": "Agenda",
"scheduleSettings": "Zeitplan",
"scheduleDisplaySettings": "Zeitplananzeige",
"scheduleDisplayHoursDescription": "Tages- und Wochenansicht öffnen innerhalb dieser Zeiten. Frühe und späte Einträge erweitern den Bereich bei Bedarf.",
"scheduleDayStartsAt": "Tag beginnt um",
"scheduleDayEndsAt": "Tag endet um",
"sourceCalendar": "Kalender",
"sourceTaskList": "Aufgabenliste",
"createChoiceTitle": "Erstellen",
Expand Down
22 changes: 22 additions & 0 deletions lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,33 @@
"trayAgendaOpenBusyMax": "Open app",
"trayAgendaRefresh": "Refresh",
"trayAgendaError": "Agenda unavailable",
"compactAgendaTitle": "Agenda",
"compactAgendaSubtitle": "Upcoming",
"compactAgendaOverdue": "Overdue",
"compactAgendaClear": "Clear for now",
"compactAgendaOpenBusyMax": "Open BusyMax",
"compactAgendaHide": "Hide",
"compactAgendaNewTask": "New task",
"compactAgendaRetry": "Retry",
"compactAgendaRefresh": "Refresh",
"compactAgendaAllDay": "All day",
"compactAgendaDueToday": "Due today",
"compactAgendaDueTomorrow": "Due tomorrow",
"compactAgendaDueOn": "Due {date}",
"@compactAgendaDueOn": {"placeholders": {"date": {"type": "String"}}},
"compactAgendaMoreOverdue": "Load more overdue tasks",
"agendaLoadMoreOverdue": "Load more overdue tasks",
"agendaLoadMoreNoDate": "Load more no-date tasks",
"viewDay": "Day",
"viewWeek": "Week",
"viewMonth": "Month",
"viewYear": "Year",
"viewAgenda": "Agenda",
"scheduleSettings": "Schedule",
"scheduleDisplaySettings": "Schedule display",
"scheduleDisplayHoursDescription": "Day and Week views open within these hours. Early and late items expand the range when needed.",
"scheduleDayStartsAt": "Day starts at",
"scheduleDayEndsAt": "Day ends at",
"sourceCalendar": "Calendar",
"sourceTaskList": "Task list",
"createChoiceTitle": "Create",
Expand Down
21 changes: 21 additions & 0 deletions lib/l10n/app_es.arb
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,32 @@
"trayAgendaOpenBusyMax": "Abrir app",
"trayAgendaRefresh": "Actualizar",
"trayAgendaError": "Agenda no disponible",
"compactAgendaTitle": "Agenda",
"compactAgendaSubtitle": "Próximamente",
"compactAgendaOverdue": "Vencidas",
"compactAgendaClear": "Libre por ahora",
"compactAgendaOpenBusyMax": "Abrir BusyMax",
"compactAgendaHide": "Ocultar",
"compactAgendaNewTask": "Nueva tarea",
"compactAgendaRetry": "Reintentar",
"compactAgendaRefresh": "Actualizar",
"compactAgendaAllDay": "Todo el día",
"compactAgendaDueToday": "Vence hoy",
"compactAgendaDueTomorrow": "Vence mañana",
"compactAgendaDueOn": "Vence {date}",
"compactAgendaMoreOverdue": "Cargar más tareas vencidas",
"agendaLoadMoreOverdue": "Cargar más tareas vencidas",
"agendaLoadMoreNoDate": "Cargar más tareas sin fecha",
"viewDay": "Día",
"viewWeek": "Semana",
"viewMonth": "Mes",
"viewYear": "Año",
"viewAgenda": "Agenda",
"scheduleSettings": "Agenda",
"scheduleDisplaySettings": "Visualización de agenda",
"scheduleDisplayHoursDescription": "Las vistas Día y Semana se abren dentro de este horario. Los elementos tempranos y tardíos amplían el intervalo si hace falta.",
"scheduleDayStartsAt": "El día empieza a las",
"scheduleDayEndsAt": "El día termina a las",
"sourceCalendar": "Calendario",
"sourceTaskList": "Lista de tareas",
"createChoiceTitle": "Crear",
Expand Down
21 changes: 21 additions & 0 deletions lib/l10n/app_fr.arb
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,32 @@
"trayAgendaOpenBusyMax": "Ouvrir l’app",
"trayAgendaRefresh": "Actualiser",
"trayAgendaError": "Agenda indisponible",
"compactAgendaTitle": "Agenda",
"compactAgendaSubtitle": "À venir",
"compactAgendaOverdue": "En retard",
"compactAgendaClear": "Libre pour le moment",
"compactAgendaOpenBusyMax": "Ouvrir BusyMax",
"compactAgendaHide": "Masquer",
"compactAgendaNewTask": "Nouvelle tâche",
"compactAgendaRetry": "Réessayer",
"compactAgendaRefresh": "Actualiser",
"compactAgendaAllDay": "Toute la journée",
"compactAgendaDueToday": "Échéance aujourd’hui",
"compactAgendaDueTomorrow": "Échéance demain",
"compactAgendaDueOn": "Échéance {date}",
"compactAgendaMoreOverdue": "Charger plus de tâches en retard",
"agendaLoadMoreOverdue": "Charger plus de tâches en retard",
"agendaLoadMoreNoDate": "Charger plus de tâches sans date",
"viewDay": "Jour",
"viewWeek": "Semaine",
"viewMonth": "Mois",
"viewYear": "Année",
"viewAgenda": "Agenda",
"scheduleSettings": "Planning",
"scheduleDisplaySettings": "Affichage du planning",
"scheduleDisplayHoursDescription": "Les vues Jour et Semaine s’ouvrent dans cette plage horaire. Les éléments tôt ou tardifs l’élargissent si nécessaire.",
"scheduleDayStartsAt": "La journée commence à",
"scheduleDayEndsAt": "La journée se termine à",
"sourceCalendar": "Calendrier",
"sourceTaskList": "Liste de tâches",
"createChoiceTitle": "Créer",
Expand Down
Loading
Loading