AI-powered adaptive study and assessment platform for NCERT-based learning.
VidyaSetu helps students move from passive studying to structured practice with chapter-wise study material, quiz workflows, subjective answer evaluation, and analytics.
- Live app: https://vidya-setu-pi.vercel.app/
- Codebase docs: https://vidya-setu-pi.vercel.app/docs
This project is part of GirlScript Summer of Code 2026.
Contributors can start by checking issues labeled:
good first issuebeginner friendlygssocdocumentationbugenhancement
- NCERT class, subject, and chapter browsing
- Chapter-based quiz creation
- Practice, test, and revision quiz modes
- Subjective answer evaluation workflow
- Notes upload and extraction workflow
- Student dashboard and analytics views
- Admin flows for NCERT and question management
- Next.js
- React
- TypeScript
- Tailwind CSS
- Prisma ORM
- PostgreSQL
- NextAuth
- Cloudinary
- Node.js
- pnpm
- PostgreSQL database
You can use either a hosted PostgreSQL database or a local PostgreSQL database through Docker.
Create your local environment file:
cp .env.example .envNever commit .env. Use your own database credentials and API keys.
This is the PostgreSQL connection string used by the app at runtime.
If you use Docker, keep the default value from .env.example:
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/vidyasetu"If you use Supabase, Neon, Railway, or another hosted PostgreSQL provider, copy the PostgreSQL connection string from that provider and paste it here.
This is the direct PostgreSQL connection string used by Prisma migrations.
If you use Docker, keep the default value from .env.example:
DIRECT_URL="postgresql://postgres:postgres@localhost:5432/vidyasetu"If you use Supabase, use the direct database connection URL, not only the pooled URL. Prisma migrations work best with a direct connection.
This is used to sign authentication tokens.
For local development, generate a random value:
openssl rand -base64 32Then paste it into .env:
JWT_SECRET="your-generated-secret"For local development, use:
NEXTAUTH_URL="http://localhost:3000"For deployment, use your deployed app URL.
These are needed only for Google login.
To get them:
- Go to Google Cloud Console.
- Create or select a project.
- Configure the OAuth consent screen.
- Create OAuth credentials for a web application.
- Add this authorized redirect URI for local development:
http://localhost:3000/api/auth/callback/google
- Copy the generated client ID and client secret into
.env:
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"If you are not working on authentication, you can leave these empty for local development.
Cloudinary is optional for now and is not required for the main contributor setup.
Only add these if you are working on upload or media-related features:
CLOUDINARY_CLOUD_NAME="your-cloudinary-cloud-name"
CLOUDINARY_API_KEY="your-cloudinary-api-key"
CLOUDINARY_API_SECRET="your-cloudinary-api-secret"You can get these values from your own Cloudinary dashboard after creating a free Cloudinary account.
Use this option if you do not have Docker installed.
Create a free PostgreSQL database using Supabase, Neon, Railway, or another PostgreSQL provider. Then update these values in .env:
DATABASE_URL="your-hosted-postgresql-url"
DIRECT_URL="your-direct-postgresql-url"For Supabase, DATABASE_URL usually points to the pooled connection URL and DIRECT_URL points to the direct connection URL used by Prisma migrations.
Use this option if you have Docker installed and want a local database.
Start PostgreSQL:
docker compose up -dThe default .env.example database URLs already match the Docker database:
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/vidyasetu"
DIRECT_URL="postgresql://postgres:postgres@localhost:5432/vidyasetu"Install dependencies:
pnpm installGenerate the Prisma client:
pnpm db:generateRun migrations:
pnpm db:migrateSeed the database:
pnpm db:seedStart the development server:
pnpm devOpen http://localhost:3000.
The seed script populates your own local or hosted contributor database with NCERT academic classes, subjects, chapters, and direct PDF links.
Contributors do not need access to the maintainer's production database.
pnpm dev
pnpm build
pnpm lint
pnpm db:generate
pnpm db:migrate
pnpm db:seed
pnpm db:studioBefore contributing, read:
- Code of Conduct
- Codebase docs at
/docs
- Fork the repository.
- Clone your fork.
- Create
.envfrom.env.example. - Set up PostgreSQL using either hosted PostgreSQL or Docker.
- Run migrations and seed your database.
- Create a feature branch.
- Open a pull request.
Do not request or use production database access for local development.
Maintainers can use these labels to make contribution discovery easier:
gssocgssoc:approvedgssoc:level1gssoc:level2gssoc:level3good first issuebeginner friendlydocumentationbugenhancement
MIT