forms-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 ce303909347f
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 cf614aedcf4cdabfa9c45095
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/main.tsx
// Forms' entry. "/" keeps the static landing; "/new", "/f/<id>" and the owner pages hide it and show the app.
// The public form needs no account library, so the builder and owner pages load only when opened.
import { lazy, Suspense } from "react";
import { createRoot } from "react-dom/client";
import { usePath } from "./lib/router";
import { Overlays } from "./ui";
import { Respond, PageSkeleton } from "./Respond";
import { YourForms } from "./YourForms";
import type { Tab } from "./Owner";
import "./styles.css";

const NewForm = lazy(() => import("./Builder").then((m) => ({ default: m.NewForm })));
const Owner = lazy(() => import("./Owner").then((m) => ({ default: m.Owner })));

const LANDING_TITLE = document.title;

function App() {
  const path = usePath();
  const isNew = /^\/new\/?$/.test(path);
  const form = path.match(/^\/f\/([A-Za-z0-9]{8,32})(?:\/(results|responses|edit|share))?\/?$/);
  document.body.classList.toggle("app-mode", isNew || Boolean(form));
  // The public form shows only the form: no site menu or footer for the people filling it in.
  document.body.classList.toggle("form-mode", Boolean(form && !form[2]));
  if (!isNew && !form) document.title = LANDING_TITLE;
  return (
    <>
      <Suspense fallback={<PageSkeleton />}>
        {isNew ? <NewForm /> : form ? (form[2] ? <Owner formId={form[1]} tab={form[2] as Tab} key={form[1]} /> : <Respond formId={form[1]} key={form[1]} />) : null}
      </Suspense>
      <Overlays />
    </>
  );
}

createRoot(document.getElementById("app")!).render(<App />);
const mineSlot = document.getElementById("your-forms");
if (mineSlot) createRoot(mineSlot).render(<YourForms />);

Change history

Quality pass: conditional questions, 0 to 10 scale, QR code, prefill links, results tabs, API docs
ce30390934 · 4 hours ago
Bounded source sync
7d82add8ae · 1 day ago
Bounded source sync
8230fd7d59 · 1 day ago
Bounded source sync
d92a6e3b44 · 1 day ago
Bounded source sync
b548641922 · 1 day ago
Bounded source sync
b89074ffd2 · 1 day ago