Peer-to-peer skill exchange and learning marketplace
React · TypeScript · Node.js · Express · PostgreSQL · Railway
Academic Team Project — developed as part of a Software Technology course project at the University of Patras. This repository preserves the collaborative Git history of the original team project.
The project was deployed on Railway during development and can be accessed through the production deployment URL:
Deployment availability depends on the Railway service remaining active.
SkillUs is a full-stack web application that connects people who want to teach, learn, exchange, or purchase skills. Users can publish skill offers and requests, communicate with each other, arrange sessions, exchange skills without payment, and leave reviews after completed sessions.
The platform is designed around peer-to-peer learning: the same user can act as both a learner and a teacher.
- A MOOC platform with pre-recorded courses or certifications
- A freelancing marketplace such as Upwork
- A content provider — it connects people who have skills with people who want to learn them
- Skill marketplace with search, filters, categories, offers, and requests
- Skill-for-skill exchange through Swap Available workflows
- User registration and session-based authentication
- User profiles with skills, reviews, and session history
- Create, edit, and delete skill listings
- Direct messaging between users
- Session scheduling and rescheduling
- Online-session support with Jitsi Meet integration
- Five-star review system for completed sessions
- In-app notifications for messages and requests
- Simulated escrow-style payment flow for skill purchases
- PostgreSQL-backed persistence and seeded demo data
My work on the collaborative project included contributions across both the frontend and backend, including:
- Implemented end-to-end editing of existing skill listings, including an authenticated backend
PATCHendpoint and the corresponding React editing flow. - Aligned the TypeScript domain model with the application's real data model, improving consistency across listings, sessions, payments, and messages.
- Contributed to the migration of the persistence layer from SQLite to PostgreSQL for Railway deployment and resolved PostgreSQL compatibility issues.
- Worked on application reliability and UX improvements, including profile/avatar behavior, marketplace flows, session handling, and notification-related fixes.
- Participated as a contributor and peer reviewer, integrating and reviewing changes in a multi-person Git workflow.
The repository retains the original commit history so individual and collaborative contributions remain visible.
- React 18
- TypeScript
- Vite
- Tailwind CSS
- Material UI
- Radix UI
- React Router
- Lucide React
- Node.js
- Express 5
- PostgreSQL
pg(node-postgres)express-sessionbcryptjs
- pnpm
- Railway
- Figma
- ClickUp
- Git / GitHub
| Home | Marketplace |
|---|---|
![]() |
![]() |
| Sessions | Profile |
|---|---|
![]() |
![]() |
SkillUs/
├── Code/
│ ├── public/ # Static assets
│ ├── src/
│ │ ├── app/
│ │ │ ├── components/ # React UI components
│ │ │ ├── context/ # Authentication context
│ │ │ ├── pages/ # Application pages
│ │ │ ├── types.ts # TypeScript domain model
│ │ │ └── mockData.ts # Static category data
│ │ └── styles/ # Global styles
│ ├── server/
│ │ ├── controllers/ # Business logic
│ │ ├── routes/ # Express API routes
│ │ ├── db/
│ │ │ ├── schema.sql # PostgreSQL schema
│ │ │ ├── seed.ts # Demo data
│ │ │ └── database.ts # Database connection & migrations
│ │ ├── middleware/ # Express middleware
│ │ ├── services/ # External-service integration
│ │ └── index.ts # Backend entry point
│ ├── .env.example
│ ├── package.json
│ ├── pnpm-lock.yaml
│ └── vite.config.ts
├── docs/ # Documentation and screenshots
├── demo_accounts.md # Demo user accounts
└── README.md
- Node.js
- pnpm
- PostgreSQL
cd Code
pnpm installcp .env.example .envOn Windows PowerShell:
Copy-Item .env.example .envCreate a PostgreSQL database and update .env with your connection details:
DATABASE_URL=postgresql://postgres:password@localhost:5432/skillus
SESSION_SECRET=replace-with-a-long-random-secret
PORT=4000
NODE_ENV=developmentThe backend initializes the schema and demo data when it connects to the database.
pnpm server:devThe API runs on http://localhost:4000 by default.
Open a second terminal in Code/ and run:
pnpm devVite proxies /api requests to the backend on port 4000 during development.
Sample accounts for local testing are available in demo_accounts.md.
The credentials are demo-only seeded accounts and must not be reused for real services.
| Team Member | Role |
|---|---|
| Αγγελής Γιώργος | Contributor, Peer Reviewer |
| Αγγελόπουλος Μιχάλης | Contributor, Peer Reviewer |
| Γιαννακόπουλος Σωτήρης | Contributor, Peer Reviewer |
| Πετρόπουλος Γιώργος | Contributor, Peer Reviewer |
| Φουσέκης Πέτρος | Editor, Contributor |
This portfolio repository was created from the original collaborative repository while preserving its commit history and attribution.
Original team repository: https://github.com/petrosfs/ProjectSoftwareTechnology
SkillUs was created as a university team project to practice software requirements, system modelling, collaborative development, full-stack implementation, database integration, testing, and iterative delivery.










