Acadify aims to modernize academic management by providing a centralized, data-driven platform that improves visibility, efficiency, and communication in schools.
Acadify is a digital platform designed to help schools manage and track students’ academic progress through reports, tests, and performance analytics.
Many schools currently rely on manual processes or fragmented tools, making it difficult to monitor student performance efficiently.
- School Administrators
- Teachers
- Students
These users need a system that simplifies academic management, saves time, and provides clear insights into student performance.
Acadify centralizes all academic data in one place, enabling:
- Better decision-making
- Clear performance tracking
- Improved communication between schools and students
This project is organized as a monorepo using pnpm workspaces:
- Backend (
apps/service): NestJS, Prisma ORM, PostgreSQL, Passport (JWT/Local Auth). - Frontend (
apps/dashboard): React, Vite, Tailwind CSS, shadcn/ui. - Shared (
packages/dtos): Shared Data Transfer Objects (DTOs) usingclass-validatorandclass-transformer.
acadify/
├── apps/
│ ├── service/ → Backend API
│ └── dashboard/ → Frontend Web App
│ └── dtos/ → Shared Types & Validation
├── package.json
└── pnpm-workspace.yaml
Ensure you have the following installed:
- Node.js (v18 or higher recommended)
- pnpm (v9.15.0 or higher)
- PostgreSQL (Running locally or via Docker)
Clone the repository and install all workspace dependencies: pnpm install
You need to set up environment variables for both the frontend and backend.
Backend (apps/service/.env)
Create a .env file in the service directory:
DATABASE_URL="postgresql://username:password@localhost:5432/Acadify-db"
JWT_SECRET="your-jwt-secret"
JWT_EXPIRATION="1d"
NODE_ENV="development"
Frontend (apps/dashboard/.env)
Create a .env file in the dashboard directory:
VITE_API_URL="http://localhost:3000"
(Note: Ensure the port matches your running backend instance).
Before running the apps, you must build the shared DTOs so both the frontend and backend can resolve them: pnpm --filter dtos build
Initialize your PostgreSQL database and populate it with seed data (this will create dummy users, students, grades, and curriculums): # Navigate to the service directory or use the filter
pnpm --filter service run db:reset
(Note: The db:reset script will clear existing data and run the seed script automatically).
To run the full stack, it is recommended to open three separate terminal windows:
Terminal 2: Build the dtos
pnpm --filter dtos run build
Terminal 2: Run the Backend
pnpm --filter service run start:dev
(This command automatically runs Prisma migrations in dev mode and starts the NestJS server).
Terminal 3: Run the Frontend
pnpm --filter dashboard run dev
Currently, testing is configured for the backend service using Jest.
Run unit tests:
pnpm --filter service run test
Run end-to-end (e2e) tests:
pnpm --filter service run test:e2e
Run test coverage:
pnpm --filter service run test:cov
You can run these commands from the root directory to manage the entire monorepo:
pnpm install— Installs dependencies and enforces pnpm viapreinstall.pnpm format— Formats the entire codebase using Prettier.pnpm lint— Runs ESLint across all packages.pnpm build— Builds all workspaces.pnpm prepare— Initializes Git hooks using Husky (runs automatically after install).