|
# Lin React Clone - Final Documentation |
|
|
|
## Project Overview |
|
|
|
This documentation provides a comprehensive overview of the Lin React Clone project, which is a modern reimplementation of the original Taipy-based Lin application using a React frontend with a Flask API backend. The project maintains all core functionality while improving the architecture for better maintainability and scalability. |
|
|
|
## Table of Contents |
|
|
|
1. [Architecture Overview](#architecture-overview) |
|
2. [Backend Implementation](#backend-implementation) |
|
3. [Frontend Implementation](#frontend-implementation) |
|
4. [API Documentation](#api-documentation) |
|
5. [Deployment Guide](#deployment-guide) |
|
6. [Testing Strategy](#testing-strategy) |
|
7. [Future Enhancements](#future-enhancements) |
|
|
|
## Architecture Overview |
|
|
|
### System Components |
|
|
|
The Lin React Clone consists of two main components: |
|
|
|
1. **Frontend (React)** |
|
- User interface built with React |
|
- State management with Redux Toolkit |
|
- Responsive design for all device sizes |
|
- Component-based architecture |
|
|
|
2. **Backend (Flask API)** |
|
- RESTful API built with Flask |
|
- Database integration with Supabase |
|
- Task scheduling with APScheduler |
|
- External API integrations (LinkedIn, Hugging Face) |
|
|
|
### Data Flow |
|
|
|
``` |
|
[React Frontend] β [Flask API] β [Supabase Database] |
|
β |
|
[External APIs: LinkedIn, Hugging Face] |
|
β |
|
[APScheduler Tasks] |
|
``` |
|
|
|
### Technology Stack |
|
|
|
#### Backend |
|
- Flask (Python web framework) |
|
- Supabase (Database and authentication) |
|
- APScheduler (Task scheduling) |
|
- requests (HTTP library) |
|
- requests-oauthlib (OAuth support) |
|
- gradio-client (Hugging Face API) |
|
- Flask-JWT-Extended (JWT token management) |
|
|
|
#### Frontend |
|
- React (JavaScript library) |
|
- Redux Toolkit (State management) |
|
- React Router (Routing) |
|
- Axios (HTTP client) |
|
- Material-UI (UI components) |
|
|
|
## Backend Implementation |
|
|
|
### Project Structure |
|
|
|
``` |
|
backend/ |
|
βββ app.py # Flask application entry point |
|
βββ config.py # Configuration settings |
|
βββ requirements.txt # Python dependencies |
|
βββ .env.example # Environment variables example |
|
βββ models/ # Data models |
|
β βββ user.py # User model |
|
β βββ social_account.py # Social media account model |
|
β βββ source.py # RSS source model |
|
β βββ post.py # Post content model |
|
β βββ schedule.py # Scheduling model |
|
βββ api/ # API endpoints |
|
β βββ auth.py # Authentication endpoints |
|
β βββ sources.py # Source management endpoints |
|
β βββ accounts.py # Social account endpoints |
|
β βββ posts.py # Post management endpoints |
|
β βββ schedules.py # Scheduling endpoints |
|
βββ services/ # Business logic |
|
β βββ auth_service.py # Authentication service |
|
β βββ linkedin_service.py# LinkedIn integration service |
|
β βββ content_service.py # Content generation service |
|
β βββ schedule_service.py# Scheduling service |
|
βββ utils/ # Utility functions |
|
β βββ database.py # Database connection |
|
βββ scheduler/ # Task scheduling |
|
βββ task_scheduler.py # Scheduling implementation |
|
``` |
|
|
|
### Key Features |
|
|
|
#### Authentication System |
|
- JWT-based authentication with secure token management |
|
- User registration with email confirmation |
|
- User login/logout functionality |
|
- Password hashing with bcrypt |
|
- Supabase Auth integration |
|
|
|
#### Source Management |
|
- CRUD operations for RSS sources |
|
- Integration with Supabase database |
|
- Validation and error handling |
|
|
|
#### Social Account Management |
|
- LinkedIn OAuth2 integration |
|
- Account linking and token storage |
|
- Profile information retrieval |
|
|
|
#### Post Management |
|
- AI-powered content generation using Hugging Face API |
|
- Post creation and storage |
|
- LinkedIn publishing integration |
|
- Image handling for posts |
|
|
|
#### Scheduling System |
|
- APScheduler for task management |
|
- Recurring schedule creation |
|
- Automatic content generation and publishing |
|
- Conflict resolution for overlapping schedules |
|
|
|
## Frontend Implementation |
|
|
|
### Project Structure |
|
|
|
``` |
|
frontend/ |
|
βββ src/ |
|
β βββ components/ # Reusable components |
|
β β βββ Header/ # Application header |
|
β β βββ Sidebar/ # Navigation sidebar |
|
β βββ pages/ # Page components |
|
β β βββ Login.js # Login page |
|
β β βββ Register.js # Registration page |
|
β β βββ Dashboard.js # Dashboard page |
|
β β βββ Sources.js # Source management page |
|
β β βββ Posts.js # Post management page |
|
β β βββ Schedule.js # Scheduling page |
|
β βββ services/ # API service layer |
|
β β βββ api.js # Axios instance and interceptors |
|
β β βββ authService.js # Authentication API calls |
|
β β βββ sourceService.js# Source management API calls |
|
β β βββ accountService.js# Account management API calls |
|
β β βββ postService.js # Post management API calls |
|
β β βββ scheduleService.js# Scheduling API calls |
|
β βββ store/ # Redux store |
|
β β βββ index.js # Store configuration |
|
β β βββ reducers/ # Redux reducers and actions |
|
β βββ App.js # Main application component |
|
β βββ App.css # Global application styles |
|
β βββ index.js # Application entry point |
|
β βββ index.css # Global CSS styles |
|
βββ public/ # Static assets |
|
βββ package.json # Project dependencies and scripts |
|
``` |
|
|
|
### Key Features |
|
|
|
#### Authentication System |
|
- Login and registration forms |
|
- JWT token management in localStorage |
|
- Protected routes |
|
- User session management |
|
|
|
#### Dashboard |
|
- Overview statistics |
|
- Recent activity display |
|
- Quick action buttons |
|
|
|
#### Source Management |
|
- Add/delete RSS sources |
|
- List view of all sources |
|
- Form validation |
|
|
|
#### Post Management |
|
- AI content generation interface |
|
- Post creation form |
|
- Draft and published post management |
|
- Publish and delete functionality |
|
|
|
#### Scheduling |
|
- Schedule creation form with time selection |
|
- Day selection interface |
|
- List view of all schedules |
|
- Delete functionality |
|
|
|
## API Documentation |
|
|
|
### Authentication Endpoints |
|
|
|
#### POST /api/auth/register |
|
Register a new user |
|
|
|
**Request Body:** |
|
```json |
|
{ |
|
"email": "string", |
|
"password": "string", |
|
"confirm_password": "string" |
|
} |
|
``` |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"message": "User registered successfully", |
|
"user": { |
|
"id": "string", |
|
"email": "string", |
|
"created_at": "datetime" |
|
} |
|
} |
|
``` |
|
|
|
#### POST /api/auth/login |
|
Login user |
|
|
|
**Request Body:** |
|
```json |
|
{ |
|
"email": "string", |
|
"password": "string" |
|
} |
|
``` |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"token": "string", |
|
"user": { |
|
"id": "string", |
|
"email": "string" |
|
} |
|
} |
|
``` |
|
|
|
#### POST /api/auth/logout |
|
Logout user |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"message": "Logged out successfully" |
|
} |
|
``` |
|
|
|
#### GET /api/auth/user |
|
Get current user |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"user": { |
|
"id": "string", |
|
"email": "string" |
|
} |
|
} |
|
``` |
|
|
|
### Source Endpoints |
|
|
|
#### GET /api/sources |
|
Get all sources for current user |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"sources": [ |
|
{ |
|
"id": "string", |
|
"user_id": "string", |
|
"source": "string", |
|
"category": "string", |
|
"last_update": "datetime", |
|
"created_at": "datetime" |
|
} |
|
] |
|
} |
|
``` |
|
|
|
#### POST /api/sources |
|
Add a new source |
|
|
|
**Request Body:** |
|
```json |
|
{ |
|
"source": "string" |
|
} |
|
``` |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"source": { |
|
"id": "string", |
|
"user_id": "string", |
|
"source": "string", |
|
"category": "string", |
|
"last_update": "datetime", |
|
"created_at": "datetime" |
|
} |
|
} |
|
``` |
|
|
|
#### DELETE /api/sources/{id} |
|
Delete a source |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"message": "Source deleted successfully" |
|
} |
|
``` |
|
|
|
### Account Endpoints |
|
|
|
#### GET /api/accounts |
|
Get all social accounts for current user |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"accounts": [ |
|
{ |
|
"id": "string", |
|
"user_id": "string", |
|
"social_network": "string", |
|
"account_name": "string", |
|
"created_at": "datetime" |
|
} |
|
] |
|
} |
|
``` |
|
|
|
#### POST /api/accounts |
|
Add a new social account |
|
|
|
**Request Body:** |
|
```json |
|
{ |
|
"account_name": "string", |
|
"social_network": "string" |
|
} |
|
``` |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"account": { |
|
"id": "string", |
|
"user_id": "string", |
|
"social_network": "string", |
|
"account_name": "string", |
|
"created_at": "datetime" |
|
} |
|
} |
|
``` |
|
|
|
#### DELETE /api/accounts/{id} |
|
Delete a social account |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"message": "Account deleted successfully" |
|
} |
|
``` |
|
|
|
### Post Endpoints |
|
|
|
#### GET /api/posts |
|
Get all posts for current user |
|
|
|
**Query Parameters:** |
|
- `published` (boolean): Filter by published status |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"posts": [ |
|
{ |
|
"id": "string", |
|
"social_account_id": "string", |
|
"text_content": "string", |
|
"is_published": "boolean", |
|
"sched": "string", |
|
"image_content_url": "string", |
|
"created_at": "datetime", |
|
"scheduled_at": "datetime" |
|
} |
|
] |
|
} |
|
``` |
|
|
|
#### POST /api/posts/generate |
|
Generate AI content |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"content": "string" |
|
} |
|
``` |
|
|
|
#### POST /api/posts |
|
Create a new post |
|
|
|
**Request Body:** |
|
```json |
|
{ |
|
"social_account_id": "string", |
|
"text_content": "string", |
|
"image_content_url": "string", |
|
"scheduled_at": "datetime" |
|
} |
|
``` |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"post": { |
|
"id": "string", |
|
"social_account_id": "string", |
|
"text_content": "string", |
|
"is_published": "boolean", |
|
"sched": "string", |
|
"image_content_url": "string", |
|
"created_at": "datetime", |
|
"scheduled_at": "datetime" |
|
} |
|
} |
|
``` |
|
|
|
#### POST /api/posts/{id}/publish |
|
Publish a post |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"message": "Post published successfully" |
|
} |
|
``` |
|
|
|
#### DELETE /api/posts/{id} |
|
Delete a post |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"message": "Post deleted successfully" |
|
} |
|
``` |
|
|
|
### Schedule Endpoints |
|
|
|
#### GET /api/schedules |
|
Get all schedules for current user |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"schedules": [ |
|
{ |
|
"id": "string", |
|
"social_account_id": "string", |
|
"schedule_time": "string", |
|
"adjusted_time": "string", |
|
"created_at": "datetime" |
|
} |
|
] |
|
} |
|
``` |
|
|
|
#### POST /api/schedules |
|
Create a new schedule |
|
|
|
**Request Body:** |
|
```json |
|
{ |
|
"social_network": "string", |
|
"schedule_time": "string", |
|
"days": ["string"] |
|
} |
|
``` |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"schedules": [ |
|
{ |
|
"id": "string", |
|
"social_account_id": "string", |
|
"schedule_time": "string", |
|
"adjusted_time": "string", |
|
"created_at": "datetime" |
|
} |
|
] |
|
} |
|
``` |
|
|
|
#### DELETE /api/schedules/{id} |
|
Delete a schedule |
|
|
|
**Response:** |
|
```json |
|
{ |
|
"success": true, |
|
"message": "Schedule deleted successfully" |
|
} |
|
``` |
|
|
|
## Deployment Guide |
|
|
|
### Backend Deployment |
|
|
|
1. **Environment Setup** |
|
```bash |
|
# Copy environment example |
|
cp .env.example .env |
|
|
|
# Edit .env with your values |
|
``` |
|
|
|
2. **Install Dependencies** |
|
```bash |
|
pip install -r requirements.txt |
|
``` |
|
|
|
3. **Run Application** |
|
```bash |
|
python app.py |
|
``` |
|
|
|
4. **Docker Deployment** |
|
```bash |
|
docker build -t lin-backend . |
|
docker run -p 5000:5000 lin-backend |
|
``` |
|
|
|
### Frontend Deployment |
|
|
|
1. **Install Dependencies** |
|
```bash |
|
npm install |
|
``` |
|
|
|
2. **Build for Production** |
|
```bash |
|
npm run build |
|
``` |
|
|
|
3. **Serve Build** |
|
```bash |
|
npm install -g serve |
|
serve -s build |
|
``` |
|
|
|
### Environment Variables |
|
|
|
#### Backend (.env) |
|
``` |
|
SUPABASE_URL=your_supabase_project_url |
|
SUPABASE_KEY=your_supabase_api_key |
|
CLIENT_ID=your_linkedin_client_id |
|
CLIENT_SECRET=your_linkedin_client_secret |
|
REDIRECT_URL=your_redirect_url |
|
HUGGING_KEY=your_hugging_face_api_key |
|
JWT_SECRET_KEY=your_jwt_secret_key |
|
SECRET_KEY=your_secret_key |
|
DEBUG=True |
|
SCHEDULER_ENABLED=True |
|
PORT=5000 |
|
``` |
|
|
|
#### Frontend (.env) |
|
``` |
|
REACT_APP_API_URL=http://localhost:5000/api |
|
``` |
|
|
|
## Testing Strategy |
|
|
|
### Backend Testing |
|
|
|
1. **Unit Tests** |
|
- Model validation tests |
|
- Service layer tests |
|
- Utility function tests |
|
|
|
2. **Integration Tests** |
|
- API endpoint tests |
|
- Database integration tests |
|
- External API integration tests |
|
|
|
3. **Test Commands** |
|
```bash |
|
# Run all tests |
|
pytest |
|
|
|
# Run tests with coverage |
|
pytest --cov=. |
|
``` |
|
|
|
### Frontend Testing |
|
|
|
1. **Component Tests** |
|
- Rendering tests |
|
- User interaction tests |
|
- State management tests |
|
|
|
2. **Integration Tests** |
|
- Form submission tests |
|
- API integration tests |
|
- Routing tests |
|
|
|
3. **Test Commands** |
|
```bash |
|
# Run all tests |
|
npm test |
|
|
|
# Run tests in watch mode |
|
npm test -- --watch |
|
``` |
|
|
|
## Future Enhancements |
|
|
|
### Backend Enhancements |
|
1. **Advanced Analytics** |
|
- Post performance tracking |
|
- User engagement metrics |
|
- Content effectiveness analysis |
|
|
|
2. **Multi-Platform Support** |
|
- Twitter integration |
|
- Facebook integration |
|
- Instagram integration |
|
|
|
3. **Enhanced Scheduling** |
|
- Advanced scheduling algorithms |
|
- Timezone support |
|
- Recurrence patterns |
|
|
|
4. **Performance Improvements** |
|
- Caching strategies |
|
- Database optimization |
|
- Asynchronous processing |
|
|
|
### Frontend Enhancements |
|
1. **Advanced UI Components** |
|
- Data visualization dashboards |
|
- Real-time updates |
|
- Drag-and-drop scheduling |
|
|
|
2. **Enhanced User Experience** |
|
- Dark mode support |
|
- Keyboard shortcuts |
|
- Accessibility improvements |
|
|
|
3. **Mobile Enhancements** |
|
- Progressive Web App (PWA) support |
|
- Native mobile features |
|
- Offline capabilities |
|
|
|
4. **Advanced Features** |
|
- Content calendar view |
|
- Team collaboration features |
|
- Content approval workflows |
|
|
|
## Conclusion |
|
|
|
The Lin React Clone project successfully reimplements the original Taipy-based application with a modern, scalable architecture. The separation of concerns between the frontend and backend allows for independent development and deployment, while the RESTful API design ensures clear communication between components. The implementation includes all core features of the original application while providing a foundation for future enhancements and improvements. |