{"id":15979664,"url":"https://github.com/markteekman/time-tracking-dashboard","last_synced_at":"2026-04-12T11:34:55.942Z","repository":{"id":104835481,"uuid":"412452406","full_name":"markteekman/time-tracking-dashboard","owner":"markteekman","description":"Frontend Mentor challenge \"Time Tracking Dashboard\" using CSS Grid, CSS Animations, Accessibility best practices and the JavaScript Fetch API to toggle between JSON Data.","archived":false,"fork":false,"pushed_at":"2021-10-08T09:33:23.000Z","size":531,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-10T03:25:46.651Z","etag":null,"topics":["accessibility","astro","css-grid","css3-animations","fetch-api","html5","javascript","json","promises","scss","wcag"],"latest_commit_sha":null,"homepage":"https://markteekman.github.io/time-tracking-dashboard/","language":"SCSS","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/markteekman.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":"2021-10-01T12:09:41.000Z","updated_at":"2023-07-25T14:50:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"3ead183f-4525-4660-a190-de9ebf1bccfc","html_url":"https://github.com/markteekman/time-tracking-dashboard","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"markteekman/accessible-astro-starter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markteekman%2Ftime-tracking-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markteekman%2Ftime-tracking-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markteekman%2Ftime-tracking-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markteekman%2Ftime-tracking-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/markteekman","download_url":"https://codeload.github.com/markteekman/time-tracking-dashboard/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247226186,"owners_count":20904465,"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":["accessibility","astro","css-grid","css3-animations","fetch-api","html5","javascript","json","promises","scss","wcag"],"created_at":"2024-10-08T00:01:04.160Z","updated_at":"2026-04-12T11:34:50.909Z","avatar_url":"https://github.com/markteekman.png","language":"SCSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Frontend Mentor - Time tracking dashboard solution\n\nThis is a solution to the [Time tracking dashboard challenge on Frontend Mentor](https://www.frontendmentor.io/challenges/time-tracking-dashboard-UIQ7167Jw). Frontend Mentor challenges help you improve your coding skills by building realistic projects. \n\n## Table of contents\n\n- [Overview](#overview)\n  - [The challenge](#the-challenge)\n  - [Extra challenges](#extra-challenges)\n  - [Screenshot](#screenshot)\n  - [Links](#links)\n- [My process](#my-process)\n  - [Built with](#built-with)\n  - [What I learned](#what-i-learned)\n  - [Continued development](#continued-development)\n  - [Useful resources](#useful-resources)\n- [Author](#author)\n\n## Overview\n\n### The challenge\n\nUsers should be able to:\n\n- View the optimal layout for the site depending on their device's screen size.\n- See hover states for all interactive elements on the page.\n\n### Extra challenges\n\nAs a bonus I want to achieve the following extra challenges:\n\n- The page must be accessible according to WCAG 2.1 standards, things like color contrast, clear element focus and necessary aria attributes.\n- I want to add minimal animations to the page, such as a starting animation when the page loads and hover animations on the category cards.\n- I took on the extra challenge of using the data from the data.json file and displaying it according to whether the user is viewing daily, weekly or monthly stats.\n\n### Screenshot\n\n![social-preview-image](https://user-images.githubusercontent.com/3909046/136522531-a94558cb-0cb2-431a-8518-66fb0bab9442.png)\n\n### Links\n\n- [Solution URL](https://www.frontendmentor.io/solutions/)\n- [Live Site URL](https://markteekman.github.io/time-tracking-dashboard/)\n\n## My process\n\n### Built with\n\n- Semantic HTML5 markup\n- CSS custom properties\n- Flexbox\n- CSS Grid\n- Mobile-first workflow\n- WCAG 2.1 best practices\n- CSS Animations\n- JavaScript Fetch API\n- [Astro](https://astro.build) - Astro Static Site Generator\n- [Accessible Astro Starter](https://github.com/markteekman/accessible-astro-starter) - My own starter template for Astro\n\n### What I learned\n\n- I learned that when adding transforms on an element, it creates its own [stacking context](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context). I wanted to add a fade-in animation on my dashboard cards. The cards have a background with an icon in the `::after` pseudo element and are stacked behind the card using `z-index: -1;`. However, when you use a transform on the element it creates its own stacking context, causing the z-index position not to work as expected. A solution for this is to wrap the element containing the `::after` pseudo element in a container and apply the transform there so that your original stacking context is not changed. This [Stack Overflow solution](https://stackoverflow.com/questions/20851452/z-index-is-canceled-by-setting-transformrotate) describes it in great detail.\n- I learned how to get data from a `.json` file and display it on the page depending on which data the user wants to see. I used the JavaScript Fetch API to make this work.\n\n### Continued development\n\n- ~~I could maybe add an extra grid view for tablet sizes, with the category cards two by two and the user card spanning three rows.~~ **Added**.\n\n### Useful resources\n\n- [Stacking contexts and z-index](https://stackoverflow.com/questions/20851452/z-index-is-canceled-by-setting-transformrotate) - The solution I applied for using transforms on elements that have a negative z-index positioned `::after` pseudo element.\n- [JavaScript Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) - Used to get the data from the `.json` file.\n\n## Author\n\n- [Personal Website](https://www.markteekman.nl)\n- [Frontend Mentor Profile](https://www.frontendmentor.io/profile/markteekman)\n- [LinkedIn Page](https://nl.linkedin.com/in/markteekman)\n- [GitHub Projects](https://github.com/markteekman)\n- [NPM Packages](https://www.npmjs.com/~markteekman)\n- [CodePen Creations](https://codepen.io/markteekman)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkteekman%2Ftime-tracking-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarkteekman%2Ftime-tracking-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkteekman%2Ftime-tracking-dashboard/lists"}