diff --git a/.github/assets/images/banner.png b/.github/assets/images/banner.png new file mode 100644 index 000000000..81a92fa91 Binary files /dev/null and b/.github/assets/images/banner.png differ diff --git a/.github/assets/images/hero.jpg b/.github/assets/images/hero.jpg deleted file mode 100644 index e23d53dd5..000000000 Binary files a/.github/assets/images/hero.jpg and /dev/null differ diff --git a/.github/assets/images/logo.svg b/.github/assets/images/logo.svg deleted file mode 100644 index 88576ad18..000000000 --- a/.github/assets/images/logo.svg +++ /dev/null @@ -1,16 +0,0 @@ - diff --git a/CLAUDE.md b/CLAUDE.md index 3fb0153f8..f7ed1532f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,6 +13,14 @@ Monorepo for Timeful, a group availability/scheduling app. Internal identifiers (Go module `schej.it/server`, Mongo DB `schej-it`, prod email "Schej.it") still use the old name โ leave them alone unless rebranding is the explicit task. +## Branding (2bz2fill fork) + +- User-visible name is **2bz2fill**; it is a fork of Timeful and keeps a "Based on Timeful" credit plus a source-code link in the footer (AGPL ยง13). +- No domain yet: the server's public address comes from `BASE_URL` (placeholder `https://2bz2fill.example`); the sign-in email sender from `EMAIL_FROM`. Frontend links to the site use `window.location.origin`, never a hard-coded domain. +- Never point users or data at Timeful-owned services: their analytics (PostHog host, GTM container), PayPal, feedback form, Discord/Reddit/X, blog, or `betterwhen2meet.com`. Analytics are opt-in via `VUE_APP_POSTHOG_API_KEY` / `VUE_APP_GTM_ID`. +- `PrivacyPolicy.vue` is written from what the code actually stores and sends. When a change adds data collection, a third party, analytics or emails, update the policy in the same change. +- The logo is drawn in code (`BrandMark.vue` + DM Sans wordmark in `Logo.vue`); `public/favicon.svg` must match `BrandMark.vue`. + ## Common commands ### Frontend (`cd frontend`) diff --git a/README.md b/README.md index ceaf17a7f..4a28c26b1 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,63 @@ -
-
+**2bz2fill** is a group availability poll for people who are too busy to fill out a long
+When2meet-style grid. Every feature is judged by one question: does it make responding take less
+effort?
+
+It is a fork of [Timeful](https://github.com/schej-it/timeful.app) (formerly Schej), an open-source
+scheduling app by Jonathan Liu and contributors. Thank you to them: the poll grid, calendar
+integrations, time zone handling and most of the code here are theirs.
-Timeful is a scheduling platform helps you find the best time for a group to meet. It is a free availability poll that is easy to use and integrates with your calendar.
+Built with [Vue 2](https://github.com/vuejs/vue), [MongoDB](https://github.com/mongodb/mongo),
+[Go](https://github.com/golang/go), and [TailwindCSS](https://github.com/tailwindlabs/tailwindcss).
-Hosted version of the site: https://timeful.app
+## How it differs from Timeful
-Built with [Vue 2](https://github.com/vuejs/vue), [MongoDB](https://github.com/mongodb/mongo), [Go](https://github.com/golang/go), and [TailwindCSS](https://github.com/tailwindlabs/tailwindcss)
+Timeful is a general scheduling poll. 2bz2fill keeps its features and focuses on cutting the work
+of responding. Planned, in order:
-## Demo
+1. Upload an `.ics` file to fill the grid from any calendar app, with no account or sign-in.
+2. Save "my usual week" once and have every new poll arrive pre-filled from it.
+3. Fast manual tools: mark busy times instead of free ones, fill or clear a whole day, copy a day,
+ reuse your last response.
+4. Pre-filled responses you only need to check and confirm.
+5. A grid that works well on a phone.
-[](https://www.youtube.com/watch?v=vFkBC8BrkOk)
+The Timeful-specific parts (their branding, blog, socials, analytics, donation links and the
+When2meet converter, which runs on Timeful's own servers) have been removed.
-## Features
+## Features inherited from Timeful
- See when everybody's availability overlaps
-- Easily specify date + time ranges to meet between
-- Google calendar, Outlook, Apple calendar integration
+- Date and time ranges, or days of the week
+- Autofill from Google Calendar, Outlook, Apple Calendar or an ICS feed URL
- "Available" vs. "If needed" times
-- Determine when a subset of people are available
-- Schedule across different time zones
-- Email notifications + reminders
-- Duplicating polls
-- Availability groups - stay up to date with people's real-time calendar availability
-- Export availability as CSV
-- Only show responses to event creator
+- See when a subset of people are available
+- Time zone support
+- Email notifications and reminders
+- Duplicating polls, availability groups, CSV export
+- Only show responses to the event creator
+- Import a poll (with its responses) from a 2bz2fill or Timeful link
## Plugin API
-Read these docs to design your own browser plugins to get + set availability on Timeful events programmatically!
-
-[Plugin API Docs](./PLUGIN_API_README.md)
+Browser plugins can get and set availability on a poll programmatically. See the
+[Plugin API docs](./PLUGIN_API_README.md).
## Self-hosting
-See the [Deployment Guide](./DEPLOYMENT.md) for Docker Compose and NixOS setup instructions.
+See the [Deployment Guide](./DEPLOYMENT.md) for Docker Compose and NixOS setup. Set `BASE_URL` in
+`server/.env` to the site's public address; until it is set, emails link to the placeholder
+`https://2bz2fill.example`. Analytics are off unless you set your own PostHog key or Google Tag
+Manager ID in `frontend/.env` (see `frontend/.env.template`).
+
+## License
+
+[GNU AGPL v3](./LICENSE), the same as Timeful. If you run a modified copy as a public website, you
+must offer its source code to your users; the site footer links to this repository for that reason.
diff --git a/frontend/.env.template b/frontend/.env.template
index 56ded3388..0b497dab4 100644
--- a/frontend/.env.template
+++ b/frontend/.env.template
@@ -1 +1,7 @@
-VUE_APP_POSTHOG_API_KEY=?
\ No newline at end of file
+# Google OAuth client ID (same value as CLIENT_ID in server/.env). Required for Google sign-in.
+VUE_APP_GOOGLE_CLIENT_ID=
+VUE_APP_POSTHOG_API_KEY=
+# Optional. Defaults to PostHog Cloud (US).
+VUE_APP_POSTHOG_HOST=
+# Optional Google Tag Manager container ID, e.g. GTM-XXXXXXX
+VUE_APP_GTM_ID=
diff --git a/frontend/public/favicon-16x16.png b/frontend/public/favicon-16x16.png
index 722f50ef1..69bc3da1d 100644
Binary files a/frontend/public/favicon-16x16.png and b/frontend/public/favicon-16x16.png differ
diff --git a/frontend/public/favicon-32x32.png b/frontend/public/favicon-32x32.png
index e11db3d3d..825cdc28b 100644
Binary files a/frontend/public/favicon-32x32.png and b/frontend/public/favicon-32x32.png differ
diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico
index f69846399..5d4ff3707 100644
Binary files a/frontend/public/favicon.ico and b/frontend/public/favicon.ico differ
diff --git a/frontend/public/favicon.svg b/frontend/public/favicon.svg
new file mode 100644
index 000000000..37116a7b3
--- /dev/null
+++ b/frontend/public/favicon.svg
@@ -0,0 +1 @@
+
diff --git a/frontend/public/img/ogImage.png b/frontend/public/img/ogImage.png
index 00f459a69..81a92fa91 100644
Binary files a/frontend/public/img/ogImage.png and b/frontend/public/img/ogImage.png differ
diff --git a/frontend/public/img/when2meetOgImage2.png b/frontend/public/img/when2meetOgImage2.png
deleted file mode 100644
index 2041349a1..000000000
Binary files a/frontend/public/img/when2meetOgImage2.png and /dev/null differ
diff --git a/frontend/public/index.html b/frontend/public/index.html
index 19d37d756..8dd0b5ea5 100644
--- a/frontend/public/index.html
+++ b/frontend/public/index.html
@@ -1,25 +1,11 @@
-
-
-
-
-
+
+
@@ -27,16 +13,10 @@
-