Halify.ai is a full-stack web application that leverages AI (OpenAI GPT) and web scraping technologies to help freelancers and professionals generate intelligent proposals, verify contacts, find domain information, and scrape business data. It combines a modern React frontend with a robust FastAPI backend to provide a comprehensive toolkit for business development.
Halify.ai is designed to streamline and automate the proposal creation process for freelancers and consultants. The platform integrates multiple AI-powered tools and services to help users:
- Generate Professional Proposals - AI-driven proposal generation based on job requirements and GitHub portfolio
- Scrape Business Data - Extract business information from Google Maps
- Verify Email Addresses - Bulk email verification for lead generation
- Find Company Domains - AI-powered company domain discovery
- Manage History - Store and retrieve past proposals and searches
- User Authentication - Secure account management with session tokens
- Generates professional, customized proposals using OpenAI GPT models
- Analyzes job requirements and GitHub profile
- Automatically selects 2 most relevant GitHub repositories based on job description
- Provides multiple proposal templates (3 different designs)
- Real-time preview of generated proposals
- Download proposals as PDF
- Support for different OpenAI models (gpt-4o-mini, gpt-4, etc.)
- Search and scrape business data from Google Maps
- Extract business information: name, rating, reviews, address, phone, website, email
- Social media links: Facebook, Instagram, TikTok, Twitter, YouTube
- Streaming progress updates for large scraping operations
- Customizable result limits (up to configured maximum)
- Bulk data export capabilities
- Single email verification
- Bulk email verification (up to 200 emails)
- Verify email deliverability and validity
- Real-time verification feedback
- Perfect for lead validation and list cleaning
- AI-powered company domain discovery
- Single domain lookup
- Bulk domain lookup (up to 30 companies)
- Uses OpenAI to intelligently find official company domains
- Helps with lead research and outreach preparation
- Secure user registration and login
- Session-based authentication with Bearer tokens
- OpenAI API key management (stored securely)
- User preferences (selected AI model)
- User dashboard with account information
- Save and manage proposal history
- Track scraping operations
- Store user preferences
- Quick retrieval of past work
Frontend:
- Framework: React 19 with TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS 4
- UI Components: Lucide React (icons), Framer Motion (animations)
- HTTP Client: Axios
- State Management: React Context API
- Data Export: XLSX (Excel export)
Backend:
- Framework: FastAPI (Python)
- Server: Uvicorn
- Database: SQLite (with custom schema for users, sessions, history, preferences)
- AI Integration: OpenAI Python SDK
- Web Scraping: Custom Google Maps scraper
- Email Verification: SMTP/Email validation service
- PDF Generation: Custom PDF rendering
- CORS: Enabled for frontend-backend communication
Upwork-Proposal/
βββ frontend/ # React Frontend Application
β βββ src/
β β βββ pages/ # Page components
β β β βββ DashboardPage.tsx
β β β βββ ProposalPage.tsx
β β β βββ MapScraperPage.tsx
β β β βββ EmailVerifyPage.tsx
β β β βββ DomainFinderPage.tsx
β β β βββ HistoryPage.tsx
β β β βββ LoginPage.tsx
β β β βββ SignupPage.tsx
β β βββ components/ # Reusable React components
β β β βββ Sidebar.tsx # Main navigation sidebar
β β βββ context/ # React Context providers
β β β βββ AuthContext.tsx
β β β βββ ScraperContext.tsx
β β βββ App.tsx # Main App component
β β βββ main.tsx # Application entry point
β βββ package.json
β βββ vite.config.ts
β
βββ backend/ # FastAPI Backend Application
β βββ main.py # FastAPI app and route definitions
β βββ auth.py # Authentication and database logic
β βββ halify.db # SQLite database
β βββ .env # Environment variables
β β
β βββ proposal/ # Proposal generation module
β β βββ agent.py # GitHub repository fetcher
β β βββ prompts.py # AI prompts and system messages
β β βββ templates.py # HTML/PDF templates for proposals
β β
β βββ maps/ # Google Maps scraping module
β β βββ scraper.py # Maps scraping logic
β β
β βββ emailverify/ # Email verification module
β β βββ verifier.py # Email verification logic
β β
β βββ domainfinder/ # Domain finder module
β β βββ finder.py # AI-powered domain lookup
β β
β βββ templates/ # HTML templates and static files
β βββ index.html
β βββ static/
β
βββ package.json # Root npm configuration (for concurrently)
βββ README.md # Project documentation
- Node.js (v16 or higher) - for frontend
- Python (v3.8 or higher) - for backend
- npm or yarn - package manager
- OpenAI API Key - for AI-powered features
- Git - for version control
git clone https://github.com/alihassanml/Upwork-Proposal.git
cd Upwork-Proposalnpm installThis installs concurrently which allows running both frontend and backend with a single command.
cd frontend
npm install
cd ..cd backend
pip install -r requirements.txt # Create requirements.txt if not present
# Or install dependencies manually:
pip install fastapi uvicorn openai python-dotenv pydantic jinja2 aiosqlite openpyxl
cd ..Create a .env file in the backend directory:
OPENAI_API_KEY=your_openai_api_key_here
DATABASE_URL=sqlite:///halify.db
JWT_SECRET=your_secret_key_herenpm run devThis starts:
- Frontend: http://localhost:5173 (Vite dev server)
- Backend: http://localhost:8000 (FastAPI server)
npm run frontendnpm run backend# Terminal 1 - Frontend
cd frontend && npm run dev
# Terminal 2 - Backend
cd backend && python main.pyPOST /register- Register new userPOST /login- Login userPOST /logout- Logout userGET /me- Get current user infoPOST /update-api-key- Update OpenAI API key
POST /generate- Generate AI proposalGET /preview/{template}- Preview proposal templatePOST /render-preview- Render proposal previewPOST /download-pdf- Download proposal as PDF
GET /scrape-maps/stream- Stream scraping with progressPOST /scrape-maps- Scrape and return all results
GET /email/verify?email=...- Verify single emailPOST /email/verify/bulk- Verify multiple emails
POST /find-domain- Find domain for single companyPOST /find-domain/bulk- Find domains for multiple companies
GET /history- Get user's historyPOST /history- Save history entryDELETE /history/{id}- Delete history entryGET /preferences- Get user preferencesPOST /preferences- Save user preferences
The application uses Bearer Token Authentication:
- User registers or logs in
- Server returns a JWT-like session token
- Token is stored in localStorage (frontend)
- Token is sent in
Authorization: Bearer <token>header for authenticated requests - Backend validates token and retrieves user information
id- User ID (primary key)name- User full nameemail- User email (unique)password_hash- Hashed passwordopenai_api_key- Encrypted OpenAI API keycreated_at- Account creation timestamp
id- Session IDuser_id- Foreign key to userstoken- Session tokenexpires_at- Token expiration time
id- History entry IDuser_id- Foreign key to userstype- Type of entry (proposal, scrape, etc.)title- Entry titlesummary- Brief summarydata- Full data (JSON)created_at- Creation timestamp
id- Preference IDuser_id- Foreign key to usersmodel- Selected AI model (gpt-4o-mini, gpt-4, etc.)other_settings- Additional preferences (JSON)
- Mobile-friendly interface using Tailwind CSS
- Sidebar navigation for easy access
- Responsive grid layouts
- AuthContext - User authentication state
- ScraperContext - Scraping operation state
- Real-time updates and progress tracking
- Loading indicators and spinners
- Error handling and user feedback
- Smooth animations with Framer Motion
- Toast notifications for actions
- Auto-saving of user preferences
- User navigates to Proposal tab
- Enters job requirements, GitHub URL, timeline
- Selects proposal template
- Clicks "Generate" button
- Backend fetches relevant repos from GitHub
- AI generates proposal based on requirements and repos
- User sees real-time preview
- Can download as PDF or make adjustments
- History is saved automatically
- User navigates to Email Verify tab
- Enters single email or uploads list of emails
- Clicks "Verify" button
- Backend verifies each email address
- Results show delivery status
- Can export verified emails as CSV/Excel
- User navigates to Maps Scraper tab
- Enters search query (e.g., "restaurants in New York")
- Sets maximum results
- Clicks "Scrape" button
- Backend scrapes Google Maps with progress updates
- Results are displayed in real-time
- Can export data as Excel file
Frontend Build:
cd frontend && npm run buildOutputs optimized files to frontend/dist/
Backend Production:
cd backend && python main.pyOr deploy with Gunicorn:
gunicorn -w 4 -b 0.0.0.0:8000 main:appcd frontend && npm run lint- Frontend uses ESLint with TypeScript support
- Backend follows PEP 8 Python conventions
- OpenAI API keys are stored securely in the database
- Passwords are hashed using bcrypt
- Session tokens are used for authentication
- CORS is enabled for frontend-backend communication
- Input validation on both frontend and backend
- Environment variables for sensitive data
- AI Models: Support for multiple OpenAI models
- Repository Analysis: Automatically analyzes GitHub repos
- Multiple Templates: 3 different proposal design templates
- PDF Export: Professional PDF download
- Customizable: Users can edit generated content
- Maps Scraping: Extract competitor and business data
- Email Validation: Ensure lead list quality
- Domain Discovery: Find company contact information
- Bulk Operations: Process multiple items efficiently
Solution:
- Verify API key is valid on OpenAI dashboard
- Ensure API key has sufficient credits
- Check .env file configuration
Solution:
- Close other instances of the app
- Delete old database connections
- Restart the backend
Solution:
- Verify frontend and backend are running
- Check CORS middleware is configured in main.py
- Ensure correct API URLs in frontend
This project is created for Upwork proposals and freelance work.
Ali Hassan - AI/ML Developer & Freelancer
- GitHub: @alihassanml
- Upwork: Profile
- Support for additional AI models
- Advanced filtering in Maps scraper
- Team collaboration features
- API rate limiting and usage analytics
- Custom proposal templates upload
- Email campaign integration
- LinkedIn profile scraping
- Advanced reporting dashboard
For issues, questions, or feature requests, please reach out through:
- GitHub Issues
- Email: [contact info]
- Upwork Messages
Last Updated: May 2026 Version: 1.0.0