From f1c497794b867b02fca79645841e9195596d8033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Martin?= Date: Thu, 15 Oct 2026 12:30:37 +0200 Subject: [PATCH] Site: an Apps page, and a front page that points to it The front page's App cards were nine, and had stopped at v0.18.0: no SSH, no Shell, no games, no compass, no MeshCore. A new page, /apps/, has all twelve in the Launcher's order and the planned messenger, each with its icon, what it does, a fact, its guide page, and a screen from the device (ten taken from it now). The front page keeps six of them, links each to its row, and says how many there are; the menu's Apps goes to the page. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_0162FokPdvY2KsS4NBfwyWPk --- site/content/apps/index.md | 5 + site/data/apps.toml | 137 +++++++++++++++++++------- site/static/css/site.css | 26 ++++- site/static/screens/apps/games.png | Bin 0 -> 2859 bytes site/static/screens/apps/gemini.png | Bin 0 -> 4588 bytes site/static/screens/apps/gnss.png | Bin 0 -> 4835 bytes site/static/screens/apps/lora.png | Bin 0 -> 3730 bytes site/static/screens/apps/notes.png | Bin 0 -> 1969 bytes site/static/screens/apps/settings.png | Bin 0 -> 2221 bytes site/static/screens/apps/shell.png | Bin 0 -> 3358 bytes site/static/screens/apps/ssh.png | Bin 0 -> 2062 bytes site/static/screens/apps/storage.png | Bin 0 -> 3251 bytes site/static/screens/apps/system.png | Bin 0 -> 3720 bytes site/templates/apps.html | 32 ++++++ site/templates/base.html | 2 +- site/templates/index.html | 17 ++-- 16 files changed, 170 insertions(+), 49 deletions(-) create mode 100644 site/content/apps/index.md create mode 100644 site/static/screens/apps/games.png create mode 100644 site/static/screens/apps/gemini.png create mode 100644 site/static/screens/apps/gnss.png create mode 100644 site/static/screens/apps/lora.png create mode 100644 site/static/screens/apps/notes.png create mode 100644 site/static/screens/apps/settings.png create mode 100644 site/static/screens/apps/shell.png create mode 100644 site/static/screens/apps/ssh.png create mode 100644 site/static/screens/apps/storage.png create mode 100644 site/static/screens/apps/system.png create mode 100644 site/templates/apps.html diff --git a/site/content/apps/index.md b/site/content/apps/index.md new file mode 100644 index 0000000..e5d5c5b --- /dev/null +++ b/site/content/apps/index.md @@ -0,0 +1,5 @@ ++++ +title = "The Apps" +description = "Everything on the device, an App at a time: what it does, a screen from the device itself, and where its guide is." +template = "apps.html" ++++ diff --git a/site/data/apps.toml b/site/data/apps.toml index f18b1e9..a7c1918 100644 --- a/site/data/apps.toml +++ b/site/data/apps.toml @@ -1,72 +1,133 @@ -# The App cards on the home page. Each says what the firmware does today (docs/milestones/W1.md, Q185): -# what isn't built is marked planned, with its milestone. `icon` is a cell of static/img/icons-*.svg. +# The Apps, in the Launcher's order: the Apps page shows them all, the home page those marked +# `featured`. Each says what the firmware does today (docs/milestones/W1.md, Q185); what isn't +# built is marked planned, with its milestone. `icon` is a cell of static/img/icons-*.svg (three +# across: 0 planned, 1 LoRa, 2 GNSS, 3 Wi-Fi, 4 Gemini, 5 IRC, 6 Notes, 7 System, 8 Storage, +# 9 Settings, 10 SSH, 11 Shell, 12 Games). `screen` is a file in static/screens/, a screenshot +# from the device at 2x; an App without one has none. [[app]] -num = "01" -tag = "LoRa Scanner" -title = "See what is on the air" -text = "Lists every packet it hears with time, RSSI, SNR, sender and hops, reading the Meshtastic or MeshCore header. A Sweep shows signal strength from 863 to 870 MHz. Capture to a pcap for Wireshark." -fact = "Only listens, never transmits" -icon = 1 +tag = "IRC" +title = "Chat from the keyboard" +text = "Join channels and type commands as you would anywhere, with a log a day written to the SD card. It stays connected when you leave the App, and the Launcher marks unread messages." +fact = "Logs to SD" +icon = 5 +guide = "/guide/irc/" + +[[app]] +tag = "Wi-Fi Tools" +title = "Scan the air for networks" +text = "The networks around you, sorted and filtered; how busy each channel is; a tracker that follows one network's signal as you walk. Scans log to a CSV file on the SD card." +fact = "Scans log to CSV" +icon = 3 +guide = "/guide/wifi-tools/" [[app]] -num = "02" tag = "GNSS" -title = "Find your place in the sky" -text = "Position and Sky views show where you are and which satellites you can see. Tracks save to the SD card as GPX, and the clock follows the fix." -fact = "Sky view and GPX Tracks" +title = "Find your place, and your way" +text = "Position, a Sky view of every satellite, and a Compass that leads back to a place you marked. Tracks save to the SD card as GPX, and the clock follows the fix." +fact = "No magnetometer: north from walking, or the sun" icon = 2 +guide = "/guide/gnss/" +screen = "apps/gnss.png" +alt = "The GNSS App's sky view: a circle with the satellites of four constellations as coloured dots, filled when used, and a legend counting them: GPS 6 of 12, GLONASS 3 of 4, Galileo 2 of 2, BeiDou 3 of 3, 3D Fix" +featured = true [[app]] -num = "03" tag = "Gemini" title = "Browse Geminispace" text = "Follow links with Tab and Enter, go Back to where you were, bookmark pages and save them to the SD card to read offline." fact = "Certificates trusted on first use" icon = 4 +guide = "/guide/gemini/" +screen = "apps/gemini.png" +alt = "The Gemini App's start page: Gemini, your bookmarks and Saved Pages, then a few places to start, and a saved page from bbs.geminispace.org" +featured = true [[app]] -num = "04" -tag = "IRC" -title = "Chat from the keyboard" -text = "Join channels and type commands as you would anywhere, with daily logs written to the SD card." -fact = "Logs to SD" -icon = 5 +tag = "LoRa Scanner" +title = "See what is on the air" +text = "Lists every packet it hears with its signal, and reads the Meshtastic and MeshCore headers, and MeshCore's public channel. A Sweep shows signal strength from 863 to 870 MHz. Capture to a pcap for Wireshark." +fact = "Only listens, never transmits" +icon = 1 +guide = "/guide/lora-scanner/" +screen = "apps/lora.png" +alt = "The LoRa Scanner's Sweep: bars of signal strength from 863.0 to 870.0 MHz with peak marks, a waterfall under them, and a footer reading floor -100, 866.3 MHz at -88 dBm" +featured = true [[app]] -num = "05" -tag = "Wi-Fi tools" -title = "Scan the air for networks" -text = "See the networks around you, sort and filter the list, and log scans to a CSV file on the SD card." -fact = "Scans log to CSV" -icon = 3 - -[[app]] -num = "06" -tag = "Notes" -title = "Write it down" -text = "Keep plain text notes on the SD card, of any size: a megabyte opens as fast as a line. There is no save key: the editor writes five seconds after you stop typing, so a power cut never costs the note." -fact = "Plain .txt files in /notes" -icon = 6 - -[[app]] -num = "07" tag = "Storage" title = "Manage the SD card" text = "Browse, copy, cut, rename and delete with a clipboard. Opens text, pictures, hex, captures, tracks and update files. Press w and the card is a web page in your phone's browser: upload and download with nothing to install." fact = "Checks every copy by size" icon = 8 +guide = "/guide/storage/" +screen = "apps/storage.png" +alt = "The Storage App at the top of the SD card: the folders captures, gemini, gnss, irc, notes, pictures, screenshots and system, with 15 GB free" +featured = true + +[[app]] +tag = "Notes" +title = "Write it down" +text = "Keep plain text notes on the SD card, of any size: a megabyte opens as fast as a line. There is no save key: the editor writes five seconds after you stop typing, so a power cut never costs the note." +fact = "Plain .txt files in /notes" +icon = 6 +guide = "/guide/notes/" +screen = "apps/notes.png" +alt = "The Notes App listing the notes in /notes, each under its first line, with its date" + +[[app]] +tag = "SSH" +title = "A terminal on another machine" +text = "Log in to a server with a password or with the device's own key, and run a shell, vim or top on the Cardputer's screen, in sixteen colours. Files go with scp, from the Shell." +fact = "The session stays open when you leave" +icon = 10 +guide = "/guide/ssh/" +screen = "apps/ssh.png" +alt = "The SSH App: a host connected to before, then New connection and This device's key" +featured = true + +[[app]] +tag = "Shell" +title = "The console, on the device" +text = "Every command the firmware's console knows, typed on its own keyboard: the card's files, ping, nslookup, traceroute, a certificate check, the radio and the GNSS receiver. Tab completes." +fact = "The same commands as over USB" +icon = 11 +guide = "/guide/shell/" +screen = "apps/shell.png" +alt = "The Shell after uname -a: roro9stack, its version, xtensa-lx7 esp32s3, and an empty line to type the next command" + +[[app]] +tag = "Games" +title = "For when the radio is quiet" +text = "Pong, Snake and Tetris with its tune, Minesweeper, 2048, and Asteroids steered by leaning the device. Pong can be steered by tilting too." +fact = "The best of each is kept" +icon = 12 +guide = "/guide/games/" +screen = "apps/games.png" +alt = "The Games App: six icons in a row, Pong chosen on a filled tile, and under them Pong and its longest rally" +featured = true [[app]] -num = "08" tag = "System" title = "Watch it think" text = "Per-core load, every task and its spare stack, free heap, network traffic, battery and chip temperature, live." fact = "Live and read-only" icon = 7 +guide = "/guide/system/" +screen = "apps/system.png" +alt = "The System App's overview: the load of both cores, 84 KB of memory free, the network's traffic, the battery at 99 percent, uptime and temperature, and a graph" + +[[app]] +tag = "Settings" +title = "Make it yours" +text = "The device's name and region, brightness and seven colour themes, GNSS and the radio, Wi-Fi networks and a WireGuard VPN, firmware updates and the Debug Console, in five groups." +fact = "Every theme dark and light" +icon = 9 +guide = "/guide/settings/" +screen = "apps/settings.png" +alt = "Settings, in five groups: This device, Display, GNSS and radio, Network and System" [[app]] -num = "09" tag = "Planned" title = "A mesh messenger" text = "Sending and reading messages on a Meshtastic-compatible mesh. The radio listens today, in the LoRa Scanner; transmitting is the next step and waits for a second node to test with." diff --git a/site/static/css/site.css b/site/static/css/site.css index 2b78a2f..f16b0d0 100644 --- a/site/static/css/site.css +++ b/site/static/css/site.css @@ -142,11 +142,32 @@ section { padding-top: 64px; padding-bottom: 64px; } .card .fact::before { content: ""; width: 8px; height: 8px; background: var(--cyan); flex: none; } .card.planned .tag { color: var(--orangetext); } .card.planned .fact::before { background: var(--orange); } -.ic { width: 48px; height: 48px; flex: none; background-image: var(--icons); background-repeat: no-repeat; background-size: 144px 192px; image-rendering: pixelated; } +.ic { width: 48px; height: 48px; flex: none; background-image: var(--icons); background-repeat: no-repeat; background-size: 144px 288px; image-rendering: pixelated; } .i0 { background-position: 0 0; } .i1 { background-position: -48px 0; } .i2 { background-position: -96px 0; } .i3 { background-position: 0 -48px; } .i4 { background-position: -48px -48px; } .i5 { background-position: -96px -48px; } .i6 { background-position: 0 -96px; } .i7 { background-position: -48px -96px; } .i8 { background-position: -96px -96px; } -.i9 { background-position: 0 -144px; } +.i9 { background-position: 0 -144px; } .i10 { background-position: -48px -144px; } .i11 { background-position: -96px -144px; } +.i12 { background-position: 0 -192px; } +/* The Apps page: an App a row, its words beside a screen from the device. */ +.apps { display: flex; flex-direction: column; gap: 24px; margin-top: 40px; } +.app { background: var(--s2); padding: 32px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 400px); gap: 32px; align-items: center; scroll-margin-top: 96px; } +.app-text { display: flex; flex-direction: column; gap: 16px; min-width: 0; } +.app .card-top { justify-content: flex-start; gap: 16px; } +.app .tag { font: 500 12px/16px var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--cyantext); } +.app h2 { font-size: 24px; line-height: 28px; } +.app h2 a { color: inherit; text-decoration: none; } +.app h2 a:hover, .app h2 a:focus-visible { text-decoration: underline; text-underline-offset: 4px; } +.app p { color: var(--muted); } +.app .fact { display: flex; align-items: center; gap: 8px; font: 500 12px/16px var(--mono); letter-spacing: .04em; } +.app .fact::before { content: ""; width: 8px; height: 8px; background: var(--cyan); flex: none; } +.app.planned .tag { color: var(--orangetext); } +.app.planned .fact::before { background: var(--orange); } +.app-guide { font-size: 14px; } +.app-shot { margin: 0; } +.app-shot img { display: block; width: 100%; height: auto; } +.cards-more { margin-top: 24px; } +.card h3 a { color: inherit; text-decoration: none; } +.card h3 a:hover, .card h3 a:focus-visible { text-decoration: underline; text-underline-offset: 4px; } .cards-note { margin-top: 24px; font-size: 14px; line-height: 20px; color: var(--muted); } /* Real screenshots */ @@ -225,6 +246,7 @@ footer small { display: block; max-width: 760px; } section { padding-top: 48px; padding-bottom: 48px; } .slab, .updates, .cta { padding: 24px; } .panel, .card { padding: 24px; } + .app { grid-template-columns: minmax(0, 1fr); padding: 24px; gap: 24px; } .hero .caption { margin-top: -24px; } .num-row .big { font-size: 48px; line-height: 48px; min-width: 120px; } } diff --git a/site/static/screens/apps/games.png b/site/static/screens/apps/games.png new file mode 100644 index 0000000000000000000000000000000000000000..e651c7c3edfd2345120d2a3fc387d149fedbae87 GIT binary patch literal 2859 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 Yv0f()zhSY{B|mlc*2k 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 WN;Cf{;DhIHx(*LLMw9&cIQSoZEr`+p literal 0 HcmV?d00001 diff --git a/site/static/screens/apps/settings.png b/site/static/screens/apps/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..096e242b78d3c644289b58da88398d10dae0864e GIT binary patch literal 2221 zcmd5+jaSlX7A9TDFvm4D`_OE#GGn#;$QBWmiBfCI&(u_~215)@ll)2%`|WOFPO?~L zHmPWuX#pvjt_C@6u4X2`$t?v%-9&W900jk;Q5KsyyZ^%8bKdiw``q{3bMJGX`xb?s z477l6gF_$?i{Kz!I0Uk8!g#(iGch7#OA!Yk5VK3cIBaCjJ%#kA)a@u6XlQvk?Aep2 zER*nl?@4@D*LN)&D*`iugsg!dSIi!|PbYtuu)TCQJzuXaXE1j4_snm=;bd)LAOaD5 zpM3;ZdK6pC*mVQgY!!U>JeE#axFA`5*jq)ME}NE5szip}1(e+WVKD{C5=)SZTh$7r zpTXap#a#ZZ>7h4r%G*j#9L$=_CFO7Zi&@ zh)iE?tv3EwYasG8)_UaThxm)U2_TEs5K%l?OT3!#2 z#mUNQ*XAxag+OM)b067RS&40+u82}EV{BKl%~M9uyS-#9R^1ng4B|mYdTRzozC_b& zD(SuV5bDwXh3^4B|ErAW>CZM_lD!g`R_^P2KfP!XfD?LrfWeo4)EDUSP#J4gHI&&m5xJv3!f@uE?1Zstehw zBIG(y<1Re&`!e>)- z5>p2R@0N|_#eQBw+9}ZZ?4UXvipfe;<@S&m`IN1lcGqKMi|_QA9CiaK6hv$i9k*S` zuj$bhRa5X-k?%bOqQZ0O@AZHZQx0rqjrq2){Y^sXM@ou9M#fwVxNDl7(f8!1DeqKv!L;`W6-HKyn2B!X zNiKAEfnP3I;bJJH0q6nZ*)?cuqxtgX+3Oi;)sK9608E?Hb=ZC=&em(rZ$|{EQ=<3; zbSD5)md*@)lFTBtkzfFc=`xd(eEVZWYr~DlNb(uNyYkD%L>zx~;4$jzog9?53MqU6 zz(~7j{$!{{`os!bH+;H85j*Z_+C|(;F09j*6J<4A>DwX|p5{I$39b0#s(E0&9#;a6oyCusI=GwM6d zM%trcVtK!}<=j-4V`r1YeRjxeqq92<+hf2`x$UBF^5j}ms6vXk`F$lNrKMXug{bQRd~gAoFe(!7hG zP^1(R6vO{&!Dp^2>)g5cG!88?zk11C;90Ke?;k~<`ejLLtSF0+G|{KWW{ctnJUywZ z$oa_;&z@;5ULbbFU;Y%yn*+5ji4C68tS>u-` z)!&*tui~gk4eWIvZ5D3%-h}YZ4{p~Q2Th1G)E-le50z!r1ePR=e(xWho0ur_$6FTq z{jf@Y48UeG+u3==2Q#?68x=%Ew?hT|%vkB&C=jB#ZMTqFAH}HGUTBR=5^lx8+q}Q- z5_n@?UBrih5G$iPQ`#h)Ja|WTL18=R1u1(CPF)Z0h-cbcpGKVm=b0vq;pK3ZwgZ5* zABzNs${uN}H188ek{+`s9nC{;F08O^y}CXCu>bX%^I)ks6f!2hV%KC8AER#nB7t_a zupvlC3VtLqo3puQzFan7_T**rp-=RBPm{-gtz}PI{s}j>$4mX^L?g!nNX*$;#~U{s z@3Yr=uh>i7UP%JGnaPf*EVqLeiBEo+Hj4a!d{`BzyRC|WmZSeEOx;V~$t3bz|6stQ z@dJope3tfpCQHLO#<#qz6P{O`kgGF*89ffql)-LQ;3PFag-WF&)7kzHQ>o zm2vT2(f~50$o;yATU}JBaonaIkL_j!v+s@YJYgkCkNv!cF{=c^L ZMa!v`$-^h<@0!-?3_fxa$NlCE@E;%&52pYC literal 0 HcmV?d00001 diff --git a/site/static/screens/apps/shell.png b/site/static/screens/apps/shell.png new file mode 100644 index 0000000000000000000000000000000000000000..e409ad792580a2e5f8f6c8790fa8aa76ab268c8b GIT binary patch literal 3358 zcmc(ie^gRw8pkbnux+FtGuyP1<}}(klhfFwmZU)RL&KTT(LxhN)|t#7WSV4%p;)%n zZlxneE&c$C$`$$1lxU{noGHg3yIAcqL?|hld9kbzonjhsUyixW}p$%iW&Q`Gea$JiNzI`;do< z>!*e@Dg%Sw0QEx|A$PA2d(LkYeIhuO$CJp;Sl@oThEo3otZpzv`V0&xGXMqc$woQpVJq$T2=FrD)NEKIksP%{`zH`yr9 zSoW%?(|c1o{#tzf07gCBXyJ}BRaK!IPByQP-G!ngo`I)2)^HM{?Zi~THn zz^vP3Z7&I^3fDQ$*Wlx>3CLUEAqpooqj!Ro2kg)(Hq>^uE3<_oZ$eHwxJGYY$tfZf zjPYFyIY~JZRtLg11q$ZA0yX#_)E~BQ=x6odxwdt^X_wMwt1iS=Fz_r?tF!nGR3yWG zFr%BJ9?%1Xa5Fx&4k}2gcq`@{2%E!l9COSBhUtWKQ|btXRCO^cI6S=wlyz0*L z@?-JgI>mx~CTY?ckb#ehg!^HM<^{_j7kMdQPsPSO7W+zZSU0GF=@Pl|3tM>A3Zug- z)BMpJ%(Y^{TH91UANsD35!4{=l3aZuvi4h9C442LE$uq{4gKq+i`gq+%gK z^e|l;m8!M!wMjq{@Q5jc0{G2%e5&17q={-|SM6*>GJjN? zh7(@q*gu_UQj%Zr*AKAtVY<);G6QlFo<%&*&gn0LnCWrwc(AQ2iF6r+{fT+bQsHU6 zfnb|{KmI5sE*+K06NYQ;vG6V}IcXdvvzEMI6O2L()K0RY(XzYzdxF3$#3R`0cut=- zuq_4gXw2MZwwb2;l&eef`m7>qyaCEYlc)p{V@_93<|WC>7-eW$D7SesSUdz20HZaz zCa5@10lbP3U&EN}DlGbuuD+y?ZO4R<7HXhMO56l_B953U6!?ubUml$uE~d~1rb`b~ zJn{alc1X1LIUYXM6Je^?BZ7+HMU5T27s|>RbhM%5cxSgH#{%aT?#5wfA({!4=%s)# zRqP;BYfat+0!Eu=wHDnfg0pAMmPEuOw6Sy+$O_BaE{dggBZArmWZIkVIOB;i{w(DDpFF0EB+(uQ+i^xR*}w5hrE zA^U{dDq!+U`Yo`P1Uj+a#9`J5w-BNcBYC~{BAJP<1@MQ3m$D3txe@(`4u+UGUJjWl zg_d(zeMtVlQYmE;waJ|aAv->?RJYy|e zboy#-2vtYxn6g^pk{EXJXFbE*T#SCFr1OL&Gzj7OY9}P@>l;+ih<~@UknMUM42HaY z)6M0gD`d%X*0OgNAM>|v&tbVsuX=6%jyp8FwCh1-o2G61N$fMWISKj&5(>JyP6j8eaT<{(k@{epn-osg*az+n0@`akTUagT^q{V!_^EMKY zv(D6AZv9&)vJG;aK{0FPLcS@rTIqfFGN_c7QUTg{3J^rtR8u=2FKFAp-KCWY%k$mM zl#TSmiwR)T=i->cy4tAM*5ZHjC#o3te_yZ7VN{7Wb&Syt(8&pus( zMu=HV_hBIc-fg5{sZQ%V;77zXOGp`-;Vh;$B7(%B$%No|+&#+zS!1@`%f}IhwsfS= zE(Fpp!x8L`>?>+|FtM6>gfb$*23l2#g}asUHN7_(jR=PNM*wA%4h~BOu1~@cOsJ!4 z@})AZRl-k(AyAvy0HFI26F|~Pu8TwCFKl(X&Xu?J-jNDO={UL%j18gUH|j|KzwF_@e=tva0;PtEFuCVyLlP2OImNhvySEp9#^_-OcHegKpuzrdwxYk9^3DHizk z;Mh>i4daM9K^9sCzsRNqZqcTtzyN5Qgi~waX0>RX^TVM@{stxh1EjiN;S?0kAJ-XPnkylT>=8N;W)`?z?Gd z_xPEOeWA(PG>xB~gIMD@hWCH0CSxX=rQ_|540&zvX=!)IgeW?mn`l~$rP!#CEd7q- zl|5Avu`BCCQ)MZy)ND$|A0PQu6p_(>y%9l8n@EGvdOsh`QTu3eo5>F+giTBn8eyuO zv2AVRmTs?!YW}u{&a3u|fAIws%q=NDh2UD(%^`TogQO3V8lo8){8mY0b9$W(ikl5J z{86APeEK3NRD3@-iarDxnz;o#YA)x;+}#1ZfGX+YM#m+-*9It<$` znREBNz z`Cy7fA3M_84~|knrQ?~-sOdkzV;#6x&?}LDUj6;jeCY^Y9CY0(a11=QQtmv#^9?#b zz$@Y`h=+Xi(mtuo>75>(d7O?vKG>a$GZe!M{tlEigy|4D{jaXU?M0Z54q{ZZB4j6( zJ}WGz0%c8M*~ErpdDu~r>jmq6)>g*D5d2&O!@W?eGxH5KMrxp6%_ z$5%;blZ?=IwJ&u>J#dR^gKD**n7n&GaD?TrQ6RCR!Tk4VgLeGpsQ}f82y~U1Q7Y3P za2=s~M=F*(6Z5M{W4dlNq1mF0#q1Szv=a`fvko&&yPhHFfsZPM<=ss!j9Z&zT~cJnDL5W?r9%>g=4?Qs4h1t4q-D(>U&x|d4ad6`;(0-Z;@-098*cSk6pX8&p9JG)a7kc(k+uJQ xLGA;jXTfT>Abpll@z$OdGlzcqA?ci7?N2)P<(K@mn-;erYJc25{+>Ub{U>}?;-UZm literal 0 HcmV?d00001 diff --git a/site/static/screens/apps/ssh.png b/site/static/screens/apps/ssh.png new file mode 100644 index 0000000000000000000000000000000000000000..f7bd90389b604c31a0179c72e803158a96419c9f GIT binary patch literal 2062 zcmd^9`BT#e7LT&goiB@)kz)oqW|c#dinRzT2AEV>4$GB>gd{+80t6QnEy@)LEshI9 zg#yhg$`PbWDI_U`a3-V+BbPwFngSvuxFsPGa+CnU+?#f1f9dRh&^Pnu&3xXxH}gL4 zecrwJ*a$no1%N;xc2SXGC=hpf^P3sDnMv-lN*8d#@b1izXK zU_Dabk>E;=TZYoyKx*-=Y%Hl}Zpfe4iOrbXW6{&APRO;9!9Wn-GPOZ#*fv=%BKs`^ zXm`i+mr%8&npAd?L7%7nP|ilhx-(jW27Q#96m^t3-&6PR1Qr!~k`RXMkJv~6m6TTo zw?PKI-p0pP_V|MagZEhF{5DTS0LiS8ZmbliRKQH28qq9 zQ)~Om+zFRe9s#<-k2gPCs6b&Wb$gwuEjx10_)VR`F+EHUZEFnvAfKdM%hOg1-d%6*ZT{hxbKl0zVlxk58X&`0FXTL{Hj)c0Zw8=H@)m9X@<4 zd9^J~rj+%?wf~p0$t8B(=T~d`+vv+F4-{O}iuRqc$MgTJr+6O(k`hauud1j>c7UEd z)^pXNw_@^H0(k7$rDgT18TXqpxUiNx*^%;$%< z4IgS&PRNCY4m+Kz8N7F!&C2t+SBEsts0AB0>HQkZH z%-X@FC-io=jGIUwug5cp&dCKDwMRvRG9F1~UzM5vmFu{()M)K_d&pM5{Tx@? z>Yd}It_zw71U5BnHb_+IU#U0(4IVfPWzfShI5@%ap@f_>z=|1D%!H*03KO|?%~om(;x7SMZ}p44m(}=K}|VM-SVZQ z49{au9!dZ&X%TymXS+I(^-C8X3)zOs^gf3}S-jY$C8 ziE#PaE`XOze+rj>`wf{ESz=7`Bi-fv{IYu!yE6G0ddF3F!al{clJg@8U9a1kSs{I7?BoF48o#~s>AVnKZsFl5@5Mdq~D zB%&w`u?fv=7;X_4j;rFRe)Q{CVmyd56RgmPI#lF%eTpp8RL|p)?Lm%26qFA~~;xC)>Y{M+vPvu(|!hR-Y?TKud2m`uMVnLv;c0O3t2Q zS16@)HrhUvKIuOf5&`oHz@+MS+0ih*cPPblODBfO_GefxXuD911$To5Ln!1}h@Xj^ z*K!;f8fkIF!ZKe^*g;EN)x3;wBoQ|PXHG?ItN|{V;hi?I@+LHe@9oi11J6vl)>dYA z)%`@pJUyi0%rS8ZT{Kf;O5x(tm!}__L*(3ZZ~SG$_!Ja;PCT++AWb1398boB|6|q~ z<8qCYV_R#7<8)t)eWq|AX~1$ zE`UK-H(91R4rkDa0lHfAO^LU|8AXn8HM_sPUE$wKzf!vFX#JpU`0^>U`p)$AWwuvM z^DOu05@59GqYN3+AXvW9EMGrnBor2V4K$gBM-7j0=X>e^J(^F^uk`glh@l zuCuJmIrn2hS60S-Vxd-Cn0L+@A)2+=;Gn#VwZ56Jg-(`o_4IpL8_oGfsw;V1OZ06^ z3mwGmePoH99V-7Ngus2C;9)85P4!c5IZ9E#%d%kdZa8JpZTTW9Nmrl_AZ_g3Pz`Q` zBHsG;8OV9Gt!Wx>)2etJ;4;qrp1ygvSy0d7FzIC4<@Cck#8jkV+88@341U`t28y0j z-&k3ATMIRn+|YJu19aB0rCDAz3j*uiko-N@NLh)o2QN@&SV!F`r&;ih=t0llCx;pI yR&44HBsm&slYMQ0a2E3EGrINL{UK~%l)ul-{y@@n1jP93z)|6`Va!i1m;DEJgwEOk literal 0 HcmV?d00001 diff --git a/site/static/screens/apps/storage.png b/site/static/screens/apps/storage.png new file mode 100644 index 0000000000000000000000000000000000000000..70f9f74d4d1193d7a93b35d5f1732437cecc166b GIT binary patch literal 3251 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 bO=kyiaIN0 +
+ What's inside +

{{ page.title }}

+

{{ page.description }} On the device, the Launcher shows them as a grid of icons; Fn + h lists the keys of any screen.

+
+ +
+ {% for a in apps.app %} +
+
+
{{ a.tag }}
+

{% if a.guide %}{{ a.title }}{% else %}{{ a.title }}{% endif %}

+

{{ a.text }}

+ {{ a.fact }} + {% if a.guide %}Its page in the guide →{% endif %} +
+ {% if a.screen %} +
+ {{ a.alt }} +
+ {% endif %} +
+ {% endfor %} +
+ +{% endblock main %} diff --git a/site/templates/base.html b/site/templates/base.html index 69bc4c6..85e54b0 100644 --- a/site/templates/base.html +++ b/site/templates/base.html @@ -27,7 +27,7 @@