Full Stack / Backend / Generative AI
AI-Powered Project Management System
A complete project management application built on NestJS and Next.js. An admin creates projects, breaks them into tasks and assigns those tasks to users — then queries the whole thing conversationally through an OpenAI-backed assistant instead of digging through filters.
What it is.
This was the project where I stopped treating the backend as glue and started treating it as the actual system. NestJS's module and provider structure forced a clean separation between projects, tasks, users and the assistant.
The assistant layer is the interesting part: rather than bolting a generic chatbot on, the model answers operational questions — which user owns a task, what is outstanding for a person — from the application's own relational data.
02 — The problem
Small teams lose time to the mechanics of a project tool. Finding out who owns a task means remembering which filter combination surfaces it, and that friction is exactly why tools stop being updated.
03 — The approach
Keep a conventional, properly modelled task system underneath, and add a natural-language layer on top of it so the common lookups become one sentence instead of four clicks.
What it actually does.
Projects and tasks
Admins create projects, add tasks under them, and assign each task to a user.
Role-based access
Admin and user roles gate what each account can create, assign and see.
JWT authentication
Stateless token auth issued and verified by the NestJS API and used by every protected route.
Conversational queries
Questions like 'who is this task assigned to' or 'what is open for this user' are answered from live project data.
Relational data model
PostgreSQL holds users, projects, tasks and assignments with proper foreign keys rather than denormalised blobs.
How the pieces fit together.
Next.js client
Admin dashboard, task boards and the assistant panel.
NestJS API
Modular services for auth, users, projects, tasks and the assistant. Guards enforce roles at the route level.
Assistant module
Translates a natural-language question into a scoped data lookup, then has OpenAI phrase the result.
PostgreSQL
Normalised schema for users, projects, tasks and assignments.
The stack.
Chosen for the problem, not for the resume.
- Next.jsReactTypeScript
- NestJSNode.jsREST APIsJWT
- OpenAI
- PostgreSQL
From input to output.
The sequence a single request travels through.
- 01
Interpret
The question is mapped to an intent — who owns a task, what is open for a user, what is in a project.
- 02
Scope
The lookup is constrained to data the requesting role is allowed to see.
- 03
Query
The relevant records are fetched from PostgreSQL.
- 04
Phrase
OpenAI turns the result set into a direct sentence rather than a table dump.
The part that stuck.
Student portfolio, so this section is the point — here is what this build actually taught me.
NestJS modules, guards and dependency injection gave me a real mental model for structuring a backend, after having written mostly flat Flask and Express code.
Letting a model read application data safely means scoping the query first and generating the wording second — not handing the model open database access.
Designing the PostgreSQL schema before writing endpoints removed almost all of the 'where should this field live' churn I hit in earlier projects.
Fake News Detection
An NLP pipeline and feedforward neural network that classifies news content, served behind a small Flask app.
Have a project idea?
I'm open to freelance projects, collaborations, internships, and opportunities where I can contribute while continuing to grow.
Usually replies within a day · Lahore, Pakistan · PKT (UTC+5)