├── backend
├── public
│ └── .gitkeep
├── .gitignore
├── api
│ └── index.ts
├── vercel.json
├── src
│ ├── index.ts
│ ├── routes
│ │ ├── contest
│ │ │ ├── contest.route.ts
│ │ │ └── contest.controller.ts
│ │ └── index.ts
│ ├── app.ts
│ ├── types.ts
│ └── platforms
│ │ ├── codeforces.ts
│ │ ├── codingninja.ts
│ │ ├── cache.ts
│ │ ├── codechef.ts
│ │ ├── leetcode.ts
│ │ ├── geeksforgeeks.ts
│ │ └── atcoder.ts
├── package.json
├── tsconfig.json
└── package-lock.json
├── browser-extension
├── src
│ ├── App.css
│ ├── vite-env.d.ts
│ ├── types
│ │ ├── theme.ts
│ │ └── contest.ts
│ ├── main.tsx
│ ├── components
│ │ ├── Credits.tsx
│ │ ├── Navbar.tsx
│ │ ├── FilterMenu.tsx
│ │ ├── Loader.tsx
│ │ ├── Alarms.tsx
│ │ ├── SettingsMenu.tsx
│ │ ├── ContestList.tsx
│ │ └── Card.tsx
│ ├── index.css
│ ├── hooks
│ │ ├── useTheme.ts
│ │ └── useContests.ts
│ ├── App.tsx
│ └── assets
│ │ └── react.svg
├── postcss.config.js
├── public
│ ├── logo
│ │ ├── icons48.png
│ │ └── icons96.png
│ ├── images
│ │ └── platforms
│ │ │ ├── atcoder.png
│ │ │ ├── codechef.jpeg
│ │ │ ├── leetcode.png
│ │ │ ├── codeforces.png
│ │ │ ├── codingninja.jpg
│ │ │ └── geeksforgeeks.png
│ ├── manifest.json
│ ├── background.js
│ └── vite.svg
├── versions
│ ├── contest-list-1.0.0.zip
│ ├── contest-list-1.1.0.zip
│ ├── contest-notifier-1.1.1.zip
│ └── contest-notifier-1.1.2.zip
├── vite.config.ts
├── tailwind.config.js
├── tsconfig.node.json
├── .gitignore
├── index.html
├── .eslintrc.cjs
├── tsconfig.json
├── package.json
└── README.md
├── LICENSE
└── README.md
/backend/public/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/browser-extension/src/App.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/backend/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
--------------------------------------------------------------------------------
/browser-extension/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
7 | Credits 8 | 13 | Vaibhav Arora 14 | 15 |
16 |68 | No alarms set. To set an alarm, click on the alarm icon next to the contest name. 69 |
70 | )} 71 |Refreshing Contests
Unable to refresh contests!
73 |Please check your internet connection.
74 | 75 | )} 76 |90 | {STATUS.ended} 91 |
92 |98 | {STATUS.ongoing} 99 |
100 |107 | {getRemainingTime(contest.startTime, curTime.getTime())} 108 |
109 | 110 | { 112 | e.preventDefault(); 113 | handleToggleAlarm(); 114 | }} 115 | className="ml-1 px-2" 116 | > 117 | {alarmSet ? ( 118 |126 | {`Starts at ${startDate.toLocaleDateString(undefined, { 127 | year: "numeric", 128 | month: "long", 129 | day: "numeric", 130 | timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone, 131 | })}, ${startDate.toLocaleTimeString(undefined, { 132 | hour: "2-digit", 133 | minute: "2-digit", 134 | timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone, 135 | })}`} 136 |
137 |138 | {`Ends at ${endDate.toLocaleDateString(undefined, { 139 | year: "numeric", 140 | month: "long", 141 | day: "numeric", 142 | timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone, 143 | })}, ${endDate.toLocaleTimeString(undefined, { 144 | hour: "2-digit", 145 | minute: "2-digit", 146 | timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone, 147 | })}`} 148 |
149 |150 | {`Duration (in mins): ${contest.duration}`} 151 |
152 |