A full-stack training platform for POCUS (Point-of-Care Ultrasound). Learners can enroll in courses and log scans. Faculty/Admins can manage courses and view analytics.
+------------------------+
| USERS |
+-----------+------------+
|
v
+----------------------------------------+
| AWS Amplify (Next.js Frontend) |
+--------------------+-------------------+
|
| HTTPS /api/*
v
+------------------------------------------+
| CloudFront Reverse Proxy (HTTPS) |
+--------------------+---------------------+
|
v
+---------------------------------------------+
| Elastic Beanstalk (Node.js Express API) |
+-------------------+-------------------------+
|
v
+---------------------------+
| MongoDB Atlas |
+---------------------------+
Frontend (Amplify):
https://master.d1q4nf9qlja1a8.amplifyapp.com/login
π₯ Test Accounts (Seeded Users)
Admin:
Email: admin@test.com
Password: password123
Faculty:
Email: faculty@test.com
Password: password123
Learner:
Email: learner@test.com
Password: password123
- Next.js 16 (App Router)
- React Query (TanStack)
- TailwindCSS
- Hosted on AWS Amplify
- API calls routed through CloudFront HTTPS Proxy
- Node.js + Express (TypeScript)
- MongoDB Atlas (Mongoose)
- JWT Authentication
- Zod validation
- Mongo aggregation pipelines (metrics)
- Deployed on AWS Elastic Beanstalk
- Amplify β Static Next.js application hosting
- CloudFront β Reverse proxy for /api/*
- Elastic Beanstalk β Node backend hosting
- MongoDB Atlas β Managed database
- GitHub Actions β Backend CI/CD deployment
pocus-platform/
backend/
src/
config/
controllers/
middleware/
models/
services/
routes/
validation/
utils/
tests/
package.json
frontend/
app/
components/
api/
lib/
package.json
cd backend
npm installCreate backend/.env:
PORT=5000
MONGO_URI=mongodb://localhost:27017/pocus
JWT_SECRET=super-secret-key
MONGO_URI=<Atlas connection string>
JWT_SECRET=<secure generated token>
CORS_ORIGIN=https://<AmplifyDomain>,https://<CloudFrontDomain>
npm run devBackend runs at:
http://localhost:4000
npm run seedCreates sample users and sample FAST course.
npm testPOST /api/auth/register
POST /api/auth/login
GET /api/courses
POST /api/courses (faculty/admin)
PATCH /api/courses/:id (faculty/admin)
POST /api/enrollments
GET /api/enrollments/me
POST /api/scan-logs
GET /api/scan-logs/me
GET /api/scan-logs (faculty/admin)
GET /api/metrics/summary
cd frontend
npm install
npm run devFrontend runs at:
http://localhost:3000
Create frontend/.env.local:
NEXT_PUBLIC_API_URL=https://<cloudfront-domain>/api
npm run build- Static Next.js deployment
- API routed through CloudFront
- CI/CD with GitHub Actions
- Environment variables stored securely
- /api/* β EB backend
- HTTPS enforced
- Caching disabled for API routes
- Atlas IP allowlist includes EB servers and local IP
- Clean controller/service separation
- Zod validation per endpoint
- JWT auth + RBAC
- Proper error handling middleware
- Mongodb Aggregation pipelines
- Unit tests for core business logic
- Automated backend deployment
- Because of interview time constraints, the system uses simple role-based access, not a granular ACL mechanism.
- Next.js frontend uses static export + client-side hydration, not full SSR, to ensure compatibility with Amplify Hosting.
- The backend is a single-node Elastic Beanstalk instance (sufficient for demo; in production multi-AZ load balancing is required).
- MongoDB Atlas networking uses IP allowlist for EB instance, not VPC peering (faster setup).
- Minimal error-handling and form validation included; can be expanded in production
- Image upload to S3
- Audit logging
- CI for frontend
- Infrastructure as Code (CDK)
Romeo Enso
Full-Stack Engineer β POCUS Learning Platform