Quick Start
Welcome to SkoolyHub — a production-ready school management system built with Next.js 16 (App Router), React 19, TypeScript, PostgreSQL and Tailwind CSS. This page gets you from a fresh download to a running school in about 15 minutes.
One deployment serves one school. There is no tenant column to scope your queries by; the key that matters everywhere is the academic year.
SkoolyHub ships five surfaces from one codebase:
| Surface | Path | Who uses it |
|---|---|---|
| Public site | / |
Visitors and prospective families |
| Admin panel | /admin |
Office staff, principal, accountant |
| Parent portal + app API | /parent, /api/v1/parent/* |
Guardians |
| Teacher portal + app API | /teacher, /api/v1/teacher/* |
Teaching staff |
| Student portal + app API | /student, /api/v1/student/* |
Students |
New here? Read Product Overview for the big picture, then come back and install.
What you need
- Node.js 20+ and npm
- A PostgreSQL database — Neon works well, and SkoolyHub uses the
@neondatabase/serverlessdriver over HTTP - About 15 minutes
Install in four steps
# 1. Install dependencies
npm install
# 2. Create your environment file
cp .env.example .env
# DATABASE_URL and JWT_SECRET are the only required values.
# 3. Provision the schema
npm run db:init
# 4. Start the dev server
npm run dev
Open http://localhost:3000. The first run launches the install wizard at /install, which walks you through the database check, the admin account, and your school's name, timezone and currency.
There are no migration files. Every table is created by an idempotent ensure*Schema() function that runs on first use, so a fresh database and a database three versions old both converge on the same schema. See Database Documentation.
Load the demo school
npm run db:seed:master # lookup lists: blood groups, designations, payment modes…
npm run db:seed:templates # email / SMS / push message templates
npm run db:seed:school # a demo school: classes, staff, students, fees, timetable
The demo seed prints working sign-in details for all three portals when it finishes — a parent, a teacher and a student account you can log in with immediately.
Your first ten minutes in the admin
- Settings → School — name, address, logo, academic year start.
- Academics → Academic Setup — create the academic year and its terms. Nothing else works until a year exists, because the year is the scoping key for timetables, fees, exams and enrolment.
- Academics → Classes & Subjects — your year groups, their sections, and the subjects taught.
- Staff → Staff Directory — add teachers. Anyone marked Teaching staff can be allocated subjects and gets the teacher portal.
- Students → Student Directory — add students, or use Bulk Import for a CSV of the whole roll.
- Academics → Timetable — tap a period to set its subject, teacher and room. Clashes are refused with the reason.
- Fees → Fee Setup — fee heads, then a per-class structure. Generate invoices from there.
Connecting services
Storage, payments, email and SMS are add-ons, configured in Admin → Settings → Channels rather than in environment variables. Their credentials live encrypted in the database, which means they survive a database dump and move with it.
- Storage (Cloudflare R2, S3, DigitalOcean Spaces, Google Cloud Storage) — needed before any photo upload will work.
- Payments — twenty gateways ship as add-ons. Whichever you connect becomes the option parents see in the app. Connect none and the app correctly shows "pay at the office".
See Integrations Guide.
The mobile app API
The parent, teacher and student apps consume a REST API documented at /api/docs/v1 — an admin-gated Scalar reference generated from the route handlers themselves, so it cannot drift from the code. Hand that URL to whoever builds the apps.
Re-run npm run gen:openapi after adding or renaming routes.
Verify a change
npx tsc --noEmit -p tsconfig.json
npx next build
Where next
- Product Overview — what SkoolyHub does, module by module
- Admin Guide — the back office, screen by screen
- Technical Documentation — architecture and conventions
- API Documentation — the app-facing REST surface