{"id":24950365,"url":"https://github.com/swebi/orderly","last_synced_at":"2026-04-13T19:33:24.047Z","repository":{"id":275442832,"uuid":"922385907","full_name":"Swebi/Orderly","owner":"Swebi","description":"Orderly scrapes SRM Academia to fetch the current day order and seamlessly syncs your class schedule with Google Calendar.  Just log in once, save your timetable, your calendar will update automatically every day.","archived":false,"fork":false,"pushed_at":"2025-02-22T17:59:30.000Z","size":687,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-22T18:39:57.551Z","etag":null,"topics":["bull","bullmq","express","google-api","google-calendar","magic-ui","postgresql","prisma","puppeteer","react","redis","shadcn-ui"],"latest_commit_sha":null,"homepage":"https://orderly.suhayb.site","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Swebi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2025-01-26T03:46:36.000Z","updated_at":"2025-02-22T17:59:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"1bb3b153-7e61-4f76-9ff7-1ee4fddd12b8","html_url":"https://github.com/Swebi/Orderly","commit_stats":null,"previous_names":["swebi/orderly"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swebi%2FOrderly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swebi%2FOrderly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swebi%2FOrderly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swebi%2FOrderly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Swebi","download_url":"https://codeload.github.com/Swebi/Orderly/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246087920,"owners_count":20721603,"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":["bull","bullmq","express","google-api","google-calendar","magic-ui","postgresql","prisma","puppeteer","react","redis","shadcn-ui"],"created_at":"2025-02-02T23:16:38.549Z","updated_at":"2026-04-13T19:33:23.991Z","avatar_url":"https://github.com/Swebi.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Orderly\nOrderly scrapes SRM Academia to fetch the current day order and seamlessly\nsyncs your class schedule with Google Calendar.\n\nJust log in once, save your timetable and let Orderly handle the rest. Your calendar will update automatically every day.\n\n##  Features\n- **Automated Day Order Scraping** – Uses Puppeteer to scrape the daily order from Academia.\n- **Google Calendar Integration** – Syncs your classes automatically based on your saved timetable.\n- **Real-Time Monitoring** – Powered by BullMQ for reliable job handling for errors and retries. Uses BullBoard to track job execution and logs.\n\n##  Usage\n1. Log in using your Google account.\n2. Add your subjects\n3. Go to edit timetable and add your classes for each day order\n4. **Save your timetable** in the app\n5. Enable automated events\n6. Click **Manual Trigger** to add your schedule into google calendar the first time **(Optional)**\n\n\nOrderly will now scrape academia daily at midnight and your classes into your google calendar\n\n\n##  Tech Stack\n### **Backend**\n- [Express](https://expressjs.com/)\n- [Prisma](https://www.prisma.io/)\n- [BullMQ](https://docs.bullmq.io/) - Job queue for handling background tasks like scraping and calendar event scheduling for mutliple users.\n- [BullBoard](https://github.com/felixmosh/bull-board) – UI dashboard for monitoring job queues.\n- [Google APIs](https://developers.google.com/) – For authentication and Google Calendar integration.\n- [Puppeteer](https://pptr.dev/) – Headless browser for web scraping.\n- [Postgres](https://www.postgresql.org/)\n- [Redis](https://redis.io/)\n\n### **Frontend**\n- [React](https://react.dev/)\n- [Vite](https://vitejs.dev/)\n- [Shadcn](https://ui.shadcn.com/)\n- [MagicUI](https://magicui.design/)\n- [TsParticles](https://github.com/matteobruni/tsparticles)\n\n### **Deployment**\n- **Backend:** AWS EC2\n- **Frontend:** Vercel\n\n## App Preview\n\n\u003cimg width=\"1440\" alt=\"image\" src=\"https://github.com/user-attachments/assets/999d7624-be3e-468a-830d-1367662f0370\" /\u003e\n\u003cimg width=\"1440\" alt=\"image\" src=\"https://github.com/user-attachments/assets/c0bdb96f-3590-47a7-9ac2-0e15545d0629\" /\u003e\n\u003cimg width=\"1440\" alt=\"image\" src=\"https://github.com/user-attachments/assets/337b2116-7e5d-4267-acd2-0d419c528d6a\" /\u003e\n\n### Google Calendar\n\n\u003cimg width=\"1439\" alt=\"image\" src=\"https://github.com/user-attachments/assets/571fd94f-76f2-406c-a5a7-6a09380c9f76\" /\u003e\n\n### Bull Board\n\n\u003cimg width=\"1438\" alt=\"image\" src=\"https://github.com/user-attachments/assets/cffcd1cc-1920-41d0-aa11-49569f0c26bf\" /\u003e\n\u003cimg width=\"1440\" alt=\"image\" src=\"https://github.com/user-attachments/assets/95388160-477d-4b85-bc98-7b8215135a68\" /\u003e\n\u003cimg width=\"1384\" alt=\"image\" src=\"https://github.com/user-attachments/assets/c88ff7ca-c3aa-42e9-9612-248c0d9e3f4b\" /\u003e\n\n\n\n## Installation \u0026 Setup\n### **Backend**\n1. Clone the repository:\n   ```sh\n   git clone https://github.com/swebi/Orderly.git\n   cd server\n   ```\n2. Install dependencies:\n   ```sh\n   pnpm install\n   ```\n3. Set up environment variables in a .env file:\n   ```env\n\tEMAIL = \u003cSRM Academia email\u003e\n\tPASSWORD = \u003cSRM Academia password\u003e\n\tDATABASE_URL= \u003cPostgres URL\u003e\n\tCLIENT_ID= \u003cGoogle Client ID\u003e\n\tCLIENT_SECRET= \u003cGoogle Client Secret\u003e\n\tSERVER_URL= \u003cBackend URL\u003e\n\tREDIRECT_URL= \u003cBackend endpoint for google auth redirect\u003e\n\tADMIN_PASSWORD= \u003cString\u003e\n\tCLIENT_URL= \u003cFrontend URL\u003e\n   ```\n4. Run database migrations:\n   ```sh\n   pnpm dlx prisma db push\n   ```\n5. Start the server:\n   ```sh\n   pnpm dev\n   ```\n\n### **Frontend**\n1. Navigate to the frontend folder:\n   ```sh\n   cd client\n   ```\n2. Install dependencies:\n   ```sh\n   pnpm install\n   ```\n3. Set up environment variables in a .env file:\n   ```env\n\tVITE_PUBLIC_SERVER_URL = \u003cBackend URL\u003e\n\tVITE_PUBLIC_GITHUB_URL = \u003cGitHub URL\u003e\n   ```\n4. Start the server:\n   ```sh\n   pnpm dev\n   ```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswebi%2Forderly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswebi%2Forderly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswebi%2Forderly/lists"}