From 55a83c2a0d3ef684eeb35de43a278ee770b8aa08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20K=C3=BCderli?= Date: Tue, 11 Aug 2026 21:09:33 +0200 Subject: [PATCH] added apple shortcut client --- README.md | 18 ++++++++++++++++-- client/apple_shortcut/Start Learning.shortcut | Bin 0 -> 23880 bytes client/apple_shortcut/Stop Learning.shortcut | Bin 0 -> 24251 bytes client/{ => cli}/.env.example | 0 client/{ => cli}/studywatch-cli.py | 0 5 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 client/apple_shortcut/Start Learning.shortcut create mode 100644 client/apple_shortcut/Stop Learning.shortcut rename client/{ => cli}/.env.example (100%) rename client/{ => cli}/studywatch-cli.py (100%) diff --git a/README.md b/README.md index ab6fd07..a7addd9 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,15 @@ This is a set of scripts. -- **The client** script tracks study sessions and syncs them with a CalDAV calendar. +- **The cli client** script tracks study sessions and syncs them with a CalDAV calendar. +- **The apple shortcut client** allows - **The server** script reads from said CalDAV calendar and serves a nice-looking web UI and API endpoint. ## Usage -### Client +### Clients + +#### cli script A very simple implementation, but a good demonstration of the power of using CalDAV as a DB. @@ -17,6 +20,17 @@ A very simple implementation, but a good demonstration of the power of using Cal 4. The new session will start and display a live timer. To stop it, send `SIGINT` (Ctrl+C). 5. You will be asked if you want to sync the session (y|n). +#### Apple Shortcut +**Requirement:** Toolbox Pro app + +`Start Learning`: Lets you select a subject and saves it, together with a timestamp, to a global (Toolbox Pro) variable. + +`Stop Learning`: Creates a calendar event from the session stored in the global variable. + +All with fancy menus, of course. + + + ### Server The server is written in Python using Flask. It grabs the calendar events via CalDAV and renders a nice-looking UI. diff --git a/client/apple_shortcut/Start Learning.shortcut b/client/apple_shortcut/Start Learning.shortcut new file mode 100644 index 0000000000000000000000000000000000000000..953cf62df10142d4cd68278359c499900ccffa71 GIT binary patch literal 23880 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 N16>DrdzU8vKL8YJm7)Lu literal 0 HcmV?d00001 diff --git a/client/apple_shortcut/Stop Learning.shortcut b/client/apple_shortcut/Stop Learning.shortcut new file mode 100644 index 0000000000000000000000000000000000000000..2b7c52cbad3a3ae58b8e97f8fb9f862365d37e06 GIT binary patch literal 24251 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 M*B8+D+ZXcx1JU((zW@LL literal 0 HcmV?d00001 diff --git a/client/.env.example b/client/cli/.env.example similarity index 100% rename from client/.env.example rename to client/cli/.env.example diff --git a/client/studywatch-cli.py b/client/cli/studywatch-cli.py similarity index 100% rename from client/studywatch-cli.py rename to client/cli/studywatch-cli.py