All source files · Workbench

README.md

# Deadline Loom

A schedule with a memory. Built October 2, 2026 with Codex assistance for the DEV Sanity Challenge, Path Two.

The Astro workbench combines source-linked deadlines, editable work estimates, daily capacity, prerequisites, and a counterfactual source version. Changes recalculate the schedule and make prior local planning decisions stale. Calendar exports use UTC instants. The content and editorial review workflow live in Sanity.

Public demo: https://deadline-loom-jaye-2026.netlify.app/

Browse source: https://deadline-loom-jaye-2026.netlify.app/code/

The same read-only source repository is available through standard Git HTTP:

```sh
git clone https://deadline-loom-jaye-2026.netlify.app/deadline-loom.git
```

## Run

Requires Node 24+ and pnpm. Dependency versions are pinned by `pnpm-lock.yaml`.

```sh
pnpm install
pnpm dev
```

Open http://127.0.0.1:4321. A local fixture is always available and clearly labeled. To read the public contest dataset, copy `.env.example` to `.env` and set:

```text
PUBLIC_SANITY_PROJECT_ID=2mflxxa8
PUBLIC_SANITY_DATASET=production
```

These routing values are public. The app reads published content without authentication and refreshes once per minute while visible. Add your local or deployed origin to your Sanity project's CORS list with credentials disabled. It uses local fixture content if reads fail.

```sh
pnpm build
pnpm preview
node scripts/test-planner.mjs
```

The build is static and makes no network requests. No write token appears in browser code. The optional authenticated Studio uses the same schemas:

```sh
pnpm studio
```

An editor must sign in with access to the project. Do not publish editor credentials. To initialize your own project, set server-only `SANITY_PROJECT_ID`, `SANITY_DATASET`, and `SANITY_API_WRITE_TOKEN` in a private `.env`, then run:

```sh
node --env-file=.env scripts/seed-sanity.mjs
node --env-file=.env scripts/seed-sanity.mjs --apply
```

The first command validates locally. Only `--apply` performs a dataset mutation. The seed is idempotent, uses project-specific document IDs, and contains public source facts and explicitly simulated records.

## Try the interaction

1. Change the clock to UTC. The start input changes from October 2 at 13:00 CDT to 18:00 UTC while the actual planned instant stays the same.
2. Choose the simulated earlier source version for the first thread. Its deadline moves seven hours earlier; the recorded organizer deadline stays visible.
3. Add a reason and record a local planning decision. It is labeled local.
4. Raise the first thread's effort to 30 hours. Missed deadlines appear, and that planning decision becomes stale.
5. Toggle a prerequisite, change daily capacity, or pause a thread to compare scenarios.
6. Export the calendar. The file preserves UTC start/end times, escaped text, source links, and planning disclaimers.

## Model and boundaries

Six Sanity document types represent competitions, evidence sources, source claims, evidence revisions, review decisions, and project notes. References preserve provenance. Studio actions atomically approve/reject a specific revision with a reason and optimistic guards. A simulated revision cannot change a real competition date.

The public interface performs no remote mutations. Scenario notes live in browser local storage. Selecting a proposed source version is a rehearsal, not published acceptance. A feasible schedule is not eligibility, winning probability, or money received. Prize and source facts were checked October 2, 2026; effort and human-time estimates are illustrative assumptions.

The app orders work by earliest deadline and adds human minutes separately. It models serial work using average daily capacity; it is not an hourly availability calendar, holiday planner, or project-completion guarantee. Prerequisites are an explicit checklist, not automatically inferred from a favorable schedule.

## Verification

- Production Astro build passes.
- Planner verification covers Chicago/Pacific/India equivalent deadline instants, a winter timezone offset, earliest-deadline ordering, capacity, revision impact, UTC ICS timestamps, text escaping, UTF-8 line folding, invalidation after remote effort/minute changes, and preservation of explicit work overrides.
- Browser checks confirmed timezone-preserving display, source-version selection, local decision recording, missed-deadline changes, and stale decision memory.
- Live Sanity public reads return the linked content without an Authorization header. Source fixtures remain labeled if the connection is unavailable.
- An authenticated agent-operated Studio rehearsal approved the simulated revision. The decision persisted publicly, and the official deadline remained unchanged.

## AI disclosure and sources

Codex agents researched primary rules, designed the schema, generated the Astro interface and Studio actions, and ran verification. No invented participant testimonials, organizer updates, or paid-service claims were used. The simulated earlier deadline is visibly marked as a fixture.

Primary challenge: https://dev.to/challenges/sanity-2026-09-16

General rules: https://dev.to/page/official-hackathon-rules

Sanity pricing and no-card trial: https://www.sanity.io/pricing and https://www.sanity.io/docs/platform-management/growth-plan-trial

## License

Original application code is licensed under MIT (see LICENSE). Third-party packages keep their respective licenses. Linked organizer source material remains its owners' material; the seed contains short factual summaries and links.