Skip to main content

max / goingson

v0.3.0: Beta-ready milestone — MCP contact tools, OTA updater, sync scheduler improvements, validation fixes
Co-Authored-By
Claude Opus 4.6 <noreply@anthropic.com>
Author: Max J. <87768334+MaxJMath@users.noreply.github.com> · 2026-03-17 02:58 UTC
Commit: c7c700f6d6f809de0826c01e54f538f33594df98
Parent: 92cd9cc
37 files changed, +1687 insertions, -189 deletions
M Cargo.lock +195 -3
@@ -99,6 +99,15 @@
99 99 "object",
100 100 ]
101 101
102 + [[package]]
103 + name = "arbitrary"
104 + version = "1.4.2"
105 + source = "registry+https://github.com/rust-lang/crates.io-index"
106 + checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
107 + dependencies = [
108 + "derive_arbitrary",
109 + ]
110 +
102 111 [[package]]
103 112 name = "argon2"
104 113 version = "0.5.3"
@@ -1003,6 +1012,17 @@
1003 1012 "serde_core",
1004 1013 ]
1005 1014
1015 + [[package]]
1016 + name = "derive_arbitrary"
1017 + version = "1.4.2"
1018 + source = "registry+https://github.com/rust-lang/crates.io-index"
1019 + checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
1020 + dependencies = [
1021 + "proc-macro2",
1022 + "quote",
1023 + "syn 2.0.114",
1024 + ]
1025 +
1006 1026 [[package]]
1007 1027 name = "derive_more"
1008 1028 version = "0.99.20"
@@ -1863,6 +1883,7 @@
1863 1883 "tauri-plugin-dialog",
1864 1884 "tauri-plugin-notification",
1865 1885 "tauri-plugin-shell",
1886 + "tauri-plugin-updater",
1866 1887 "tauri-plugin-window-state",
1867 1888 "tempfile",
1868 1889 "thiserror 1.0.69",
@@ -2908,6 +2929,12 @@
2908 2929 source = "registry+https://github.com/rust-lang/crates.io-index"
2909 2930 checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
2910 2931
2932 + [[package]]
2933 + name = "minisign-verify"
2934 + version = "0.2.5"
2935 + source = "registry+https://github.com/rust-lang/crates.io-index"
2936 + checksum = "22f9645cb765ea72b8111f36c522475d2daa0d22c957a9826437e97534bc4e9e"
2937 +
2911 2938 [[package]]
2912 2939 name = "miniz_oxide"
2913 2940 version = "0.8.9"
@@ -2981,10 +3008,10 @@
2981 3008 "libc",
2982 3009 "log",
2983 3010 "openssl",
2984 - "openssl-probe",
3011 + "openssl-probe 0.1.6",
2985 3012 "openssl-sys",
2986 3013 "schannel",
2987 - "security-framework",
3014 + "security-framework 2.11.1",
2988 3015 "security-framework-sys",
2989 3016 "tempfile",
2990 3017 ]
@@ -3436,6 +3463,18 @@
3436 3463 "objc2-foundation 0.2.2",
3437 3464 ]
3438 3465
3466 + [[package]]
3467 + name = "objc2-osa-kit"
3468 + version = "0.3.2"
3469 + source = "registry+https://github.com/rust-lang/crates.io-index"
3470 + checksum = "f112d1746737b0da274ef79a23aac283376f335f4095a083a267a082f21db0c0"
3471 + dependencies = [
3472 + "bitflags 2.10.0",
3473 + "objc2 0.6.3",
3474 + "objc2-app-kit 0.3.2",
3475 + "objc2-foundation 0.3.2",
3476 + ]
3477 +
3439 3478 [[package]]
3440 3479 name = "objc2-quartz-core"
3441 3480 version = "0.2.2"
@@ -3568,6 +3607,12 @@
3568 3607 source = "registry+https://github.com/rust-lang/crates.io-index"
3569 3608 checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
3570 3609
3610 + [[package]]
3611 + name = "openssl-probe"
3612 + version = "0.2.1"
3613 + source = "registry+https://github.com/rust-lang/crates.io-index"
3614 + checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
3615 +
3571 3616 [[package]]
3572 3617 name = "openssl-sys"
3573 3618 version = "0.9.111"
@@ -3606,6 +3651,20 @@
3606 3651 "windows-sys 0.61.2",
3607 3652 ]
3608 3653
3654 + [[package]]
3655 + name = "osakit"
3656 + version = "0.3.1"
3657 + source = "registry+https://github.com/rust-lang/crates.io-index"
3658 + checksum = "732c71caeaa72c065bb69d7ea08717bd3f4863a4f451402fc9513e29dbd5261b"
3659 + dependencies = [
3660 + "objc2 0.6.3",
3661 + "objc2-foundation 0.3.2",
3662 + "objc2-osa-kit",
3663 + "serde",
3664 + "serde_json",
3665 + "thiserror 2.0.18",
3666 + ]
3667 +
3609 3668 [[package]]
3610 3669 name = "pango"
3611 3670 version = "0.18.3"
@@ -4376,15 +4435,20 @@
4376 4435 "http-body",
4377 4436 "http-body-util",
4378 4437 "hyper",
4438 + "hyper-rustls",
4379 4439 "hyper-util",
4380 4440 "js-sys",
4381 4441 "log",
4382 4442 "percent-encoding",
4383 4443 "pin-project-lite",
4444 + "rustls",
4445 + "rustls-pki-types",
4446 + "rustls-platform-verifier",
4384 4447 "serde",
4385 4448 "serde_json",
4386 4449 "sync_wrapper",
4387 4450 "tokio",
4451 + "tokio-rustls",
4388 4452 "tokio-util",
4389 4453 "tower",
4390 4454 "tower-http",
@@ -4545,12 +4609,25 @@
4545 4609 checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b"
4546 4610 dependencies = [
4547 4611 "once_cell",
4612 + "ring",
4548 4613 "rustls-pki-types",
4549 4614 "rustls-webpki",
4550 4615 "subtle",
4551 4616 "zeroize",
4552 4617 ]
4553 4618
4619 + [[package]]
4620 + name = "rustls-native-certs"
4621 + version = "0.8.3"
4622 + source = "registry+https://github.com/rust-lang/crates.io-index"
4623 + checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63"
4624 + dependencies = [
4625 + "openssl-probe 0.2.1",
4626 + "rustls-pki-types",
4627 + "schannel",
4628 + "security-framework 3.5.1",
4629 + ]
4630 +
4554 4631 [[package]]
4555 4632 name = "rustls-pki-types"
4556 4633 version = "1.14.0"
@@ -4560,6 +4637,33 @@
4560 4637 "zeroize",
4561 4638 ]
4562 4639
4640 + [[package]]
4641 + name = "rustls-platform-verifier"
4642 + version = "0.6.2"
4643 + source = "registry+https://github.com/rust-lang/crates.io-index"
4644 + checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784"
4645 + dependencies = [
4646 + "core-foundation 0.10.1",
4647 + "core-foundation-sys",
4648 + "jni",
4649 + "log",
4650 + "once_cell",
4651 + "rustls",
4652 + "rustls-native-certs",
4653 + "rustls-platform-verifier-android",
4654 + "rustls-webpki",
4655 + "security-framework 3.5.1",
4656 + "security-framework-sys",
4657 + "webpki-root-certs",
4658 + "windows-sys 0.61.2",
4659 + ]
4660 +
4661 + [[package]]
4662 + name = "rustls-platform-verifier-android"
4663 + version = "0.1.1"
4664 + source = "registry+https://github.com/rust-lang/crates.io-index"
4665 + checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
4666 +
4563 4667 [[package]]
4564 4668 name = "rustls-webpki"
4565 4669 version = "0.103.9"
@@ -4671,6 +4775,19 @@
4671 4775 "security-framework-sys",
4672 4776 ]
4673 4777
4778 + [[package]]
4779 + name = "security-framework"
4780 + version = "3.5.1"
4781 + source = "registry+https://github.com/rust-lang/crates.io-index"
4782 + checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef"
4783 + dependencies = [
4784 + "bitflags 2.10.0",
4785 + "core-foundation 0.10.1",
4786 + "core-foundation-sys",
4787 + "libc",
4788 + "security-framework-sys",
4789 + ]
4790 +
4674 4791 [[package]]
4675 4792 name = "security-framework-sys"
4676 4793 version = "2.15.0"
@@ -5465,13 +5582,13 @@
5465 5582 "reqwest 0.12.28",
5466 5583 "serde",
5467 5584 "serde_json",
5468 - "sha2",
5469 5585 "thiserror 2.0.18",
5470 5586 "tokio",
5471 5587 "tracing",
5472 5588 "unicode-normalization",
5473 5589 "urlencoding",
5474 5590 "uuid",
5591 + "zeroize",
5475 5592 ]
5476 5593
5477 5594 [[package]]
@@ -5570,6 +5687,17 @@
5570 5687 "syn 2.0.114",
5571 5688 ]
5572 5689
5690 + [[package]]
5691 + name = "tar"
5692 + version = "0.4.44"
5693 + source = "registry+https://github.com/rust-lang/crates.io-index"
5694 + checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a"
5695 + dependencies = [
5696 + "filetime",
5697 + "libc",
5698 + "xattr",
5699 + ]
5700 +
5573 5701 [[package]]
5574 5702 name = "target-lexicon"
5575 5703 version = "0.12.16"
@@ -5788,6 +5916,39 @@
5788 5916 "tokio",
5789 5917 ]
5790 5918
5919 + [[package]]
5920 + name = "tauri-plugin-updater"
5921 + version = "2.10.0"
5922 + source = "registry+https://github.com/rust-lang/crates.io-index"
5923 + checksum = "3fe8e9bebd88fc222938ffdfbdcfa0307081423bd01e3252fc337d8bde81fc61"
5924 + dependencies = [
5925 + "base64 0.22.1",
5926 + "dirs",
5927 + "flate2",
5928 + "futures-util",
5929 + "http",
5930 + "infer",
5931 + "log",
5932 + "minisign-verify",
5933 + "osakit",
5934 + "percent-encoding",
5935 + "reqwest 0.13.2",
5936 + "rustls",
5937 + "semver",
5938 + "serde",
5939 + "serde_json",
5940 + "tar",
5941 + "tauri",
5942 + "tauri-plugin",
5943 + "tempfile",
5944 + "thiserror 2.0.18",
5945 + "time",
5946 + "tokio",
5947 + "url",
5948 + "windows-sys 0.60.2",
5949 + "zip",
5950 + ]
5951 +
5791 5952 [[package]]
5792 5953 name = "tauri-plugin-window-state"
5793 5954 version = "2.4.1"
@@ -6772,6 +6933,15 @@
6772 6933 "system-deps",
6773 6934 ]
6774 6935
6936 + [[package]]
6937 + name = "webpki-root-certs"
6938 + version = "1.0.6"
6939 + source = "registry+https://github.com/rust-lang/crates.io-index"
6940 + checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca"
6941 + dependencies = [
6942 + "rustls-pki-types",
6943 + ]
6944 +
6775 6945 [[package]]
6776 6946 name = "webview2-com"
6777 6947 version = "0.38.2"
@@ -7435,6 +7605,16 @@
7435 7605 "pkg-config",
7436 7606 ]
7437 7607
7608 + [[package]]
7609 + name = "xattr"
7610 + version = "1.6.1"
7611 + source = "registry+https://github.com/rust-lang/crates.io-index"
7612 + checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156"
7613 + dependencies = [
7614 + "libc",
7615 + "rustix",
7616 + ]
7617 +
7438 7618 [[package]]
7439 7619 name = "yoke"
7440 7620 version = "0.8.1"
@@ -7599,6 +7779,18 @@
7599 7779 "syn 2.0.114",
7600 7780 ]
7601 7781
7782 + [[package]]
7783 + name = "zip"
7784 + version = "4.6.1"
7785 + source = "registry+https://github.com/rust-lang/crates.io-index"
7786 + checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1"
7787 + dependencies = [
7788 + "arbitrary",
7789 + "crc32fast",
7790 + "indexmap 2.13.0",
7791 + "memchr",
7792 + ]
7793 +
7602 7794 [[package]]
7603 7795 name = "zmij"
7604 7796 version = "1.0.19"
M Cargo.toml +2 -1
@@ -10,7 +10,7 @@
10 10 resolver = "2"
11 11
12 12 [workspace.package]
13 - version = "0.2.1"
13 + version = "0.3.0"
14 14 edition = "2021"
15 15 license-file = "LICENSE"
16 16
@@ -61,6 +61,7 @@
61 61 tauri-plugin-shell = "2.3.5"
62 62 tauri-plugin-notification = "2.3.3"
63 63 tauri-plugin-window-state = "2.4.1"
64 + tauri-plugin-updater = "2"
64 65
65 66 # Plugin system
66 67 rhai = { version = "1.17", features = ["sync", "serde"] }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "goingson-desktop"
3 - version = "0.2.1"
3 + version = "0.3.0"
4 4 edition = "2021"
5 5
6 6 [[bin]]
@@ -92,6 +92,7 @@
92 92 tauri-plugin-shell = { workspace = true }
93 93 tauri-plugin-notification = { workspace = true }
94 94 tauri-plugin-window-state = { workspace = true }
95 + tauri-plugin-updater = { workspace = true }
95 96 # File watching (for external DB changes from MCP server)
96 97 notify = { workspace = true }
97 98 notify-debouncer-mini = { workspace = true }
@@ -1,7 +1,7 @@
1 1 {
2 2 "$schema": "https://schema.tauri.app/config/2",
3 3 "productName": "GoingsOn",
4 - "version": "0.1.0",
4 + "version": "0.3.0",
5 5 "identifier": "com.goingson.app",
6 6 "build": {
7 7 "beforeBuildCommand": "./src-tauri/frontend/build-css.sh",
@@ -43,5 +43,13 @@
43 43 "iOS": {
44 44 "developmentTeam": "93C54W92UP"
45 45 }
46 + },
47 + "plugins": {
48 + "updater": {
49 + "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEIxMkJENjg1MjJFRDUzQ0UKUldUT1UrMGloZFlyc2VTa3NaYzBma0ZtbWtEcEkyS2FlL0JCbXk2Ny9KOFdqWXk4ZGE0Z0JpQWcK",
50 + "endpoints": [
51 + "https://makenot.work/api/sync/ota/goingson/{{target}}/{{arch}}/{{current_version}}"
52 + ]
53 + }
46 54 }
47 55 }
@@ -70,11 +70,13 @@
70 70 <div id="tasks-view" class="view hidden" role="tabpanel" aria-labelledby="tasks-tab">
71 71 <div class="page-header">
72 72 <h2 class="page-title">Tasks</h2>
73 - <div class="view-toggle" id="task-view-toggle">
74 - <button class="view-toggle-btn active" data-mode="list" onclick="GoingsOn.tasks.setViewMode('list')">List</button>
75 - <button class="view-toggle-btn" data-mode="board" onclick="GoingsOn.tasks.setViewMode('board')">Board</button>
73 + <div style="display: flex; align-items: center; gap: 1rem;">
74 + <div class="view-toggle" id="task-view-toggle">
75 + <button class="view-toggle-btn active" data-mode="list" onclick="GoingsOn.tasks.setViewMode('list')">List</button>
76 + <button class="view-toggle-btn" data-mode="board" onclick="GoingsOn.tasks.setViewMode('board')">Board</button>
77 + </div>
78 + <button class="btn btn-primary" onclick="GoingsOn.tasks.openNew()">+ New Task</button>
76 79 </div>
77 - <button class="btn btn-primary" onclick="GoingsOn.tasks.openNew()">+ New Task</button>
78 80 </div>
79 81 <div id="task-bulk-actions" class="bulk-actions-bar hidden" role="toolbar" aria-label="Bulk task actions">
80 82 <span id="task-bulk-count" class="bulk-count">0 selected</span>
@@ -399,6 +401,9 @@
399 401 <button class="nav-dial-item" data-view="weekly-review" role="menuitem" aria-label="Weekly">
400 402 <span class="nav-dial-label">Weekly</span>
401 403 </button>
404 + <button class="nav-dial-item" data-view="contacts" role="menuitem" aria-label="Contacts">
405 + <span class="nav-dial-label">Contacts</span>
406 + </button>
402 407 </div>
403 408 <div id="nav-dial-backdrop" class="nav-dial-backdrop hidden"></div>
404 409
@@ -472,6 +477,9 @@
472 477 <!-- Mobile interaction wiring (no-op on desktop) -->
473 478 <script src="js/mobile.js"></script>
474 479
480 + <!-- OTA update notifications -->
481 + <script src="js/updater.js"></script>
482 +
475 483 <!-- Bootstrap -->
476 484 <script src="js/app.js"></script>
477 485 <script src="js/seed-data.js"></script>