Welcome back to ": Code Against the Clock :!" – the blog series where I transform mundane tasks into streamlined, time-saving marvels. Today, I'm thrilled to share a project where I turned a repetitive, manual chore into an automated powerhouse. Ready to see how you can save time and add a touch of excitement to your workflow? Let’s dive in!
The Backstory
As many of you know, I work as a full-stack developer at a startup. We use Keka for managing employee attendance, which requires manually clocking in and out each day when entering and leaving the office. The issue? Sometimes, I forget to clock in or out, which results in my attendance being marked as not present. This means I have to raise a ticket in Keka to correct it – a tedious task that I wanted to automate.
The Problem Breakdown
Initially, I looked for an API provided by Keka for this purpose, but unfortunately, they don't offer one. No problem! As a developer, I took on the challenge of solving this myself. I started by analyzing Keka’s website to understand how it works. Using the network tab in my browser’s developer tools, I identified the endpoint triggered when clocking in and out.
I wrote a simple Node.js script using fetch to make requests with a Bearer token in the header, and it worked. However, there was a catch: the Bearer token expired daily. I discovered that the website retained the refresh token in local storage, which was used to obtain a new Bearer token when the old one expired.
After adapting my script to handle this, I faced a few more challenges:
- How would the script know when I entered the office?
- How would it determine when to clock out?
- How would I be notified of any errors and be able to manually clock in?
The Solution
To tackle these issues, I devised the following solutions:
- Office Entry Detection: I configured the script with specific office hours. The script would then start attempting to clock in when these hours were reached.
- Clock-Out Timing: I set a configurable duration in the script for how many hours after clocking in it should automatically clock out.
- Error Notification and Manual Clock-In: I integrated Slack notifications into the script. This way, I would receive alerts for successful clock-ins and outs, as well as errors.
[CRON Job (Every 15 minutes)] ---> [Node.js Script] \-------> [Check Time] ---> [Clock In/Out] \-------> [Notify (Slack)]
Once everything was in place, I scheduled a cron job to run my script every 15 minutes. This setup worked flawlessly for a year, automating my attendance management efficiently.
Transition to a Chrome Extension
After a year, I decided to enhance the solution by converting the script into a Chrome extension. This made it easier to share with colleagues. Here’s how the extension works:
- Setup: After installing the extension, you’re prompted to enter your office in and out times and specify the duration after which you want to clock out.
- Alarm Mechanism: The extension sets a Chrome alarm to run every 15 minutes. When the clock-in time is reached, it opens the Keka website with a query parameter (?CLK_IN=true).
- Content Script: The extension includes a content script that parses the query parameters and triggers the clock-in or clock-out process. Once successful, it sends a success message to the background service, which records the clock-in time and schedules the clock-out accordingly.
[CRON Job (Every 15 minutes)] ---> [Node.js Script] \-------> [Check Time] ---> [Clock In/Out] \-------> [Notify (Slack)]
This streamlined approach made managing my attendance even easier!
Note: If you’re interested in the source code, feel free to reach out to me!
Your Turn!
Have you ever automated a task using code? Share your experiences and tips in the comments below! What tasks do you wish you could automate? Let's discuss!
Thanks for joining me on this automation journey. Don’t forget to subscribe to my blog for more tips and updates. Happy coding!
The above is the detailed content of Code Against the Clock : Automating Attendance Management. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Java and JavaScript are different programming languages, each suitable for different application scenarios. Java is used for large enterprise and mobile application development, while JavaScript is mainly used for web page development.

The following points should be noted when processing dates and time in JavaScript: 1. There are many ways to create Date objects. It is recommended to use ISO format strings to ensure compatibility; 2. Get and set time information can be obtained and set methods, and note that the month starts from 0; 3. Manually formatting dates requires strings, and third-party libraries can also be used; 4. It is recommended to use libraries that support time zones, such as Luxon. Mastering these key points can effectively avoid common mistakes.

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScriptispreferredforwebdevelopment,whileJavaisbetterforlarge-scalebackendsystemsandAndroidapps.1)JavaScriptexcelsincreatinginteractivewebexperienceswithitsdynamicnatureandDOMmanipulation.2)Javaoffersstrongtypingandobject-orientedfeatures,idealfor

Event capture and bubble are two stages of event propagation in DOM. Capture is from the top layer to the target element, and bubble is from the target element to the top layer. 1. Event capture is implemented by setting the useCapture parameter of addEventListener to true; 2. Event bubble is the default behavior, useCapture is set to false or omitted; 3. Event propagation can be used to prevent event propagation; 4. Event bubbling supports event delegation to improve dynamic content processing efficiency; 5. Capture can be used to intercept events in advance, such as logging or error processing. Understanding these two phases helps to accurately control the timing and how JavaScript responds to user operations.

JavaScripthassevenfundamentaldatatypes:number,string,boolean,undefined,null,object,andsymbol.1)Numbersuseadouble-precisionformat,usefulforwidevaluerangesbutbecautiouswithfloating-pointarithmetic.2)Stringsareimmutable,useefficientconcatenationmethodsf

If JavaScript applications load slowly and have poor performance, the problem is that the payload is too large. Solutions include: 1. Use code splitting (CodeSplitting), split the large bundle into multiple small files through React.lazy() or build tools, and load it as needed to reduce the first download; 2. Remove unused code (TreeShaking), use the ES6 module mechanism to clear "dead code" to ensure that the introduced libraries support this feature; 3. Compress and merge resource files, enable Gzip/Brotli and Terser to compress JS, reasonably merge files and optimize static resources; 4. Replace heavy-duty dependencies and choose lightweight libraries such as day.js and fetch

The main difference between ES module and CommonJS is the loading method and usage scenario. 1.CommonJS is synchronously loaded, suitable for Node.js server-side environment; 2.ES module is asynchronously loaded, suitable for network environments such as browsers; 3. Syntax, ES module uses import/export and must be located in the top-level scope, while CommonJS uses require/module.exports, which can be called dynamically at runtime; 4.CommonJS is widely used in old versions of Node.js and libraries that rely on it such as Express, while ES modules are suitable for modern front-end frameworks and Node.jsv14; 5. Although it can be mixed, it can easily cause problems.
