Taskimatti is a digital task-tracking platform for organizations, companies, public institutions, and communities. It is a web application built with Vue 3 and Nuxt 3. The application uses Directus as a headless CMS and PostgreSQL as a database. The application is deployed with Docker. The application is licensed under the AGPL-3.0 License.
- Project Creation and Management: Taskimatti allows organization administrators to create and manage projects. Taskimatti provides flexible project settings, allowing admins to either accept all users or manually accept selected users to join the project. Admins can also customize the project's color scheme and logo.
- Task Creation: Administrators can create tasks within projects. When a task is created, the admin can decide if the task can be completed by the user directly or if it needs to be validated by a project moderator by scanning a QR code.
- User Participation and Task Completion: Once user is accepted to the project, they can start completing tasks. Each task completion is individual and contributes to the user's total score. The completion process depends on the task's settings.
- Scoring and Competition: Taskimatti introduces a scoring system based on individual task completions, fostering a competitive environment among users. This healthy competition motivates users to complete tasks and earn points, aiming for a higher position on the leaderboard.
- User Profiles: Taskimatti provides users with personal profiles where they can track their individual task completions and accumulated points. Users can edit their personal information and privacy settings.
- Educational Institutions: Schools and universities could use Taskimatti to manage and track assignments or projects. It could also be used to gamify learning, where students earn points for completing educational tasks or achieving academic milestones.
- Non-Profit Organizations: Non-profits could use Taskimatti to manage and track volunteer activities. Volunteers could earn points for completing tasks, which could potentially be used for rewards or recognition.
- Corporate Businesses: Companies could use Taskimatti for project management, employee engagement, and team building. Tasks could be work-related or could be part of a wellness program, where employees earn points for participating in healthy activities.
- Government Agencies: Government agencies could use Taskimatti to manage and track internal projects or community outreach programs. For example, a city council could use it to manage a city beautification project, where community members earn points for participating in clean-up or beautification tasks.
- Event Organizers: Event organizers could use Taskimatti to manage and track tasks related to event planning and execution. This could include tasks for staff, volunteers, or even attendees (like a scavenger hunt or other interactive activities).
- Healthcare Institutions: Hospitals or healthcare organizations could use Taskimatti to manage and track tasks related to patient care or internal operations. It could also be used for training purposes, where healthcare professionals earn points for completing training modules or achieving certain competencies.
graph LR
;
User -->|Frontend| F(Vue3/Nuxt3);
F -->|CMS| C(Directus);
C -->|Database| PostgreSQL;
graph TD
;
Frontend{Frontend} -->|Framework| Nuxt3;
Nuxt3 -->|CMS| Directus{Directus};
Directus -->|Database| PostgreSQL;
Directus <--> |API| Frontend;
User{User} --> Frontend
User{User} --> Directus
- Node.js (v18.0.0)
# Clone the repository
git clone https://github.com/taskimatti/taskimatti.git
# Change directory
cd taskimatti/app
# Install dependencies
npm installCopy .env.example to .env and fill in the required values.
cp .env.example .envNUXT_API_URLis the URL of the Directus CMS.NUXT_API_EMAILis the email of the Directus admin user.NUXT_API_PASSWDis the password of the Directus admin user.
# Start development server
npm run dev
# Build for production
npm run build
# Start production server
npm run startWe use Docker to run the application in a containerized environment.
- Docker (v24.0.7 or newer)
Copy .env.example file in the app directory and rename it to .env.
Copy example.env.prod.db to .env.prod.db.
Copy example.env.prod to .env.prod.
cp ./app/.env.example ./app/.env
cp example.env.prod.db .env.prod.db
cp example.env.prod .env.prodReplace the values in the files with the correct values.
# Start the application
docker compose -f compose.yaml up -d --build
# Stop the application
docker compose -f compose.yaml down
# Start service
docker compose -f compose.yaml start <service>
# Stop service
docker compose -f compose.yaml stop <service>
# Inspect logs of service
docker compose -f compose.yaml logs -f <service>
# Get a shell to a service
docker compose -f compose.yaml exec <service> sh
# Stop and remove containers, networks, images, and volumes
docker compose -f compose.yaml down -vUbuntu 22.04 LTS (introductions are based on this version)
# Create a new user with home directory
sudo adduser --home /home/taskimatti --disabled-password taskimatti
# Add the user to the docker group
sudo usermod -aG docker taskimatti
# Generate ssh key pair
ssh-keygen -t rsa -b 4096 -C "taskimatti"
# Copy the private key for CI/CD
cat /home/taskimatti/.ssh/id_rsa
# Clone the repository
git clone https://github.com/taskimatti/taskimatti.git
# Configure nginx reverse proxy
sudo cp deploy/example.com /etc/nginx/sites-available/taskimatti
# Change example.com to your domain
sudo sed -i 's/example.com/yourdomain.com/g' /etc/nginx/sites-available/taskimatti
# Enable the site
sudo ln -s /etc/nginx/sites-available/taskimatti /etc/nginx/sites-enabled/
# Get SSL certificates
sudo certbot --nginx -d yourdomain.com -d cms.yourdomain.com
# Configure ufw firewall
sudo ufw allow 8080; sudo ufw allow 8081; sudo ufw allow 22
sudo ufw enable
# Configure environment variables
cd /home/taskimatti/taskimatti
cp ./app/.env.example ./app/.env
cp example.env.prod.db .env.prod.db
cp example.env.prod .env.prod
# Replace the values in the files with the correct values# Start the application
docker compose -f compose.yaml up -d --build
# Import the database and files
sh ./directus/import.shWe use GitHub Actions to build and deploy the application. The workflow is defined in the .github/workflows/ci.yml file.
You need to set the following secrets in your repository secrets:
| Secret | Description |
|---|---|
HOST |
IP address of your server |
PORT |
SSH port of your server |
USERNAME |
Username for your server |
PASSWORD |
Password for your server |
KEY |
SSH private key |
PROD |
Environment variables for Directus |
PROD_DB |
Environment variables for PostgreSQL database |
ENV |
Environment variables for Nuxt |
Prod, prod_db, and env are the contents of the .env.prod, .env.prod.db, and ./app/.env files, respectively.
Select an issue from the issues page and assign yourself to it.
Create a new branch from the main branch and name it issue-<issue number>.
When you have finished your work, ensure that the code is formatted with Prettier by running the following command:
npm run formatThen create a pull request to the dev branch. The pull request will be reviewed by the project maintainers.
You can also create a new issue if you have an idea for a new feature or a bug fix.
This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.