Ben Blum

תיאור מקרה

Calendar / studio

A local-first browser tool that turns explicit event details into editable events and portable .ics files.

טכנולוגיות

  • Vite
  • React
  • TypeScript
  • ical.js
  • @js-temporal/polyfill

צילומי מסך

Placeholder screenshot of the Calendar / studio editor. Not a capture of the running app.
Placeholder. Not a capture of the running app. Intended view: event editor.
Placeholder screenshot of the Calendar / studio event list. Not a capture of the running app.
Placeholder. Not a capture of the running app. Intended view: event list.

Problem

Turn explicit event details into events you can edit, keep on the device, and download as .ics files. The app does not connect to a calendar account and it does not need a backend.

Architecture

The README and docs/IMPLEMENTATION.md describe the app as a React editor and event list, plus a validated event model. Local development expects Node.js 22.12 or newer. The package name in the repository is calendar-events-studio.

  • Time zones go through Temporal (@js-temporal/polyfill) and the browser time zone database. Named IANA zones are supported. A local time that does not exist is rejected, and a repeated daylight-saving hour has separate start and end choices.
  • Export follows RFC 5545. Timed events are written in UTC, and the editor zone is kept in an optional X-CES-TIMEZONE;VALUE=TEXT property. All-day events show an inclusive last day in the editor and an exclusive DTEND in the file.
  • Import uses ICAL.js. It accepts a constrained subset and rejects the rest as a whole, including recurrence, invitations, alarms, floating times, and malformed data. There is no partial import.
  • Browser storage uses the key ces_events_v1. It is versioned and validated, not encrypted, and not synced across devices. The cap is 500 events. Imports are capped at 40 MB.

A structured-text shortcut fills a draft. It does not read natural language. The zone defaults to UTC when the line omits it.

Design review | 2026-10-12 | 09:00-10:30 | America/New_York | Studio 2
Offsite | 2026-12-31..2027-01-02 | all-day

Decisions

  • No external AI. The README says the earlier browser-side provider calls, provider SDK, and key entry were removed.
  • The production content security policy blocks network connections with connect-src 'none'.
  • Unsupported calendar data fails the import instead of being dropped quietly. Google Calendar caps imports at 1 MB, so large collections are downloaded per event.
  • The older service worker was removed. The README does not promise an installable offline app.
  • The GitHub homepage for this repository is already a public deployment. This portfolio change does not deploy or modify that site.

Tests

The README verifies with npm run check (strict lint, unit and component tests, TypeScript, production build) and npm run test:browser (desktop and mobile Chromium against the production build, synthetic events only). GitHub Actions repeats those checks. This page did not re-run that suite.

Documented cases include invalid and leap dates, daylight-saving gaps and folds, non-hour time zones, all-day boundaries, escaping and Unicode line folding, round trips, malformed imports, storage failure, delete and undo, and keyboard use on a narrow viewport.

Sources

README and docs/IMPLEMENTATION.md in benforcapita/Calendar_events_generator. The live link is the repository homepage, which responded with the local-first editor.

כל הפרויקטים