Skip to content

Project Management Office - Internal project tracking and reporting system

License

Notifications You must be signed in to change notification settings

bimakw/percival

Repository files navigation

Percival Logo

Percival

Your knight in project management

A modern, full-stack Project Management Office application built with Next.js, Rust, and PostgreSQL.

License: MIT Release TypeScript Rust

Live Demo


✨ Features

  • Project Management — Create, update, and track projects with timelines and budgets
  • Task Management — Assign tasks, track progress, set priorities and due dates
  • Team & Resources — Manage teams, assign members, track resource allocation
  • Dashboard & Reports — Visual analytics, progress charts, and reporting
  • Authentication — Secure user registration and login system

🛠 Tech Stack

Layer Technology
Frontend Next.js 16 + TypeScript + Tailwind CSS
Backend Rust + Axum
Database PostgreSQL
DevOps Docker + Docker Compose

📁 Project Structure

percival/
├── frontend/           # Next.js TypeScript frontend
├── backend/            # Rust Axum API server
├── database/           # PostgreSQL schema and migrations
└── docs/               # Documentation

🚀 Quick Start

Using Docker (Recommended)

# Clone the repository
git clone https://github.com/bimakw/percival.git
cd percival

# Build and run all services
docker compose up -d

# Or use make
make build
make run

Services

Service URL
Frontend http://localhost:3000
Backend API http://localhost:8080
PostgreSQL localhost:5432

💻 Development Setup

Prerequisites

  • Node.js 18+
  • Rust 1.75+
  • Docker & Docker Compose

Run Development Environment

# Start database only
make dev-db

# Run backend (in separate terminal)
make dev-backend

# Run frontend (in separate terminal)
make dev-frontend

Manual Database Setup

# Create database
createdb percival_db

# Run schema
psql -d percival_db -f database/schema.sql

# Load seed data (optional)
psql -d percival_db -f database/seed.sql

📡 API Endpoints

Authentication

Method Endpoint Description
POST /api/v1/auth/register Register new user
POST /api/v1/auth/login Login

Projects

Method Endpoint Description
GET /api/v1/projects List all projects
POST /api/v1/projects Create project
GET /api/v1/projects/{id} Get project details
PUT /api/v1/projects/{id} Update project
DELETE /api/v1/projects/{id} Delete project
GET /api/v1/projects/{id}/tasks Get project tasks
GET /api/v1/projects/{id}/milestones Get project milestones

Tasks

Method Endpoint Description
GET /api/v1/tasks List all tasks
POST /api/v1/tasks Create task
GET /api/v1/tasks/{id} Get task details
PUT /api/v1/tasks/{id} Update task
DELETE /api/v1/tasks/{id} Delete task

Teams

Method Endpoint Description
GET /api/v1/teams List all teams
POST /api/v1/teams Create team
GET /api/v1/teams/{id} Get team details
PUT /api/v1/teams/{id} Update team
DELETE /api/v1/teams/{id} Delete team
GET /api/v1/teams/{id}/members Get team members
POST /api/v1/teams/{id}/members Add team member

🗄 Database Schema

Table Description
users User accounts with roles (admin, manager, member)
teams Team groups
team_members Team membership
projects Project details with status and budget
project_members Project membership
milestones Project milestones
tasks Task items with assignments
task_comments Task comments/discussions
activity_logs Audit trail

🧪 Testing

Backend (Rust)

cd backend
cargo test
Module Tests
Email validation 16
Auth service (password hashing) 12
Domain enums 30
Password validation 6

Frontend (Next.js)

cd frontend
npm run test:run
Module Tests
Utility functions 37
Auth store 17

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ☕ by bimakw