Development

Project Structure

Overview of the Envision Portal codebase layout.

Envision Portal is a full-stack Nuxt 4 application using the app/ directory convention.

Top-level Layout

envision-portal/
├── app/
│   ├── components/       # Vue components
│   ├── layouts/          # Page layouts (public, default, auth)
│   ├── middleware/        # Route middleware (auth protection)
│   ├── pages/            # File-based routing
│   └── utils/            # Shared frontend utilities
├── server/
│   ├── api/              # REST API endpoints
│   ├── middleware/        # Server middleware
│   └── utils/            # Server-side utilities
├── prisma/
│   ├── schema.prisma     # Database schema
│   └── migrations/       # Migration history
├── content/              # Static markdown content (terms, privacy)
└── docs/                 # This documentation site

Pages

Routes are split between public (no auth) and authenticated (/app/*) sections.

Public Routes

PathDescription
/Home page
/datasetsDiscover public datasets
/datasets/[id]Public dataset detail page
/aboutAbout the platform
/faqFrequently asked questions
/loginUser login
/signupUser registration
/verify-emailEmail verification

Authenticated Routes (/app/*)

PathDescription
/app/dashboardUser dashboard
/app/datasetsDatasets the user has access to
/app/datasets/[id]Dataset management
/app/inboxNotifications inbox
/app/profileUser profile
/app/requestsAccess requests submitted by the user

Layouts

LayoutUsed by
public.vueAll public-facing pages
default.vueAuthenticated app pages (sidebar navigation)
auth.vueLogin and signup pages

API

All API routes live under server/api/. They are grouped by resource:

  • server/api/auth/ - Authentication (signup, login, email verification)
  • server/api/datasets/ - Dataset CRUD, metadata, files, publishing, requests
  • server/api/discover/ - Public dataset discovery and access requests
  • server/api/notifications/ - User notifications
  • server/api/requests/ - User-level request views
  • server/api/contact/ - Contact form submissions

Database

The database schema is defined in prisma/schema.prisma and managed with Prisma Migrate. The primary database is PostgreSQL.

Key model groups:

  • User and auth - User, platformInvitation
  • Datasets - Dataset, DatasetMember, PublishedDataset
  • Dataset metadata - 15+ models covering titles, contributors, identifiers, consent, rights, etc.
  • Study metadata - 13+ models for clinical trial information
  • Healthsheet - DatasetHealthsheet with JSON fields per section
  • Access requests - DatasetRequest, ControlledDatasetRequest, DatasetRequestDetails
  • Notifications - Notification
Copyright © 2026