A LinkedIn-inspired professional profile directory with a public directory, detailed profile pages and a login-protected admin panel.
- Frontend: React, TypeScript, Vite, Tailwind CSS, React Router, Axios
- Backend: Node.js, Express, TypeScript, Zod, JWT
- Database: PostgreSQL + Drizzle ORM
- Browse all professional profiles
- Search by name, headline and location
- Detailed profile with about, skills, experience, education and social links
- Admin dashboard, protected by a simple email/password login
- Add, edit and delete profiles (admin only)
- Profile and cover images: paste a URL, or upload straight from your device
- Relational profile data with cascade deletion
- Responsive layouts
- Loading and empty states
- REST API validation
If Docker Desktop is installed:
docker compose up -dOr create a local PostgreSQL database named proconnect.
cd backend
copy .env.example .env
npm install
npm run db:push
npm run db:seed
npm run devBackend runs at http://localhost:3000.
Set ADMIN_EMAIL, ADMIN_PASSWORD and JWT_SECRET in backend/.env before deploying anywhere real — the defaults in .env.example are only for local development.
Open another terminal:
cd frontend
copy .env.example .env
npm install
npm run devFrontend runs at http://localhost:5173.
Public:
/— profiles directory/profile/:id— profile details
Admin (requires login):
/admin/login— admin sign in/admin— dashboard/admin/profiles— manage profiles/admin/profiles/new— add profile/admin/profiles/:id/edit— edit profile
There's no link to the admin panel in the public navbar — visit /admin directly.
GET /api/healthPOST /api/auth/login— email + password, returns a JWTGET /api/auth/me— checks the current admin session (requiresAuthorization: Bearer <token>)GET /api/profiles?search=— publicGET /api/profiles/:id— publicPOST /api/profiles— admin onlyPUT /api/profiles/:id— admin onlyDELETE /api/profiles/:id— admin only
- Proper image storage (Cloudinary/S3) instead of base64 data URLs
- Pagination and skill-based search
- Multi-user admin accounts with hashed passwords
- Toast system and custom confirmation modal
- Tests
- Dockerfiles and production deployment