6.9 KiB
6.9 KiB
Changelog
Notable changes to ParentCalendar. The version is the git tag (vX.Y.Z); publishing a release on Gitea builds the Docker image for it.
The format follows Keep a Changelog, and versions follow Semantic Versioning.
Unreleased
Added
- Paste text instead of a photo, for sources that send emails: New scan → Paste text. The model reads the text itself (the November example email: every event right, in under 20 seconds), and review marks the sentence each event came from in the email, where photo scans show the spot on the photo. Days like "5th" go in the month named before them, and a date with no year goes in the year nearest the scan's month: a November email's "October 30th" is the October before, a December email's "January 4th" the January after. Needs database migration 004, which runs on start. A source's double read doesn't apply to pasted text.
phase0/extract.pyruns golden cases with a"text"file instead of an"image".deploy/nginx.conf, an example nginx site that makes only/feed/public and keeps the rest of the app on the LAN or VPN.deploy/compose-complete.yml, an example Compose file that runs ParentCalendar and Ollama together (NVIDIA GPU, with AMD commented out), with every setting from.env.exampleand its default.
Fixed
- A time, notes or place the model wrote as the word "null" is now empty instead of the text "null".
0.0.7 - 2026-11-09
Added
- Subscription feeds. The Calendar tab has Subscribe and Copy link for each calendar, so each family member's phone keeps itself up to date and gets the alerts (on iPhone, turn off "Remove Alerts" when subscribing). The feed is
/feed/<token>.ics, the only URL that needs no login: the past 12 months and everything ahead, deletions as cancelled for 30 days, with ETag and caching headers. "Make a new one" replaces a link that was shared by mistake. The access log hides the token. - Downloads and feeds carry the calendar's color for Apple Calendar, and each event's DTSTAMP is when it last changed.
- An About section at the bottom of Settings with the name, version and commit (linked to the repository).
0.0.6 - 2026-11-09
Changed
- "Pack lunch" events are 8:00–8:30 AM instead of all day, with alerts 12 hours before and when they start (instead of the calendar's usual alert). Database migration 003 moves existing ones, and the next "New and changed" download updates them on your device.
- Deleting an event takes one tap on Delete, with no second confirm button.
- A multi-day event is listed under each of its days in the Calendar list, not only its first.
- The same all-day event read on consecutive days (No School on Wed, Thu and Fri) becomes one event from the first day to the last.
0.0.5 - 2026-11-06
Added
- A published scan's page lists its events, and you can edit or delete them there like on the Calendar tab. Events with no child picked are on no calendar, so they're marked "Not on any calendar" there, with a note to pick a child.
Changed
- A new source starts with every child ticked, like a new calendar. Before, it started with none, and its events showed on no calendar.
0.0.4 - 2026-11-06
Added
- A published scan's photo can still be viewed from its scan page, under "Scanned photo", until it's deleted after
IMAGE_RETENTION_DAYS. - A log line for every scan with how long it took, the model and what it found.
SHOW_SCAN_STATS=1adds a "Scan Stats" button next to a scan's status that shows the model, tokens used, pages, events and scan time. - Today stands out on the Lunch screen and in the Calendar list: a filled day number like the month view, a "Today" label and a tinted card.
0.0.3 - 2026-11-06
Added
- The server prints its version, commit and commit date, then its settings, when it starts (the API key only as set or unset).
- Ollama settings
EXTRACT_TOP_P,EXTRACT_TOP_K,EXTRACT_THINK_LEVEL(low, medium or high, withEXTRACT_THINK=1),EXTRACT_NUM_CTX(default 16384) andEXTRACT_KEEP_ALIVE(default 10m). - A "Pack lunch" event's notes are the day's first menu line, for example "Orange Chicken".
0.0.2 - 2026-11-06
Added
- Food emoji in each lunch day's header, picked from the day's menu (🐔🌽🍐 for chicken, corn and pears).
- Read 1 / Read 2 in review: when a double read disagrees on a menu day, both readings are kept so you can switch between them before saving. Needs database migration 002, which runs on start.
- Menus can be fixed after publishing, from the scan page. Changes show on the Lunch tab right away.
npm testinfrontend/checks the food emoji rules.
Changed
- Marking a menu day "No lunch this day" keeps its food, so unticking it brings the text back.
- A failed scan that can't reach Ollama now says so, and how to point
OLLAMA_URLat it from Docker. The example settings and Compose file explainhost.docker.internal.
Fixed
- Week-row crops no longer include the top of the next week's text, which the model misread, for example as an extra "End of Q1" event.
- Words in a stray alphabet are dropped from what the model reads. A Sept/Oct menu came back with "выда" after the last food of every day.
0.0.1 - 2026-11-05
First test release: the Phase 1 MVP.
Added
- Scanning: upload a photo, screenshot or PDF of a month calendar, flyer or lunch menu. A local vision model reads it through Ollama (Claude optional), row by row, with an optional double read that flags more mistakes.
- Review: events grouped into Needs a look, Updated, New and Unchanged, each one highlighted on the photo. Edit, add or exclude events, bulk delete, uncheck, make all-day or change kind, and undo.
- Matching against events already on the calendar, so a rescan shows what changed.
- Calendar screen with list and month views, and an .ics download of new and changed events or everything.
- Lunch screen to pick pack-lunch days per child from the scanned menu. Each pick becomes an event.
- Settings for children, calendars, sources, time zone and theme.
- Mobile-first PWA with light and dark themes, a bottom tab bar on phones and a side rail on wide screens.
- Runs with plain Python or as a Docker image, with SQLite and a
backupcommand. - Release workflow that pushes the image to the Gitea container registry: stable releases tag
X.Y.Z,X.Y,Xandlatest; pre-releases tagX.Y.Zanddev.