Add side panels, task selection, graph animation, and project docs

- Foldable left panel (user profile) and right panel (task details)
- Clicking a task in the list or graph node selects it and shows details
- Both views (task list + graph) always mounted via absolute inset-0 for
  correct canvas dimensions; tabs toggle visibility with opacity
- Graph node selection animation: other nodes repel outward (charge -600),
  then selected node smoothly slides to center (500ms cubic ease-out),
  then charge restores to -120 and graph stabilizes
- Graph re-fits on tab switch and panel resize via ResizeObserver
- Fix UUID string IDs throughout (backend returns UUIDs, not integers)
- Add TaskDetailPanel, UserPanel components
- Add CLAUDE.md project documentation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Alvis
2026-04-08 11:23:06 +00:00
parent 5c7edd4bbc
commit f1d51b8cc8
23998 changed files with 3242708 additions and 0 deletions

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
2003d49f8577788a

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"getrandom\", \"runtime-rng\", \"std\"]","declared_features":"[\"atomic-polyfill\", \"compile-time-rng\", \"const-random\", \"default\", \"getrandom\", \"nightly-arm-aes\", \"no-rng\", \"runtime-rng\", \"serde\", \"std\"]","target":8470944000320059508,"profile":15657897354478470176,"path":6583748113720099799,"deps":[[966925859616469517,"build_script_build",false,1391155811160274894],[3612005756660025491,"zerocopy",false,13966831341034201528],[5855319743879205494,"once_cell",false,3855828545801537437],[7667230146095136825,"cfg_if",false,15397566549833576348],[18408407127522236545,"getrandom",false,3152405531555791103]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/ahash-375c2341417820f3/dep-lib-ahash","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"getrandom\", \"runtime-rng\", \"std\"]","declared_features":"[\"atomic-polyfill\", \"compile-time-rng\", \"const-random\", \"default\", \"getrandom\", \"nightly-arm-aes\", \"no-rng\", \"runtime-rng\", \"serde\", \"std\"]","target":17883862002600103897,"profile":2225463790103693989,"path":12798855230794838362,"deps":[[5398981501050481332,"version_check",false,17005284436764087020]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/ahash-7270cfc76400b87e/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[966925859616469517,"build_script_build",false,10995732544856850946]],"local":[{"RerunIfChanged":{"output":"debug/build/ahash-8036efc89d9b8424/output","paths":["build.rs"]}}],"rustflags":[],"config":0,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
e5fd5ca63a965655

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"alloc\"]","declared_features":"[\"alloc\", \"default\", \"fresh-rust\", \"nightly\", \"serde\", \"std\"]","target":5388200169723499962,"profile":12994027242049262075,"path":8150134181990057235,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/allocator-api2-c8f86b29da3b8e3b/dep-lib-allocator_api2","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"std\"]","declared_features":"[\"backtrace\", \"default\", \"std\"]","target":5408242616063297496,"profile":2225463790103693989,"path":1592513962797247754,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anyhow-7d1dbc24c2f8a68d/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[12478428894219133322,"build_script_build",false,9916118651303091387]],"local":[{"RerunIfChanged":{"output":"debug/build/anyhow-d08f0f65b4941a1e/output","paths":["src/nightly.rs"]}},{"RerunIfEnvChanged":{"var":"RUSTC_BOOTSTRAP","val":null}}],"rustflags":[],"config":0,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
e04e1cfe484ac7af

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"std\"]","declared_features":"[\"backtrace\", \"default\", \"std\"]","target":1563897884725121975,"profile":15657897354478470176,"path":13913051421499132848,"deps":[[12478428894219133322,"build_script_build",false,5937569798794688861]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anyhow-f36515dc2016ce88/dep-lib-anyhow","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
a87f57a159c0e825

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[]","target":5116616278641129243,"profile":2225463790103693989,"path":13248684844495357844,"deps":[[4289358735036141001,"proc_macro2",false,10832279275625900833],[10420560437213941093,"syn",false,10021487460367715854],[13111758008314797071,"quote",false,11666790336275478594]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-trait-ee5a13cb59ed0262/dep-lib-async_trait","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
f5eae0f45d630369

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"std\"]","target":2515742790907851906,"profile":15657897354478470176,"path":12575998081724658878,"deps":[[5157631553186200874,"num_traits",false,16934557128371661712]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/atoi-499707733b74063a/dep-lib-atoi","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
d9ea07632b2523b1

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"portable-atomic\"]","target":14411119108718288063,"profile":15657897354478470176,"path":14866621870726532260,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/atomic-waker-843b52043047247e/dep-lib-atomic_waker","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
8d27955d6ec4f7ca

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[]","target":10734413529022586701,"profile":15657897354478470176,"path":9811154882503335560,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/auto-future-47cd436b37ad1da2/dep-lib-auto_future","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
9e9f3fcf0e2a4a38

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[]","target":6962977057026645649,"profile":2225463790103693989,"path":15647454825061823462,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/autocfg-9ef4b25a9bd36cd2/dep-lib-autocfg","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
ef6d6725456203d2

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"form\", \"http1\", \"json\", \"matched-path\", \"original-uri\", \"query\", \"tokio\", \"tower-log\", \"tracing\"]","declared_features":"[\"__private_docs\", \"default\", \"form\", \"http1\", \"http2\", \"json\", \"macros\", \"matched-path\", \"multipart\", \"original-uri\", \"query\", \"tokio\", \"tower-log\", \"tracing\", \"ws\"]","target":13920321295547257648,"profile":15657897354478470176,"path":7750414729436195668,"deps":[[784494742817713399,"tower_service",false,16019076366609623065],[1363051979936526615,"memchr",false,3683407666151743318],[2251399859588827949,"pin_project_lite",false,5057344457388244224],[2517136641825875337,"sync_wrapper",false,13908361313548202605],[2620434475832828286,"http",false,12178800335506446277],[3626672138398771397,"hyper",false,3074507707550243104],[3632162862999675140,"tower",false,14384839231750677197],[3870702314125662939,"bytes",false,2709368896986884538],[4359148418957042248,"axum_core",false,7671942205820207316],[5532778797167691009,"itoa",false,6050066881301659259],[5898568623609459682,"futures_util",false,17833620431097856884],[6803352382179706244,"percent_encoding",false,2496778773300025267],[7712452662827335977,"tower_layer",false,12329683236559188260],[9678799920983747518,"matchit",false,16429123917527311703],[10229185211513642314,"mime",false,10010972161496507110],[11976082518617474977,"hyper_util",false,18105810623032798975],[13548984313718623784,"serde",false,13993743657434939901],[13795362694956882968,"serde_json",false,14792315538488301761],[14084095096285906100,"http_body",false,10962244317973710858],[14156967978702956262,"rustversion",false,10740991818506275069],[14757622794040968908,"tracing",false,3568424343064569723],[14814583949208169760,"serde_path_to_error",false,8452671690288024270],[16542808166767769916,"serde_urlencoded",false,12038355261165830975],[16611674984963787466,"async_trait",false,2731644665191694248],[16900715236047033623,"http_body_util",false,13695458902152294853],[17541620359049798014,"tokio",false,6352395554011230797]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/axum-7e00d743df34e06f/dep-lib-axum","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
f80e5e6f3c341119

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"form\", \"http1\", \"json\", \"matched-path\", \"original-uri\", \"query\", \"tokio\", \"tower-log\", \"tracing\"]","declared_features":"[\"__private_docs\", \"default\", \"form\", \"http1\", \"http2\", \"json\", \"macros\", \"matched-path\", \"multipart\", \"original-uri\", \"query\", \"tokio\", \"tower-log\", \"tracing\", \"ws\"]","target":13920321295547257648,"profile":15657897354478470176,"path":7750414729436195668,"deps":[[784494742817713399,"tower_service",false,16019076366609623065],[1363051979936526615,"memchr",false,3683407666151743318],[2251399859588827949,"pin_project_lite",false,5057344457388244224],[2517136641825875337,"sync_wrapper",false,13908361313548202605],[2620434475832828286,"http",false,12178800335506446277],[3626672138398771397,"hyper",false,4754227432821557856],[3632162862999675140,"tower",false,14384839231750677197],[3870702314125662939,"bytes",false,2709368896986884538],[4359148418957042248,"axum_core",false,7671942205820207316],[5532778797167691009,"itoa",false,6050066881301659259],[5898568623609459682,"futures_util",false,17833620431097856884],[6803352382179706244,"percent_encoding",false,2496778773300025267],[7712452662827335977,"tower_layer",false,12329683236559188260],[9678799920983747518,"matchit",false,16429123917527311703],[10229185211513642314,"mime",false,10010972161496507110],[11976082518617474977,"hyper_util",false,11137536502163805979],[13548984313718623784,"serde",false,13993743657434939901],[13795362694956882968,"serde_json",false,14792315538488301761],[14084095096285906100,"http_body",false,10962244317973710858],[14156967978702956262,"rustversion",false,10740991818506275069],[14757622794040968908,"tracing",false,3568424343064569723],[14814583949208169760,"serde_path_to_error",false,8452671690288024270],[16542808166767769916,"serde_urlencoded",false,12038355261165830975],[16611674984963787466,"async_trait",false,2731644665191694248],[16900715236047033623,"http_body_util",false,13695458902152294853],[17541620359049798014,"tokio",false,6352395554011230797]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/axum-a18956eb1d1e4160/dep-lib-axum","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
d4803ddbc936786a

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"tracing\"]","declared_features":"[\"__private_docs\", \"tracing\"]","target":2565713999752801252,"profile":15657897354478470176,"path":4293923778822616582,"deps":[[784494742817713399,"tower_service",false,16019076366609623065],[2251399859588827949,"pin_project_lite",false,5057344457388244224],[2517136641825875337,"sync_wrapper",false,13908361313548202605],[2620434475832828286,"http",false,12178800335506446277],[3870702314125662939,"bytes",false,2709368896986884538],[5898568623609459682,"futures_util",false,17833620431097856884],[7712452662827335977,"tower_layer",false,12329683236559188260],[10229185211513642314,"mime",false,10010972161496507110],[14084095096285906100,"http_body",false,10962244317973710858],[14156967978702956262,"rustversion",false,10740991818506275069],[14757622794040968908,"tracing",false,3568424343064569723],[16611674984963787466,"async_trait",false,2731644665191694248],[16900715236047033623,"http_body_util",false,13695458902152294853]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/axum-core-dd51bc854bf4db36/dep-lib-axum_core","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
1f822cbcc287c8d7

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"pretty-assertions\"]","declared_features":"[\"default\", \"msgpack\", \"pretty-assertions\", \"yaml\"]","target":1999684334358351018,"profile":15657897354478470176,"path":13393747337792090781,"deps":[[1528297757488249563,"url",false,4346602663945371319],[1770175401655680863,"auto_future",false,14625374293204477837],[2620434475832828286,"http",false,12178800335506446277],[3601586811267292532,"tower",false,18038603649231531543],[3626672138398771397,"hyper",false,4754227432821557856],[3666196340704888985,"smallvec",false,6999625528918773204],[3870702314125662939,"bytes",false,2709368896986884538],[4891297352905791595,"axum",false,1806282359723396856],[9278515158990611354,"rust_multipart_rfc7578_2",false,16754520526401019626],[10229185211513642314,"mime",false,10010972161496507110],[11976082518617474977,"hyper_util",false,11137536502163805979],[12478428894219133322,"anyhow",false,12666174154364178144],[13548984313718623784,"serde",false,13993743657434939901],[13795362694956882968,"serde_json",false,14792315538488301761],[14483443567775487101,"reserve_port",false,2152609931759034798],[16542808166767769916,"serde_urlencoded",false,12038355261165830975],[16611674984963787466,"async_trait",false,2731644665191694248],[16727543399706004146,"cookie",false,3465696580324336833],[16900715236047033623,"http_body_util",false,13695458902152294853],[17541620359049798014,"tokio",false,6352395554011230797],[17811409749869794184,"pretty_assertions",false,2595604308830274304]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/axum-test-38ee43f555c643d8/dep-lib-axum_test","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
35f4e3124c7e73fa

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"alloc\", \"default\", \"std\"]","declared_features":"[\"alloc\", \"default\", \"std\"]","target":13060062996227388079,"profile":15657897354478470176,"path":14709185621984536711,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/base64-a5ce8b9cc4643f8b/dep-lib-base64","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
50b88b90a6c6e0c2

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"arbitrary\", \"bytemuck\", \"example_generated\", \"serde\", \"serde_core\", \"std\"]","target":7691312148208718491,"profile":15657897354478470176,"path":15191591926664195229,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-b60e409526351a4f/dep-lib-bitflags","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
7264829b9f998268

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"std\"]","declared_features":"[\"arbitrary\", \"bytemuck\", \"example_generated\", \"serde\", \"serde_core\", \"std\"]","target":7691312148208718491,"profile":2225463790103693989,"path":15191591926664195229,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-b7432f592fa94b32/dep-lib-bitflags","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
4d5be1c2a6847996

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[]","target":4098124618827574291,"profile":15657897354478470176,"path":12065623917026451340,"deps":[[10520923840501062997,"generic_array",false,8150697793081606182]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/block-buffer-26340f8edc3fc036/dep-lib-block_buffer","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
24d46065068f7e5c

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"std\"]","declared_features":"[\"default\", \"i128\", \"std\"]","target":8344828840634961491,"profile":15657897354478470176,"path":15643985970352291081,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/byteorder-f3e805ad653ee201/dep-lib-byteorder","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
ba29652ea89c9925

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"extra-platforms\", \"serde\", \"std\"]","target":11402411492164584411,"profile":5585765287293540646,"path":1403929629260805484,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bytes-394efa973d3a621d/dep-lib-bytes","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
c89cca594a8fa895

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"jobserver\", \"parallel\"]","target":11042037588551934598,"profile":4333757155065362140,"path":17714183584090770258,"deps":[[8410525223747752176,"shlex",false,4034407925560671566],[9159843920629750842,"find_msvc_tools",false,9226406737444626292]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cc-0b31faedb726bb42/dep-lib-cc","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
9c6f44803225afd5

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"core\", \"rustc-dep-of-std\"]","target":13840298032947503755,"profile":15657897354478470176,"path":18136589805589071029,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-240b169be3bd5d4e/dep-lib-cfg_if","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[16727543399706004146,"build_script_build",false,12924691352846039304]],"local":[{"Precalculated":"0.18.1"}],"rustflags":[],"config":0,"compile_kind":0}

View File

@@ -0,0 +1 @@
{"rustc":5391851738765093524,"features":"[]","declared_features":"[\"aes-gcm\", \"base64\", \"hkdf\", \"hmac\", \"key-expansion\", \"percent-encode\", \"percent-encoding\", \"private\", \"rand\", \"secure\", \"sha2\", \"signed\", \"subtle\"]","target":17883862002600103897,"profile":2225463790103693989,"path":6552583244804106514,"deps":[[5398981501050481332,"version_check",false,17005284436764087020]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cookie-4c301d3e613163b4/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

Some files were not shown because too many files have changed in this diff Show More