Project

Agency Operations / Freelance ProductivityLive

Ezra Bid Assistant

Built a private Chrome extension for Ezra Global that drafts Freelancer.com proposals from live project pages — AI-generated, manually reviewed, never auto-submitted.

Ezra Bid Assistant

Our software portfolio finally reflects the level of engineering behind our work. The design is clean, intentional, and performance-focused — every interaction feels considered. It doesn’t just look modern; it communicates credibility. Since launch, client conversations start with confidence instead of explanations.

Desmond Smith

Desmond Smith

Founder & CEO · Ezra Global

Metrics

Team Size

1

Safety Model

No auto-submit · Manifest V3 · Server-side Gemini

Proposal Styles

5

Proposal Lengths

3

Extension Surfaces

2

Engagement Duration

1 month

Role
Full-Stack Developer
Industry
Agency Operations / Freelance Productivity
Engagement model
Private client tool — end-to-end build for Ezra Global.
Engagement type
client-work
Team size
1
Duration
1 month
Card outcome
Private Chrome extension that drafts Freelancer.com proposals from live pages — AI-powered, manually submitted
SEO title
Ezra Bid Assistant | Private Chrome Extension for Freelancer.com Proposals
SEO description
Built a private Chrome MV3 extension for Ezra Global that detects Freelancer.com projects, generates AI proposals via a secured Gemini backend, and inserts drafts for manual submit.
Display order
4
Featured
Yes
Live
Yes
Created
July 4, 2026
Updated
July 4, 2026

Problem

Desmond Smith and the Ezra Global team bid on Freelancer.com projects regularly, but writing tailored proposals took too long. Each bid required reading the full project page, matching tone to the client, weaving in Ezra Global's services, and keeping proposals consistent — all while staying on the platform. Generic AI tools were risky: they could sound robotic, overclaim experience, or encourage unsafe automation. Desmond needed a private assistant that worked inside the browser, respected Freelancer's rules, and kept the Gemini API key off the client.

Situation

Ezra Global is a software agency led by Desmond Smith. The team wins work through Freelancer.com, where speed and proposal quality both matter. Before this build, drafting each bid meant manually copying project details, writing from scratch or pasting into a separate AI chat, and losing brand voice between sessions. There was no way to detect project context from the page, save drafts locally, or enforce Desmond's sign-off and closing line across every proposal.

Before & After

Before: Each Freelancer bid meant manually copying project details, writing proposals from scratch or in a generic AI chat, and hoping tone and sign-off stayed consistent.

After: A private Chrome side panel detects the project, generates a tailored four-paragraph proposal through a secured backend, and inserts it into the bid box for manual review and submit.

Approach

  1. Safety-first scope — No auto-submit, no cookie harvesting, no mass bidding. The extension only reads visible DOM fields and inserts text into the bid textarea for manual review.
  2. Hybrid Chrome MV3 layout — A compact side panel for the live bidding workflow on Freelancer.com, plus a full options page for prompt settings, saved drafts, and API configuration.
  3. Server-side AI — Gemini runs on a private Next.js backend; the extension never sees the API key.
  4. Brand voice in settings — Sign-off, company name, services, proposal style/length defaults, words to avoid, and custom rules stored in chrome.storage.local and applied to every generation.

What Made This Hard

Freelancer DOM extraction without brittle selectors — Project pages change layout; the content script had to read visible fields reliably and degrade gracefully when extraction failed.

Chrome MV3 constraints — Side panel, service worker messaging, and options page routing each have different lifecycle rules; shared React components had to work in both compact (~360px) and full-width layouts.

Safety boundaries users can trust — Every feature was scoped so Desmond always reviews and submits manually. Insert-into-textarea only, no form automation, minimal host permissions.

Prompt consistency at scale — Four-paragraph Freelancer rules, Ezra Global positioning, and Desmond's sign-off had to survive style/length variations without drifting into generic AI phrasing.

Architecture

Monorepo (Bun workspaces)shared/ types and prompt builder, backend/ Next.js API (POST /api/generate-bid, GET /api/health), extension/ Chrome MV3 (content script, service worker, side panel, options page).

Extension surfaces — Content script on *.freelancer.com/projects/* extracts title, description, budget, skills, country, and project type; floating "Generate Bid with Ezra" button opens the side panel. Options page uses a sidebar shell for Create Bid, Prompt Settings, Saved Drafts, and API Settings.

Backend — Next.js route validates the request, builds instructions via shared prompt composer, calls Gemini server-side, and returns plain proposal text. CORS locked to chrome-extension:// origins and localhost.

Execution

Delivered capabilities

  • DOM-based project detection on Freelancer.com project pages
  • Editable extracted fields with refresh-from-page action
  • Proposal style (Professional, Premium Agency, Short & Direct, Confident, Friendly) and length (Short, Medium, Detailed) controls
  • Generate, regenerate, copy, save draft, and clear flows
  • Insert Into Bid Box with confirmation toast — manual submit only
  • Prompt Settings: sign-off, company, services, default rules, words to avoid
  • Saved Drafts in local Chrome storage with view/load/delete
  • API Settings: backend URL + Test Connection health check
  • Deployed backend at eba.ezraglobal.co.za with Gemini credentials server-side only

What We Built

Ezra Bid Assistant is a private Chrome extension + Next.js backend that turns a Freelancer.com project page into a draft proposal in seconds. Browse a project, click Generate Bid with Ezra, review extracted details, pick style and length, generate via Gemini, then copy or insert into the bid box — always with manual submit.

Results

  • Faster bid drafting — Project context auto-fills from the page; proposals generate in one click instead of retyping details into a separate tool.
  • Consistent Ezra Global voice — Prompt settings enforce sign-off, company positioning, and anti-AI wording rules on every generation.
  • Safe by design — Manifest V3, Freelancer-only host permissions, no auto-submit, Gemini key stays on the server.
  • Draft continuity — Saved drafts persist locally so Desmond can revisit proposals across sessions.
  • Production backend — Deployed API at eba.ezraglobal.co.za with health-check integration in the extension.

Business Outcome

Desmond can respond to Freelancer.com opportunities faster without sacrificing the professional, human tone Ezra Global is known for — and without exposing API credentials or crossing platform safety lines.

Tech stack

TypeScriptReact 19Chrome Manifest V3ViteNext.jsTailwind CSSRadix UISonnerBiomeBun workspaces

Infrastructure

Vercel (Next.js backend)Google Gemini APIChrome extension side panel + options pagechrome.storage.local for settings and drafts

Integrations

Google Gemini APIFreelancer.com (DOM extraction)ImgBB (portfolio assets)

Keywords

Ezra Bid AssistantChrome extensionFreelancer.comAI proposal writerGemini APIManifest V3Ezra GlobalDesmond Smithside panelagency productivity

Gallery

Ezra Bid Assistant screenshot 1
Side panel with extracted project fields, style controls, and Generate Proposal
Ezra Bid Assistant screenshot 2
Create Bid options page for manual entry when not on a Freelancer project page
Ezra Bid Assistant screenshot 3
Prompt Settings — sign-off, company, services, and default AI proposal rules
Ezra Bid Assistant screenshot 4
Saved Drafts stored locally in Chrome storage with view, load, and delete
Ezra Bid Assistant screenshot 5
API Settings pointing at the private backend with Test Connection health check
Slug: ezra-bid-assistant