A web application for exploring Vancouver Island University (VIU) credentials and their associated career paths with employment outlook data. Users can browse VIU programs, discover related occupations, and view 3-year employment projections across British Columbia's economic regions.
npm install -g pnpmgit clone https://github.com/your-username/viu-career-outlooks.git
cd viu-career-outlooks
pnpm install
Create a .env.local file in the project root with your database credentials:
# Neon Database (Pooled connection - for app queries)
DATABASE_URL=postgresql://user:[email protected]/neondb?sslmode=require
# Neon Database (Direct connection - for Prisma migrations)
DATABASE_URL_UNPOOLED=postgresql://user:[email protected]/neondb?sslmode=require
Note: If using Vercel with Neon integration, you can copy these values from the Neon console or your Vercel project's environment variables.
| Variable | Description |
|---|---|
DATABASE_URL |
Pooled connection string (hostname contains -pooler). Used by the app for queries. Better for concurrent connections. |
DATABASE_URL_UNPOOLED |
Direct connection string (no -pooler in hostname). Required by Prisma for migrations and schema changes. |
Generate the Prisma client and run migrations:
# Generate Prisma client
pnpm prisma generate
# Run migrations to create database tables
# Note: Use dotenv-cli to load .env.local for Prisma CLI
pnpm dlx dotenv-cli -e .env.local -- pnpm prisma migrate deploy
pnpm dev
Open http://localhost:3000 in your browser.
├── app/ # Next.js App Router
│ ├── api/ # API routes
│ │ ├── economic-regions/
│ │ ├── noc/[noc]/
│ │ ├── outlooks/
│ │ ├── preferences/
│ │ ├── programs/[nid]/
│ │ └── top-outlooks/
│ ├── credentials/ # Credentials browsing page
│ ├── noc/[noc]/ # NOC occupation details
│ ├── programs/[nid]/ # Program details page
│ ├── layout.tsx # Root layout
│ └── page.tsx # Home page
├── components/ # React components
│ ├── credentials/ # Credential-related components
│ ├── global/ # Shared/reusable components
│ ├── home/ # Home page components
│ ├── noc/ # NOC page components
│ ├── programs/ # Program page components
│ └── ui/ # shadcn/ui components
├── lib/ # Utility functions
│ ├── constants.ts
│ ├── cookies.ts
│ ├── db.ts # Prisma client instance
│ └── utils.ts
├── prisma/
│ ├── migrations/ # Database migrations
│ └── schema.prisma # Database schema
├── public/ # Static assets
│ ├── icons/
│ └── images/
├── types/ # TypeScript type definitions
└── __tests__/ # Test files
The application uses the following data models:
| Model | Description |
|---|---|
Program |
VIU academic programs (diplomas, degrees, certificates) |
ProgramArea |
Program categories/faculties |
UnitGroup |
NOC (National Occupational Classification) occupation codes |
Outlook |
Employment outlook data for occupations by region |
EconomicRegion |
BC economic regions for employment data |
SectionsEntity |
Detailed occupation information sections |
# Generate Prisma client after schema changes
pnpm prisma generate
# Run migrations (creates/updates database tables)
pnpm dlx dotenv-cli -e .env.local -- pnpm prisma migrate deploy
# Create a new migration
pnpm dlx dotenv-cli -e .env.local -- pnpm prisma migrate dev --name your_migration_name
# Open Prisma Studio (database GUI)
pnpm dlx dotenv-cli -e .env.local -- pnpm prisma studio
# Pull schema from existing database
pnpm dlx dotenv-cli -e .env.local -- pnpm prisma db pull
| Script | Description |
|---|---|
pnpm dev |
Start development server with Turbopack |
pnpm build |
Build for production (runs Prisma generate & migrate) |
pnpm start |
Start production server |
pnpm lint |
Run ESLint |
pnpm test |
Run Jest tests |
pnpm test:watch |
Run tests in watch mode |
This project uses Jest and React Testing Library for testing. Tests are written in JavaScript to avoid additional dependencies in CI/CD pipelines.
# Run all tests
pnpm test
# Run tests in watch mode
pnpm test:watch
For more details on writing and running tests, see our Testing Guidelines.
DATABASE_URLDATABASE_URL_UNPOOLEDThe build script automatically runs Prisma generate and migrations:
"build": "prisma generate && prisma migrate deploy && next build"
pnpm buildpnpm startWe welcome contributions! Please see our Contributing Guide for details on:
git checkout devgit checkout -b feature/amazing-featureThis project uses GitHub Actions to enforce our development workflow:
dev require passing tests and lintingmain require at least one approval and passing testsmain automatically triggers deployment to productionAlways develop in dev first and only merge to main when ready for production deployment.
Prisma CLI doesn't automatically read .env.local. Use dotenv-cli:
pnpm dlx dotenv-cli -e .env.local -- pnpm prisma migrate deploy
.env.localDATABASE_URL uses the pooled connection (-pooler in hostname)DATABASE_URL_UNPOOLED uses the direct connection (no -pooler)If you see schema mismatch errors, regenerate the Prisma client:
pnpm prisma generate
This project is private and proprietary to Vancouver Island University.