Tenzor is an AI-powered tool that summarizes LinkedIn posts and provides explanations tailored to your expertise level. This repository contains the full-stack application including a Chrome extension, backend API, and web frontend.
I'm actively working to rid myself of any charges and hopefully convert this into a open-source project.
Please do not use any secrets/keys/passwords from the files
Tenzor helps professionals save time and extract insights from technical LinkedIn posts by:
- Generating concise, personalized summaries at your preferred expertise level (beginner, intermediate, or advanced)
- Allowing follow-up questions about the content
- Providing customized regeneration with different focus areas
- Tracking usage statistics and allowing summary downloads
The project consists of three main components:
The Chrome extension integrates directly with LinkedIn, adding a "Tenzor-It" button to posts, allowing users to generate summaries with just one click.
chrome-extension/
├── assets/ # Icons and images
├── css/ # Styles for the extension
├── html/ # Popup and overlay HTML files
├── js/ # Extension scripts
│ ├── background.js # Background service worker
│ ├── content.js # Content script injected into LinkedIn
│ └── popup.js # Controls the extension popup
└── manifest.json # Extension configuration
The Flask-based backend handles user authentication, communication with the Gemini API for AI text generation, and database operations.
backend/
├── migrations/ # Database migration scripts
├── models/ # SQLAlchemy database models
├── routes/ # API route handlers
│ ├── auth.py # Authentication endpoints
│ ├── summarizer.py # Summary generation endpoints
│ └── user.py # User data endpoints
├── services/ # Business logic
│ ├── ai_service.py # Gemini API integration
│ ├── auth_service.py # Authentication logic
│ └── summarizer_service.py # Summary generation logic
├── utils/ # Helper utilities
├── app.py # Main Flask application
└── requirements.txt # Python dependencies
The React-based frontend provides user account management, summary viewing, and statistics tracking.
frontend/
├── public/ # Static assets
└── src/
├── components/ # React components
├── services/ # API client services
├── App.js # Main application component
└── index.js # Application entry point
- Frontend: React, Tailwind CSS, Chart.js
- Backend: Flask, SQLAlchemy, JWT authentication
- Database: PostgreSQL
- AI: Google Gemini API
- Extension: Chrome Extension Manifest V3
- Containerization: Docker, Docker Compose
- Node.js and npm
- Python 3.10+
- Docker and Docker Compose
- Chrome browser
- Clone the repository
git clone https://github.com/yourusername/tenzor.git
cd tenzor- Setup environment files
Create .env files for both backend and frontend based on the provided templates.
- Start the backend and database
docker-compose up -d postgres backend- Start the frontend development server
cd frontend
npm install
npm start- Load the Chrome extension
- Open Chrome and navigate to
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked" and select the
chrome-extensiondirectory
Alternatively, use the setup script which automates most of these steps:
chmod +x setup.sh
./setup.sh- Sign up for an account at
http://localhost:3000 - Navigate to LinkedIn and find a technical post
- Click the "Tenzor-It" button that appears in the post's action bar
- Select your expertise level and desired depth
- View your summary and ask follow-up questions
POST /api/auth/register- Register a new userPOST /api/auth/login- Log in a userPOST /api/auth/refresh- Refresh authentication tokenGET /api/auth/profile- Get user profilePUT /api/auth/profile- Update user profile
POST /api/summarize- Generate a summaryPOST /api/followup- Ask a follow-up questionPOST /api/regenerate- Regenerate a summary with a different focusPOST /api/feedback- Submit feedback for a summary
GET /api/user/stats- Get usage statisticsGET /api/user/summaries- Get list of summariesGET /api/user/summaries/:id- Get specific summary detailsGET /api/user/download/summaries- Download summariesGET /api/user/download/stats- Download statistics
The system uses JWT (JSON Web Tokens) for authentication:
- User logs in through the web app
- The backend returns access and refresh tokens
- The tokens are stored in localStorage
- The extension receives the token via Chrome messaging API
- All API requests include the token in the Authorization header
The database includes the following main tables:
- users - User accounts and API keys
- summaries - Generated post summaries
- follow_ups - Follow-up questions and responses
- feedbacks - User feedback on summaries
- usage_stats - Usage statistics tracking
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Google Gemini API for AI text generation
- LinkedIn for the platform integration
- Initial contributors:
- Sidharth -> POC, initial git contribution, competitor & market analysis
- Vaikunth Desai -> Initial POC on local and google trend analysis
- Ashritha -> Website frontend POC and initial research