santa-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 b8b257a837b1
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 c7891873549c9ca1004894b3
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/Yours.tsx
// The landing page's live part: the exchanges this browser organizes and the people it is.
import { useState } from "react";
import { myExchanges, myPeople } from "./lib/mine";

function Go({ to, title, sub }: { to: string; title: string; sub: string }) {
  return (
    <li>
      <a href={to} data-nav>
        <strong>{title}</strong>
        <span>{sub}</span>
      </a>
    </li>
  );
}

export function Yours() {
  const [exchanges] = useState(myExchanges);
  const [people] = useState(myPeople);
  if (!exchanges.length && !people.length) return null;
  return (
    <div className="your">
      {people.length > 0 && (
        <section aria-label="Your Secret Santa pages">
          <h2 className="your-title">Your pages</h2>
          <ul className="your-list">
            {people.slice(0, 6).map((p) => <Go key={p.pid} to={`/x/${p.exchangeId}/p/${p.pid}`} title={p.exchangeName || "Secret Santa"} sub={`You are ${p.name}`} />)}
          </ul>
        </section>
      )}
      {exchanges.length > 0 && (
        <section aria-label="Exchanges you organize">
          <h2 className="your-title">You organize</h2>
          <ul className="your-list">
            {exchanges.slice(0, 6).map((x) => <Go key={x.id} to={`/x/${x.id}/admin`} title={x.name || "Secret Santa"} sub="Organizer view" />)}
          </ul>
        </section>
      )}
      <p className="hint">Listed on this device only.</p>
    </div>
  );
}

Change history

Point OpenApps links to openapps.free
b8b257a837 · 18 hours ago
Bind agent address in policy constants
9a72d0200b · 20 hours ago
Use functions.openapps.xyz alias, add OpenApp contribution strip
60038fa63d · 20 hours ago
Bounded source sync
a2e0247232 · 1 day ago
Bounded source sync
c84c736f8b · 1 day ago
Bounded source sync
3a54a80cdc · 1 day ago
Bounded source sync
2eed41b4de · 1 day ago