Skip to content

Commit a51835c

Browse files
committed
Add frontend files from timelogger-v2 and update readme
0 parents  commit a51835c

17 files changed

Lines changed: 4251 additions & 0 deletions

.DS_Store

6 KB
Binary file not shown.

README.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# e-conomic Senior Frontend Engineer hiring task</h1>
2+
3+
<a href="https://www.buymeacoffee.com/VishwaGauravIn" target="_blank">
4+
<img alt="" src="https://skillicons.dev/icons?i=ts,tailwind,react" style="vertical-align:center" />
5+
</a>
6+
7+
## 👋 Introduction
8+
9+
As a part of the e-conomic recruitment process we ask our candidates to complete a practical development challenge. The challenge consists of two parts:
10+
11+
You solve the provided task, and send the results to us.
12+
We host a session where you present your solution to us, and we all have a nice talk about it.
13+
14+
The task is to implement a simple time logger web application that solves the following three user stories:
15+
16+
- As a freelancer I want to be able to register how I spend time on my projects, so that I can provide my customers with an overview of my work.
17+
- As a freelancer I want to be able to get an overview of my time registrations per project, so that I can create correct invoices for my customers.
18+
- As a freelancer I want to be able to sort my projects by their deadline, so that I can prioritise my work.
19+
20+
Individual time registrations should be 30 minutes or longer, and once a project is complete it can no longer receive new registrations. You do not need to create an actual invoice.
21+
22+
We ask that you clone this repository to complete the task, rather than fork it. You can either push it to a repository on your own account, or simply send us the project in a zip if you prefer. We recommend removing installed dependencies such as the node_modules directory prior to zipping, to keep the file size down.
23+
24+
When presenting the solution please bring your own laptop if you have one. If you do not, please inform us before the meeting so that we can prepare.
25+
26+
## 💡 Considerations
27+
28+
What we're looking for is to see if you have the ability to transform a set of user requirements into a working solution, preferably creating some nice and clean code along the way. We will appreciate if your solution:
29+
30+
- Works, obviously.
31+
- Contains readable, bug free code
32+
- Is appropriately covered by tests
33+
- Follows sensible structured design patterns and thought proceses
34+
- Validates user input and contains test coverage for these use cases
35+
- The frontend is typed using typescript
36+
37+
We want to see that you have thought about the design of your application, and considered how it might scale as it's complexity increases:
38+
39+
- Consider how your application might scale as it grows in use, and in number of developers working on it
40+
- Summarise any significant architectural decisions you take, to discuss in the presentation
41+
42+
## ℹ️ Questions & Info
43+
44+
If you have any **questions** or **concerns**, please feel free to ask.
45+
46+
We realize there are a lot of moving parts to an application like this. To help, we have provided a basic setup to get you started with a Vite + React client, which includes some basic components and simple styling.
47+
48+
You are welcome to use this scaffold or start your own project from scratch. You are also free to change or remove any part of this code — it is meant purely as a starting point to help you get going. Styling and graphic design are not the main focus; we are assessing your ability to design and architect software — so focus on that.
49+
Don’t worry about authentication — you can assume your application is already authenticated.
50+
51+
## 🖥 How to Run The Scaffold Project Locally
52+
53+
Prerequisites:
54+
55+
- Node v22.15 installed.
56+
57+
Steps to run locally:
58+
59+
- Clone the project.
60+
- run `npm install`
61+
- run `npm run dev`
62+
63+
Happy coding!

eslint.config.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import js from '@eslint/js'
2+
import globals from 'globals'
3+
import reactHooks from 'eslint-plugin-react-hooks'
4+
import reactRefresh from 'eslint-plugin-react-refresh'
5+
import tseslint from 'typescript-eslint'
6+
7+
export default tseslint.config(
8+
{ ignores: ['dist'] },
9+
{
10+
extends: [js.configs.recommended, ...tseslint.configs.recommended],
11+
files: ['**/*.{ts,tsx}'],
12+
languageOptions: {
13+
ecmaVersion: 2020,
14+
globals: globals.browser,
15+
},
16+
plugins: {
17+
'react-hooks': reactHooks,
18+
'react-refresh': reactRefresh,
19+
},
20+
rules: {
21+
...reactHooks.configs.recommended.rules,
22+
'react-refresh/only-export-components': [
23+
'warn',
24+
{ allowConstantExport: true },
25+
],
26+
},
27+
},
28+
)

index.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7+
<title>Vite + React + TS</title>
8+
</head>
9+
<body>
10+
<div id="root"></div>
11+
<script type="module" src="/src/main.tsx"></script>
12+
</body>
13+
</html>

0 commit comments

Comments
 (0)