From 55d45662b38c5bf4b8b445b4fc94893f6b9468b2 Mon Sep 17 00:00:00 2001 From: Harry Roberts Date: Sat, 23 Aug 2025 12:32:14 +0100 Subject: [PATCH 1/3] Add Obs.js logo --- README.md | 2 ++ demo/assets/icon.png | Bin 0 -> 1659 bytes demo/assets/logo.png | Bin 0 -> 11926 bytes demo/index.html | 4 ++++ 4 files changed, 6 insertions(+) create mode 100644 demo/assets/icon.png create mode 100644 demo/assets/logo.png diff --git a/README.md b/README.md index b882551..9f035b7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +Obs.js + # Obs.js Obs.js uses the Navigator and Battery APIs to get contextual information about diff --git a/demo/assets/icon.png b/demo/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8cd2b5bf2e2e1e998108fa7f316e60c1a84e3411 GIT binary patch literal 1659 zcmb7EYg7^j6y~9bset*wM=D8XNE%8rS2__Tb%*i8}{f#zRZ2|xQ zMu7o-2edU^8yBEpZQk9&Y0#DeYET$SqtO6Lh5yU7EB|GZ$!Xl3d(@V;-r2doIU?0K zLQprqrY1Cr*)RK4OUtO*1}(Iq(aahIw*D;?pkeWaj0#q4qr22CoBc{=*LTR zz*a*-pK9CmM%Q5LTizSBxoRTu)00Qra8c5>(4Op^ivm?a79V4sXs=v%3fdk+>OrAHuU zp{AC~3F^&DHkK@^(|7fjtiA}7Qyu)>op74H1Ck((t{jcD7RIy_3ClGa7sZ8YuZR`r zoCs+^NM70&uQ&s%hTB||^d-bw*txVp9zCe<>kZJw`iy+5B<|+#H>MZ zpLYtyV^Y(zy+@&rW_i?%!H=hnuG+<9j_!7(p;%`UZt4YWr)JyDdJ^2XdM}M_( zoyJP0`^#5p;jZXN+jAx2PY(@eRG_V-bhQbyK{WLBK9GP_I^;qu#HO3q&TLAf3d|Mtt@ETqw*x9cuObB)YJs>8Z zoIC``n1&GwkXJ)gIH*OEPKUc_fO*wF4)OsIwTwU+wOH5)*~b1TxAs83*w-J@lKgT1 zsG~_8bbJ8$q8nD6-)1W{D^YQeex=h7`sxUCzvnA>2rlFrp$dGQsaj4j;XxU`C-EVU z7u}_+XwZ-ke+}{byw3UlCvPnh7keW3;zOr7kPpC`J{yQck))!Or1H2Hv3T8b)QFz<7 zxK6F0$;{S=6-&vUjiJnD)~;QTSf6-RDtF+mSqVlf0a8}OM~zf1(D>0tc%)hRlgX#u zWVK+tdbpPi{KFUKy0oQ|ehV(0sux9oUGeYeg$g!OS~SbFbtE@pzSO^c?Fa1H&n(NchlxKNg$NgZ39a{a?VcEIoSlyLl@b<^lHyzx&bWbR^v40ITY3# z)Dy<$ZKXo|p<$Aw{H9qXGl*O*eeG9!(Ih7Aqy}FCLB(bsIHU#;3RTKRR9c9?E zq+|D23ZJf!4i8C4akM$`&-3IWiXG!nl;q^k*#;igspTToy%#XVCxDcFz-Xxd^K}u- zv7e)sglD!_3}ojgKsnD$)*0!hJs4MZB}PqLFN;{X5v literal 0 HcmV?d00001 diff --git a/demo/assets/logo.png b/demo/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..40b8b7d934e3929dcce63cbf0956a3436980e01e GIT binary patch literal 11926 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 + + + +

Obs.js demo

Obs.js uses the Navigator From 1de026e8511fe71d7f08bdb1843ffeb83c22b41d Mon Sep 17 00:00:00 2001 From: Harry Roberts Date: Sat, 23 Aug 2025 12:33:23 +0100 Subject: [PATCH 2/3] Fix broken image path --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f035b7..b34c814 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Obs.js +Obs.js # Obs.js From faf75d911277d1929674c2a2957996eb4c4cb023 Mon Sep 17 00:00:00 2001 From: Harry Roberts Date: Sat, 23 Aug 2025 13:18:58 +0100 Subject: [PATCH 3/3] Update headline and copy Working on some slightly better and more clear messaging: what is Obs.js and what does it do? --- README.md | 4 ++- demo/index.html | 90 ++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 80 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index b34c814..bdeb53d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ Obs.js -# Obs.js +# Obs.js – context‑aware web performance for everyone + +_Meet your users where they are_ Obs.js uses the Navigator and Battery APIs to get contextual information about your users’ connection strength and battery status. diff --git a/demo/index.html b/demo/index.html index 9685e63..414b328 100644 --- a/demo/index.html +++ b/demo/index.html @@ -12,7 +12,7 @@ //# sourceURL=obs.inline.js - Obs.js demo + Obs.js – context-aware web performance for everyone -

Obs.js demo

+ + Obs.js Logo + +

Obs.js uses the Navigator - and Battery APIs to get contextual information about your users’ connection - strength and battery status.

+ .color-text { + fill: #009aa2; + } + + + + + +
+

Obs.js – context‑aware web performance for everyone

+

Meet your users where they are

+
+ +

Obs.js reads a handful of + browser signals (Navigator and Battery APIs) to infer connection strength, + battery status, and device capability. It exposes those signals as CSS + classes on the <html> element, and as properties on + window.obs, so you can adapt delivery accordingly: serve + lower-resolution media, forgo web fonts, disable auto-playing video… you name + it.

It is built and maintained by Harry Roberts under the MIT license.

-

This page shows the .has-* classes on - <html> and the current window.obs object. - Toggle Data Saver, plug/unplug power, or change networks to see updates (where - supported).

+

This page shows the .has-* classes that Obs.js adds to the + <html> element, and the current window.obs + object where it stores device and network information.

+ +

Try toggling Data Saver, plugging/unplugging power, or changing networks to + see updates (where supported).

html.classList

-
+

window.obs


 
+  

Note: API support varies by browser; Chromium has + the broadest coverage.

+