https://github.com/tivix/cpf
Career Progression Framework Application
https://github.com/tivix/cpf
Last synced: 7 months ago
JSON representation
Career Progression Framework Application
- Host: GitHub
- URL: https://github.com/tivix/cpf
- Owner: Tivix
- Created: 2024-03-06T18:43:57.000Z (over 1 year ago)
- Default Branch: develop
- Last Pushed: 2025-03-14T16:55:29.000Z (7 months ago)
- Last Synced: 2025-03-17T11:01:10.003Z (7 months ago)
- Language: TypeScript
- Size: 1.1 MB
- Stars: 0
- Watchers: 8
- Forks: 1
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# CPF
## Career Progression Framework Application
Kellton Europe CPF app is an innovative web-based platform –
a seamless solution designed to connect employees,
managers, and directors to facilitate the career development of each team member.
This dynamic application empowers employees
to track progress and milestones toward their chosen career paths.
Managers and directors can easily oversee employee development, monitor assigned goals,
and provide essential support for continuous growth.
Experience enhanced collaboration and foster a thriving,
goal-oriented work environment with a cutting-edge platform.# Table of Contents
- Cloning and Initializing
- Installation
- Usage
- Wiki
- Contributing
- Development
- Frontend
- Backend
- License
- Contact## Cloning and Initializing the Repository with Submodules
When you clone a repository that includes submodules, you need to ensure that the submodules are initialized and updated to the correct versions. This guide will walk you through the steps to properly clone and initialize a repository with submodules.
### Cloning the Repository
To clone the repository along with its submodules, use the `--recurse-submodules` flag. This ensures that all submodules are cloned and initialized automatically.
Step 1:
```
git clone --recurse-submodules git@github.com:Tivix/cpf.git
```Step 2:
```
cd cpf
```### Initializing Submodules in an Already Cloned Repository
If the repository has already been cloned without the --recurse-submodules flag, you can manually initialize and update the submodules using the following commands:
#### 1. Initialize the Submodule
```
git submodule init
```#### 2. Update the Submodule
```
git submodule update
```# Installation
Instructions on how to install and set up the project. If you followed previous steps, you should have a supabase folder in the root of the project.
#### Copy variables to `.env` file inside of the docker folder in supabase.
```
cp .env.supabase.example ./supabase/docker/.env
```#### Copy variables to `.env` file needed for the frontend.
```
cp .env.example .env
```#### Build and run the project
First, you need to run the supabase environment.
```
cd supabase/docker
docker compose up --build -d
```The above command will build and run the supabase environment in the background (detached mode).
Then, you need to build and run the project. Go into the root directory of cpf and run:
```
docker compose up --build
```After you have done the above steps, you should be able to access the application.
##### Supabase admin panel
[localhost:8080](http://localhost:8080)
##### CPF Frontend application
[localhost:8080/cpf](http://localhost:8080/cpf)
### Seeding the database
To seed your database with initial data once your project is up and running, follow these steps:
Copy the contents of the seed.sql file located in the root directory of your project.
Go to the Supabase admin panel.
Navigate to the SQL Editor on the left side panel.
Paste the contents of the seed.sql file and hit 'Run'.
# Supabase
### User Creation Flow
Users can be added to the app through various methods:
1. **Supabase Panel**: Go to `localhost:8080` to create a user directly in the Supabase dashboard - authentication tab.
2. **Directly from a Browser**: Go to `localhost:8080/cpf/auth` to create a user via a authentication flow. Going forward we will probably get rid of this feature and focus on single sign on.
3. **Add Employee flow**: Employees can be added through the dashboard at `localhost:8080/cpf/people/add-new`. The default password is `password`.### Automated Backend Processes
When a user is created through any of these methods, the following processes occur:
1. Supabase automatically creates a new user in the `auth.users` table.
2. The `auth.users` table has an `on_auth_user_created` trigger that fires `AFTER INSERT`. This trigger calls the `on_auth_user_created` function to handle following:
- **Profile Creation**:
- Inserts a new record into the `public.profiles` table.
- Extracts the `first_name`, `last_name`, and `status` from the `raw_user_meta_data` field, if provided.
- The `status` field is an `public.profile_status` enum. If not provided, it remains `NULL`.
- **Role Assignment**:
- Inserts a new entry into the `public.user_roles` table.
- The default role assigned is `employee`.
- **Ladder Information**:
- Inserts a new entry into the `public.user_ladder` table with optional fields `ladder_slug`, `current_band`, `technologies`# Usage
Instructions on how to use the project.
# Wiki
For more information, check out the project's wiki under the link: https://github.com/Tivix/cpf/wiki
# Contributing
Guidelines for contributing to the project.
- Fork the repository.
- Create a new branch.
- Make your changes.
- Commit your changes.
- Push to the branch.
- Open a pull request.# Development
## Frontend
### Folder structure
- `api` - Contains api calls.
- `app`- The App Router by Next.js.
- `components` - Contains all components used in the app.
- `common` - In the common folder, we keep all essential components like Button, Card, or Input.
- `modules` - Here we keep more complex components that are still reusable or are part of layouts.
- `pages` - Here we compose view together to create a page. If you want to extract some module of the page, create `modules` folder there and put it in it.
- `constants` - Contains all the constant values used in the app.
- `static`- Contains assets like icons.
- `store` - Contains all stores for state management.
- `types` - Contains all reusable types and interfaces that are shared between many pages and modules.
- `utils` - Contains all utility functions like data transformations or calculations.### Component structure
Component folder should contain:
- `index.ts` - importing and exporting the component.
- `ComponentName.tsx` - view part of a component.
- `ComponentName.interface.ts` - types related to that component.
- `ComponentName.hooks.tsx` - the logic of our component# License
Specify the license under which the project is distributed.
# Contact
Contact information for the project maintainer or team.
- Email: marcin.skorek@kellton.com, mateusz.jasinski@kellton.com
- GitHub: https://github.com/Tivix/cpf