monitor-free.openapps.xyz

Source

This app’s code and revision history are public. Download a copy or explore the files below.

Public
The app’s code and revision history are public.
Owned app · rev 11d38ef641b0
Run it yourself
Take the whole tree and run it on your own machine. The download needs no account. Cloning needs a sign-in.
Download .zip
bounded clone 9383f719c9b37ff76411858f
A copy you download is not bounded. The guarantees this app runs under - declared egress, proven invariants, writes that fail closed - live in the runtime serving this page, not in the files. What you get is auditable source you can read and run, with no runtime guarantees attached.
← All files
src/Launcher.tsx
// "Which device is this?": the first choice, in the landing hero and on the installed app's home.
import { navigate, usePath } from "./lib/router";
import { baby, pairings } from "./lib/store";
import { Icon } from "./ui";

export function Launcher() {
  usePath(); // re-read what this device remembers after moving between screens
  const station = baby.get();
  const watched = pairings.list();
  const go = (to: string) => (e: React.MouseEvent) => { e.preventDefault(); navigate(to); };
  return (
    <div className="launcher">
      {watched.length > 0 && (
        <div className="again">
          <p className="launcher-label">Watch again</p>
          <ul className="again-list">
            {watched.map((p) => (
              <li key={p.key}>
                <a className="again-item" href={`/watch/${p.key}`} onClick={go(`/watch/${p.key}`)}>
                  <span className="again-name">{p.name}</span>
                  <span className="again-go">Watch</span>
                </a>
              </li>
            ))}
          </ul>
        </div>
      )}
      <p className="launcher-label">{watched.length ? "Or set up a device" : "Which device is this?"}</p>
      <a className="choice" href="/baby" onClick={go("/baby")}>
        <span className="choice-icon"><Icon name="crib" size={26} /></span>
        <span className="choice-text">
          <strong>{station ? `Baby station: ${station.name}` : "Baby station"}</strong>
          <small>{station ? "Open it again on this device." : "The phone by the crib. It sends video and sound."}</small>
        </span>
      </a>
      <a className="choice" href="/parent" onClick={go("/parent")}>
        <span className="choice-icon"><Icon name="eye" size={26} /></span>
        <span className="choice-text">
          <strong>Parent</strong>
          <small>Watch and listen from this phone or laptop.</small>
        </span>
      </a>
      <p className="launcher-note">Free. No account. Video goes from phone to phone and is never recorded.</p>
    </div>
  );
}

Change history

Move store links to openapps.free
11d38ef641 · 17 hours ago
Release with preview
41c8af3ee5 · 19 hours ago
Bind agent address in policy
5b2d792529 · 19 hours ago
Use OpenApps service URLs and add contribution strip (retry)
be4477dcb3 · 19 hours ago
Bounded source sync
5c9ec00c29 · 2 days ago
Bounded source sync
b33aa231f4 · 2 days ago
Bounded source sync
6cb67b3c8e · 2 days ago
Bounded source sync
e054acaa29 · 2 days ago