Skip to main content

Getting Started with Exam Portal

This guide will help you set up the Exam Portal locally for development or review the cloud deployment architecture.

Prerequisites

Before you begin, ensure you have:

  • Node.js 18+ and npm
  • A Firebase project with Admin SDK credentials
  • Turso database instance and authentication token
  • Git for cloning the repository
  • Docker (optional, for containerization)

Local Development Setup

1. Clone the Repository

git clone <YOUR_GIT_URL>
cd exam-portal-ns

2. Configure Backend

cd backend
cp .env.example .env
# Edit backend/.env with your credentials:
# - TURSO_CONNECTION_URL
# - TURSO_AUTH_TOKEN
# - FIREBASE_SERVICE_ACCOUNT_JSON (base64 encoded)
npm install

3. Configure Frontend

cd ../frontend
cp .env.example .env
# Edit frontend/.env with:
# - VITE_FIREBASE_CONFIG
# - VITE_API_URL (http://localhost:8082 for local development)
npm install

4. Start Development Servers

Terminal 1 - Backend (Port 8082):

cd backend
npm run dev

Terminal 2 - Frontend (Port 5173):

cd frontend
npm run dev

Access the application at http://localhost:5173

Development Commands

# From root directory
npm run dev # Start both frontend and backend
npm run dev:backend # Start backend only
npm run build # Build for production
npm run preview # Preview production build

Project Structure

exam-portal-ns/
├── frontend/ # React + Vite application
│ ├── src/
│ │ ├── components/ # Reusable React components
│ │ ├── pages/ # Route pages
│ │ ├── hooks/ # Custom React hooks
│ │ └── App.tsx # Main component
│ └── package.json
├── backend/ # Express + Node.js API
│ ├── src/
│ │ ├── routes/ # API endpoints
│ │ ├── middleware/ # Auth, validation
│ │ ├── db/ # Database client
│ │ └── server.ts # Express app
│ └── package.json
└── Documentation/ # Technical docs

Environment Variables

Backend (.env)

PORT=8082
NODE_ENV=development

# Database
TURSO_CONNECTION_URL=libsql://your-db.turso.io
TURSO_AUTH_TOKEN=your_token

# Firebase Admin SDK (base64 encoded JSON)
FIREBASE_SERVICE_ACCOUNT_JSON=eyJ...

# Optional
CORS_ORIGIN=http://localhost:5173
LOG_LEVEL=debug

Frontend (.env)

VITE_API_URL=http://localhost:8082
VITE_FIREBASE_CONFIG={"apiKey":"...","projectId":"..."}
VITE_APP_ENV=development

Testing Your Setup

  1. Open http://localhost:5173 in your browser
  2. Sign in with test credentials from your Firebase project
  3. Create a test exam from the admin dashboard
  4. Take a test as a student
  5. View results and analytics

Next Steps

Troubleshooting

Port Already in Use

# Find and kill process on port 8082
lsof -ti:8082 | xargs kill -9

Database Connection Issues

  • Verify TURSO_CONNECTION_URL is correct
  • Check TURSO_AUTH_TOKEN is valid
  • Test connection: curl https://your-db.turso.io

Firebase Authentication Failed

  • Verify FIREBASE_SERVICE_ACCOUNT_JSON is base64 encoded
  • Check Firebase project is active
  • Confirm service account has correct permissions

Module Not Found Errors

  • Delete node_modules and run npm install again
  • Clear npm cache: npm cache clean --force

Support

For additional help, refer to: