Mohataseem89/Proconnect

★ 0Forks 0TypeScriptGitHub ↗Compare

Project website ↗

README

ProConnect

A LinkedIn-inspired professional profile directory with a public directory, detailed profile pages and a login-protected admin panel.

Stack

  • Frontend: React, TypeScript, Vite, Tailwind CSS, React Router, Axios
  • Backend: Node.js, Express, TypeScript, Zod, JWT
  • Database: PostgreSQL + Drizzle ORM

Features

  • 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

Quick start

1. Start PostgreSQL

If Docker Desktop is installed:

docker compose up -d

Or create a local PostgreSQL database named proconnect.

2. Backend

cd backend
copy .env.example .env
npm install
npm run db:push
npm run db:seed
npm run dev

Backend 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.

3. Frontend

Open another terminal:

cd frontend
copy .env.example .env
npm install
npm run dev

Frontend runs at http://localhost:5173.

Routes

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.

API

  • GET /api/health
  • POST /api/auth/login — email + password, returns a JWT
  • GET /api/auth/me — checks the current admin session (requires Authorization: Bearer <token>)
  • GET /api/profiles?search= — public
  • GET /api/profiles/:id — public
  • POST /api/profiles — admin only
  • PUT /api/profiles/:id — admin only
  • DELETE /api/profiles/:id — admin only

Next upgrades

  • 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

Contributors

Mohataseem89

Issues