A blog-style news portal application allows users to view, create, search, filter, upvote, comment, and bookmark articles. This project uses the PERN stack (PostgreSQL, Express, React, Node.js) and additional technologies like Elasticsearch, Docker, and Tailwind CSS. Components are almost entirely daisy UI.
🔧 Features
- 🔄 Single Page Application (SPA): Smooth, dynamic content updates without page reloads.
- 🔑 User-Generated Content: Authenticated users can post news articles.
- 🔍 Search and Filtering: Comprehensive search with filtering options for tags and keywords.
- 📈 Upvoting and Bookmarking: Users can upvote articles and save them for later reference.
- 💬 Commenting: Users can leave comments on articles to engage in discussions.
🚀 Inspiration
This project draws inspiration from Daily Dev, a blog portal designed for developers. The goal was to blend elements of:
- 📢 Community-driven newsletters
- 📳 Blog-style content curation
🤖 Tech Stack
- Backend: Node.js, Express
- Frontend: React (with TypeScript), Tailwind CSS, Daisy UI
- Database: PostgreSQL, Sequelize ORM
- Search Engine: Elasticsearch
- Containerization: Docker
💡 Future Implementations
- 🔖 Article Formatting: Integration with React Quill or a markup language for better article formatting.
- 🛠️ In-place Editing: Edit articles directly on the page without form submission.
- 🏷️ Tag Creation: Users can create and manage tags dynamically.
🛠️ Project Setup
⚡ Prerequisites
- Node.js
- Docker
- PostgreSQL
👉 Installation
# Clone the repository
git clone https://github.com/20101301-Alina-Hasan/News-Portal.git
cd News-Portal
🌟 Running the Application
# Server
cd server
npm install
docker-compose up -d
npm run dev
# Client
cd client
npm install
npm run dev
🔍 Elasticsearch Setup
Ensure Elasticsearch is running on port 9200.
📽️ Presentation
Watch the project presentation on YouTube: News Portal Presentation
🛠️ Contributing
Contributions are welcome! If you'd like to add new features or fix bugs, feel free to submit a pull request.
For questions or inquiries, reach out via [email protected].