{"id":18235788,"url":"https://github.com/rbbydotdev/someday","last_synced_at":"2025-05-15T03:05:49.817Z","repository":{"id":260792918,"uuid":"881753767","full_name":"rbbydotdev/someday","owner":"rbbydotdev","description":"Free to host calendar availability picker - open-source cal.com / calendly alternative built on Google-Apps-Script for Gmail users. Built with modern technologies like React, TypeScript, Shadcn/UI, and Vite.  https://someday-demo.vercel.app","archived":false,"fork":false,"pushed_at":"2025-03-21T23:39:54.000Z","size":218,"stargazers_count":974,"open_issues_count":5,"forks_count":41,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-14T04:58:58.543Z","etag":null,"topics":["google-apps-script","react","scheduling","shadcn-ui","typescript","vite"],"latest_commit_sha":null,"homepage":"https://someday-demo.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rbbydotdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-11-01T06:37:58.000Z","updated_at":"2025-04-11T16:47:09.000Z","dependencies_parsed_at":"2024-11-19T00:24:12.945Z","dependency_job_id":"fd48dd57-2692-4492-b41f-ee05907f7549","html_url":"https://github.com/rbbydotdev/someday","commit_stats":{"total_commits":15,"total_committers":2,"mean_commits":7.5,"dds":0.4666666666666667,"last_synced_commit":"b576c78b5d203c5594bdd0793dd034297ba97328"},"previous_names":["rbbydotdev/someday"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rbbydotdev%2Fsomeday","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rbbydotdev%2Fsomeday/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rbbydotdev%2Fsomeday/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rbbydotdev%2Fsomeday/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rbbydotdev","download_url":"https://codeload.github.com/rbbydotdev/someday/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254264765,"owners_count":22041793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["google-apps-script","react","scheduling","shadcn-ui","typescript","vite"],"created_at":"2024-11-05T00:10:15.736Z","updated_at":"2025-05-15T03:05:49.797Z","avatar_url":"https://github.com/rbbydotdev.png","language":"TypeScript","readme":"# Someday\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"./someday-logo.svg\" width=\"250\" alt=\"someday logo\"/\u003e\n\u003c/p\u003e\n\n**Free to host calendar availability picker - open-source cal.com / calendly alternative built on [Google-Apps-Script](https://developers.google.com/apps-script) for Gmail users.**\n\n\n## Demo (mocked endpoints)\n\n[https://someday-demo.vercel.app/](https://someday-demo.vercel.app/)\n\n## What is Someday?\n\nSomeday is a simple, open-source scheduling tool designed specifically for Gmail users. Uses Google Apps Scripts to host and [clasp](https://github.com/google/clasp) to manage. Built with modern technologies like [React](https://react.dev/), [TypeScript](https://www.typescriptlang.org/), [Shadcn/UI](https://ui.shadcn.com/), and [Vite](https://vite.dev/). A simple alternative to traditional scheduling apps like Calendly.\n\n### Key Features\n\n- **Free to Host**: Using Google Apps Script, hosting is free via your google account.\n- **Open Source**: Someday is completely free to use and open for contributions.\n- **Effortless Integration**: Designed as a Google Apps Script, Someday integrates seamlessly with your Gmail, making it easy to manage your schedule directly from your inbox.\n- **Developer-Friendly**: Built with modern, developer-preferred technologies, Someday is easy to customize and extend to meet your specific needs.\n- **Customizable Work Hours**: Set your availability with precision, allowing others to book time slots that fit your schedule perfectly.\n- **Simple Booking Process**: Users can select a date and time slot, then fill out a straightforward form with their name, email, phone, and an optional note.\n- **Privacy First**: No data sharing beyond google to 3rd party apps\n\n## Getting Started\n\n### Customize \n\nChange the following variables in `backend/src/app.ts` to customize your availability settings:\n\n```typescript\n// backend/src/app.ts\nconst CALENDAR = \"primary\";\nconst TIME_ZONE = \"America/New_York\";\nconst WORKDAYS = [1, 2, 3, 4, 5];\nconst WORKHOURS = {\n  start: 9,\n  end: 13,\n};\nconst TIMESLOT_DURATION = 30;\n```\n\n### Self host iframe html / remove google app scripts banner\n\n- Google apps script has a banner that says \"This application was created by a Google Apps Script user\", to remove you can host the html file yourself and embed the script as an iframe\n\n- Use the `hosted-iframe-example.html` file, github pages is a good option for this, add your script url to the iframe src\n\n### Develop\n\n- `cd ./frontend`\n- `npm install`\n- `npm run dev`\n- dummyData will be generated on the fly using the generateDummyData function ~line 42 in `frontend/hooks/useGoogleTimeSlots.ts`\n\n### Install \n\n\n### Step 1: Set Up Your Environment\n\n__you may need to sign out of all accounts, and only into your target account__\n\n1. **Install `clasp`:**\n   - Ensure you have Node.js installed.\n   - Install `clasp` globally using npm:\n     ```bash\n     npm install -g @google/clasp@^2.5.0\n     ```\n\n2. **Login with `clasp`:**\n   - Execute the following command to log in:\n     ```bash\n     clasp login\n     ```\n\n3. **Remove Existing Configuration (if necessary):**\n   - If you encounter issues, remove the existing `.clasp.json` file:\n     ```bash\n     rm .clasp.json\n     ```\n\n\n4. **Enable Apps Script API:**\n   - Visit [Google Apps Script API settings](https://script.google.com/home/usersettings).\n   - Enable the Apps Script API.\n   - Wait a few minutes for the changes to propagate.\n\n### Step 2: Create and Deploy the Script\n\n1. **Create a New Project:**\n   - Create a new Apps Script project as a web app:\n     ```bash\n     clasp create --type webapp\n     ```\n\n2. **Deploy the Script:**\n   - Use the following command to deploy your script:\n     ```bash\n     npm run deploy\n     ```\n\n\n3. **Access the Web App:**\n   - Visit the URL provided after deployment.\n   - You will see the message \"Authorization is required to perform that action.\"\n  \n4. **Authorize the Web App: (!!! IMPORTANT !!!)**\n   - run `clasp open` to open the editor\n   - go to `dist/app.gs`\n   - in the drop down at the top, select `fetchAvailability` then hit run\n   - Authorization modal will pop up, 'Review permissions', select your account, you will see a warning, go to advanced, then Go to \u003cyour script\u003e(unsafe) then click Allow\n   - if it worked, refresh the page/editor then run the function again and it should complete without issue.\n\n5. **Calendar Access:**\n   - By default, the script uses your primary calendar\n   - To use other calendars, make sure they are added to your Google Calendar with appropriate permissions\n   - You can change which calendar to use by modifying the `CALENDAR` variable in `backend/src/app.ts`\n   - Note: The script needs at least read access to the calendar you specify\n   - To use multiple calendars, you'll need to add them as Script Properties in the Apps Script editor:\n     1. Open the script editor with `clasp open`\n     2. Go to Project Settings (⚙️ icon)\n     3. Under \"Script Properties\", click \"Add Script Property\"\n     4. Add a property named \"CALENDARS\" with a comma-separated list of calendar IDs\n\n## Cheat Sheet\n\n- `npm run deploy` - build and delpoy\n\n- `npm run build` - build only\n\n- `undeployall.sh` - undeploy all versions of the script\n\n- `deployments.sh` - list all deployments web-urls\n\n- `clasp open` - open the script editor\n\n## Screen Captures\n\n\u003cimg src=\"./screencap1.jpg\" width=\"350\" /\u003e\n\u003cimg src=\"./screencap2.jpg\" width=\"350\" /\u003e\n\n\n## Contributing\n\nOpen a pull request or issue to contribute to Someday. welcoming all contributions, including bug fixes, feature requests, and documentation improvements.\n\n## License\n\nMIT\n","funding_links":[],"categories":["TypeScript","Platforms \u0026 Applications","Tools"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frbbydotdev%2Fsomeday","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frbbydotdev%2Fsomeday","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frbbydotdev%2Fsomeday/lists"}