Commit graph

186 commits

Author SHA1 Message Date
pepaskopec-blip
7761b52ed0 Make iOS search a normal tab with a focused text field.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 14:17:31 +02:00
pepaskopec-blip
532e46e585 Fix the iOS home screen so the device build compiles again.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 13:56:16 +02:00
pepaskopec-blip
f82fc1eb1b Shorten the iOS search tab label so it fits the tab bar.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 13:46:10 +02:00
pepaskopec-blip
1569df7e13 Give the Mac app Apple's Liquid Glass chrome with a system sidebar and glass cards.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 12:39:06 +02:00
pepaskopec-blip
df89cd1984 Open search, stats, and settings from the Mac toolbar and View menu.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 12:30:05 +02:00
pepaskopec-blip
011bc3c685 Ship only the native Swift app on macOS.
GTK packaging stays for Linux and Windows; the Mac installer and updates use the Swift zip.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 12:18:32 +02:00
pepaskopec-blip
58e3a75f21 Add a native SwiftUI macOS app that shares the iOS player.
The GTK Mac build stays; CI now also publishes maturita-macos-swift.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-20 18:40:44 +02:00
pepaskopec-blip
11eb14e136 Mirror main and the builds branch to Forgejo from CI.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 20:03:40 +02:00
pepaskopec-blip
bc5d1dd00d Fill the in-app changelog from the project history.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 19:53:50 +02:00
pepaskopec-blip
6556c6691b Show a what's-new card on the home screen after each update.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 19:51:52 +02:00
pepaskopec-blip
dd8d992bf8 Set the iOS signing team and bundle identifier for device builds.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 19:34:30 +02:00
pepaskopec-blip
ed973e4937 Add a root workspace so the iOS project opens without being moved.
Maturita.xcworkspace points at ios/Maturita.xcodeproj; opening the
project from the repository root otherwise resolves Maturita/ to the
compiled desktop binary on a case-insensitive disk.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 19:33:47 +02:00
pepaskopec-blip
e00ced808b Make the Android self-update actually install.
CI stopped publishing when the iOS job outgrew the macos-14 Xcode, so
the builds branch froze; the iOS job now runs on macos-26 and publish
keeps the previous package for any platform that failed, with
VERSION-<platform> markers naming the commit each package came from.
APKs are signed with a committed sideload key instead of the runner's
random debug key, so Android accepts them as updates, and the version
code grows with every CI run. The updater explains the unknown-sources
step, keeps the Update button after errors and checks the download is
this app.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 18:36:25 +02:00
pepaskopec-blip
2eec46329a Let the iOS project open and run in Xcode straight from a clone.
The build script now extracts content.json into derived data and copies
it into the app bundle, so no generated file is referenced from the
project or written into the repository. Signing is explicit: ad hoc for
the simulator, automatic with your own team for a device.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 15:46:58 +02:00
pepaskopec-blip
0621311b4c Rework the mobile UIs on native components and fix layout bugs everywhere.
Android moves to Material 3 (navigation bar, app bars, list items,
bottom sheets, pager) with a real back stack. iOS hides the tab bar in
exercises so the bottom action is reachable, aligns content, and uses
system colours so themes and dark mode work. Both pick a readable
accent tint. Desktop keeps the VLSM table inside the window and gives
statistics the same header rhythm as other pages.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 15:37:15 +02:00
pepaskopec-blip
a1abac51f5 Apply Xcode 27 recommended settings for the iOS 26 project.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:21:29 +02:00
pepaskopec-blip
939ac2294e Adapt the iOS app to native iOS 26 navigation and Liquid Glass.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:18:43 +02:00
pepaskopec-blip
3407af1b85 Keep iOS Info.plist custom keys and let Xcode generate the rest.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:07:17 +02:00
pepaskopec-blip
6c7336c7bb Add a SwiftUI iOS app that plays the same maturita content.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 14:01:01 +02:00
pepaskopec-blip
3f88e55f33 Match the Android settings icon to the desktop gear.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:47:41 +02:00
Josef Skopec
6e2e4efa99
Merge pull request #2 from FBukovina/fix/macos-bundle-update-identity
Fix update checks in locally packaged macOS apps
2026-09-18 13:34:18 +02:00
pepaskopec-blip
d34a87c1f1 Make the Android updater read GitHub atom feeds the same way desktop does.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:26:13 +02:00
pepaskopec-blip
9b9693fe4f Keep Android dialogue text readable and move word picks out of the sentence.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 13:22:43 +02:00
pepaskopec-blip
cc36881bb9 Stop Android from crashing on subject maps and ship a new installable version.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 12:56:56 +02:00
pepaskopec-blip
db0422a952 Keep Android screens from crashing when opening subjects, stats, settings, or maps.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 12:46:07 +02:00
pepaskopec-blip
aa1d8c4426 Stop linking the Android APK through a branch-named raw URL.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 12:22:11 +02:00
pepaskopec-blip
04e0a41f31 Install Android API 37.0 in CI, the name Google now publishes.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 11:00:08 +02:00
pepaskopec-blip
70119bf373 Skip the retired Android SDK tools package in CI.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 10:57:59 +02:00
pepaskopec-blip
9d8b853081 Add a Jetpack Compose Android app that plays the same maturita content.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 10:54:49 +02:00
FBukovina
b3130a8b0b Stamp locally packaged macOS apps with their update identity 2026-09-17 22:52:46 +02:00
pepaskopec-blip
2c16cf977d Let the updater apply a new build after restart.
The swap helper now detaches from the app, downloads start when a newer VERSION appears, and checks keep running so a just-published build is not missed.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 19:49:10 +02:00
pepaskopec-blip
f746447b75 Keep a copy of each search result page name.
Lesson and exercise targets were built in a temporary buffer, so choosing one sometimes opened nothing.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 19:26:07 +02:00
pepaskopec-blip
cafa18b189 Add in-app search for subjects, lessons and exercises.
The header magnifier and Cmd/Ctrl+K open a palette that jumps straight to a matching page.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 19:08:54 +02:00
pepaskopec-blip
45ed500fa2 Ship the macOS installer as a double-clickable app.
A regular user can unzip and open it; install no longer needs Terminal or chmod.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 18:27:43 +02:00
pepaskopec-blip
2d6e1f04c3 Package each installer as a zip so a README click downloads a file instead of opening the script as text.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 18:24:53 +02:00
pepaskopec-blip
7fabe1846e Pin installer and updater downloads to the builds tip commit.
raw.githubusercontent.com caches branch-named files, so the installer was serving a stale zip after CI rewrote builds.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 17:31:16 +02:00
pepaskopec-blip
0d40e12788 Fix CI so published builds can move past the stuck VERSION.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 17:22:32 +02:00
pepaskopec-blip
d679e81887 Restyle the interface after Umímeto, Apple, and To dáš.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 17:17:54 +02:00
pepaskopec-blip
6c41abed05 Use a generic Windows path in the README install example.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 17:06:04 +02:00
pepaskopec-blip
72deed70e8 Point the build and runtime paths at src/ and data/.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 17:01:17 +02:00
pepaskopec-blip
c2a632c7d6 Move sources into src/ and runtime files into data/.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 17:00:57 +02:00
pepaskopec-blip
452dba4a8a Add Developer ID signing and notarization to the macOS build.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 16:25:08 +02:00
pepaskopec-blip
2cb3565df5 Fix path layout and Czech stats, and rewrite the install docs.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 16:02:59 +02:00
pepaskopec-blip
737e27deb0 Publish builds to a branch instead of to releases.
Releases and version numbers are gone. CI now rebuilds all three platforms
on every change to main and commits the packages to the `builds` branch,
so what anyone downloads is the current state of the repository. The
branch is rewritten from scratch each time rather than added to, so the
repository keeps one copy of the packages instead of a ~70 MB set per
commit.

Without tags there is no version to compare, so a build carries the
commit it was made from and the branch carries a VERSION file naming the
same commit. The updater fetches those few bytes and treats any
difference as being behind; commits are not ordered, and the branch only
ever holds the current build.

The installers fetch from the branch over raw.githubusercontent.com for
the same reason.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 15:40:47 +02:00
pepaskopec-blip
4566336b1b Make the learning path show one next step and a real finish flag.
Every unlocked unit carried the "current" class, so three nodes lit up
identically and none of them pointed anywhere. Mark only the first
unlocked unit that is not finished; the rest stay open but quiet.

The finish node filled its whole circle with chequers, which read as the
placeholder pattern for a missing image rather than as a flag, most of
all in light mode. Give it the plain face the other locked nodes have and
put the chequers in a small badge where they show a padlock.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 15:22:35 +02:00
pepaskopec-blip
7d503d6c5b Add installers that fetch the newest release when run.
Each installer carries no application of its own and resolves
/releases/latest/download/ at the moment it runs, so the file never goes
stale and the same download keeps working across future releases.

macOS installs into /Applications, falling back to the user's own folder
when that is not writable, and clears the quarantine flag the unsigned
build would otherwise trip over. Windows extracts over any existing
install rather than replacing the folder, so the progress files kept
inside it survive, and adds a Start menu entry. Linux drops the AppImage
in ~/Applications with a desktop entry and its icon.

Publish the macOS one zipped, because a release asset loses its
executable bit and a .command needs one to be double-clicked.

The .cmd also had to be excluded from the *.cmd ignore rule, which comes
from the kernel section of the template and targets build artifacts.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 15:16:46 +02:00
pepaskopec-blip
91a848b408 Add a self-updater that installs new releases.
Bake the release tag into the binary so the app knows what it is running;
plain builds keep the "dev" default and never offer an update. The CI
workflow already exported the tag on Linux and macOS, so only the Windows
job needed it.

Read the newest version from the redirect GitHub serves for
/releases/latest, which avoids the REST API and its unauthenticated rate
limit and needs no JSON parser. Networking goes through the curl command
rather than a linked library: curl handles TLS, redirects and proxies, it
ships on all three platforms, and it keeps the bundling scripts free of
another shared library.

An application cannot reliably replace its own files while running, so
every platform follows one shape: unpack beside the current install,
write a script that waits for this process to exit before swapping, then
launch it detached and quit. Staging beside the install keeps the move on
one filesystem and fails early when the location is read-only. The
Windows script copies without mirroring so the progress files kept inside
the install directory survive.

Check quietly a few seconds after startup and offer the result in a
banner above the pages, with a manual check in the settings popover.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 15:04:55 +02:00
pepaskopec-blip
ae56a1c1da Rework the interface into a consistent visual system.
Replace the accumulated per-widget decoration with short, documented
scales for type, weight, radius and motion. Fills are flat and elevation
is neutral, so accent colour marks state instead of decorating: the
gradients on buttons, pills, nodes and progress bars are gone, along with
the coloured glow shadows and the triple ring on the current unit.

Drop draw_node_halo() and the gradient aura on the learning path, which
painted the same bloom in the cairo layer.

Give the welcome page the app icon, a single-colour heading and an
unboxed paragraph. Restore keyboard focus rings, which were suppressed
everywhere, and clamp exercise bodies to a readable measure on wide
windows.

Fix two layout bugs found on the way: the statistics metric cards were
unequal because hexpand only shares leftover space, and a fraction of
zero still painted a stub of accent colour because GTK gives the progress
node a minimum width.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 14:17:34 +02:00
pepaskopec-blip
9f27724751 Fix broken macOS release bundle missing GTK libraries.
Replace fragile dylibbundler with a recursive otool-based bundler, verify every dependency, smoke-test launch, and ship GTK schemas with the Windows zip.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 16:30:23 +02:00
pepaskopec-blip
b49c456098 Fix AppImage post-step aborting on no-op mv.
linuxdeploy already writes the final path; renaming the file onto itself failed under set -e.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 12:43:29 +02:00