Junto is a full-featured social media platform designed to bring people together through shared cultural interests. The platform combines traditional social networking features with media discovery, allowing users to connect, share, and discuss their favorite movies, books, and music.
- Secure authentication (email/password, Google OAuth)
- Password recovery via email
- Customizable user profiles (bio, avatar, favorites)
- Block/unblock system with appeal mechanism
- Privacy controls for connections and visibility
- Personalized timeline (friends & groups)
- Post creation with text and images
- Media reviews (movies, books, music)
- Like and comment system
- Real-time AJAX feed updates
- Content filtering (all/friends-only)
- Direct messages (private chat)
- Real-time chat updates
- Conversation management (delete, history)
- Mention system (@user tagging)
- Send/accept/reject friend requests
- Friends list and management
- User search and discovery
- Dedicated friends feed
- Browse/search movies, books, music
- Add media to favorites
- Share reviews and ratings
- Create and manage groups
- Admin/member roles
- Join/invite requests
- Group posts and discussions
- Search users, posts, comments, groups
- Full-text and filtered search
- Admin dashboard
- User moderation (block/unblock, appeals)
- Content reports and review
- Platform analytics
- Friend requests, group invites
- Likes, comments, and message alerts
Tech Stack
- Framework: Laravel 12.x (PHP 8.2+)
- Database: PostgreSQL (Dockerized)
- Frontend: TailwindCSS 4.0, Vite
- Authentication: Laravel Sanctum, Google OAuth
- Storage: Local filesystem for uploads
- Development: Docker Compose
System Architecture
┌─────────────────────────────┐
│ Frontend (Blade + Vite) │
│ TailwindCSS + JavaScript │
├─────────────────────────────┤
│ Laravel 12 Backend │
│ (MVC + Policies) │
├─────────────────────────────┤
│ PostgreSQL Database │
│ (Docker Container) │
└─────────────────────────────┘
Database Schema
- Users & Authentication: users, password resets, sessions
- Social Network: friend requests, friendships, followers
- Content: posts, reviews, comments, likes
- Groups: groups, memberships, invites, join requests
- Media: movies, books, music, favorites
- Messaging: direct messages
- Notifications: friend requests, group invites, mentions
- Moderation: reports, blocks, unblock appeals
- Security: login attempts, session management
Key Laravel Features
- Eloquent ORM (rich relationships)
- Authorization policies
- Form validation
- Middleware (auth, guards)
- Service layer abstraction
- File uploads (images)
- Email notifications
- PHP 8.2+
- Composer 2.2+
- Docker & Docker Compose
- Node.js 18+
-
Clone the repository
-
Install dependencies
composer install npm install
-
Start PostgreSQL with Docker
docker compose up -d
-
Configure environment
cp .env.example .env php artisan key:generate
Update
.envwith database credentials:DB_CONNECTION=pgsql DB_HOST=localhost DB_PORT=5432 DB_DATABASE=postgres DB_USERNAME=postgres DB_PASSWORD=password -
Seed the database
php artisan db:seed
-
Build frontend assets
npm run build # Or for development with hot reload: npm run dev -
Start the development server
php artisan serve
Access the application at http://localhost:8000
To run the app with Docker only:
docker run -d --name lbaw2544 -p 8001:80 gitlab.up.pt:5050/lbaw/lbaw2526/lbaw2544P.S. only available upon FEUP authentication in Docker
pgAdmin 4 is available at http://localhost:4321 to manage the PostgreSQL database.
Connection details:
- Hostname: postgres
- Username: postgres
- Password: password
Database connection issues:
docker compose down
docker compose up -d
php artisan db:seedAsset compilation errors:
npm ci
npm run buildYou can use the seeded database accounts or create your own.
| Password | |
|---|---|
| admin@example.org | 1234 |
| Type | Password | |
|---|---|---|
| basic account | alice@example.org | 1234 |
| basic account | bruno@example.org | 1234 |
junto/
├── app/
│ ├── Helpers/ # Utility helpers
│ ├── Http/
│ │ ├── Controllers/ # Request handlers
│ │ ├── Middleware/ # Request filters
│ ├── Models/ # Eloquent models
│ ├── Policies/ # Authorization rules
│ └── Services/ # Business logic
├── bootstrap/ # App bootstrap files
├── config/ # Configuration files
├── database/
│ ├── factories/ # Model factories
│ ├── migrations/ # Database schema
│ ├── seeders/ # Seed classes
│ └── junto-seed.sql # Initial data
├── docs/
│ └── a7_openapi.yaml # API specification
├── etc/ # Docker, nginx, php configs
├── public/ # Public assets (entry, css, js, images)
├── resources/
│ ├── css/ # Stylesheets
│ ├── js/ # JavaScript modules
│ └── views/ # Blade templates
│ ├── components/ # Reusable UI components (admin, account, dashboard, groups, etc.)
│ ├── errors/ # Error pages (404, etc.)
│ ├── layouts/ # Layout templates (admin, app, auth, base, minimal)
│ ├── pages/ # Main pages (about, home, features, admin, auth, groups, messages, notifications, profile, search)
├── routes/
│ ├── console.php # CLI routes
│ └── web.php # Application routes
├── storage/ # Logs, cache, uploads
├── tests/ # PHPUnit tests
├── vendor/ # Composer dependencies
├── videos/ # Video Demo
├── artisan # Laravel CLI
├── composer.json # Composer dependencies
├── docker-compose.yaml # Docker services
├── Dockerfile # Docker build file
├── package.json # Node dependencies
├── phpunit.xml # PHPUnit config
├── README.md # Project documentation
├── vite.config.js # Vite config
└── upload_image.sh # Image upload script
-
Video Demo:
- The project video demonstration is available at videos/lbaw2544.mp4. Open this file to watch the latest demo showcasing the platform's features and user experience.
-
API Documentation & Certificates:
- The OpenAPI (Swagger) specification for the platform's API is available in
docs/a7_openapi.yaml. This file provides a comprehensive description of available API endpoints, request/response formats, and authentication requirements. - The
docs/folder also contains project-related certificates (CSS and HTML reports and also checklists of usability and Accessibility).
- The OpenAPI (Swagger) specification for the platform's API is available in
- Complete authentication system with OAuth
- User profiles with customizable bios and avatars
- Social feed with posts, reviews, and comments
- Friend system with requests and management
- Real-time messaging between users
- Media library (movies, books, music)
- Favorites and user media preferences
- Groups with membership management
- Advanced search across users, posts, comments, and groups
- Like system for posts and comments
- Mention system with @ tagging
- Notification system for interactions
- Admin panel with moderation tools
- Report system for content moderation
- Block/unblock with appeal mechanism
- Responsive design with TailwindCSS
- Image upload and storage
- Email notifications for password reset
This project was developed by:
Developed for the LBAW (Database and Web Applications Laboratory) course at FEUP (Faculty of Engineering, University of Porto).
Course: LBAW 2024/2025
Project Code: lbaw2544