{"id":29543519,"url":"https://github.com/analogdotnow/Analog","last_synced_at":"2025-07-17T14:03:30.246Z","repository":{"id":293734302,"uuid":"984965707","full_name":"analogdotnow/Analog","owner":"analogdotnow","description":"Meet the calendar that changes everything","archived":false,"fork":false,"pushed_at":"2025-07-09T17:45:27.000Z","size":1191,"stargazers_count":968,"open_issues_count":35,"forks_count":118,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-07-09T21:16:05.553Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://analog.now","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/analogdotnow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":["JeanMeijer"]}},"created_at":"2025-05-16T20:21:57.000Z","updated_at":"2025-07-09T18:34:44.000Z","dependencies_parsed_at":"2025-05-16T21:35:21.521Z","dependency_job_id":"cbdb3742-e62a-44c1-b87b-e189b2e90a0e","html_url":"https://github.com/analogdotnow/Analog","commit_stats":null,"previous_names":["jeanmeijer/analog","analogdotnow/analog"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/analogdotnow/Analog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/analogdotnow%2FAnalog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/analogdotnow%2FAnalog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/analogdotnow%2FAnalog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/analogdotnow%2FAnalog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/analogdotnow","download_url":"https://codeload.github.com/analogdotnow/Analog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/analogdotnow%2FAnalog/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265614020,"owners_count":23798369,"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":[],"created_at":"2025-07-17T14:01:18.746Z","updated_at":"2025-07-17T14:03:30.240Z","avatar_url":"https://github.com/analogdotnow.png","language":"TypeScript","funding_links":["https://github.com/sponsors/JeanMeijer"],"categories":["TypeScript"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003eAnalog\u003c/h1\u003e\n  \u003cp align=\"center\"\u003eThe open source calendar that changes everything\u003c/p\u003e\n\u003c/p\u003e\n\n## Getting Started\n\nTo get Analog up and running on your local machine, follow these steps:\n\n### Prerequisites\n\nEnsure you have the following installed:\n\n- **Bun**: A fast JavaScript runtime, package manager, bundler, and test runner.\n  - [Installation Guide](https://bun.sh/docs/installation)\n- **Docker Desktop**: For running the PostgreSQL database.\n  - [Installation Guide](https://www.docker.com/products/docker-desktop/)\n\n### Setup\n\n1.  **Clone the repository**:\n\n    ```bash\n    git clone https://github.com/jeanmeijer/analog.git\n    cd analog\n    ```\n\n2.  **Install dependencies**:\n\n    ```bash\n    bun install\n    ```\n\n3.  **Configure environment variables**:\n    Copy the example environment file:\n\n    ```bash\n    cp .env.example .env\n    ```\n\n    Then, open the newly created `.env` file. You will find default values for `DATABASE_URL` and `BETTER_AUTH_URL`. You need to set the following:\n    - `BETTER_AUTH_SECRET`: Generate a secure secret by running `openssl rand -hex 32` in your terminal.\n      \u003cbr/\u003e\u003cbr/\u003e\n\n4.  **Set up Google OAuth**:\n\n- `GOOGLE_CLIENT_ID` and `GOOGLE_CLIENT_SECRET`:\n  1. Create a Google project in the [Google Cloud Console](https://console.cloud.google.com/).\n  2. Follow [step 1 in the Better Auth documentation](https://www.better-auth.com/docs/authentication/google) to set up Google OAuth credentials.\n  3. Enable the Google Calendar API by visiting [Google Cloud Console APIs](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com) and enabling it for your project.\n  4. Add yourself as test user:\n     - Locate the Google OAuth [`Audience`](https://console.cloud.google.com/auth/audience) tab.\n     - Under 'Test users', click on 'Add Users'.\n     - Add your email(s) in the textbox and click on 'Save'.\n\n5. **Set up Microsoft OAuth** (optional):\n\n- `MICROSOFT_CLIENT_ID` and `MICROSOFT_CLIENT_SECRET`:\n  1. Go to the [Microsoft Azure Portal](https://portal.azure.com/), then navigate to Microsoft Entra ID → App registrations.\n  2. Register a new application and set the redirect URI (`http://localhost:3000/api/auth/callback/microsoft`).\n  3. Copy the Application (client) ID and create a new client secret under Certificates \u0026 secrets.\n  4. Go to API permissions, click + Add a permission, choose Microsoft Graph → Delegated permissions, and add:\n     - `Calendars.Read`, `Calendars.ReadWrite`, `User.Read`, `offline_access`\n\n### Database Setup\n\nAnalog uses PostgreSQL with Drizzle ORM. You can run the database using Docker:\n\n1.  **Start the PostgreSQL database container**:\n\n    ```bash\n    bun run docker:up\n    ```\n\n    This command uses `docker-compose.yml` to spin up a PostgreSQL container.\n\n2.  **Initialize the database**:\n    Once the database container is running and healthy, initialize the database:\n    ```bash\n    bun run db:push\n    ```\n\n### Running the Application\n\nAfter setting up the environment and database, you can start the development server:\n\n```bash\nbun run dev\n```\n\nThe application should now be accessible in your browser at [http://localhost:3000](http://localhost:3000).\n\n## Tech Stack\n\n- **Web**: Next.js, TypeScript, Tailwind v4, Bun, tRPC, TanStack Query, shadcn/ui\n- **Database**: Drizzle with PostgreSQL\n- **Authentication**: Better Auth for Google OAuth\n\n## Roadmap\n\nWIP.\n\n## Contributing\n\nPlease see [CONTRIBUTING.md](./CONTRIBUTING.md) for details on how to contribute to this project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanalogdotnow%2FAnalog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanalogdotnow%2FAnalog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanalogdotnow%2FAnalog/lists"}