From bdb05c3eff8523e715e40e9faed4b8d26ca41d9d Mon Sep 17 00:00:00 2001 From: Anton Afanasyeu Date: Fri, 7 Aug 2026 22:15:42 +0200 Subject: [PATCH] Nav shell: friendly English labels (no missing i18n keys). Use plain labels for console/git/issues/live/education/short links and refresh branded QR logo rendering. Co-authored-by: Cursor --- assets/ac_qr_logo.png | Bin 3828 -> 8350 bytes platform/nav_shell.php | 27 ++++++++++++++++----------- src/QrBrandedRenderer.php | 29 ++++++++++++++++++++++------- 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/assets/ac_qr_logo.png b/assets/ac_qr_logo.png index d95f9cb5d5649cd8dec5b561e7845ad03a64c908..c8c2e3ad69838e5cad892fd15d8a73fc020c3786 100644 GIT binary patch literal 8350 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 literal 3828 zcmV00006VoOIv0RI60 z0RN!9r;`8x4yj2*K~!jg)tPyGR8^M8&%JN0dR3`PDhm=p1RHFTK^X-R5kWK`Nvi6t z_ueyqR6=LP1R-?){(Duo-uwRUIrqMEZV~tkkYNNWE4OXj_)%wfw_zAFXU;lt_6fG* z5C9~E5~8V^rYQ(unpSgDQ$GSIBh%?TKtac{TB?W;F~*r71hS?D09G!uX7#FAYwIC4@XWLS zec?sl=5eXMjSuQFpXzl0~Trw1r zHO>4_5QuF%w(ab{Np(%FO2xLVTLIvZ8K6}9xZ;yzr%yvfNumgV0s+9MsQ{4dPFR-B zm}eM)($dmoGO22s=P|#}M`%!zDF86Wsv5e#ZnWml)-Bu4-OJ1vdU$tAKUgsQ4IcntR(NzwMRe!6+{s#|UvIN%@+EMLC-#g|`pTxMmh zlF|qOWG(BX4I5gbtyf-gnWFhXFwR(EQG^SD!?+#W$!4-m9XUc^a!Ek$&ja13bH)db zM9zrR_jOmiEf$xgz8!tXwylw(qNB?v2ZIH@y-q0P z;~W|1!+(x|Ep1)#4mN#8NRgQ-4d)qm1U7HkDm;d&N(cq2=&EixPHQYisI+jw0+I&-6hcV- znL!8v0LH!Ebg%94aABw*6ch+DC5(-LJMfwc$mDu&zimw_l^T&}d0S<0RcU?~%Hs`zCxi}JFx|P# zYcIUG^~*0uLmI~-_WAr(wflN|(lSufwaQ8+altIxdG)ndt7~ij{jtXg5JCa-coL!g ze7S6v6A+$YV$hP%71?&ZfuE?VoKLsB(&@yejUWB%1NR?*YOE134CCwSS`=JUHK24- zQCM(vU2pAk>vmRtan0Xd4M-U0vMd1r7fg{f0I*CG0Xd@QGCFLo#IUEJKp-TaNU@Ig z`r6t9(~s4FuKT{K+RM17$dan5l**pt#XCE==f&IFuDbgA<;#~65VW6>0C8-`b8Ugh zMZTl}K6ry61dtE4fRLYmlI%&QySi?>b>%m*jVXod8XAEr2wYWU0>E64A$+xacX3ff z5STt~+Q7jcW2R+FMDhe5Sj7zFmk8m&B|`aNTe3t6mFo7@ClZ}E-|+WiVf*F?$clnQ zMu9=Y=P~9wj-sd(@w>BT`HcV>Faw-a0)QjtNdci*y&*`5jc10IhwBe{kr42*_^FuYTv^=H_u!>=T0ZR6KRp<9BN0k)&l)i@|M^&P3f9;S=re1k*-HR_gKX&>t83-4b_Ii@! zcsbM3R7I9$+jW`adffB*f#w7ng( ziK^4*mtVg8#O`!*-LucU{^~2^qW@+Cr!87kRx&9X&!}Yz<6LkiIMMy8pcI6}1kb-` z^K&m#U;+TZbeyj4Okt>?D5&PE8(pJw=6*+26wXC;OZNRgWh}07xlK3xxlC?nZQZNS zt=;hc`tj1kfoq{aFt}mU#}!+n@BHzr?;acW>k6S10YRV;qHn5^6CzPS1VVwfC#=?v zTuVI1ksmWToF7C9krV|G5aE>#9d&Wh+_<}P^Z#bsYUZDOTu~Xk^s6VgRD5(0^l;z^ z?AWzSlcjhx+1cFk(wp9$x1Q0*41Z1*SyC;}O{dJPNot$2ppZyVT5w_+03sqKh(PoG z%eDq{)AkH;x?1*BwAXJ7soFKyTwPLJ@c7RkuG_ok;OGH>y!_^GrfX zmSnXz>tu7OaLCt<>alZ9J!bBF0iwF4%d=XhlocOW9-3MftZMApy0fLV^PSlWYib zom5_w=t}+Mo?E^>`p5?Idi;eqW*j#MT(_i9532$w;Ya|0ApilIIDT5LX}w zvA+Rm=yDo*yz2V4FW-JW8QrHD;9AxRv;Stv@(YL%^|iInJ^ARNqKDCTp}jk{Pn$8z z@0Sft0QAud1exTQCrAW@$GGcBKAj>W?Q6w8Z!-7R#CL7^aNn-aN{*URbksDvr}@k? z&swx(sp&e;Kl#Mo-P;Z!{ip^SYpZ-d#Q>lP9Fb7K!95nGL{W4kgt;PLPq`>I?ag#H zw*Tpax18SQQ%_yEuc@xQuw>cQw}m4S({%2;?FQy~BR=lX8>sx^QwfQtp+u#8n?VT~ zSnD7V%kdD2BmqZkY_~VHq+37Vy#4ccf!Q*!`r7TYPMCN8^5v2u)z{TL`oJBB9Q{BB zdQz#NrgAea3Jd}gW3DU@8p-;55m{9ln^V8u(6o2g2kH7s%}*VVg(JnQ{_&qZPAuWw zf8&*A|1s^v82|v=b_)#MVce%mimV_(7^&FYRhxSI{q|j7Z%Q}q^xOoM3YIKedg1vi zQayIXM}K@{-BX7TJ+Dy>6ooX)v?WRaPyou3#MsbndtZC@jSclZNnSpAdZPNnKrndA zn%g7gle?1EkA8UZVJ7d>s0NtFm=K1h$g<2`4~F$9RWWn(?v{qixBa0R@uqE4rX737 zowrM}{;Q{cx%tC`sVfgo2Po#4sz?Bke_sxn{q~eyv9tBFcVEhOcBJEViMN$V5j16_Rfxu?G?XEwl+>GF1q}xD~_2ufdd{*7&N}C8O31aBUoa7{BWcv8Ue&a| z|96->@aSRvw%C?WK5nkve$gct|Ltj~y!VH9Zur54ho5s)jT!-oLjL3xB^epdpEJMl z&X($KmX7Vca>a`2GiU$9${(;{$Fmcxks~l^(j-BySK4p&aBc~ zZo2$%RFvOFBOA~(-KVQU2()Yf`1H#irc3_o@dqZBZA=>3KtVXfkuxR`Ala4bY;AdV z?SD)#*%&qQE)*$@P@r6J0%Z5sHQRSqX42ggOg2W1Y{2mQ8Rv>3am0>z)28=-KfzdI z*9Zo#yZ(oi0wEwvvYpL7`p|;D0Z!h#x-;8zX+0000 $active === $id ? ' active' : ''; $items = [ - ['id' => 'console', 'href' => $issuesBase . '/?view=home', 'icon' => 'home', 'label' => 'Console', 'desc' => 'Crash triage home and workspace cards.', 'i18n' => 'nav.console', 'i18n_desc' => 'nav.console_desc'], - ['id' => 'git', 'href' => $projectBase . '/git/', 'icon' => 'git', 'label' => 'Git', 'desc' => 'Browse repos, branches, and tags.', 'i18n' => 'nav.git', 'i18n_desc' => 'nav.git_desc'], - ['id' => 'issues', 'href' => $issuesBase . '/?view=reports', 'icon' => 'reports', 'label' => 'Issues', 'desc' => 'Browse and triage crash reports.', 'i18n' => 'nav.issues', 'i18n_desc' => 'nav.issues_desc'], + ['id' => 'console', 'href' => $issuesBase . '/?view=home', 'icon' => 'home', 'label' => 'Home', 'desc' => 'Console dashboard and workspace overview.'], + ['id' => 'git', 'href' => $projectBase . '/git/', 'icon' => 'git', 'label' => 'Source code', 'desc' => 'Repositories, branches, tags, and releases.'], + ['id' => 'issues', 'href' => $issuesBase . '/?view=reports', 'icon' => 'reports', 'label' => 'Crash reports', 'desc' => 'Search, filter, and triage incoming crash reports.'], ['id' => 'tickets', 'href' => $issuesBase . '/?view=tickets', 'icon' => 'tickets', 'label' => 'Tickets', 'desc' => 'Roadmap tasks, QA items, and tags.', 'i18n' => 'nav.tickets', 'i18n_desc' => 'nav.tickets_desc'], ['id' => 'graphs', 'href' => $projectBase . '/graphs/', 'icon' => 'graphs', 'label' => 'Analytics', 'desc' => 'Sessions, live cast stats, and device activity.', 'i18n' => 'nav.graphs', 'i18n_desc' => 'nav.graphs_desc'], ['id' => 'monitor', 'href' => $projectBase . '/monitor/', 'icon' => 'monitor', 'label' => 'Monitoring', 'desc' => 'Grafana dashboards — cluster health, alerts, exporters.', 'i18n' => 'nav.monitor', 'i18n_desc' => 'nav.monitor_desc'], - ['id' => 'live_sessions', 'href' => $issuesBase . '/?view=live_sessions', 'icon' => 'live', 'label' => 'Live sessions', 'desc' => 'Cast intents, join stats, session history.', 'i18n' => 'nav.live_sessions', 'i18n_desc' => 'nav.live_sessions_desc'], - ['id' => 'education', 'href' => $issuesBase . '/live/education', 'icon' => 'education', 'label' => 'Education (demo)', 'desc' => 'Browser screen-share trial (5 min).', 'i18n' => 'nav.education', 'i18n_desc' => 'nav.education_desc'], + ['id' => 'live_sessions', 'href' => $issuesBase . '/?view=live_sessions', 'icon' => 'live', 'label' => 'Live casting', 'desc' => 'Active cast sessions, join stats, and session history.'], + ['id' => 'education', 'href' => $issuesBase . '/live/education', 'icon' => 'education', 'label' => 'Try screen share', 'desc' => 'Five-minute browser demo — share your screen, no app install.'], ['id' => 'remote', 'href' => $issuesBase . '/?view=remote_access', 'icon' => 'remote', 'label' => 'Remote access', 'desc' => 'WireGuard sessions and device reachability.', 'i18n' => 'nav.remote', 'i18n_desc' => 'nav.remote_desc'], - ['id' => 'short_links', 'href' => $issuesBase . '/?view=short_links', 'icon' => 'link', 'label' => 'Short links', 'desc' => 'Mint bearer tokens and shorten URLs for s.f0xx.org.', 'i18n' => 'nav.short_links', 'i18n_desc' => 'nav.short_links_desc'], + ['id' => 'short_links', 'href' => $issuesBase . '/?view=short_links', 'icon' => 'link', 'label' => 'Short links', 'desc' => 'Shorten URLs and manage API tokens for s.f0xx.org.'], ['id' => 'builder', 'href' => $projectBase . '/build/', 'icon' => 'builder', 'label' => 'Builder', 'desc' => 'Docker CI for APK baking and OTA artifacts.', 'i18n' => 'nav.builder', 'i18n_desc' => 'nav.builder_desc'], ]; ?> @@ -48,16 +48,21 @@ function platform_render_nav_shell(array $opts = []): void