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
| Path | Description |
|---|---|
/ | Home page |
/datasets | Discover public datasets |
/datasets/[id] | Public dataset detail page |
/about | About the platform |
/faq | Frequently asked questions |
/login | User login |
/signup | User registration |
/verify-email | Email verification |
Authenticated Routes (/app/*)
| Path | Description |
|---|---|
/app/dashboard | User dashboard |
/app/datasets | Datasets the user has access to |
/app/datasets/[id] | Dataset management |
/app/inbox | Notifications inbox |
/app/profile | User profile |
/app/requests | Access requests submitted by the user |
Layouts
| Layout | Used by |
|---|---|
public.vue | All public-facing pages |
default.vue | Authenticated app pages (sidebar navigation) |
auth.vue | Login 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, requestsserver/api/discover/- Public dataset discovery and access requestsserver/api/notifications/- User notificationsserver/api/requests/- User-level request viewsserver/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 -
DatasetHealthsheetwith JSON fields per section - Access requests -
DatasetRequest,ControlledDatasetRequest,DatasetRequestDetails - Notifications -
Notification